From a5fc67f99b4aea0f90668934cd27a938bfd1fb72 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 4 Jun 2026 07:00:16 +0000 Subject: [PATCH 001/118] zz --- bench.py | 362 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 362 insertions(+) create mode 100644 bench.py diff --git a/bench.py b/bench.py new file mode 100644 index 000000000..5d2c48417 --- /dev/null +++ b/bench.py @@ -0,0 +1,362 @@ +import argparse +import time +from dataclasses import dataclass +import os + +import torch + +import aiter +from aiter import dtypes, ActivationType, QuantType +from aiter.fused_moe import fused_moe, get_padded_M, torch_moe +from aiter.ops.shuffle import shuffle_weight, shuffle_scale +from aiter.utility.fp4_utils import e8m0_shuffle + + +@dataclass(frozen=True) +class Shape: + NE: int + H: int # model_dim / D_HIDDEN + INTER: int # per-shard inter_dim / D_INTER + TOPK: int + + +KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) + +# mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). +# (M_max, block_m, g1_suffix, g2_suffix) +MXFP4_TUNED = [ + (128, 16, "BM16_INLINEQUANT", "TOPK{topk}_BM16_ATOMIC_NT"), # M<=128: BM16 inline-quant, g2 non-temporal + (256, 32, "BM32_CACHED", "TOPK{topk}_BM32_ATOMIC"), # M<=256: BM32 cached + (10**9, 128, "BM128", "BM128_NONATOMIC"), # M>256: BM128 non-atomic +] + + +def _mxfp4_knames(shape: Shape, M: int): + for m_max, bm, g1, g2 in MXFP4_TUNED: + if M <= m_max: + base1 = f"mxfp4_moe_g1_a4w4_NE{shape.NE}_H{shape.H}_E{shape.INTER}" + base2 = f"mxfp4_moe_g2_a4w4_NE{shape.NE}_H{shape.H}_E{shape.INTER}" + return bm, f"{base1}_{g1}", f"{base2}_{g2.format(topk=shape.TOPK)}" + raise RuntimeError("unreachable") + + +# ── one-time weight prep (M-independent) ───────────────────────────────────── +def build_weights(shape: Shape, device, seed=0): + torch.manual_seed(seed) + NE, H, I = shape.NE, shape.H, shape.INTER + torch_quant = aiter.get_torch_quant(QuantType.per_1x32) + + # Plain bf16 weights, scaled small (matches flydsl test conventions). + w1 = torch.randn((NE, 2 * I, H), dtype=dtypes.bf16, device=device) / 10 + w2 = torch.randn((NE, H, I), dtype=dtypes.bf16, device=device) / 10 + + # Quantize ONCE -> identical fp4 values fed to both backends. + # torch_quant returns w1_qt as (E, 2I, H//2) fp4x2 and w1_scale as a 2D + # (E*2I, H//32) e8m0 tensor. + w1_qt, w1_scale = torch_quant(w1, quant_dtype=dtypes.fp4x2) + w2_qt, w2_scale = torch_quant(w2, quant_dtype=dtypes.fp4x2) + + # mxfp4_moe layout: equivalent to mxfp4_moe_preshuffle_w1/w2 in upstream aiter. + m_w1q = shuffle_weight( + w1_qt, layout=(16, 16), is_guinterleave=True, gate_up=True + ).view(w1_qt.dtype) + m_w2q = shuffle_weight( + w2_qt, layout=(16, 16), is_guinterleave=True, gate_up=False + ).view(w2_qt.dtype) + m_w1s = shuffle_scale( + w1_scale.view(NE * 2 * I, H // 32), + experts_cnt=NE, is_guinterleave=True, gate_up=True, + ).view(NE, 2 * I, H // 32) + m_w2s = shuffle_scale( + w2_scale.view(NE * H, I // 32), + experts_cnt=NE, is_guinterleave=True, gate_up=False, + ).view(NE, H, I // 32) + # .view() above drops the is_shuffled attribute shuffle_weight sets internally; + # fused_moe reads it off w1/w2 (fused_moe.py:339,1617) to pick tuned preshuffled kernels. + # shuffle_kind="mxfp4_moe" is what gates dispatch onto the new mxfp4 pipeline + # (fused_moe.py:418-429, 1504-1508); without it we silently fall back to the + # untagged CSV path and never call the mxfp4_moe_gemm1/2_a4w4 kernels. + for t in (m_w1q, m_w2q, m_w1s, m_w2s): + t.is_shuffled = True + t.shuffle_kind = "mxfp4_moe" + + # Flydsl uses a DIFFERENT preshuffle layout than mxfp4_moe -- see flydsl's own + # test at FlyDSL/tests/kernels/test_moe_gemm.py:523-528,1137-1139, which for + # the fp4 path does plain `shuffle_weight(w.view(fp4x2))` (no layout/guinter- + # leave/gate_up kwargs) and `e8m0_shuffle(scale)` (NOT `shuffle_scale`). + # Feeding flydsl the mxfp4_moe layout yields cos~0 (verified) -- correctness + # requires matching its native preshuffle. + f_w1q = shuffle_weight(w1_qt.view(torch.float4_e2m1fn_x2)).view(w1_qt.dtype) + f_w2q = shuffle_weight(w2_qt.view(torch.float4_e2m1fn_x2)).view(w2_qt.dtype) + f_w1s = e8m0_shuffle(w1_scale).view(NE, 2 * I, H // 32) + f_w2s = e8m0_shuffle(w2_scale).view(NE, H, I // 32) + # Same dispatch gating as the mxfp4 side, minus the shuffle_kind tag -- + # absence of the tag is what makes the CSV lookup hit the untagged flydsl_* + # rows instead of the "mxfp4_moe"-tagged ones (fused_moe.py:1504-1508). + for t in (f_w1q, f_w2q, f_w1s, f_w2s): + t.is_shuffled = True + + return dict( + mxfp4=dict(w1=m_w1q, w1_scale=m_w1s, w2=m_w2q, w2_scale=m_w2s), + flydsl=dict(w1=f_w1q, w1_scale=f_w1s, w2=f_w2q, w2_scale=f_w2s), + # Raw bf16 weights kept for torch_moe ground-truth comparison. Note these + # are PRE-quantization, so cos(kernel, ref) won't hit 1.0 -- expect ~0.97+ + # for a correct mxfp4 kernel; <0.9 means the kernel itself is wrong. + ref=dict(w1=w1, w2=w2), + ) + + +def build_inputs(shape: Shape, M: int, device, seed=1): + torch.manual_seed(seed) + NE, H, TOPK = shape.NE, shape.H, shape.TOPK + hidden = torch.randn((M, H), dtype=dtypes.bf16, device=device) / 10 + # Production-faithful Kimi-K2.5 routing (matches tune_mxfp4_moe_gemm.py): + # the shared expert (id NE-1, weight 1.0) is always at slot 0, plus TOPK-1 + # softmax-routed experts sampled with a mild per-expert popularity skew. + # This concentrates tokens onto fewer experts (vs uniform-random routing), + # so moe_sorting emits fewer padded expert-blocks -- the real serving load. + n_routed = NE - 1 + shared_id = NE - 1 + n_topk_routed = TOPK - 1 + g = torch.Generator(device=device).manual_seed(seed) + bias = torch.randn(n_routed, generator=g, device=device) * 0.5 + scores = torch.randn(M, n_routed, generator=g, device=device) + bias + routed_w, routed_ids = torch.topk(scores.softmax(-1), n_topk_routed, dim=-1) + shared_ids = torch.full((M, 1), shared_id, device=device, dtype=routed_ids.dtype) + shared_w = torch.ones((M, 1), device=device, dtype=routed_w.dtype) + topk_ids = torch.cat([shared_ids, routed_ids], dim=1).to(torch.int32) + topk_weight = torch.cat([shared_w, routed_w], dim=1).to(torch.float32) + return hidden, topk_ids, topk_weight + + +# ── per-backend e2e closures ───────────────────────────────────────────────── +def make_mxfp4_fn(shape, M, hidden, topk_ids, topk_weight, w, device): + # mxfp4 weights carry shuffle_kind="mxfp4_moe" (set by mxfp4_moe_preshuffle_*), + # so the high-level fused_moe dispatches per-M straight from the tuned CSV — + # including the MXFP4OUT mxfp4-intermediate path on the largest buckets. + def fn(): + return fused_moe( + hidden, w["w1"], w["w2"], topk_weight, topk_ids, + activation=ActivationType.Silu, + quant_type=QuantType.per_1x32, + w1_scale=w["w1_scale"], w2_scale=w["w2_scale"], + ) + + pm = get_padded_M(M) + bm = 16 if pm <= 128 else (32 if pm <= 2048 else 128) + return fn, bm, ("fused_moe(csv)",) + + +def make_flydsl_fn(shape, M, hidden, topk_ids, topk_weight, w, device): + # Identical entry point to mxfp4 -- both call fused_moe(), which routes to + # _flydsl_stage1/2_wrapper because the CSV row for this shape (NE=385/ + # INTER=512/H=7168) under the UNTAGGED dict has kernelName1/2 starting with + # "flydsl_" (fused_moe.py:1666). The mxfp4 side hits a separate "mxfp4_moe"- + # tagged row via shuffle_kind. Same sort/quant/scatter aux kernels run on both + # sides -- only the gemm1/gemm2 differ -- so the perf delta is apples-to-apples. + def fn(): + return fused_moe( + hidden, w["w1"], w["w2"], topk_weight, topk_ids, + activation=ActivationType.Silu, + quant_type=QuantType.per_1x32, + w1_scale=w["w1_scale"], w2_scale=w["w2_scale"], + ) + + return fn + + +# ── timing ─────────────────────────────────────────────────────────────────── +def bench(fn, warmup=5, iters=30): + """Eager wall-clock timing. Includes per-kernel CPU launch overhead, so on + launch/latency-bound (small-M) shapes it OVER-estimates vs the real e2e path, + which replays a single CUDA graph (one launch, no inter-kernel CPU bubbles).""" + for _ in range(warmup): + fn() + torch.cuda.synchronize() + ts = [] + for _ in range(iters): + s = time.perf_counter() + fn() + torch.cuda.synchronize() + ts.append(time.perf_counter() - s) + ts.sort() + return ts[len(ts) // 2] * 1e6 # median us + +tag = 0 +def bench_cudagraph(fn, warmup=5, iters=60, measure=5): + """CUDA-graph-faithful timing: capture `iters` back-to-back fn() calls into a + SINGLE graph, replay the whole graph, and divide total GPU time by `iters`. + The whole MoE pipeline runs as one graph -- CPU launch overhead and inter- + kernel bubbles are excluded, matching the production e2e cudagraph path. The + /iters amortization also dilutes the per-replay CUDA-event overhead. May raise + during capture if any kernel in fn() does a host sync / host-dependent op.""" + # Side-stream warmup is REQUIRED before torch.cuda.graph(): it triggers JIT + # compile + autotune and primes the caching allocator on a private stream. + side = torch.cuda.Stream() + side.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(side): + for _ in range(warmup): + fn() + torch.cuda.current_stream().wait_stream(side) + torch.cuda.synchronize() + + # Capture `iters` calls into one graph. Internal allocations come from the + # graph's private pool (reused across the captured calls and every replay). + g = torch.cuda.CUDAGraph() + with torch.cuda.graph(g): + for _ in range(iters): + fn() + + g.replay() # warm the full graph once + # torch.cuda.synchronize() + + start = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] + end = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] + totals = [] + activities = [ + torch.profiler.ProfilerActivity.CPU, + torch.profiler.ProfilerActivity.CUDA, + ] + from contextlib import nullcontext + # with nullcontext() as prof: + with torch.profiler.profile(activities=activities, record_shapes=False) as prof: + g.replay() + g.replay() + for _ in range(measure): + start[_].record() + g.replay() + end[_].record() + torch.cuda.synchronize() + for _ in range(measure): + totals.append(start[_].elapsed_time(end[_]) * 1e3) # ms -> us, total for `iters` + totals.sort() + global tag + tag += 1 + out = f"{tag}.json.gz" + print(f"dump to: {out}") + prof.export_chrome_trace(out) + + return totals[len(totals) // 2] / iters # median per-call us + + +def cosine(a, b): + a, b = a.float().reshape(-1), b.float().reshape(-1) + return torch.nn.functional.cosine_similarity(a, b, dim=0).item() + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") + ap.add_argument("--check", default=True, action="store_true", + help="cross-backend output cosine-sim sanity check per M") + ap.add_argument("--cudagraph", default=True, action="store_true", + help="time via CUDA-graph capture+replay (excludes CPU launch " + "overhead; faithful to the e2e cudagraph path). Default is " + "eager perf_counter, which includes launch overhead.") + ap.add_argument("--iters", type=int, default=100, + help="eager perf_counter iterations") + ap.add_argument("--graph-iters", type=int, default=60, + help="fn() calls captured per graph; total GPU time / this") + ap.add_argument("--ref-max-M", type=int, default=16385, + help="run torch_moe ground-truth ref for M<=this (slow on large " + "M since torch_moe loops over experts in python).") + args = ap.parse_args() + + device = torch.device("cuda") + shape = KIMI + Ms = [int(x) for x in args.M_list.split(",")] + do_bench = bench_cudagraph if args.cudagraph else bench + bench_iters = args.graph_iters if args.cudagraph else args.iters + timing_mode = (f"cudagraph replay ({args.graph_iters}/graph)" + if args.cudagraph else "eager perf_counter") + + print(f"GPU: {torch.cuda.get_device_name(0)}") + print(f"Timing: {timing_mode}") + print(f"Shape Kimi-K2.5 TP=4: NE={shape.NE} H={shape.H} " + f"INTER={shape.INTER} TOPK={shape.TOPK}") + print("Preparing weights (once)...", flush=True) + w = build_weights(shape, device) + + # flydsl tile_m intentionally omitted: fused_moe picks it from the untagged + # CSV row at dispatch time and bench has no clean hook to read it back; see + # dispatcher log '[aiter] [fused_moe] using 2stage (kernelName1=...)' for + # the real flydsl tile per M. mxfp4 bm is the bench-side MXFP4_TUNED table + # value, hand-aligned with kimik2_5_mxfp4_tuned_fmoe.csv so it IS accurate. + hdr = (f"\n{'M':>6} | {'mxfp4 us':>10} {'bm':>3} | " + f"{'flydsl us':>10} | {'flydsl/mxfp4':>12}") + if args.check: + hdr += f" | {'mx⋅fly':>7} | {'mx⋅ref':>7} | {'fly⋅ref':>7}" + print(hdr) + print("-" * len(hdr)) + + for M in Ms: + hidden, topk_ids, topk_weight = build_inputs(shape, M, device) + + # torch_moe ground truth (bf16 weights, fp32 accum). Skip on big M -- + # python-level expert loop is slow on NE=385. cos vs ref tells you which + # backend is broken when the two kernels disagree. + ref_out = None + if M <= args.ref_max_M: + try: + ref_out = torch_moe( + hidden, w["ref"]["w1"], w["ref"]["w2"], + topk_weight, topk_ids, activation=ActivationType.Silu, + ).float() + except Exception as e: + print(f" [ref M={M}] torch_moe ERROR: {type(e).__name__}: {e}") + + mx_fn, mx_bm, _ = make_mxfp4_fn( + shape, M, hidden, topk_ids, topk_weight, w["mxfp4"], device) + + try: + mx_out = mx_fn().float() + except Exception as e: + print(f"{M:>6} | mxfp4 ERROR: {type(e).__name__}: {e}") + continue + if not torch.isfinite(mx_out).all() or mx_out.abs().sum() == 0: + print(f"{M:>6} | mxfp4 produced non-finite/zero output — skipping") + continue + mx_ref_cos = cosine(mx_out, ref_out) if ref_out is not None else float("nan") + + # flydsl: same fused_moe entry; CSV (untagged kimik2 rows) routes to + # _flydsl_stage1/2_wrapper. tile_m is picked by the tuner -- no sweep. + fly_ok, fly_us, fly_mx_cos, fly_ref_cos = False, float("nan"), float("nan"), float("nan") + try: + f_fn = make_flydsl_fn( + shape, M, hidden, topk_ids, topk_weight, w["flydsl"], device) + out = f_fn() + finite = torch.isfinite(out).all().item() + fly_mx_cos = cosine(mx_out, out) if finite else float("nan") + fly_ref_cos = (cosine(out.float(), ref_out) + if finite and ref_out is not None else float("nan")) + print(f"bench flydsl, M={M} mx⋅fly={fly_mx_cos:.4f} fly⋅ref={fly_ref_cos:.4f}") + fly_us = do_bench(f_fn, iters=bench_iters) + fly_ok = True + except Exception as e: + print(f" [flydsl M={M}] ERROR: {type(e).__name__}: {e}", flush=True) + + try: + print(f"bench mxfp4, M={M} bm={mx_bm} mx⋅ref={mx_ref_cos:.4f}") + mx_us = do_bench(mx_fn, iters=bench_iters) + except Exception as e: + print(f"{M:>6} | mxfp4 timing ERROR: {type(e).__name__}: {e} — skipping") + continue + + if not fly_ok: + line = (f"{M:>6} | {mx_us:>10.1f} {mx_bm:>3} | " + f"{'flydsl FAIL':>10} | {'-':>12}") + if args.check: + line += f" | {'-':>7} | {mx_ref_cos:>7.4f} | {'-':>7}" + print(line, flush=True) + continue + ratio = fly_us / mx_us + line = (f"{M:>6} | {mx_us:>10.1f} {mx_bm:>3} | " + f"{fly_us:>10.1f} | {ratio:>11.2f}x") + if args.check: + line += (f" | {fly_mx_cos:>7.4f} | {mx_ref_cos:>7.4f} | " + f"{fly_ref_cos:>7.4f}") + print(line, flush=True) + + +if __name__ == "__main__": + main() \ No newline at end of file From 6d989eb6aa72771031f3cc931aa485ab24ae30e8 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Sat, 6 Jun 2026 11:07:56 +0000 Subject: [PATCH 002/118] zz --- bench.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bench.py b/bench.py index 5d2c48417..b77b84d0e 100644 --- a/bench.py +++ b/bench.py @@ -218,8 +218,8 @@ def bench_cudagraph(fn, warmup=5, iters=60, measure=5): torch.profiler.ProfilerActivity.CUDA, ] from contextlib import nullcontext - # with nullcontext() as prof: - with torch.profiler.profile(activities=activities, record_shapes=False) as prof: + with nullcontext() as prof: + # with torch.profiler.profile(activities=activities, record_shapes=False) as prof: g.replay() g.replay() for _ in range(measure): @@ -234,7 +234,8 @@ def bench_cudagraph(fn, warmup=5, iters=60, measure=5): tag += 1 out = f"{tag}.json.gz" print(f"dump to: {out}") - prof.export_chrome_trace(out) + if prof is not None: + prof.export_chrome_trace(out) return totals[len(totals) // 2] / iters # median per-call us From ad15b4417cbc18d8e7b562e10043226efa3fd882 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Sun, 7 Jun 2026 03:34:55 +0000 Subject: [PATCH 003/118] zz --- bench.py | 3 +- bench_flydsl_16384.py | 163 ++++ kimi_fp4_moe_16384.py | 1790 +++++++++++++++++++++++++++++++++++++++++ learn.md | 162 ++++ 4 files changed, 2117 insertions(+), 1 deletion(-) create mode 100644 bench_flydsl_16384.py create mode 100644 kimi_fp4_moe_16384.py create mode 100644 learn.md diff --git a/bench.py b/bench.py index b77b84d0e..84e9f26cf 100644 --- a/bench.py +++ b/bench.py @@ -247,7 +247,8 @@ def cosine(a, b): def main(): ap = argparse.ArgumentParser() - ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") + # ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") + ap.add_argument("-M", "--M-list", default="16384") ap.add_argument("--check", default=True, action="store_true", help="cross-backend output cosine-sim sanity check per M") ap.add_argument("--cudagraph", default=True, action="store_true", diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py new file mode 100644 index 000000000..6be31a034 --- /dev/null +++ b/bench_flydsl_16384.py @@ -0,0 +1,163 @@ +import argparse +import sys +from dataclasses import dataclass +from pathlib import Path + +import torch + + +UP_AITER = Path("/root/up-aiter") +sys.path.insert(0, str(UP_AITER)) + +import aiter # noqa: E402 +from aiter import QuantType, dtypes # noqa: E402 +from aiter.ops.flydsl.kernels.kimi_fp4_moe_16384 import ( # noqa: E402 + EXPERTS, + INTER_DIM, + MODEL_DIM, + STAGE1_KERNEL, + STAGE2_KERNEL, + TOKEN, + TOPK, + run_kimi_fp4_flydsl_moe_16384, +) +from aiter.ops.shuffle import shuffle_weight # noqa: E402 +from aiter.utility.fp4_utils import e8m0_shuffle # noqa: E402 + + +M = TOKEN + + +@dataclass(frozen=True) +class KimiShape: + experts: int = EXPERTS + model_dim: int = MODEL_DIM + inter_dim: int = INTER_DIM + topk: int = TOPK + + +SHAPE = KimiShape() + + +def build_flydsl_weights(shape: KimiShape, device: torch.device, seed: int = 0): + torch.manual_seed(seed) + quant = aiter.get_torch_quant(QuantType.per_1x32) + + w1 = torch.randn( + (shape.experts, 2 * shape.inter_dim, shape.model_dim), + dtype=dtypes.bf16, + device=device, + ) / 10 + w2 = torch.randn( + (shape.experts, shape.model_dim, shape.inter_dim), + dtype=dtypes.bf16, + device=device, + ) / 10 + + w1_q, w1_scale = quant(w1, quant_dtype=dtypes.fp4x2) + w2_q, w2_scale = quant(w2, quant_dtype=dtypes.fp4x2) + + return { + "w1": shuffle_weight(w1_q.view(torch.float4_e2m1fn_x2)).view(w1_q.dtype), + "w2": shuffle_weight(w2_q.view(torch.float4_e2m1fn_x2)).view(w2_q.dtype), + "w1_scale": e8m0_shuffle(w1_scale).view( + shape.experts, 2 * shape.inter_dim, shape.model_dim // 32 + ), + "w2_scale": e8m0_shuffle(w2_scale).view( + shape.experts, shape.model_dim, shape.inter_dim // 32 + ), + } + + +def build_inputs(shape: KimiShape, device: torch.device, seed: int = 1): + torch.manual_seed(seed) + hidden = torch.randn((M, shape.model_dim), dtype=dtypes.bf16, device=device) / 10 + + routed_experts = shape.experts - 1 + routed_topk = shape.topk - 1 + shared_id = shape.experts - 1 + + gen = torch.Generator(device=device).manual_seed(seed) + bias = torch.randn(routed_experts, generator=gen, device=device) * 0.5 + scores = torch.randn(M, routed_experts, generator=gen, device=device) + bias + routed_weight, routed_ids = torch.topk(scores.softmax(-1), routed_topk, dim=-1) + + shared_ids = torch.full((M, 1), shared_id, device=device, dtype=routed_ids.dtype) + shared_weight = torch.ones((M, 1), device=device, dtype=routed_weight.dtype) + + topk_ids = torch.cat([shared_ids, routed_ids], dim=1).to(torch.int32) + topk_weight = torch.cat([shared_weight, routed_weight], dim=1).to(torch.float32) + return hidden, topk_ids, topk_weight + + +def run_flydsl_16384(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_flydsl_moe_16384( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"].view(dtypes.fp8_e8m0), + ) + + +def bench_cudagraph(fn, warmup: int, graph_iters: int, measure: int): + side = torch.cuda.Stream() + side.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(side): + for _ in range(warmup): + fn() + torch.cuda.current_stream().wait_stream(side) + torch.cuda.synchronize() + + graph = torch.cuda.CUDAGraph() + with torch.cuda.graph(graph): + for _ in range(graph_iters): + fn() + + graph.replay() + starts = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] + ends = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] + totals = [] + for i in range(measure): + starts[i].record() + graph.replay() + ends[i].record() + torch.cuda.synchronize() + for start, end in zip(starts, ends): + totals.append(start.elapsed_time(end) * 1e3) + totals.sort() + return totals[len(totals) // 2] / graph_iters + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--warmup", type=int, default=5) + parser.add_argument("--graph-iters", type=int, default=5) + parser.add_argument("--measure", type=int, default=5) + args = parser.parse_args() + + device = torch.device("cuda") + print(f"GPU: {torch.cuda.get_device_name(0)}") + print(f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}") + print(f"stage1={STAGE1_KERNEL}") + print(f"stage2={STAGE2_KERNEL}") + + weights = build_flydsl_weights(SHAPE, device) + hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) + + def fn(): + return run_flydsl_16384(hidden, topk_ids, topk_weight, weights) + + out = fn() + torch.cuda.synchronize() + if not torch.isfinite(out).all().item(): + raise RuntimeError("FlyDSL output has non-finite values") + + us = bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) + print(f"flydsl_us={us:.1f}") + + +if __name__ == "__main__": + main() diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py new file mode 100644 index 000000000..15ccad65a --- /dev/null +++ b/kimi_fp4_moe_16384.py @@ -0,0 +1,1790 @@ +"""Kimi fp4 MoE FlyDSL kernels for the M=16384 tuned row. + +This file intentionally keeps only the CSV-selected fp4 path: + + token=16384, model_dim=7168, inter_dim=512, experts=385, topk=9 + stage1=flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4 + stage2=flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4 + +No CSV dispatch, alternate dtype kernels, split reduction variants, optional +epilogues, or fallback selection is kept here. +""" +from __future__ import annotations +import functools +import os +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import range_constexpr +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from flydsl._mlir import ir +from flydsl.expr.typing import T +from flydsl.expr import arith, buffer_ops, const_expr, gpu, rocdl, vector +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from .layout_utils import crd2idx, idx2crd, get as layout_get +from .mfma_epilogues import c_shuffle_epilog +from .mfma_preshuffle_pipeline import _buffer_load_vec, make_preshuffle_b_layout, make_preshuffle_scale_layout, swizzle_xor16, tile_chunk_coord_i32 +from dataclasses import dataclass +from typing import Optional +import torch +import aiter +import flydsl.compiler as flyc +import flydsl.expr as fx +from aiter import dtypes +TOKEN = 16384 +EXPERTS = 385 +MODEL_DIM = 7168 +INTER_DIM = 512 +TOPK = 9 +BLOCK_M = 64 +STAGE1_KERNEL = 'flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4' +STAGE2_KERNEL = 'flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4' + +@dataclass(frozen=True) +class Stage1Config: + tile_m: int = 64 + tile_n: int = 128 + tile_k: int = 256 + waves_per_eu: int = 4 + b_nt: int = 0 + xcd_swizzle: int = 4 + +@dataclass(frozen=True) +class Stage2Config: + tile_m: int = 64 + tile_n: int = 256 + tile_k: int = 256 + b_nt: int = 0 + xcd_swizzle: int = 4 + persist_m: int = -1 +S1 = Stage1Config() +S2 = Stage2Config() +_DLPACK_SAFE = (torch.uint8, torch.float16, torch.bfloat16, torch.float32) + +def _view_safe(t: torch.Tensor) -> torch.Tensor: + return t.view(torch.uint8) if t is not None and t.numel() > 0 and (t.dtype not in _DLPACK_SAFE) else t + +def _ptr_view_safe(t: torch.Tensor): + view = _view_safe(t) + type_name = type(view).__name__ + module_name = type(view).__module__ + if type_name == 'FakeTensor' or 'fake_tensor' in module_name: + return flyc.from_c_void_p(fx.Uint8, 0) + return flyc.from_c_void_p(fx.Uint8, view.data_ptr()) + +def _barrier(vmcnt=63, lgkmcnt=63): + parts = [] + needs_waitcnt = vmcnt < 63 or lgkmcnt < 63 + if needs_waitcnt: + wc = [] + if vmcnt < 63: + wc.append(f'vmcnt({vmcnt})') + if lgkmcnt < 63: + wc.append(f'lgkmcnt({lgkmcnt})') + parts.append('s_waitcnt ' + ' '.join(wc)) + parts.append('s_barrier') + llvm.InlineAsmOp(res=None, operands_=[], asm_string='\n'.join(parts), constraints='', has_side_effects=True, is_align_stack=False) + +def _run_compiled(exe, args): + try: + exe(*args) + except Exception: + try: + from flydsl._mlir import ir + while ir.Context.current is not None: + ir.Context.current.__exit__(None, None, None) + except Exception: + pass + raise + +def kimi_moe_sorting_16384(topk_ids: torch.Tensor, topk_weight: torch.Tensor, moebuf_dtype): + """Run the fixed Opus MoE sorting step used before the two FlyDSL GEMMs.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError(f'expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}') + device = topk_ids.device + max_sorted = int(topk_ids.numel() + EXPERTS * BLOCK_M - TOPK) + max_m_blocks = int((max_sorted + BLOCK_M - 1) // BLOCK_M) + sorted_ids = torch.empty(max_sorted, dtype=dtypes.i32, device=device) + sorted_weights = torch.empty(max_sorted, dtype=dtypes.fp32, device=device) + sorted_expert_ids = torch.empty(max_m_blocks, dtype=dtypes.i32, device=device) + num_valid_ids = torch.empty(2, dtype=dtypes.i32, device=device) + moe_out = torch.empty((TOKEN, MODEL_DIM), dtype=moebuf_dtype, device=device) + workspace_size = aiter.moe_sorting_opus_get_workspace_size(TOKEN, EXPERTS, TOPK, 0) + workspace = torch.empty(workspace_size, dtype=torch.uint8, device=device) if workspace_size > 0 else None + aiter.moe_sorting_opus_fwd(topk_ids, topk_weight, sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out, EXPERTS, BLOCK_M, None, None, workspace, 0, None) + return (sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out) + +@functools.lru_cache(maxsize=1) +def compile_kimi_fp4_stage1_16384(): + """Compile the fixed Kimi fp4 stage1 kernel selected for M=16384.""" + model_dim = MODEL_DIM + inter_dim = INTER_DIM + experts = EXPERTS + topk = TOPK + tile_m = S1.tile_m + tile_n = S1.tile_n + tile_k = S1.tile_k + model_dim_pad = 0 + inter_dim_pad = 0 + persist_m = 1 + use_async_copy = True + waves_per_eu = S1.waves_per_eu + k_batch = 1 + b_nt = S1.b_nt + xcd_swizzle = S1.xcd_swizzle + gpu_arch = get_hip_arch() + allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') + allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') + sort_block_m = max(32, tile_m) + num_waves = min(4, tile_n // 32) + total_threads = num_waves * 64 + pack_M = 1 if tile_m < 32 else 2 + n_per_wave = tile_n // num_waves + pack_N = min(2, n_per_wave // 16) + pack_K = 2 + scale_mn_pack = 2 + elem_bytes = 1 + a_elem_bytes = 1 + b_elem_bytes = 1 + tile_k_bytes = int(tile_k) * int(a_elem_bytes) + a_elem_vec_pack = 2 + cbsz = 4 + blgp = 4 + if tile_k_bytes % 64 != 0: + raise ValueError(f'tile_k_bytes must be divisible by 64, got {tile_k_bytes}') + + def _x_elem_type(): + return T.i8 + + def _w_elem_type(): + return T.i8 + + def out_elem(): + return T.bf16 + _k_per_batch = model_dim + _k_dim = model_dim + bytes_x_per_tile = int(tile_m) * int(tile_k) * int(a_elem_bytes) + if bytes_x_per_tile % total_threads != 0: + raise ValueError(f'tile_m*tile_k*elem_bytes must be divisible by {total_threads}') + bytes_per_thread_x = bytes_x_per_tile // total_threads + _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') + pad_k = 0 if _use_lds128 else 8 + lds_stride = tile_k + pad_k + _use_cshuffle_epilog = True + _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' + module_name = f'mfma_moe1_silu_mul_afp4_wfp4_bf16_t{tile_m}x{tile_n}x{tile_k}_pm{persist_m}_async{_xcd_tag}_v32' + _cshuffle_elem_bytes = 2 + _single_x_bytes = int(tile_m) * int(lds_stride) * int(a_elem_bytes) + lds_out_bytes = _cshuffle_elem_bytes * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 + lds_tid_bytes = int(tile_m) * 4 + _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 + _GLOBAL_ALIGN = 1024 + _std_pong = max(_single_x_bytes, lds_out_bytes) + lds_tid_bytes + _std_ping = _single_x_bytes + _std_pong_aligned = allocator_pong._align(_std_pong, 128) + _std_total = allocator_pong._align(_std_pong_aligned, _GLOBAL_ALIGN) + allocator_pong._align(_std_ping, 128) + _lds_limit = {'gfx950': 163840, 'gfx942': 65536}.get(gpu_arch, 0) + _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves >= 2) + if _split_lds_out: + _half_out_bytes = _cshuffle_elem_bytes * int(tile_m) * (int(tile_n) // 2) + _pong_buffer_bytes = max(_single_x_bytes, _half_out_bytes) + _ping_buffer_bytes = max(_single_x_bytes, _half_out_bytes) + else: + _pong_buffer_bytes = max(_single_x_bytes, lds_out_bytes) + _ping_buffer_bytes = _single_x_bytes + + def x_lds_elem(): + return T.f8 + lds_pong_offset = allocator_pong._align(allocator_pong.ptr, 16) + allocator_pong.ptr = lds_pong_offset + _pong_buffer_bytes + _lds_tid_offset_pong = allocator_pong._align(allocator_pong.ptr, 4) + allocator_pong.ptr = _lds_tid_offset_pong + lds_tid_bytes + lds_ping_offset = allocator_ping._align(allocator_ping.ptr, 16) + allocator_ping.ptr = lds_ping_offset + _ping_buffer_bytes + if waves_per_eu is not None and waves_per_eu >= 1: + _total_cu_lds = 160 * 1024 + _min_lds = _total_cu_lds // (waves_per_eu + 1) + 1 + _pong_sz = allocator_pong._align(allocator_pong.ptr, 128) + _ping_sz = allocator_ping._align(allocator_ping.ptr, 128) + _cur_lds = _pong_sz + _ping_sz + if _cur_lds < _min_lds: + allocator_ping.ptr += _min_lds - _cur_lds + kpack_bytes = 16 + out_elem_bytes = 2 + w_elem_bytes = 1 + w_elem_pack = 2 + w_nbytes = experts * (2 * inter_dim) * model_dim * w_elem_bytes // w_elem_pack + _e_vec_s1 = min(tile_n // 32, 8) + _pipe_m_repeat = tile_m // 16 + _pipe_k_unroll = tile_k_bytes // 128 + _pipe_k_unroll_packed = _pipe_k_unroll // pack_K + _pipe_m_repeat_packed = _pipe_m_repeat // pack_M + _pipe_num_acc_n = n_per_wave // 16 + _pipe_a_groups = [] + for _mi in range(_pipe_m_repeat): + _grp = [] + for _k in range(_pipe_k_unroll): + _grp.append((_k, _mi)) + if len(_grp) == 2: + _pipe_a_groups.append(_grp) + _grp = [] + if _grp: + _pipe_a_groups.append(_grp) + _pipe_b_loads = [] + for ku in range(_pipe_k_unroll): + for ni in range(_pipe_num_acc_n): + _pipe_b_loads.append(('gate', ku, ni)) + _pipe_b_loads.append(('up', ku, ni)) + _pipe_num_acc_n_packed = _pipe_num_acc_n // pack_N + _pipe_all_mfma = [] + for _ku128 in range(_pipe_k_unroll_packed): + for _ni_packed in range(_pipe_num_acc_n_packed): + for _ikxdl in range(pack_K): + for _inxdl in range(pack_N): + _k_idx = _ku128 * pack_K + _ikxdl + _ni_idx = _ni_packed * pack_N + _inxdl + _pipe_all_mfma.append((_k_idx, _ni_idx, _ikxdl, _inxdl, _ku128)) + _pipe_mfma_per_phase = max(1, len(_pipe_all_mfma) // 4) + _pipe_n_phases = len(_pipe_all_mfma) // _pipe_mfma_per_phase + _a_groups_per_phase = (len(_pipe_a_groups) + _pipe_n_phases - 1) // _pipe_n_phases + _pipe_phases = [] + _mfma_i = 0 + _a_i = 0 + for _p in range(_pipe_n_phases): + _a_reads = [] + for _ in range(_a_groups_per_phase): + if _a_i < len(_pipe_a_groups): + _a_reads.extend(_pipe_a_groups[_a_i]) + _a_i += 1 + _phase = {'mfma': _pipe_all_mfma[_mfma_i:_mfma_i + _pipe_mfma_per_phase], 'a_reads': _a_reads, 'b_loads': [], 'has_scale': _p == 0} + _mfma_i += _pipe_mfma_per_phase + _pipe_phases.append(_phase) + _bi = 0 + for _p in range(1, _pipe_n_phases): + _rem_b = len(_pipe_b_loads) - _bi + _rem_p = _pipe_n_phases - _p + _n_b = (_rem_b + _rem_p - 1) // _rem_p if _rem_p > 0 else 0 + for _ in range(_n_b): + if _bi < len(_pipe_b_loads): + _pipe_phases[_p]['b_loads'].append(_pipe_b_loads[_bi]) + _bi += 1 + _pp_mfma = [p['mfma'] for p in _pipe_phases] + _pp_a_reads = [p['a_reads'] for p in _pipe_phases] + _pp_b_loads = [p['b_loads'] for p in _pipe_phases] + _pp_has_scale = [p['has_scale'] for p in _pipe_phases] + fp4_ratio = 2 + gui_ratio = 2 + _vmcnt_before_barrier = tile_m // 32 // fp4_ratio + tile_n // 32 * gui_ratio + + @flyc.kernel(name=module_name) + def moe_gemm1(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32): + tokens_in = arith.index_cast(ir.IndexType.get(), i32_tokens_in.ir_value()) + n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) + k_in = arith.index_cast(ir.IndexType.get(), i32_k_in.ir_value()) + size_expert_ids_in = arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + x_elem = T.f8 + f32 = T.f32 + i32 = T.i32 + i64 = T.i64 + vec4_f32 = T.vec(4, f32) + vec16_elems = 16 if a_elem_bytes == 1 else 8 + vec16_x = T.vec(vec16_elems, x_elem) + vec2_i64 = T.vec(2, i64) + + def _ptr_buffer_resource(ptr, num_records_bytes): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) + acc_init = arith.constant_vector(0.0, vec4_f32) + c_n_total = arith.constant(experts * (2 * inter_dim), index=True) + b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) + layout_b = b_layout.layout_b + sorted_m = size_expert_ids_in * arith.constant(sort_block_m, index=True) + layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=sorted_m, c_k=arith.constant(model_dim, index=True)) + layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=arith.constant(model_dim, index=True)) + _eff_lds_stride = lds_stride + _eff_tile_k_bytes = tile_k_bytes + if const_expr(use_async_copy and a_elem_vec_pack > 1): + _eff_lds_stride = lds_stride // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + tx = gpu.thread_id('x') + by = gpu.block_id('x') + bx_persist = gpu.block_id('y') + if const_expr(xcd_swizzle > 0): + _NUM_XCDS_S1 = 8 + _c1_sw = arith.constant(1, index=True) + _c_tn_sw = arith.constant(tile_n, index=True) + _c_idp_sw = arith.constant(2 * inter_dim_pad, index=True) + _c2_sw = arith.constant(2, index=True) + _gx = (n_in - _c_idp_sw + _c2_sw * _c_tn_sw - _c1_sw) / _c_tn_sw / _c2_sw + _c_pm_sw = arith.constant(persist_m, index=True) + _gy = (size_expert_ids_in + _c_pm_sw - _c1_sw) / _c_pm_sw + _linear_id = bx_persist * _gx + by + _num_wgs = _gx * _gy + _c_xcds = arith.constant(_NUM_XCDS_S1, index=True) + _wgs_per_xcd = _num_wgs / _c_xcds + _wgid = _linear_id % _c_xcds * _wgs_per_xcd + _linear_id / _c_xcds + _WGM_S1 = xcd_swizzle + _c_wgm = arith.constant(_WGM_S1, index=True) + _num_wgid_in_group = _c_wgm * _gx + _group_id = _wgid / _num_wgid_in_group + _first_pid_m = _group_id * _c_wgm + _remaining_m = _gy - _first_pid_m + _cmp_m = arith.cmpi(CmpIPredicate.ult, _remaining_m, _c_wgm) + _group_size_m = arith.select(_cmp_m, _remaining_m, _c_wgm) + _wgid_in_group = _wgid % _num_wgid_in_group + bx_persist = _first_pid_m + _wgid_in_group % _group_size_m + by = _wgid_in_group / _group_size_m + by_n = by * arith.constant(tile_n, index=True) + k_base_idx = arith.index(0) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((num_waves, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + base_ptr_pong = allocator_pong.get_base() + base_ptr_ping = allocator_ping.get_base() + lds_x_pong = SmemPtr(base_ptr_pong, lds_pong_offset, x_lds_elem(), shape=(_input_elems,)).get() + lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() + _lds_out_elem_type = T.bf16 + if const_expr(_split_lds_out and _use_cshuffle_epilog): + _half_out_elems = int(tile_m) * (int(tile_n) // 2) + lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() + lds_out_B = SmemPtr(base_ptr_ping, lds_ping_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() + else: + lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None + lds_out_B = None + lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m,)).get() + c_a_pack = arith.constant(int(a_elem_vec_pack), index=True) + c_elem_bytes = arith.constant(int(a_elem_bytes), index=True) + x_nbytes_idx = tokens_in * k_in * c_elem_bytes / c_a_pack + x_nbytes_i32 = arith.index_cast(T.i32, x_nbytes_idx) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes_i32) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, arith.constant(4, type=T.i32)) + num_valid_i32 = buffer_ops.buffer_load(numids_rsrc, arith.constant(0, index=True), vec_width=1, dtype=T.i32) + sx_rsrc = 1 + sw_rsrc = 1 + c32 = arith.constant(32, index=True) + kblk = k_in / c32 + sx_nbytes_idx = sorted_m * kblk + sx_nbytes_i32 = arith.index_cast(T.i32, sx_nbytes_idx) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, sx_nbytes_i32) + c32 = arith.constant(32, index=True) + kblk_w = k_in / c32 + mn_w = arith.constant(experts * (2 * inter_dim), index=True) + sw_nbytes_idx = mn_w * kblk_w + sw_nbytes_i32 = arith.index_cast(T.i32, sw_nbytes_idx) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, sw_nbytes_i32) + sorted_nbytes_idx = size_expert_ids_in * arith.constant(sort_block_m * 4, index=True) + sorted_nbytes_i32 = arith.index_cast(T.i32, sorted_nbytes_idx) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes_i32) + eid_nbytes_idx = size_expert_ids_in * arith.constant(4, index=True) + eid_nbytes_i32 = arith.index_cast(T.i32, eid_nbytes_idx) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, eid_nbytes_i32) + _PERSIST_M = persist_m + _c0_p = arith.constant(0, index=True) + _c1_p = arith.constant(1, index=True) + _c_pm = arith.constant(_PERSIST_M, index=True) + _for_persist = scf.ForOp(_c0_p, _c_pm, _c1_p) + _for_ip = ir.InsertionPoint(_for_persist.body) + _for_ip.__enter__() + _mi_p = _for_persist.induction_variable + bx = bx_persist * _c_pm + _mi_p + bx_m = bx * arith.constant(sort_block_m, index=True) + bx_m_i32 = arith.index_cast(T.i32, bx_m) + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=T.i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts, type=T.i32)) + + def _moe_gemm1_body(): + expert_off_idx = expert_idx * arith.constant(2 * inter_dim, index=True) + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + c_k_div4 = k_in / c_a_pack * arith.constant(int(a_elem_bytes), index=True) / arith.index(4) + tile_k_dwords = int(tile_k) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + topk_i32 = arith.constant(topk) + mask24 = arith.constant(16777215) + tokens_i32 = arith.index_cast(T.i32, tokens_in) + + def x_tile_chunk_coord_i32(i: int): + return tile_chunk_coord_i32(arith, tx_i32_base=tx_i32_base, i=i, total_threads=total_threads, layout_tile_div4=layout_x_tile_div4, chunk_i32=chunk_i32) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = x_tile_chunk_coord_i32(i) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + fused_i = buffer_ops.buffer_load(sorted_rsrc, sorted_row_i, vec_width=1, dtype=T.i32) + t_i32 = arith.andi(fused_i, mask24) + s_i32 = arith.shrui(fused_i, arith.constant(24)) + t_valid = arith.cmpi(CmpIPredicate.ult, t_i32, tokens_i32) + s_valid = arith.cmpi(CmpIPredicate.ult, s_i32, topk_i32) + ts_valid = arith.andi(t_valid, s_valid) + t_safe = arith.select(ts_valid, t_i32, arith.constant(0)) + t_idx = arith.index_cast(ir.IndexType.get(), t_safe) + x_row_base_div4.append(t_idx * c_k_div4) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + num_acc_n = n_per_wave // 16 + c_n_per_wave = arith.constant(n_per_wave, index=True) + wave_n_id = wave_id % arith.constant(num_waves, index=True) + n_tile_base = wave_n_id * c_n_per_wave + gate_n_intra_list = [] + gate_n_blk_list = [] + up_n_intra_list = [] + up_n_blk_list = [] + col_g_list = [] + c_n0_static = experts * (2 * inter_dim) // 16 + layout_n_blk_intra = fx.make_layout((c_n0_static, 16), stride=(16, 1)) + inter_idx = arith.constant(inter_dim, index=True) + for i in range_constexpr(num_acc_n): + offset = i * 16 + c_offset = arith.constant(offset, index=True) + col_g = by_n + n_tile_base + c_offset + lane_mod_16 + col_g_list.append(col_g) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + gate_row_w = expert_off_idx + global_n + gate_coord = idx2crd(gate_row_w, layout_n_blk_intra) + gate_n_blk_list.append(layout_get(gate_coord, 0)) + gate_n_intra_list.append(layout_get(gate_coord, 1)) + up_row_w = gate_row_w + inter_idx + up_coord = idx2crd(up_row_w, layout_n_blk_intra) + up_n_blk_list.append(layout_get(up_coord, 0)) + up_n_intra_list.append(layout_get(up_coord, 1)) + m_repeat = tile_m // 16 + k_unroll = tile_k_bytes // 128 + k_unroll_packed = k_unroll // pack_K + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + _K_per_ku = tile_k // k_unroll + _pad_k_elems = model_dim_pad % tile_k if model_dim_pad > 0 else 0 + _pad_ku_skip = _pad_k_elems // _K_per_ku + _tail_ku = k_unroll - _pad_ku_skip + _tail_ku_packed = (_tail_ku + pack_K - 1) // pack_K if _pad_ku_skip > 0 else None + + def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): + c64 = arith.constant(64, index=True) + base_k_bytes = base_k * arith.constant(int(b_elem_bytes), index=True) + k0 = base_k_bytes // c64 + arith.constant(ku, index=True) + k1 = lane_div_16 + coord_pack = (n_blk, k0, k1, n_intra, arith.constant(0, index=True)) + idx_pack = crd2idx(coord_pack, layout_b) + vec_elems = kpack_bytes // int(b_elem_bytes) + b16 = _buffer_load_vec(buffer_ops, vector, w_rsrc, idx_pack, elem_type=_w_elem_type(), vec_elems=vec_elems, elem_bytes=b_elem_bytes, offset_in_bytes=b_elem_bytes == 1, cache_modifier=b_nt) + b_i64x2 = vector.bitcast(vec2_i64, b16) + b0 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) + b1 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) + return (b0, b1) + + def load_b_tile(base_k, ku_limit=k_unroll): + """Load separated gate and up B tiles.""" + gate_b_tile = [] + up_b_tile = [] + for ku in range_constexpr(ku_limit): + g_packs0, g_packs1 = ([], []) + u_packs0, u_packs1 = ([], []) + for ni in range_constexpr(num_acc_n): + gb0, gb1 = load_b_packs_k64(base_k, ku, gate_n_blk_list[ni], gate_n_intra_list[ni]) + g_packs0.append(gb0) + g_packs1.append(gb1) + ub0, ub1 = load_b_packs_k64(base_k, ku, up_n_blk_list[ni], up_n_intra_list[ni]) + u_packs0.append(ub0) + u_packs1.append(ub1) + gate_b_tile.append((g_packs0, g_packs1)) + up_b_tile.append((u_packs0, u_packs1)) + return (gate_b_tile, up_b_tile) + _scale_lane_elem = lane_div_16 * layout_b_scale.stride_klane + lane_mod_16 + _gate_scale_bases = [] + _up_scale_bases = [] + for _ni in range_constexpr(num_acc_n_packed): + _col_base = by_n + n_tile_base + arith.constant(_ni * 16 * pack_N, index=True) + _gate_mni = (expert_off_idx + _col_base) // arith.constant(32, index=True) + _gate_scale_bases.append(_gate_mni * layout_b_scale.stride_n0 + _scale_lane_elem) + _up_mni = (expert_off_idx + inter_idx + _col_base) // arith.constant(32, index=True) + _up_scale_bases.append(_up_mni * layout_b_scale.stride_n0 + _scale_lane_elem) + _a_scale_bases = [] + for _mi in range_constexpr(m_repeat_packed): + _a_mni = _mi + bx_m // scale_mn_pack // 16 + _a_scale_bases.append(_a_mni * layout_a_scale.stride_n0 + _scale_lane_elem) + _c16_idx = arith.constant(16, index=True) + _c2_idx = arith.constant(2, index=True) + _scale_mask_lo = arith.constant(255, type=T.i32) + _m_half_idx = arith.constant(0, type=T.i32) + _m_half_i32 = arith.constant(0, type=T.i32) + _scale_shift = arith.constant(0, type=T.i32) + _scale_shift_hi = arith.constant(0, type=T.i32) + _n_half_idx = arith.constant(0, type=T.i32) + _n_half_i32 = arith.constant(0, type=T.i32) + _bscale_shift = arith.constant(0, type=T.i32) + _bscale_shift_hi = arith.constant(0, type=T.i32) + if const_expr(pack_M < scale_mn_pack): + _m_half_idx = bx_m // _c16_idx % _c2_idx + _m_half_i32 = arith.index_cast(T.i32, _m_half_idx) + _scale_shift = _m_half_i32 * arith.constant(8, type=T.i32) + _scale_shift_hi = _scale_shift + arith.constant(16, type=T.i32) + if const_expr(pack_N < scale_mn_pack): + _n_half_idx = n_tile_base // _c16_idx % _c2_idx + _n_half_i32 = arith.index_cast(T.i32, _n_half_idx) + _bscale_shift = _n_half_i32 * arith.constant(8, type=T.i32) + _bscale_shift_hi = _bscale_shift + arith.constant(16, type=T.i32) + + def _rearrange_a_scale(raw_i32): + """Rearrange scale bytes for pack_M=1: extract m_half's k0,k1 bytes.""" + if const_expr(pack_M >= scale_mn_pack): + return raw_i32 + b_k0 = arith.andi(arith.shrui(raw_i32, _scale_shift), _scale_mask_lo) + b_k1 = arith.andi(arith.shrui(raw_i32, _scale_shift_hi), _scale_mask_lo) + return arith.ori(b_k0, arith.shli(b_k1, arith.constant(8, type=T.i32))) + + def _rearrange_b_scale(raw_i32): + """Rearrange scale bytes for pack_N=1: extract n_half's k0,k1 bytes.""" + if const_expr(pack_N >= scale_mn_pack): + return raw_i32 + b_k0 = arith.andi(arith.shrui(raw_i32, _bscale_shift), _scale_mask_lo) + b_k1 = arith.andi(arith.shrui(raw_i32, _bscale_shift_hi), _scale_mask_lo) + return arith.ori(b_k0, arith.shli(b_k1, arith.constant(8, type=T.i32))) + + def prefetch_ab_scale_tile(base_k, ku_packed_limit=k_unroll_packed): + a_scale_tile = [] + gate_b_scale = [] + up_b_scale = [] + for ku in range_constexpr(ku_packed_limit): + k_off = (ku + base_k) * layout_b_scale.stride_k0 + for mi in range_constexpr(m_repeat_packed): + s = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[mi] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + s = _rearrange_a_scale(s) + a_scale_tile.append(vector.from_elements(T.vec(1, T.i32), [s])) + for ni in range_constexpr(num_acc_n_packed): + gs = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[ni] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + gs = _rearrange_b_scale(gs) + gate_b_scale.append(vector.from_elements(T.vec(1, T.i32), [gs])) + us = buffer_ops.buffer_load(sw_rsrc, _up_scale_bases[ni] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + us = _rearrange_b_scale(us) + up_b_scale.append(vector.from_elements(T.vec(1, T.i32), [us])) + return [a_scale_tile, gate_b_scale, up_b_scale] + _dma_bytes = 16 + _wave_size = 64 + _eff_bytes_per_buffer = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) + _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = base_k / c_a_pack * arith.constant(int(elem_bytes), index=True) / arith.index(4) + lds_ptr_i64 = None + for i in range_constexpr(_num_dma_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(T.i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = memref.extract_aligned_pointer_as_index(lds_buffer) + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + lds_ptr_i64 = rocdl.readfirstlane(T.i64, arith.index_cast(T.i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=T.i64) + lds_ptr_type = ir.Type.parse('!llvm.ptr<3>') + lds_ptr = llvm.inttoptr(lds_ptr_type, lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) + + def prefetch_x_to_lds(base_k, lds_buffer): + dma_x_tile_to_lds(base_k, lds_buffer) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz_bytes = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + col_base_swz = col_base_swz_bytes if elem_bytes == 1 else col_base_swz_bytes / arith.index(2) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + a0 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) + a1 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) + return (a0, a1) + + def prefetch_full_a_from_lds(lds_buffer, ku_limit=k_unroll): + """Load entire A tile from LDS into registers before compute.""" + a_regs = [] + for k_idx in range_constexpr(ku_limit): + col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack + for mi_idx in range_constexpr(m_repeat): + mi_val = arith.constant(mi_idx * 16, index=True) + curr_row = row_a_lds + mi_val + a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) + a_regs.append((a0, a1)) + return a_regs + + def compute_tile(acc_gate_in, acc_up_in, gate_b_tile_in, up_b_tile_in, a_tile_regs, a_scale=None, gate_b_scale=None, up_b_scale=None, *, prefetch_epilogue=False, ku_count=k_unroll): + gate_list = list(acc_gate_in) + up_list = list(acc_up_in) + mfma_res_ty = vec4_f32 + epilogue_pf = None + c0_i64 = arith.constant(0, type=T.i64) + vec4_i64 = T.vec(4, T.i64) + vec8_i32 = T.vec(8, T.i32) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + _eff_packed = (ku_count + pack_K - 1) // pack_K + for ku128 in range_constexpr(_eff_packed): + for ni in range_constexpr(num_acc_n_packed): + gate_bs_i32 = gate_b_scale[ku128 * num_acc_n_packed + ni] + gate_bs_val = vector.extract(gate_bs_i32, static_position=[0], dynamic_position=[]) + up_bs_i32 = up_b_scale[ku128 * num_acc_n_packed + ni] + up_bs_val = vector.extract(up_bs_i32, static_position=[0], dynamic_position=[]) + for ikxdl in range_constexpr(pack_K): + k_idx = ku128 * pack_K + ikxdl + if const_expr(k_idx < ku_count): + gate_bp0, gate_bp1 = gate_b_tile_in[k_idx] + up_bp0, up_bp1 = up_b_tile_in[k_idx] + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + gb0 = gate_bp0[ni_idx] + gb1 = gate_bp1[ni_idx] + gb128 = pack_i64x4_to_i32x8(gb0, gb1, c0_i64, c0_i64) + ub0 = up_bp0[ni_idx] + ub1 = up_bp1[ni_idx] + ub128 = pack_i64x4_to_i32x8(ub0, ub1, c0_i64, c0_i64) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[ku128 * m_repeat_packed + mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + _a_reg_idx = k_idx * m_repeat + mi_idx + a0, a1 = a_tile_regs[_a_reg_idx] + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, gate_bs_val]) + up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) + return (gate_list, up_list, epilogue_pf) + + def load_a_subtile(k_idx, mi_idx, lds_buffer): + """Load a single A sub-tile from LDS (one ds_read).""" + col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack + mi_val = arith.constant(mi_idx * 16, index=True) + curr_row = row_a_lds + mi_val + a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) + return (a0, a1) + + def compute_bmajor_mfma_phase(all_a_tiles, gate_b_single, up_b_single, a_scale_vals, gate_bs_val, up_bs_val, gate_list, up_list, k_idx, ni_idx, ikxdl, inxdl): + """B-major MFMA: fix one B (ni), cycle all A tiles (mi). + + Packs B once and reuses across all mi iterations. + A tiles come from LDS (already available, no VMEM wait). + + all_a_tiles: flat list indexed by [k*m_repeat + mi]. + gate_b_single/up_b_single: (b0, b1) for one specific ni. + a_scale_vals: list of A scale scalars indexed by mi_packed. + """ + c0_i64 = arith.constant(0, type=T.i64) + vec4_i64 = T.vec(4, T.i64) + vec8_i32 = T.vec(8, T.i32) + + def _pack(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + mfma_res_ty = vec4_f32 + gb128 = _pack(gate_b_single[0], gate_b_single[1], c0_i64, c0_i64) + ub128 = _pack(up_b_single[0], up_b_single[1], c0_i64, c0_i64) + for mi_p in range_constexpr(m_repeat_packed): + a_scale_val = a_scale_vals[mi_p] + for imxdl in range_constexpr(pack_M): + mi_idx = mi_p * pack_M + imxdl + a_reg = all_a_tiles[k_idx * m_repeat + mi_idx] + a128 = _pack(a_reg[0], a_reg[1], c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, gate_bs_val]) + up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) + + def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): + """One flatmm-style interleaved half-iteration (deep pipeline). + + Generalized for arbitrary m_repeat (block_m=32, 64, ...). + DMA targets lds_write (OTHER buffer) while ds_read uses + lds_read (already DMA'd in previous half). + + Interleaving schedule (per half): + Phase 0: scale VMEM + 2 ds_read(A) -> 4 MFMA(prev) + Phase 1..N: B VMEM(distributed) + 2 ds_read(A, if avail) -> 4 MFMA(prev) + Phase N+1..: remaining B VMEM -> 4 MFMA(prev) + """ + _abs_k = k_base_idx + arith.constant(next_k_load, index=True) + _bk = _abs_k // arith.constant(2, index=True) + _sk = _abs_k // arith.constant(pack_K * 128, index=True) + _k_off = _sk * layout_b_scale.stride_k0 + rocdl.sched_barrier(0) + rocdl.s_waitcnt(_vmcnt_before_barrier) + _barrier() + rocdl.sched_barrier(0) + _abs_k_dma = k_base_idx + arith.constant(next_k_dma_py, index=True) + if const_expr(use_async_copy and next_k_dma_py < int(_k_dim)): + prefetch_x_to_lds(_abs_k_dma, lds_write) + _prev_asvs = [] + for _mi_p in range_constexpr(m_repeat_packed): + _prev_asvs.append(vector.extract(prev_a_scale[_mi_p], static_position=[0], dynamic_position=[])) + _prev_gsv_list = [] + for _gs_ni in range_constexpr(num_acc_n_packed): + _prev_gsv_list.append(vector.extract(prev_gate_bs[_gs_ni], static_position=[0], dynamic_position=[])) + _prev_usv_list = [] + for _us_ni in range_constexpr(num_acc_n_packed): + _prev_usv_list.append(vector.extract(prev_up_bs[_us_ni], static_position=[0], dynamic_position=[])) + _a_all = {} + _b_gate_all = {} + _b_up_all = {} + for _p in range_constexpr(_pipe_n_phases): + if const_expr(_pp_has_scale[_p]): + _new_as_list = [] + for _mi_p in range_constexpr(m_repeat_packed): + _raw_as = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[_mi_p] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + _new_as_list.append(_rearrange_a_scale(_raw_as)) + _new_gs_list = [] + for _gs_ni in range_constexpr(num_acc_n_packed): + _gs_raw = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[_gs_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + _new_gs_list.append(_rearrange_b_scale(_gs_raw)) + _new_us_list = [] + for _us_ni in range_constexpr(num_acc_n_packed): + _us_raw = buffer_ops.buffer_load(sw_rsrc, _up_scale_bases[_us_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) + _new_us_list.append(_rearrange_b_scale(_us_raw)) + for _b_j in range_constexpr(len(_pp_b_loads[_p])): + _b_type, _b_ku, _b_ni = _pp_b_loads[_p][_b_j] + if const_expr(_b_type == 'gate'): + _b_gate_all[_b_ku, _b_ni] = load_b_packs_k64(_bk, _b_ku, gate_n_blk_list[_b_ni], gate_n_intra_list[_b_ni]) + else: + _b_up_all[_b_ku, _b_ni] = load_b_packs_k64(_bk, _b_ku, up_n_blk_list[_b_ni], up_n_intra_list[_b_ni]) + rocdl.sched_barrier(0) + for _a_j in range_constexpr(len(_pp_a_reads[_p])): + _ak, _ami = _pp_a_reads[_p][_a_j] + _a_all[_ak, _ami] = load_a_subtile(_ak, _ami, lds_read) + rocdl.sched_barrier(0) + rocdl.s_setprio(1) + for _m_j in range_constexpr(len(_pp_mfma[_p])): + _k_idx, _ni_idx, _ikxdl, _inxdl, _ku128 = _pp_mfma[_p][_m_j] + _ni_packed_idx = _ni_idx // pack_N + _up_b_single = (prev_up_w[_k_idx][0][_ni_idx], prev_up_w[_k_idx][1][_ni_idx]) + compute_bmajor_mfma_phase(prev_a_tile, (prev_gate_w[_k_idx][0][_ni_idx], prev_gate_w[_k_idx][1][_ni_idx]), _up_b_single, _prev_asvs, _prev_gsv_list[_ni_packed_idx], _prev_usv_list[_ni_packed_idx], acc_gate, acc_up, _k_idx, _ni_idx, _ikxdl, _inxdl) + rocdl.s_setprio(0) + rocdl.sched_barrier(0) + cur_a_tile = [] + for _k in range_constexpr(k_unroll): + for _mi in range_constexpr(m_repeat): + cur_a_tile.append(_a_all[_k, _mi]) + cur_gate_w = [] + cur_up_w = [] + for ku in range_constexpr(k_unroll): + g_packs0, g_packs1 = ([], []) + u_packs0, u_packs1 = ([], []) + for ni in range_constexpr(num_acc_n): + g = _b_gate_all[ku, ni] + g_packs0.append(g[0]) + g_packs1.append(g[1]) + u = _b_up_all[ku, ni] + u_packs0.append(u[0]) + u_packs1.append(u[1]) + cur_gate_w.append((g_packs0, g_packs1)) + cur_up_w.append((u_packs0, u_packs1)) + cur_a_scale = [] + for _mi_p in range_constexpr(m_repeat_packed): + cur_a_scale.append(vector.from_elements(T.vec(1, T.i32), [_new_as_list[_mi_p]])) + cur_gate_bs = [] + for _gs_ni in range_constexpr(num_acc_n_packed): + cur_gate_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_gs_list[_gs_ni]])) + cur_up_bs = [] + for _us_ni in range_constexpr(num_acc_n_packed): + cur_up_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_us_list[_us_ni]])) + return (cur_a_tile, cur_gate_w, cur_up_w, cur_a_scale, cur_gate_bs, cur_up_bs, acc_gate, acc_up) + rocdl.sched_barrier(0) + k0 = k_base_idx + prefetch_x_to_lds(k0, lds_x_pong) + rocdl.sched_barrier(0) + _k0_scale = k_base_idx // arith.constant(pack_K * 128, index=True) + a_scale_pong, gate_bs_pong, up_bs_pong = prefetch_ab_scale_tile(_k0_scale) + _c_tile_m_idx = arith.constant(tile_m, index=True) + _tid_in_range = arith.cmpi(CmpIPredicate.ult, tx, _c_tile_m_idx) + _if_tid = scf.IfOp(_tid_in_range) + with ir.InsertionPoint(_if_tid.then_block): + _tid_row = bx_m + tx + _tid_val = buffer_ops.buffer_load(sorted_rsrc, _tid_row, vec_width=1, dtype=T.i32) + _tid_vec1 = vector.from_elements(T.vec(1, T.i32), [_tid_val]) + vector.store(_tid_vec1, lds_tid, [tx]) + scf.YieldOp([]) + acc_gate = [acc_init] * num_acc_n * m_repeat + acc_up = [acc_init] * num_acc_n * m_repeat + _k1 = k_base_idx + arith.constant(tile_k, index=True) + rocdl.sched_barrier(0) + prefetch_x_to_lds(_k1, lds_x_ping) + _k0_b = k_base_idx // arith.constant(2, index=True) + gate_w0, up_w0 = load_b_tile(_k0_b) + rocdl.s_waitcnt(0) + gpu.barrier() + rocdl.sched_barrier(0) + a_tile_pong = prefetch_full_a_from_lds(lds_x_pong) + rocdl.sched_barrier(0) + rocdl.s_waitcnt(6) + num_k_tiles_py = int(_k_dim) // int(tile_k) + odd_k_tiles = num_k_tiles_py % 2 == 1 + tail_tiles = 1 if odd_k_tiles else 2 + k_main2_py = (num_k_tiles_py - tail_tiles) * int(tile_k) + if const_expr(k_main2_py < 0): + k_main2_py = 0 + gate_w_pong = gate_w0 + up_w_pong = up_w0 + rocdl.sched_barrier(0) + if const_expr(k_main2_py > 0): + for k_iv_py in range_constexpr(0, k_main2_py, tile_k * 2): + next_k_load_1 = k_iv_py + tile_k + next_k_load_2 = k_iv_py + tile_k * 2 + next_k_dma_1 = k_iv_py + tile_k * 2 + next_k_dma_2 = k_iv_py + tile_k * 3 + a_tile_ping, gate_w_ping, up_w_ping, a_scale_ping, gate_bs_ping, up_bs_ping, acc_gate, acc_up = _interleaved_half( + lds_x_ping, + lds_x_pong, + next_k_dma_1, + next_k_load_1, + a_tile_pong, + gate_w_pong, + up_w_pong, + a_scale_pong, + gate_bs_pong, + up_bs_pong, + acc_gate, + acc_up, + ) + a_tile_pong, gate_w_pong, up_w_pong, a_scale_pong, gate_bs_pong, up_bs_pong, acc_gate, acc_up = _interleaved_half( + lds_x_pong, + lds_x_ping, + next_k_dma_2, + next_k_load_2, + a_tile_ping, + gate_w_ping, + up_w_ping, + a_scale_ping, + gate_bs_ping, + up_bs_ping, + acc_gate, + acc_up, + ) + if const_expr(odd_k_tiles): + acc_gate, acc_up, epilogue_pf = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong, prefetch_epilogue=True, ku_count=_tail_ku if _pad_ku_skip > 0 else k_unroll) + else: + _k_tail_rel = arith.constant(_k_dim - tile_k, index=True) + k_tail1 = k_base_idx + _k_tail_rel + x_regs_ping = [] + prefetch_x_to_lds(k_tail1, lds_x_ping) + if const_expr(_pad_ku_skip > 0): + gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True), ku_limit=_tail_ku) + a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K * 128, index=True), ku_packed_limit=_tail_ku_packed) + else: + gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True)) + a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K * 128, index=True)) + acc_gate, acc_up, _ = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong) + rocdl.s_waitcnt(0) + _barrier() + if const_expr(_pad_ku_skip > 0): + a_tile_ping = prefetch_full_a_from_lds(lds_x_ping, ku_limit=_tail_ku) + else: + a_tile_ping = prefetch_full_a_from_lds(lds_x_ping) + acc_gate, acc_up, epilogue_pf = compute_tile(acc_gate, acc_up, gate_w_ping, up_w_ping, a_tile_ping, a_scale_ping, gate_bs_ping, up_bs_ping, prefetch_epilogue=True, ku_count=_tail_ku if _pad_ku_skip > 0 else k_unroll) + def _silu_elem(g): + """silu(x) = x * sigmoid(x); HW fast path: exp2, rcp""" + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, 'llvm.amdgcn.exp2.f32', [t], [], []) + one = arith.constant(1.0, type=f32) + den = one + emu + sig = llvm.call_intrinsic(f32, 'llvm.amdgcn.rcp.f32', [den], [], []) + return g * sig + + def _silu_mul_vec4(gate_v4, up_v4): + """Element-wise silu(gate) * up on vec4_f32.""" + result_elems = [] + for ei in range_constexpr(4): + g = vector.extract(gate_v4, static_position=[ei], dynamic_position=[]) + u = vector.extract(up_v4, static_position=[ei], dynamic_position=[]) + result_elems.append(_silu_elem(g) * u) + return vector.from_elements(vec4_f32, result_elems) + + def _act_vec4(gate_v4, up_v4): + return _silu_mul_vec4(gate_v4, up_v4) + acc = [None] * (int(num_acc_n) * int(m_repeat)) + for _mi in range_constexpr(m_repeat): + for _ni in range_constexpr(num_acc_n): + _aidx = _mi * num_acc_n + _ni + acc[_aidx] = _act_vec4(acc_gate[_aidx], acc_up[_aidx]) + mask24_i32 = arith.constant(16777215) + topk_i32_v = topk_i32 + tokens_i32_v = tokens_i32 + out_base_i64 = arith.index_cast(T.i64, fx.ptrtoint(arg_out)) + out_base_idx = arith.index_cast(ir.IndexType.get(), out_base_i64) + if const_expr(lds_out is None): + raise RuntimeError('CShuffle epilogue requires lds_out') + def write_row_to_lds(*, mi: int, ii: int, row_in_tile, row, row_base_lds, col_base_local, num_acc_n: int, lds_out): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + ni * 16 + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v_out = arith.trunc_f(out_elem(), v) + lds_idx = row_base_lds + col_local + vec1_out = T.vec(1, out_elem()) + v1 = vector.from_elements(vec1_out, [v_out]) + vector.store(v1, lds_out, [lds_idx], alignment=2) + _out_row_stride = inter_dim * out_elem_bytes + + def precompute_row(*, row_local, row): + fused2 = memref.load(lds_tid, [row_local]) + row_i32 = arith.index_cast(T.i32, row) + row_valid0 = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) + t = fused2 & mask24_i32 + s = fused2 >> 24 + t_ok = arith.cmpi(CmpIPredicate.ult, t, tokens_i32_v) + s_ok = arith.cmpi(CmpIPredicate.ult, s, topk_i32_v) + row_valid = arith.andi(row_valid0, arith.andi(t_ok, s_ok)) + t_idx = arith.index_cast(ir.IndexType.get(), t) + s_idx = arith.index_cast(ir.IndexType.get(), s) + ts_idx = t_idx * arith.constant(topk, index=True) + s_idx + row_byte_base = out_base_idx + ts_idx * arith.constant(_out_row_stride, index=True) + return ((fused2, row_byte_base), row_valid) + + def _idx_to_llvm_ptr(idx_val, addr_space=1): + idx_v = idx_val._value if hasattr(idx_val, '_value') else idx_val + i64_v = arith.index_cast(T.i64, idx_v) + i64_raw = i64_v._value if hasattr(i64_v, '_value') else i64_v + ptr_ty = ir.Type.parse(f'!llvm.ptr<{addr_space}>') + return llvm.inttoptr(ptr_ty, i64_raw) + _e_vec = _e_vec_s1 + _cshuffle_nlane = min(32, tile_n // _e_vec) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + fused, row_byte_base = row_ctx + col_idx = col_g0 + byte_off_col = col_idx * arith.constant(out_elem_bytes, index=True) + ptr_addr_idx = row_byte_base + byte_off_col + out_ptr_v = _idx_to_llvm_ptr(ptr_addr_idx) + frag_v = frag._value if hasattr(frag, '_value') else frag + llvm.StoreOp(frag_v, out_ptr_v, alignment=_e_vec * out_elem_bytes, nontemporal=True) + _frag_elem = ir.BF16Type.get() + c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m, tile_n=tile_n, e_vec=_e_vec, cshuffle_nlane=_cshuffle_nlane, block_size=total_threads, m_repeat=m_repeat, num_acc_n=num_acc_n, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=_frag_elem, write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair, lds_out_split=lds_out_B) + _if_blk = scf.IfOp(blk_valid) + with ir.InsertionPoint(_if_blk.then_block): + _ifexpert_of = scf.IfOp(exp_valid) + with ir.InsertionPoint(_ifexpert_of.then_block): + _moe_gemm1_body() + scf.YieldOp([]) + scf.YieldOp([]) + gpu.barrier() + scf.YieldOp([]) + _for_ip.__exit__(None, None, None) + _cache_tag = (module_name, tile_m, tile_n, tile_k, model_dim_pad, inter_dim_pad, persist_m, use_async_copy, waves_per_eu, k_batch, xcd_swizzle) + + @flyc.jit + def launch_kimi_fp4_stage1_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_max_token_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_inter_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): + _ = _cache_tag + allocator_pong.finalized = False + allocator_ping.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator_pong.finalize() + allocator_ping.finalize() + inter_dim_pad_total = arith.constant(2 * inter_dim_pad, index=True) + tile_k_stage2 = tile_k // 2 + tile2_pad = (tile_k_stage2 - (inter_dim - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 + inter_in = arith.index_cast(ir.IndexType.get(), i32_inter_in.ir_value()) + tile_n_index = arith.constant(tile_n, index=True) + gx = (inter_in - inter_dim_pad_total + tile2_pad + 2 * tile_n_index - 1) / tile_n_index / arith.constant(2, index=True) + _c_pm_l = arith.constant(persist_m, index=True) + gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l + moe_gemm1(arg_out, arg_x, arg_w, arg_scale_x, arg_scale_w, arg_sorted_token_ids, arg_expert_ids, arg_max_token_ids, i32_tokens_in, i32_inter_in, i32_k_in, i32_size_expert_ids_in).launch(grid=(gx, gy, k_batch), block=(total_threads, 1, 1), stream=stream) + return launch_kimi_fp4_stage1_16384 + +@functools.lru_cache(maxsize=1) +def compile_kimi_fp4_stage2_16384(): + """Compile the fixed Kimi fp4 stage2 kernel selected for M=16384.""" + model_dim = MODEL_DIM + inter_dim = INTER_DIM + experts = EXPERTS + topk = TOPK + tile_m = S2.tile_m + tile_n = S2.tile_n + tile_k = S2.tile_k + model_dim_pad = 0 + inter_dim_pad = 0 + persist_m = S2.persist_m + b_nt = S2.b_nt + xcd_swizzle = S2.xcd_swizzle + _sort_block_m = tile_m + gpu_arch = get_hip_arch() + allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') + allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = min(_scale_pack_m, tile_m // 16) + pack_N = min(_scale_pack_n, tile_n // 64) + _k_unroll_raw = int(tile_k) // 128 + pack_K = min(_scale_pack_k, _k_unroll_raw) + elem_bytes = 1 + a_elem_bytes = 1 + b_elem_bytes = 1 + tile_k_bytes = int(tile_k) * int(a_elem_bytes) + a_elem_vec_pack = 2 + cbsz = 4 + blgp = 4 + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = inter_dim // _scale_pack_k + _b_c_k0_s = _b_c_k_s * b_elem_bytes // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + assert model_dim % 16 == 0, 'model_dim must be divisible by 16' + _expert_b_stride = model_dim // 16 * _b_stride_n0 + if tile_k_bytes % 64 != 0: + raise ValueError(f'tile_k_bytes must be divisible by 64, got tile_k_bytes={tile_k_bytes} (tile_k={tile_k}, elem_bytes={a_elem_bytes})') + out_s = 'bf16' + w_elem_bytes = 1 + w_elem_pack = 2 + w_nbytes = experts * model_dim * inter_dim * w_elem_bytes // w_elem_pack + + def _x_elem_type(): + return T.i8 + + def _w_elem_type(): + return T.i8 + + def _scale_elem_type(): + return T.i32 + total_threads = 256 + bytes_x_per_tile = int(tile_m) * int(tile_k) * int(a_elem_bytes) + if bytes_x_per_tile % total_threads != 0: + raise ValueError(f'tile_m*tile_k*elem_bytes must be divisible by {total_threads}: tile_m={tile_m}, tile_k={tile_k}, elem_bytes={a_elem_bytes}') + bytes_per_thread_x = bytes_x_per_tile // total_threads + _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') + pad_k = 0 if _use_lds128 else 8 + lds_stride = tile_k + pad_k + if a_elem_vec_pack > 1: + _eff_lds_stride = lds_stride // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + else: + _eff_lds_stride = lds_stride + _eff_tile_k_bytes = tile_k_bytes + _use_cshuffle_epilog = True + + def out_elem(): + return T.bf16 + epilog_tag = 'cshuffle' + _persistent = persist_m <= 0 + if _persistent: + from aiter.jit.utils.chip_info import get_cu_num + _cu_num = get_cu_num() + else: + _cu_num = 0 + _pm_tag = f'_persist_cu{_cu_num}' if _persistent else f'_pm{persist_m}' + _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' + module_name = f'mfma_moe2_afp4_wfp4_{out_s}_{epilog_tag}_t{tile_m}x{tile_n}x{tile_k}_vscale_fix3{_pm_tag}{_xcd_tag}' + _single_x_bytes = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) + _cshuffle_elem_bytes_s2 = 2 + lds_out_bytes = _cshuffle_elem_bytes_s2 * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 + lds_tid_bytes = int(tile_m) * 4 + _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 + _pong_buffer_bytes = max(_single_x_bytes, lds_out_bytes) + _ping_buffer_bytes = _single_x_bytes + + def x_lds_elem(): + return T.f8 + lds_pong_offset = allocator_pong._align(allocator_pong.ptr, 16) + allocator_pong.ptr = lds_pong_offset + _pong_buffer_bytes + _lds_tid_offset_pong = allocator_pong._align(allocator_pong.ptr, 4) + allocator_pong.ptr = _lds_tid_offset_pong + lds_tid_bytes + lds_ping_offset = allocator_ping._align(allocator_ping.ptr, 16) + allocator_ping.ptr = lds_ping_offset + _ping_buffer_bytes + + @flyc.kernel(name=module_name) + def moe_gemm2(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_sorted_weights: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32): + tokens_in = arith.index_cast(ir.IndexType.get(), i32_tokens_in.ir_value()) + n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) + k_in = arith.index_cast(ir.IndexType.get(), i32_k_in.ir_value()) + size_expert_ids_in = arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + x_elem = T.f8 + f32 = T.f32 + i32 = T.i32 + i64 = T.i64 + vec4_f32 = T.vec(4, f32) + vec4_i32 = T.vec(4, i32) + vec16_elems = 16 if a_elem_bytes == 1 else 8 + vec16_x = T.vec(vec16_elems, x_elem) + vec2_i64 = T.vec(2, i64) + + def _ptr_buffer_resource(ptr, num_records_bytes): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) + acc_init = arith.constant_vector(0.0, vec4_f32) + topk_idx = arith.constant(topk, index=True) + m_in = tokens_in * topk_idx + c_n_total = arith.constant(experts * model_dim, index=True) + kpack_bytes = 16 + from .layout_utils import _div_pow2, _mod_pow2 + + def check_c_n_valid_gate(base_n): + return arith.cmpi(CmpIPredicate.ult, base_n, model_dim - model_dim_pad) + + def check_c_k_valid_gate(base_k): + return arith.cmpi(CmpIPredicate.ult, base_k, inter_dim - inter_dim_pad) + c_k_orig = arith.constant(inter_dim, index=True) + layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=m_in, c_k=c_k_orig) + layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=c_k_orig) + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + tx = gpu.thread_id('x') + by = gpu.block_id('x') + bx_persist = gpu.block_id('y') + if const_expr(xcd_swizzle > 0): + _NUM_XCDS_S = 8 + _c1_sw = arith.constant(1, index=True) + _c_tn_sw = arith.constant(tile_n, index=True) + _c_mdp_sw = arith.constant(model_dim_pad, index=True) + _gx = (n_in - _c_mdp_sw + _c_tn_sw - _c1_sw) / _c_tn_sw + if const_expr(_persistent): + _gy = arith.constant(_cu_num, index=True) + else: + _c_pm_sw = arith.constant(persist_m, index=True) + _gy = (size_expert_ids_in + _c_pm_sw - _c1_sw) / _c_pm_sw + _linear_id = bx_persist * _gx + by + _num_wgs = _gx * _gy + _c_xcds = arith.constant(_NUM_XCDS_S, index=True) + _wgs_per_xcd = _num_wgs / _c_xcds + _wgid = _linear_id % _c_xcds * _wgs_per_xcd + _linear_id / _c_xcds + _WGM_S = xcd_swizzle + _c_wgm = arith.constant(_WGM_S, index=True) + _num_wgid_in_group = _c_wgm * _gx + _group_id = _wgid / _num_wgid_in_group + _first_pid_m = _group_id * _c_wgm + _remaining_m = _gy - _first_pid_m + _cmp_m = arith.cmpi(CmpIPredicate.ult, _remaining_m, _c_wgm) + _group_size_m = arith.select(_cmp_m, _remaining_m, _c_wgm) + _wgid_in_group = _wgid % _num_wgid_in_group + bx_persist = _first_pid_m + _wgid_in_group % _group_size_m + by = _wgid_in_group / _group_size_m + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + base_ptr_pong = allocator_pong.get_base() + base_ptr_ping = allocator_ping.get_base() + lds_x_pong = SmemPtr(base_ptr_pong, lds_pong_offset, x_lds_elem(), shape=(_input_elems,)).get() + lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, T.bf16, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None + lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m,)).get() + c_topk = arith.constant(topk, index=True) + c_elem_bytes = arith.constant(int(a_elem_bytes), index=True) + x_nbytes_idx = _div_pow2(tokens_in * c_topk * k_in * c_elem_bytes, int(a_elem_vec_pack)) + x_nbytes_i32 = arith.index_cast(T.i32, x_nbytes_idx) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes_i32) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + out_elem_bytes = 2 + out_nbytes_idx = tokens_in * n_in * arith.constant(out_elem_bytes, index=True) + out_nbytes_idx = tokens_in * arith.index(topk) * n_in * arith.constant(out_elem_bytes, index=True) + out_nbytes_i32 = arith.index_cast(T.i32, out_nbytes_idx) + out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes_i32) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, arith.constant(4, type=T.i32)) + num_valid_i32 = buffer_ops.buffer_load(numids_rsrc, arith.constant(0, index=True), vec_width=1, dtype=T.i32) + num_valid_i32 = rocdl.ReadfirstlaneOp(T.i32, num_valid_i32).res + num_valid_idx = arith.index_cast(ir.IndexType.get(), num_valid_i32) + sx_rsrc = 1 + sw_rsrc = 1 + kblk = _div_pow2(k_in, 32) + sx_nbytes_idx = num_valid_idx * kblk + sx_nbytes_i32 = arith.index_cast(T.i32, sx_nbytes_idx) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, sx_nbytes_i32) + kblk_w = _div_pow2(k_in, 32) + mn_w = arith.constant(experts * model_dim, index=True) + sw_nbytes_idx = mn_w * kblk_w + sw_nbytes_i32 = arith.index_cast(T.i32, sw_nbytes_idx) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, sw_nbytes_i32) + sorted_nbytes_idx = size_expert_ids_in * arith.constant(tile_m, index=True) * arith.constant(4, index=True) + sorted_nbytes_i32 = arith.index_cast(T.i32, sorted_nbytes_idx) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes_i32) + sorted_w_rsrc = _ptr_buffer_resource(arg_sorted_weights, sorted_nbytes_i32) + _c_sbm = arith.constant(_sort_block_m, index=True) + _c_tm = arith.constant(tile_m, index=True) + _c1 = arith.constant(1, index=True) + _sort_blocks_ub = _div_pow2(size_expert_ids_in * _c_tm + _c_sbm - _c1, _sort_block_m) + eid_nbytes_idx = _sort_blocks_ub * arith.constant(4, index=True) + eid_nbytes_i32 = arith.index_cast(T.i32, eid_nbytes_idx) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, eid_nbytes_i32) + _c0_p = arith.constant(0, index=True) + _c1_p = arith.constant(1, index=True) + if const_expr(_persistent): + _c_cu = arith.constant(_cu_num, index=True) + _c_tm_p = arith.constant(tile_m, index=True) + _num_valid_idx = arith.index_cast(ir.IndexType.get(), num_valid_i32) + _total_m_tiles = (_num_valid_idx + _c_tm_p - _c1_p) / _c_tm_p + _tiles_per_block = (_total_m_tiles + _c_cu - _c1_p) / _c_cu + _i1 = ir.IntegerType.get_signless(1) + _init_active = arith.constant(1, type=_i1) + _for_persist = scf.ForOp(_c0_p, _tiles_per_block, _c1_p, [_init_active]) + else: + _c_pm = arith.constant(persist_m, index=True) + _init_prev_expert = arith.constant(0, type=T.i32) + _init_prev_b_base = arith.constant(0, index=True) + _for_persist = scf.ForOp(_c0_p, _c_pm, _c1_p, [_init_prev_expert, _init_prev_b_base]) + _for_ip = ir.InsertionPoint(_for_persist.body) + _for_ip.__enter__() + _mi_p = _for_persist.induction_variable + if const_expr(_persistent): + _still_active = _for_persist.inner_iter_args[0] + bx = bx_persist * _tiles_per_block + _mi_p + else: + _prev_expert_i32 = _for_persist.inner_iter_args[0] + _prev_expert_b_base = _for_persist.inner_iter_args[1] + bx = bx_persist * arith.constant(persist_m, index=True) + _mi_p + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(T.i32, bx_m) + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + sort_blk = _div_pow2(bx_m, _sort_block_m) + expert_i32 = buffer_ops.buffer_load(expert_rsrc, sort_blk, vec_width=1, dtype=T.i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts, type=T.i32)) + if const_expr(_persistent): + _expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + else: + _delta_expert = arith.subi(expert_i32, _prev_expert_i32) + _delta_expert_idx = arith.index_cast(ir.IndexType.get(), _delta_expert) + _delta_b = _delta_expert_idx * arith.constant(_expert_b_stride, index=True) + _expert_b_base = _prev_expert_b_base + _delta_b + _first_tok = buffer_ops.buffer_load(sorted_rsrc, bx_m, vec_width=1, dtype=T.i32) + _first_tid = arith.andi(_first_tok, arith.constant(16777215, type=T.i32)) + _tokens_i32_guard = arith.index_cast(T.i32, tokens_in) + tile_has_tokens = arith.cmpi(CmpIPredicate.ult, _first_tid, _tokens_i32_guard) + if const_expr(pack_M < _scale_pack_m): + _m_off = _mod_pow2(_div_pow2(bx_m, 16), _scale_pack_m) + _m_scale_shift_i32 = arith.index_cast(T.i32, _m_off * arith.constant(8, index=True)) + else: + _m_scale_shift_i32 = None + + def _moe_gemm2_then_body(): + n_idx = arith.constant(model_dim, index=True) + expert_off_idx = expert_idx * n_idx + if const_expr(bytes_per_thread_x % 16 == 0): + x_load_bytes = 16 + elif const_expr(bytes_per_thread_x % 8 == 0): + x_load_bytes = 8 + elif const_expr(bytes_per_thread_x % 4 == 0): + x_load_bytes = 4 + else: + raise ValueError(f'bytes_per_thread_x ({bytes_per_thread_x}) must be divisible by 4 to use the dword-indexed load mapping.') + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + vec4_i32 = T.vec(4, i32) + c_k_div4 = _div_pow2(_div_pow2(k_in, int(a_elem_vec_pack)) * arith.constant(int(a_elem_bytes), index=True), 4) + tile_k_dwords = int(tile_k) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + topk_i32 = arith.constant(topk) + mask24 = arith.constant(16777215) + tokens_i32 = arith.index_cast(T.i32, tokens_in) + + def x_tile_chunk_coord_i32(i: int): + return tile_chunk_coord_i32(arith, tx_i32_base=tx_i32_base, i=i, total_threads=total_threads, layout_tile_div4=layout_x_tile_div4, chunk_i32=chunk_i32) + vec1_i32 = T.vec(1, i32) + vec2_i32 = T.vec(2, i32) + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = x_tile_chunk_coord_i32(i) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + fused_i = buffer_ops.buffer_load(sorted_rsrc, sorted_row_i, vec_width=1, dtype=T.i32) + t_i32 = arith.andi(fused_i, mask24) + s_i32 = arith.shrui(fused_i, arith.constant(24)) + t_valid = arith.cmpi(CmpIPredicate.ult, t_i32, tokens_i32) + s_valid = arith.cmpi(CmpIPredicate.ult, s_i32, topk_i32) + ts_valid = arith.andi(t_valid, s_valid) + t_safe = arith.select(ts_valid, t_i32, arith.constant(0)) + s_safe = arith.select(ts_valid, s_i32, arith.constant(0)) + row_ts_i32 = t_safe * topk_i32 + s_safe + row_ts_idx = arith.index_cast(ir.IndexType.get(), row_ts_i32) + x_row_base_div4.append(row_ts_idx * c_k_div4) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + c_n_per_wave = arith.constant(n_per_wave, index=True) + wave_mod_4 = _mod_pow2(wave_id, 4) + n_tile_base = wave_mod_4 * c_n_per_wave + by_n = by * arith.constant(tile_n, index=True) + if const_expr(pack_N < _scale_pack_n): + _global_n_base = expert_off_idx + by_n + n_tile_base + _n_off = _mod_pow2(_div_pow2(_global_n_base, 16), _scale_pack_n) + _n_scale_shift_i32 = arith.index_cast(T.i32, _n_off * arith.constant(8, index=True)) + else: + _n_scale_shift_i32 = None + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + col_g_list = [None] * num_acc_n + for i in range_constexpr(num_acc_n): + offset = i * 16 + col_g = by_n + n_tile_base + col_g = _div_pow2(col_g, 2) + offset + col_g = col_g + lane_mod_16 + col_g_list[i] = col_g + c_offset = arith.constant(offset, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[i] = _div_pow2(global_n, 16) + n_intra_list[i] = _mod_pow2(global_n, 16) + m_repeat = tile_m // 16 + k_unroll = tile_k_bytes // 128 + k_unroll_packed = k_unroll // pack_K + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + _K_per_ku_s2 = tile_k // k_unroll + _pad_k_elems_s2 = inter_dim_pad % tile_k if inter_dim_pad > 0 else 0 + _pad_ku_skip_s2 = _pad_k_elems_s2 // _K_per_ku_s2 + _tail_ku_s2 = k_unroll - _pad_ku_skip_s2 + _tail_ku_packed_s2 = (_tail_ku_s2 + pack_K - 1) // pack_K if _pad_ku_skip_s2 > 0 else None + + def load_b_packs_k64(base_k, ku: int, ni: int): + """Load one K64-byte B micro-step: single 16B load, split into 2x i64.""" + base_k_bytes = base_k * arith.constant(int(b_elem_bytes), index=True) + k0_base = _div_pow2(base_k_bytes, 64) + k0 = k0_base + arith.constant(ku, index=True) + k1 = lane_div_16 + idx_pack = _expert_b_base + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + k0 * arith.constant(_b_stride_k0, index=True) + k1 * arith.constant(_b_stride_klane, index=True) + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + vec_elems = kpack_bytes // int(b_elem_bytes) + b16 = _buffer_load_vec(buffer_ops, vector, w_rsrc, idx_pack, elem_type=_w_elem_type(), vec_elems=vec_elems, elem_bytes=b_elem_bytes, offset_in_bytes=b_elem_bytes == 1, cache_modifier=b_nt) + b_i64x2 = vector.bitcast(vec2_i64, b16) + b0 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) + b1 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) + return (b0, b1) + + def load_b_tile(base_k, ku_limit=k_unroll): + b_tile = [] + for ku in range_constexpr(ku_limit): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + _b_split_enabled = k_unroll >= 2 + _b_split_ku = k_unroll // 2 if _b_split_enabled else k_unroll + + def load_b_tile_lo(base_k): + """Load first half of B tile (ku < _b_split_ku).""" + b_tile = [] + for ku in range_constexpr(_b_split_ku): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def load_b_tile_hi(base_k): + """Load second half of B tile (ku >= _b_split_ku).""" + b_tile = [] + for ku in range_constexpr(_b_split_ku, k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def load_scale(arg_scale, rsrc, scale_info, ku, mni): + k_lane = lane_div_16 + n_lane = lane_mod_16 + idx_pack = mni * scale_info.stride_n0 + ku * scale_info.stride_k0 + k_lane * scale_info.stride_klane + n_lane + s = buffer_ops.buffer_load(rsrc, idx_pack, vec_width=1, dtype=T.i32) + return vector.from_elements(T.vec(1, T.i32), [s]) + + def _apply_k_shift(scale_vec, k_shift_bits): + if const_expr(k_shift_bits > 0): + val = vector.extract(scale_vec, static_position=[0], dynamic_position=[]) + val = arith.shrui(val, arith.constant(k_shift_bits, type=T.i32)) + return vector.from_elements(T.vec(1, T.i32), [val]) + return scale_vec + + def load_b_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): + b_scale_tile = [] + for ku in range_constexpr(ku_packed_limit): + for ni in range_constexpr(num_acc_n_packed): + scale = load_scale(arg_scale_w, sw_rsrc, layout_b_scale, ku + base_k, ni + _div_pow2(_div_pow2(expert_off_idx + by_n + n_tile_base, _scale_pack_n), 16)) + scale = _apply_k_shift(scale, k_shift_bits) + b_scale_tile.append(scale) + return b_scale_tile + + def load_a_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): + a_scale_tile = [] + for ku in range_constexpr(ku_packed_limit): + for mi in range_constexpr(m_repeat_packed): + scale = load_scale(arg_scale_x, sx_rsrc, layout_a_scale, ku + base_k, mi + _div_pow2(_div_pow2(bx_m, _scale_pack_m), 16)) + scale = _apply_k_shift(scale, k_shift_bits) + a_scale_tile.append(scale) + return a_scale_tile + + def prefetch_ab_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): + return [load_a_scale_tile(base_k, k_shift_bits, ku_packed_limit=ku_packed_limit), load_b_scale_tile(base_k, k_shift_bits, ku_packed_limit=ku_packed_limit)] + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz_bytes = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + col_base_swz = col_base_swz_bytes if elem_bytes == 1 else col_base_swz_bytes / arith.index(2) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + a0 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) + a1 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) + return (a0, a1) + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale=None, b_scale=None, *, prefetch_epilogue: bool=False, a0_prefetch=None, a1_prefetch=None, b_hi_loader=None, ku_count=k_unroll): + if const_expr(b_hi_loader is not None): + b_tile_full = [None] * k_unroll + for i in range_constexpr(_b_split_ku): + b_tile_full[i] = b_tile_in[i] + else: + b_tile_full = b_tile_in + acc_list = list(acc_in) + mfma_res_ty = vec4_f32 + epilogue_pf = None + if const_expr(prefetch_epilogue): + tw_pf = [] + lane_div_16_mul4_pf = lane_div_16 * arith.index(4) + ii_idx_list_pf = [arith.constant(ii, index=True) for ii in range(4)] + for mi in range_constexpr(m_repeat): + mi_base_pf = arith.constant(mi * 16, index=True) + for ii in range_constexpr(4): + row_off_pf = lane_div_16_mul4_pf + ii_idx_list_pf[ii] + row_in_tile_pf = mi_base_pf + row_off_pf + sorted_row_pf = bx_m + row_in_tile_pf + tw_pf.append(buffer_ops.buffer_load(sorted_w_rsrc, sorted_row_pf, vec_width=1, dtype=f32)) + epilogue_pf = tw_pf + c0_i64 = arith.constant(0, type=T.i64) + vec4_i64 = T.vec(4, T.i64) + vec8_i32 = T.vec(8, T.i32) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + _pack_K_shift = (pack_K - 1).bit_length() + _pack_K_mask = pack_K - 1 + if const_expr(b_hi_loader is not None): + _b_hi = b_hi_loader() + for _bhi_i in range_constexpr(len(_b_hi)): + b_tile_full[_b_split_ku + _bhi_i] = _b_hi[_bhi_i] + for k_idx in range_constexpr(ku_count): + ku128 = k_idx >> _pack_K_shift + ikxdl = k_idx & _pack_K_mask + b_packs0, b_packs1 = b_tile_full[k_idx] + col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[ku128 * m_repeat_packed + mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + if const_expr(_m_scale_shift_i32 is not None): + a_scale_val = arith.shrui(a_scale_val, _m_scale_shift_i32) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ku128 * num_acc_n_packed + ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + if const_expr(_n_scale_shift_i32 is not None): + b_scale_val = arith.shrui(b_scale_val, _n_scale_shift_i32) + for imxdl in range_constexpr(pack_M): + col_base0 = col_base + mi_idx = mi * pack_M + imxdl + mi_val = arith.constant(mi_idx * 16, index=True) + curr_row_a_lds = row_a_lds + mi_val + if const_expr(a0_prefetch is not None and k_idx == 0 and (mi_idx == 0)): + a0, a1 = a0_prefetch + elif const_expr(a1_prefetch is not None and k_idx == 1 and (mi_idx == 0)): + a0, a1 = a1_prefetch + else: + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base0, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, b128, acc_list[acc_idx], cbsz, blgp, ikxdl * _scale_pack_m + imxdl, a_scale_val, ikxdl * _scale_pack_n + inxdl, b_scale_val]) + return (acc_list, epilogue_pf) + _dma_bytes = 16 + _wave_size = 64 + _eff_bytes_per_buffer = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) + _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, int(a_elem_vec_pack)) * arith.constant(int(a_elem_bytes), index=True), 4) + lds_ptr_i64 = None + for i in range_constexpr(_num_dma_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(T.i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = memref.extract_aligned_pointer_as_index(lds_buffer) + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + lds_ptr_i64 = rocdl.readfirstlane(T.i64, arith.index_cast(T.i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=T.i64) + lds_ptr_type = ir.Type.parse('!llvm.ptr<3>') + lds_ptr = llvm.inttoptr(lds_ptr_type, lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) + + def prefetch_x_to_lds(base_k, lds_buffer): + dma_x_tile_to_lds(base_k, lds_buffer) + rocdl.sched_barrier(0) + + def hot_loop_scheduler(): + rocdl.sched_barrier(0) + + def _k_shift_bits(k_py): + if const_expr(pack_K >= _scale_pack_k): + return 0 + return k_py // 128 % _scale_pack_k * _scale_pack_m * 8 + + def _k_base(k_py): + return k_py // _scale_pack_k // 128 + _c_tile_m_idx = arith.constant(tile_m, index=True) + _tid_in_range = arith.cmpi(CmpIPredicate.ult, tx, _c_tile_m_idx) + _if_tid = scf.IfOp(_tid_in_range) + with ir.InsertionPoint(_if_tid.then_block): + _tid_row = bx_m + tx + _tid_val = buffer_ops.buffer_load(sorted_rsrc, _tid_row, vec_width=1, dtype=T.i32) + _tid_vec1 = vector.from_elements(T.vec(1, T.i32), [_tid_val]) + vector.store(_tid_vec1, lds_tid, [tx]) + scf.YieldOp([]) + gpu.barrier() + k0 = arith.index(0) + if const_expr(_b_split_enabled): + b_cur = load_b_tile_lo(k0) + else: + b_cur = load_b_tile(k0) + a_scale_pong, b_scale_pong = prefetch_ab_scale_tile(_k_base(0), _k_shift_bits(0)) + rocdl.sched_barrier(0) + prefetch_x_to_lds(k0, lds_x_pong) + rocdl.s_waitcnt(0) + gpu.barrier() + acc = [acc_init] * num_acc_n * m_repeat + a0_prefetch_pong = lds_load_packs_k64(row_a_lds, col_offset_base, lds_x_pong) + _a1_col_base = col_offset_base + 128 // a_elem_vec_pack + a1_prefetch_pong = lds_load_packs_k64(row_a_lds, _a1_col_base, lds_x_pong) if pack_K >= 2 else None + num_k_tiles_py = int(inter_dim) // int(tile_k) + odd_k_tiles = num_k_tiles_py % 2 == 1 + tail_tiles = 1 if odd_k_tiles else 2 + k_main2_py = (num_k_tiles_py - tail_tiles) * int(tile_k) + if const_expr(k_main2_py < 0): + k_main2_py = 0 + c2_tile_k = arith.constant(tile_k * 2, index=True) + b_pong = b_cur + k0_pong_bk = k0 + + def _make_b_hi_loader(base_k): + """Create a b_hi_loader callable for a given base_k.""" + return lambda _bk=base_k: load_b_tile_hi(_bk) + if const_expr(odd_k_tiles): + acc, epilogue_pf = compute_tile(acc, b_pong, lds_x_pong, a_scale_pong, b_scale_pong, a0_prefetch=a0_prefetch_pong, a1_prefetch=a1_prefetch_pong, prefetch_epilogue=True, b_hi_loader=_make_b_hi_loader(k0_pong_bk) if _b_split_enabled else None, ku_count=_tail_ku_s2 if _pad_ku_skip_s2 > 0 else k_unroll) + else: + k_tail1 = (k_in + tile_k - 1) // tile_k * tile_k - tile_k + k_tail1_py = (int(inter_dim) + tile_k - 1) // tile_k * tile_k - tile_k + k_tail1_bk = k_tail1 // 2 + prefetch_x_to_lds(k_tail1, lds_x_ping) + if const_expr(_pad_ku_skip_s2 > 0): + b_ping_lo = load_b_tile(k_tail1_bk, ku_limit=_tail_ku_s2) + a_scale_ping, b_scale_ping = prefetch_ab_scale_tile(_k_base(k_tail1_py), _k_shift_bits(k_tail1_py), ku_packed_limit=_tail_ku_packed_s2) + else: + b_ping_lo = load_b_tile_lo(k_tail1_bk) if _b_split_enabled else load_b_tile(k_tail1_bk) + a_scale_ping, b_scale_ping = prefetch_ab_scale_tile(_k_base(k_tail1_py), _k_shift_bits(k_tail1_py)) + acc, _ = compute_tile(acc, b_pong, lds_x_pong, a_scale_pong, b_scale_pong, a0_prefetch=a0_prefetch_pong, a1_prefetch=a1_prefetch_pong, b_hi_loader=_make_b_hi_loader(k0_pong_bk) if _b_split_enabled else None) + rocdl.s_waitcnt(0) + gpu.barrier() + a0_prefetch_ping = lds_load_packs_k64(row_a_lds, col_offset_base, lds_x_ping) + a1_prefetch_ping = lds_load_packs_k64(row_a_lds, _a1_col_base, lds_x_ping) if pack_K >= 2 and (_pad_ku_skip_s2 == 0 or _tail_ku_s2 >= 2) else None + acc, epilogue_pf = compute_tile(acc, b_ping_lo, lds_x_ping, a_scale_ping, b_scale_ping, a0_prefetch=a0_prefetch_ping, a1_prefetch=a1_prefetch_ping, prefetch_epilogue=True, b_hi_loader=None if _pad_ku_skip_s2 > 0 else _make_b_hi_loader(k_tail1_bk) if _b_split_enabled else None, ku_count=_tail_ku_s2 if _pad_ku_skip_s2 > 0 else k_unroll) + tw_pf = None + if const_expr(epilogue_pf is not None): + tw_pf = epilogue_pf + mask24_i32 = arith.constant(16777215) + topk_i32_v = topk_i32 + zero_i32 = arith.constant(0) + + def atomic_add_f16x2(val_f16x2, byte_off_i32): + rocdl.raw_ptr_buffer_atomic_fadd(val_f16x2, out_rsrc, byte_off_i32, zero_i32, zero_i32) + if const_expr(lds_out is None): + raise RuntimeError('FLIR_MOE_STAGE2_CSHUFFLE=1 but lds_out is not allocated/aliased.') + out_base_i64 = arith.index_cast(T.i64, fx.ptrtoint(arg_out)) + out_base_idx = arith.index_cast(ir.IndexType.get(), out_base_i64) + + def write_row_to_lds(*, mi: int, ii: int, row_in_tile, row, row_base_lds, col_base_local, num_acc_n: int, lds_out): + fused2 = buffer_ops.buffer_load(sorted_rsrc, row, vec_width=1, dtype=T.i32) + t2 = fused2 & mask24_i32 + s2 = fused2 >> 24 + t_ok = arith.cmpi(CmpIPredicate.ult, t2, tokens_i32) + s_ok = arith.cmpi(CmpIPredicate.ult, s2, topk_i32_v) + ts_ok = arith.andi(t_ok, s_ok) + t2_safe = arith.select(ts_ok, t2, arith.constant(0)) + s2_safe = arith.select(ts_ok, s2, arith.constant(0)) + t2_safe * topk_i32_v + s2_safe + tw_idx = mi * 4 + ii + if const_expr(tw_pf is not None): + tw = tw_pf[tw_idx] + else: + tw = buffer_ops.buffer_load(sorted_w_rsrc, row, vec_width=1, dtype=f32) + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + ni * 16 + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v = v * tw + v_out = arith.trunc_f(out_elem(), v) + lds_idx = row_base_lds + col_local + vec1_out = T.vec(1, out_elem()) + v1 = vector.from_elements(vec1_out, [v_out]) + vector.store(v1, lds_out, [lds_idx], alignment=2) + + def precompute_row(*, row_local, row): + fused2 = memref.load(lds_tid, [row_local]) + row_i32 = arith.index_cast(T.i32, row) + row_valid0 = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) + t = fused2 & mask24_i32 + s = fused2 >> 24 + t_ok = arith.cmpi(CmpIPredicate.ult, t, tokens_i32) + s_ok = arith.cmpi(CmpIPredicate.ult, s, topk_i32_v) + row_valid = arith.andi(row_valid0, arith.andi(t_ok, s_ok)) + t_idx = arith.index_cast(ir.IndexType.get(), t) + s_idx = arith.index_cast(ir.IndexType.get(), s) + ts_idx = t_idx * arith.constant(topk, index=True) + s_idx + row_byte_base = out_base_idx + ts_idx * arith.constant(model_dim * out_elem_bytes, index=True) + return ((fused2, row_byte_base), row_valid) + + def _idx_to_llvm_ptr(idx_val, addr_space=1): + """Convert an index-typed byte address to !llvm.ptr.""" + idx_v = idx_val._value if hasattr(idx_val, '_value') else idx_val + i64_v = arith.index_cast(T.i64, idx_v) + i64_raw = i64_v._value if hasattr(i64_v, '_value') else i64_v + ptr_ty = ir.Type.parse(f'!llvm.ptr<{addr_space}>') + return llvm.inttoptr(ptr_ty, i64_raw) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + fused, row_byte_base = row_ctx + col_idx = col_g0 + byte_off_col = col_idx * arith.constant(out_elem_bytes, index=True) + ptr_addr_idx = row_byte_base + byte_off_col + out_ptr_v = _idx_to_llvm_ptr(ptr_addr_idx) + frag_v = frag._value if hasattr(frag, '_value') else frag + llvm.StoreOp(frag_v, out_ptr_v, alignment=_e_vec * out_elem_bytes, nontemporal=True) + _e_vec = min(tile_n // 32, 8) + c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m, tile_n=tile_n, e_vec=_e_vec, m_repeat=m_repeat, num_acc_n=num_acc_n, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=ir.BF16Type.get(), write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair) + _all_valid = arith.andi(blk_valid, arith.andi(exp_valid, tile_has_tokens)) + if const_expr(_persistent): + _cur_active = arith.andi(_still_active, blk_valid) + _do_gemm = arith.andi(_cur_active, arith.andi(exp_valid, tile_has_tokens)) + _if_valid = scf.IfOp(_do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _moe_gemm2_then_body() + scf.YieldOp([]) + gpu.barrier() + scf.YieldOp([_cur_active]) + else: + _if_valid = scf.IfOp(_all_valid) + with ir.InsertionPoint(_if_valid.then_block): + _moe_gemm2_then_body() + scf.YieldOp([]) + gpu.barrier() + scf.YieldOp([expert_i32, _expert_b_base]) + _for_ip.__exit__(None, None, None) + _cache_tag = (module_name, tile_m, tile_n, tile_k, model_dim_pad, inter_dim_pad, persist_m, _sort_block_m, _cu_num if _persistent else 0, xcd_swizzle) + + @flyc.jit + def launch_kimi_fp4_stage2_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_sorted_weights: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): + _ = _cache_tag + allocator_pong.finalized = False + allocator_ping.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator_pong.finalize() + allocator_ping.finalize() + n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) + _tile_n_idx = arith.constant(tile_n, index=True) + _model_dim_pad_idx = arith.constant(model_dim_pad, index=True) + gx = (n_in - _model_dim_pad_idx + _tile_n_idx - arith.constant(1, index=True)) / _tile_n_idx + if const_expr(_persistent): + gy = arith.constant(_cu_num, index=True) + else: + _c_pm_l = arith.constant(persist_m, index=True) + gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l + moe_gemm2(arg_out, arg_x, arg_w, arg_scale_x, arg_scale_w, arg_sorted_token_ids, arg_expert_ids, arg_sorted_weights, arg_num_valid_ids, i32_tokens_in, i32_n_in, i32_k_in, i32_size_expert_ids_in).launch(grid=(gx, gy, 1), block=(256, 1, 1), stream=stream) + return launch_kimi_fp4_stage2_16384 + +def kimi_fp4_stage1_16384(a: torch.Tensor, w1: torch.Tensor, w1_scale: torch.Tensor, a1_scale: torch.Tensor, sorted_token_ids: torch.Tensor, sorted_expert_ids: torch.Tensor, num_valid_ids: torch.Tensor, out: Optional[torch.Tensor]=None) -> torch.Tensor: + """Launch the fixed fp4 stage1 GEMM. + + Args: + a: fp4x2 activation, shape [16384, 7168 / 2]. + w1: fp4x2 preshuffled weight, shape [385, 1024, 7168 / 2]. + w1_scale: e8m0 scale, shape [385, 1024, 7168 / 32]. + a1_scale: e8m0 activation scale from fused_dynamic_mxfp4_quant_moe_sort. + """ + if a.shape[0] != TOKEN: + raise ValueError(f'expected TOKEN={TOKEN}, got {a.shape[0]}') + dev = a.device + if out is None: + out = torch.empty((TOKEN, TOPK, INTER_DIM), dtype=dtypes.bf16, device=dev) + sort_block_m = S1.tile_m + dense_blocks = min(TOKEN * TOPK * sort_block_m, sorted_token_ids.shape[0]) // sort_block_m + grid_y = min(dense_blocks, sorted_expert_ids.shape[0]) + args = (_ptr_view_safe(out.view(-1)), _ptr_view_safe(a.view(-1)), _ptr_view_safe(w1.view(-1)), _ptr_view_safe(a1_scale.view(-1)), _ptr_view_safe(w1_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(num_valid_ids), TOKEN, INTER_DIM * 2, MODEL_DIM, grid_y, torch.cuda.current_stream()) + _run_compiled(compile_kimi_fp4_stage1_16384(), args) + return out + +def kimi_fp4_stage2_16384(inter_states: torch.Tensor, w2: torch.Tensor, w2_scale: torch.Tensor, a2_scale: torch.Tensor, sorted_token_ids: torch.Tensor, sorted_weights: torch.Tensor, sorted_expert_ids: torch.Tensor, num_valid_ids: torch.Tensor, out: Optional[torch.Tensor]=None) -> torch.Tensor: + """Launch the fixed fp4 reduce-mode stage2 GEMM and reduce TOPK.""" + if inter_states.shape[0] != TOKEN: + raise ValueError(f'expected TOKEN={TOKEN}, got {inter_states.shape[0]}') + dev = inter_states.device + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=dev) + target = torch.empty((TOKEN * TOPK * MODEL_DIM,), dtype=out.dtype, device=dev) + m_blocks = min(sorted_expert_ids.shape[0], TOKEN * TOPK) + args = (_ptr_view_safe(target), _ptr_view_safe(inter_states), _ptr_view_safe(w2), _ptr_view_safe(a2_scale.view(-1)), _ptr_view_safe(w2_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(sorted_weights), _ptr_view_safe(num_valid_ids), TOKEN, MODEL_DIM, INTER_DIM, m_blocks, torch.cuda.current_stream()) + _run_compiled(compile_kimi_fp4_stage2_16384(), args) + torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1, out=out) + return out + +def run_kimi_fp4_flydsl_moe_16384(hidden_states: torch.Tensor, w1: torch.Tensor, w2: torch.Tensor, topk_ids: torch.Tensor, topk_weight: torch.Tensor, w1_scale: torch.Tensor, w2_scale: torch.Tensor) -> torch.Tensor: + """Run the fixed M=16384 fp4 FlyDSL MoE path end-to-end.""" + sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out = kimi_moe_sorting_16384(topk_ids, topk_weight, hidden_states.dtype) + a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort(hidden_states, sorted_ids=sorted_ids, num_valid_ids=num_valid_ids, token_num=TOKEN, topk=TOPK, block_size=BLOCK_M, num_rows=None) + a2 = kimi_fp4_stage1_16384(a1, w1, w1_scale.view(dtypes.fp8_e8m0), a1_scale, sorted_ids, sorted_expert_ids, num_valid_ids) + a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort(a2.view(-1, INTER_DIM), sorted_ids=sorted_ids, num_valid_ids=num_valid_ids, token_num=TOKEN, topk=TOPK, block_size=BLOCK_M, num_rows=None) + return kimi_fp4_stage2_16384(a2_q.view(TOKEN, TOPK, -1), w2, w2_scale.view(dtypes.fp8_e8m0), a2_scale, sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out) diff --git a/learn.md b/learn.md new file mode 100644 index 000000000..e22fab04b --- /dev/null +++ b/learn.md @@ -0,0 +1,162 @@ +# FlyDSL vs up-aiter MoE GEMM — 学习笔记(M=16384 / bm=128 / KIMI-K2.5) + +> 目标:搞清楚 `bench.py` 在最大形状 M=16384 上为什么 FlyDSL 的 gemm 比 up-aiter mxfp4 慢 +> (trace 数据:gemm1 fly 784us vs mx 678us;gemm2 fly 909us vs mx 849us)。 +> 形状常量:NE=385, H=7168 (=K), INTER=512 (gate/up 各 512), TOPK=9。 + +--- + +## 1. 入口 & 实际跑的是哪个 kernel + +`~/FlyDSL/bench.py` 两边都通过 `aiter.fused_moe.fused_moe()` 进入,CSV 决定走哪条路: + +| 边 | dispatch 路径 | M=16384 实际 kernel | +|---|---|---| +| **mxfp4** | `shuffle_kind="mxfp4_moe"` 标签命中 `kimik2_5_mxfp4_tuned_fmoe.csv` 的 `BM128` 行 | `aiter::mxfp4_moe::gemm1::kernel<655360, 385, 7168, 1024, BM=128, kUseNT=false, kInlineQuant=false, kXcdSwizzle=0>` | +| **flydsl** | 无 `shuffle_kind` 标签,命中 untagged `kimik2_fp4_tuned_fmoe.csv`(CSV 里 M=16384 是 `t64x128x256`,但 padding 落到 M=8192 行)→ `_flydsl_stage1_wrapper` → `compile_mixed_moe_gemm1` | `mfma_moe1_silu_mul_afp4_wfp4_bf16_t128x128x256_pm1_async_xcd4_v32` | + +源码位置: +- mxfp4 gemm1:`/root/up-aiter/csrc/kernels/mxfp4_moe/gemm_a4w4/gemm1_a4w4.cuh:22-593` +- mxfp4 BM128 实例化:`/root/up-aiter/aiter/jit/build/module_moe_mxfp4_gemm/blob/instances/mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128.cu` +- FlyDSL gemm1:`/root/FlyDSL/kernels/mixed_moe_gemm_2stage.py:97-2415` +- FlyDSL wrapper:`/root/up-aiter/aiter/fused_moe.py:845-906` + +--- + +## 2. 形状 & tile 对照(M=16384) + +| 项目 | mxfp4 (BM=128) | FlyDSL (t128x128x256) | +|---|---|---| +| 单 block 输出 | `BM×BN = 128×256`(gate/up 拼在 N 维) | `tile_m × tile_n × 2 = 128×128 × {gate,up}` ⇒ 实质 128×256 | +| K 维 tile | `BK=256`, `K_TILES = K/BK = 28` | `tile_k=256`,K_TILES=28 | +| 单 block MFMA 数 | 28 × 32 = **896** | 28 × 64 = **1792**(gate + up 各一组) | +| Grid(一次) | `n_blocks=N_OUT/256=4`, `m_blocks≈⌈(M·TOPK+NE·127)/128⌉≈1534` → **6136** | `n_blocks=inter_dim/tile_n=4`(只覆盖 gate side,up 在同 block 算),`m_blocks` 同 ≈ **6136** | +| 总 MFMA | ~5.5 M | ~11 M ❌ | + +⚠️ 看起来 FlyDSL 总 MFMA 是 mxfp4 的 2 倍。但每个 MFMA 是 `mfma_scale_f32_16x16x128_f8f6f4`,输出 16×16 块。两边总输出 token 数一样,所以**实际 MFMA 计数应该相等**。差别在于**记账方式**: +- mxfp4 把 (gate || up) 拼成 BN=256 一维 → 每个 J 簇里 8 MFMA × 4 J × kSubBlocks=4 +- FlyDSL 把 gate/up 当两条平行流 → `compute_bmajor_mfma_phase` 里每个 (k,ni) 同时下两条 MFMA(gate + up) + +数学上相等。但在汇编层 FlyDSL 多了一次 LDS-A 读使用、多了一份 B-VMEM 读、accumulator VGPR 占用更高 → 实际 FLOPs 一样而 VGPR 压力大。 + +--- + +## 3. 关键差异(按"对性能的影响"排序) + +### 3.1 A-scale 加载策略(最大差距之一) + +**mxfp4** (`gemm1_a4w4.cuh:165-186, 432`): +```cpp +// 在 run_one 开头,K-loop 之前 ONCE:一次性把整个 M-block 的所有 K-tile 的 A-scale +// 直接 buffer_load_lds 到 LDS,s_Ascale[kSubBlocks * K_TILES * 256] +issue_a_scale_load(m_row); // 28 K-tiles × kSubBlocks 一次塞进 LDS +// K-loop 里只做 LDS read: +issue_a_scale_ds_read(kt); // 纯 LDS 操作,零 VMEM +``` + +**FlyDSL** (`mixed_moe_gemm_2stage.py:1366-1379`): +```python +# _interleaved_half 的 phase 0 每个 K-tile 都做一次 VMEM buffer_load 拿 A-scale +_raw_as = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[_mi_p] + _k_off, ...) +``` + +**影响**:mxfp4 把 A-scale "K_TILES × kSubBlocks" 次 VMEM 集中到 run_one 头部一次性发起,靠 buffer_load_lds 直通 LDS 不占 VGPR;FlyDSL 每个 K-tile 都重新从 VMEM 取一遍,并经 VGPR 再写 LDS。28 个 K-tile × m_repeat_packed × VMEM 发射 ≈ 80+ 次 VMEM ops 散在 main loop 里,会和 B-load 抢 vmcnt 槽位。 + +### 3.2 AGPR 使用(VGPR 压力) + +**mxfp4** (`gemm1_a4w4.cuh:49,352-361`): +```cpp +constexpr bool kUseAGPR = (BM == 128); +// BM=128 时初始化用 mfma_f4f4_agpr_init_zero<…>(accm, …) +// 把累加器放进 AGPR,释放 VGPR 给 B-load / A-load / scale 用 +``` +`__launch_bounds__(256, 1)` —— BM=128 时每 CU 1 个 block,让出几乎全部寄存器。 + +**FlyDSL** (`mixed_moe_gemm_2stage.py:1257-1285`): +直接调 `rocdl.mfma_scale_f32_16x16x128_f8f6f4` 写回 VGPR `acc_gate[]`/`acc_up[]`,**没有 AGPR 切换**。CSV 行 `_w2` 表示 `waves_per_eu=2` → 8 wave per CU = 2 blocks per CU,每 block 寄存器更紧。两份累加器(gate + up)各占 `m_repeat × num_acc_n × f32x4 = 8×2×4 = 64` VGPR,合计 128 VGPR 只给累加器,留给 B-load 双缓冲 / A-LDS 读寄存器的余地很少 —— spill 风险大或 occupancy 被压低。 + +### 3.3 gate/up 是 "block 内双流" vs "block 间分摊" + +**mxfp4**:N_OUT = 2·inter_dim = 1024,gate 和 up 在 N 维拼起来。`num_n_blocks = 4`,每个 block 只算 gate **或** up 中的一段 BN=256 输出 —— 单 accumulator,单 B 流。 + +**FlyDSL**:tile_n=128(只覆盖 gate side 的一段 128 列),但同 block 用 `acc_gate / acc_up` 两个独立累加器,B 加载也分 `_b_gate_all / _b_up_all` 两路。 + +后果: +1. 同 block 内 **B 的 VMEM 流量翻倍**(gate B + up B,每 K-tile 各 4 × 16 B = 128B per thread → 总 32 KB per K-tile per block,和 mxfp4 一致;但 mxfp4 是 1 个 256 宽 N,FlyDSL 是 2 个 128 宽 N 各发独立 VMEM 指令 → 调度更碎)。 +2. MFMA 里 `compute_bmajor_mfma_phase` 一对 (gate_mfma, up_mfma) 共享同一个 A 操作数 —— 看起来 A 复用率更高。但因为同时维护 2 个 acc,pipeline 里 **prev_gate_w / prev_up_w / prev_gate_bs / prev_up_bs** 的 register live-range 都翻倍 → VGPR 高峰大幅上升。 + +mxfp4 把 gate/up 拆成不同 block 实质上把 register pressure 摊开到不同 CU。 + +### 3.4 XCD swizzle & launch_bounds + +| | mxfp4 | FlyDSL | +|---|---|---| +| BM=128 launch_bounds | `__launch_bounds__(256, 1)` —— per-CU 1 block,最大寄存器 | `waves_per_eu=2`(CSV `_w2`),4 waves/block × 2 = 8 waves/CU = 2 blocks/CU | +| XCD swizzle | `kXcdSwizzle=0`(BM=128 instance 没用 swizzle) | `xcd_swizzle=4` → 走 `remap_xcd_grouped` 8-XCD remap(`mixed_moe_gemm_2stage.py:496-527`) | + +更激进的 occupancy(FlyDSL 2 blocks/CU)正常能换 latency hiding,但前提是寄存器够;当 B 双流 + A scale 在 main loop 反复取 + VGPR 累加器同时存在时,更可能 spill。 + +mxfp4 BM=128 直接放弃 XCD swizzle —— K2.5 这个形状(NE=385, 多 expert)走自然 m_block_idx 顺序 cache locality 已经够;FlyDSL 还启用 xcd_swizzle=4,是否带来好处需要进一步 attr / nvprof 验证。 + +### 3.5 调度原语 + +**mxfp4** BM=128 路径(`gemm1_a4w4.cuh:529-543`): +```cpp +if constexpr (BM != 128) { + __builtin_amdgcn_sched_barrier(0); + __builtin_amdgcn_s_setprio(1); +} +issue_mfma_cluster(slot_b); +if constexpr (BM != 128) { __builtin_amdgcn_s_setprio(0); } +__builtin_amdgcn_sched_barrier(0); +issue_b_load_j(b[slot_b], J); +__builtin_amdgcn_sched_barrier(0); +``` +**BM=128 关闭了 setprio**,让编译器自己排 MFMA / VMEM 重叠(依赖 hipcc 的 LLVM scheduler 对 1-block-per-CU 寄存器布局做整体优化)。 + +**FlyDSL**(`mixed_moe_gemm_2stage.py:1421-1462`): +所有 BM 共用 `sched_barrier(0) + s_setprio(1)/(0)` 包住 MFMA,**手动钉死 phase 顺序**。在 BM=128 这种"寄存器富裕单 block 模型" 上反而限制了 LLVM 调度器自由度。 + +### 3.6 inline-quant 缺失(影响 stage 间 overhead) + +mxfp4 在 BM=16/32 路径上有 `kInlineQuant=true`,把 hidden_states → fp4 量化 **熔进 gemm1 第一层**(`gemm1_a4w4.cuh:197-310`),完全消掉外部的 sort/quant kernel。FlyDSL 任何 BM 都依赖外部 `opus_moe_sorting_entry + fused_mx_quant_moe_sort_kernel` 两个 kernel —— 小 M 多 11–20us,大 M 因为 moe_sort 还会 launch 4 次/iter 多 47–76us。 + +虽然 BM=128 这条路径 mxfp4 自己也用 sort_quant_fused(trace 显示 0us,但是其实它把这部分塞进了 gemm1 内部),但**结果是 FlyDSL 多了一个 `fused_mx_quant_moe_sort_kernel` 跨 kernel 同步**,对 cudagraph 调度也不友好。 + +--- + +## 4. 量化的差距来源(M=16384,per iter) + +``` + fly mx Δ 原因 +gemm1 784.3 678.6 +105.8 3.1/3.2/3.3/3.5 综合 ~15% 慢 +gemm2 908.7 849.3 + 59.3 同上结构问题 +moe_sort 76.1 — + 76.1 3.6(mx 内联到 gemm 里) +quant — — — bm=128 两边都不外置 +sum overhead 1769 1528 +241 GPU 净 kernel 时间 +launch ovhd 556 295 +261 fly 6 个 kernel/iter vs mx 2 个/iter +bench wall 2325 1823 +502 端到端 +``` + +--- + +## 5. 可能的优化方向(待验证) + +按预期 ROI 排序: + +1. **A-scale hoist 到 LDS**(3.1):把 28 个 K-tile 的 A-scale 在 run_one 头部一次性 `buffer_load_lds` 进 LDS,main loop 只做 LDS read。预估省 ~30-50us / iter(对 BM=128 主循环 vmcnt 压力极大)。 +2. **AGPR 累加器**(3.2):BM=128 时把 `acc_gate / acc_up` 放进 AGPR,释放 VGPR 给 B 双流和 prefetch。FlyDSL 已有 AGPR 支持的话直接打开即可;没有就是较大工程。 +3. **去掉 `_w2` 改 `waves_per_eu=1` + 试试 launch_bounds(256, 1)**(3.2):和 mxfp4 对齐,单 block per CU 试一把。需要寄存器分析配合。 +4. **gate/up 改成 N-split**(3.3):把 grid 扩成 `n_blocks = 2 × inter_dim / tile_n`,每个 block 只算 gate 或 up。register 压力立刻降一半,编译器调度也变简单。这是结构调整,工作量大但对齐 mxfp4 设计思路。 +5. **关掉 `xcd_swizzle=4`**(3.4):对照实验,确认 swizzle 是否真带来收益;如果无影响就关掉减少地址计算。 +6. **去掉 `s_setprio` for BM=128**(3.5):mfma 簇前后只留 `sched_barrier(0)`,把调度决定让给 LLVM。代价低。 +7. **inline-quant for BM≤32**(3.6,和大 M 性能无关,但能改善小 M):在 stage1 头部熔进 hidden_states→fp4 量化,消掉一个独立 kernel。 + +--- + +## 6. 复现 / 后续 + +- bench:`python ~/FlyDSL/bench.py 2>&1 | grep "| "` +- trace 落在工作目录 `1.json.gz` ~ `18.json.gz`(奇数 = fly,偶数 = mx,按 M 顺序 9 对) +- 分析脚本:`/root/analyze.py`、`/root/timing.py`、`/root/kernels_per_iter.py` +- 进一步定位单 kernel 瓶颈:可用 `/capture-kernel-trace` + `/kernel-trace-analysis` 跑 ATT trace 把 fly 的 `mfma_moe1_..._t128x128x256_pm1_async_xcd4_v32` 单独抓出来,对比 VMEM-wait/lgkmcnt/MFMA stall 分布。 From 177a74e20bb8c5cca7ab1dc69abc0d8a9d357b33 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Sun, 7 Jun 2026 03:57:34 +0000 Subject: [PATCH 004/118] zz --- bench_flydsl_16384.py | 174 ++++++++++++++++++++++++++++++++---------- kimi_fp4_moe_16384.py | 14 +++- 2 files changed, 145 insertions(+), 43 deletions(-) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index 6be31a034..c21f54d75 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -6,12 +6,17 @@ import torch +THIS_DIR = Path(__file__).resolve().parent UP_AITER = Path("/root/up-aiter") sys.path.insert(0, str(UP_AITER)) +sys.path.insert(0, str(THIS_DIR)) import aiter # noqa: E402 -from aiter import QuantType, dtypes # noqa: E402 -from aiter.ops.flydsl.kernels.kimi_fp4_moe_16384 import ( # noqa: E402 +from aiter import ActivationType, QuantType, dtypes # noqa: E402 +from aiter.fused_moe import fused_moe # noqa: E402 +from aiter.ops.shuffle import shuffle_scale, shuffle_weight # noqa: E402 +from aiter.utility.fp4_utils import e8m0_shuffle # noqa: E402 +from kimi_fp4_moe_16384 import ( # noqa: E402 EXPERTS, INTER_DIM, MODEL_DIM, @@ -21,8 +26,6 @@ TOPK, run_kimi_fp4_flydsl_moe_16384, ) -from aiter.ops.shuffle import shuffle_weight # noqa: E402 -from aiter.utility.fp4_utils import e8m0_shuffle # noqa: E402 M = TOKEN @@ -39,34 +42,68 @@ class KimiShape: SHAPE = KimiShape() -def build_flydsl_weights(shape: KimiShape, device: torch.device, seed: int = 0): +def _mark_flydsl_shuffled(weights): + for t in weights.values(): + t.is_shuffled = True + return weights + + +def _mark_mxfp4_shuffled(weights): + for t in weights.values(): + t.is_shuffled = True + t.shuffle_kind = "mxfp4_moe" + return weights + + +def build_weights(shape: KimiShape, device: torch.device, seed: int = 0): torch.manual_seed(seed) quant = aiter.get_torch_quant(QuantType.per_1x32) + ne, h, inter = shape.experts, shape.model_dim, shape.inter_dim - w1 = torch.randn( - (shape.experts, 2 * shape.inter_dim, shape.model_dim), - dtype=dtypes.bf16, - device=device, - ) / 10 - w2 = torch.randn( - (shape.experts, shape.model_dim, shape.inter_dim), - dtype=dtypes.bf16, - device=device, - ) / 10 - + w1 = torch.randn((ne, 2 * inter, h), dtype=dtypes.bf16, device=device) / 10 + w2 = torch.randn((ne, h, inter), dtype=dtypes.bf16, device=device) / 10 w1_q, w1_scale = quant(w1, quant_dtype=dtypes.fp4x2) w2_q, w2_scale = quant(w2, quant_dtype=dtypes.fp4x2) - return { - "w1": shuffle_weight(w1_q.view(torch.float4_e2m1fn_x2)).view(w1_q.dtype), - "w2": shuffle_weight(w2_q.view(torch.float4_e2m1fn_x2)).view(w2_q.dtype), - "w1_scale": e8m0_shuffle(w1_scale).view( - shape.experts, 2 * shape.inter_dim, shape.model_dim // 32 - ), - "w2_scale": e8m0_shuffle(w2_scale).view( - shape.experts, shape.model_dim, shape.inter_dim // 32 - ), - } + flydsl = _mark_flydsl_shuffled( + { + "w1": shuffle_weight(w1_q.view(torch.float4_e2m1fn_x2)).view(w1_q.dtype), + "w2": shuffle_weight(w2_q.view(torch.float4_e2m1fn_x2)).view(w2_q.dtype), + "w1_scale": e8m0_shuffle(w1_scale).view(ne, 2 * inter, h // 32), + "w2_scale": e8m0_shuffle(w2_scale).view(ne, h, inter // 32), + } + ) + + mxfp4 = _mark_mxfp4_shuffled( + { + "w1": shuffle_weight( + w1_q, + layout=(16, 16), + is_guinterleave=True, + gate_up=True, + ).view(w1_q.dtype), + "w2": shuffle_weight( + w2_q, + layout=(16, 16), + is_guinterleave=True, + gate_up=False, + ).view(w2_q.dtype), + "w1_scale": shuffle_scale( + w1_scale.view(ne * 2 * inter, h // 32), + experts_cnt=ne, + is_guinterleave=True, + gate_up=True, + ).view(ne, 2 * inter, h // 32), + "w2_scale": shuffle_scale( + w2_scale.view(ne * h, inter // 32), + experts_cnt=ne, + is_guinterleave=True, + gate_up=False, + ).view(ne, h, inter // 32), + } + ) + + return {"flydsl": flydsl, "mxfp4": mxfp4} def build_inputs(shape: KimiShape, device: torch.device, seed: int = 1): @@ -84,13 +121,26 @@ def build_inputs(shape: KimiShape, device: torch.device, seed: int = 1): shared_ids = torch.full((M, 1), shared_id, device=device, dtype=routed_ids.dtype) shared_weight = torch.ones((M, 1), device=device, dtype=routed_weight.dtype) - topk_ids = torch.cat([shared_ids, routed_ids], dim=1).to(torch.int32) topk_weight = torch.cat([shared_weight, routed_weight], dim=1).to(torch.float32) return hidden, topk_ids, topk_weight -def run_flydsl_16384(hidden, topk_ids, topk_weight, weights): +def run_aiter_moe(hidden, topk_ids, topk_weight, weights): + return fused_moe( + hidden, + weights["w1"], + weights["w2"], + topk_weight, + topk_ids, + activation=ActivationType.Silu, + quant_type=QuantType.per_1x32, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_kimi(hidden, topk_ids, topk_weight, weights): return run_kimi_fp4_flydsl_moe_16384( hidden, weights["w1"], @@ -98,7 +148,7 @@ def run_flydsl_16384(hidden, topk_ids, topk_weight, weights): topk_ids=topk_ids, topk_weight=topk_weight, w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"].view(dtypes.fp8_e8m0), + w2_scale=weights["w2_scale"], ) @@ -131,6 +181,18 @@ def bench_cudagraph(fn, warmup: int, graph_iters: int, measure: int): return totals[len(totals) // 2] / graph_iters +def cosine(a, b): + return torch.nn.functional.cosine_similarity( + a.float().reshape(-1), + b.float().reshape(-1), + dim=0, + ).item() + + +def max_abs(a, b): + return (a.float() - b.float()).abs().max().item() + + def main(): parser = argparse.ArgumentParser() parser.add_argument("--warmup", type=int, default=5) @@ -140,23 +202,57 @@ def main(): device = torch.device("cuda") print(f"GPU: {torch.cuda.get_device_name(0)}") - print(f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}") + print( + f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} " + f"INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}" + ) print(f"stage1={STAGE1_KERNEL}") print(f"stage2={STAGE2_KERNEL}") - weights = build_flydsl_weights(SHAPE, device) + weights = build_weights(SHAPE, device) hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) - def fn(): - return run_flydsl_16384(hidden, topk_ids, topk_weight, weights) + runners = { + "aiter_moe": lambda: run_aiter_moe( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + "aiter_mxfp4_moe": lambda: run_aiter_moe( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_kimi_fp4": lambda: run_local_kimi( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + } - out = fn() - torch.cuda.synchronize() - if not torch.isfinite(out).all().item(): - raise RuntimeError("FlyDSL output has non-finite values") + outputs = {} + for name, fn in runners.items(): + out = fn() + torch.cuda.synchronize() + if not torch.isfinite(out).all().item(): + raise RuntimeError(f"{name} output has non-finite values") + outputs[name] = out + + ref = outputs["aiter_moe"] + print( + "checks: " + f"mxfp4_vs_aiter_cos={cosine(outputs['aiter_mxfp4_moe'], ref):.6f} " + f"mxfp4_vs_aiter_max_abs={max_abs(outputs['aiter_mxfp4_moe'], ref):.6f} " + f"local_vs_aiter_cos={cosine(outputs['local_kimi_fp4'], ref):.6f} " + f"local_vs_aiter_max_abs={max_abs(outputs['local_kimi_fp4'], ref):.6f}" + ) - us = bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) - print(f"flydsl_us={us:.1f}") + for name, fn in runners.items(): + us = bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) + print(f"{name}_us={us:.1f}") if __name__ == "__main__": diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py index 15ccad65a..9a7f5d127 100644 --- a/kimi_fp4_moe_16384.py +++ b/kimi_fp4_moe_16384.py @@ -21,9 +21,15 @@ from flydsl.expr import arith, buffer_ops, const_expr, gpu, rocdl, vector from flydsl._mlir.dialects import llvm, memref, scf from flydsl._mlir.dialects.arith import CmpIPredicate -from .layout_utils import crd2idx, idx2crd, get as layout_get -from .mfma_epilogues import c_shuffle_epilog -from .mfma_preshuffle_pipeline import _buffer_load_vec, make_preshuffle_b_layout, make_preshuffle_scale_layout, swizzle_xor16, tile_chunk_coord_i32 +from aiter.ops.flydsl.kernels.layout_utils import crd2idx, idx2crd, get as layout_get +from aiter.ops.flydsl.kernels.mfma_epilogues import c_shuffle_epilog +from aiter.ops.flydsl.kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + make_preshuffle_b_layout, + make_preshuffle_scale_layout, + swizzle_xor16, + tile_chunk_coord_i32, +) from dataclasses import dataclass from typing import Optional import torch @@ -1138,7 +1144,7 @@ def _ptr_buffer_resource(ptr, num_records_bytes): m_in = tokens_in * topk_idx c_n_total = arith.constant(experts * model_dim, index=True) kpack_bytes = 16 - from .layout_utils import _div_pow2, _mod_pow2 + from aiter.ops.flydsl.kernels.layout_utils import _div_pow2, _mod_pow2 def check_c_n_valid_gate(base_n): return arith.cmpi(CmpIPredicate.ult, base_n, model_dim - model_dim_pad) From 8e7321337c856cb2712a881f203612b6a18fe96f Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Sun, 7 Jun 2026 08:40:23 +0000 Subject: [PATCH 005/118] zz --- bench_flydsl_16384.py | 139 +++++++++++++++++++++++++++++++++--------- kimi_fp4_moe_16384.py | 6 +- 2 files changed, 114 insertions(+), 31 deletions(-) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index c21f54d75..084f89668 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -26,6 +26,13 @@ TOPK, run_kimi_fp4_flydsl_moe_16384, ) +from kimi_fp4_moe_16384_opt import ( # noqa: E402 + MXFP4_STAGE1_KERNEL, + MXFP4_STAGE2_KERNEL, + run_kimi_fp4_flydsl_atomic_stage2_16384, + run_kimi_fp4_flydsl_mxfp4_sort_16384, + run_kimi_fp4_mxfp4_moe_16384_opt, +) M = TOKEN @@ -152,6 +159,83 @@ def run_local_kimi(hidden, topk_ids, topk_weight, weights): ) +def run_local_kimi_mxfp4_sort(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_flydsl_mxfp4_sort_16384( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_kimi_atomic_stage2(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_flydsl_atomic_stage2_16384( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_opt(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_opt( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def make_runners(hidden, topk_ids, topk_weight, weights): + return { + "aiter_moe": lambda: run_aiter_moe( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + "aiter_mxfp4_moe": lambda: run_aiter_moe( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_kimi_fp4": lambda: run_local_kimi( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + "local_kimi_fp4_mxfp4_sort": lambda: run_local_kimi_mxfp4_sort( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + "local_kimi_fp4_atomic_stage2": lambda: run_local_kimi_atomic_stage2( + hidden, + topk_ids, + topk_weight, + weights["flydsl"], + ), + "local_mxfp4_opt": lambda: run_local_mxfp4_opt( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + } + + def bench_cudagraph(fn, warmup: int, graph_iters: int, measure: int): side = torch.cuda.Stream() side.wait_stream(torch.cuda.current_stream()) @@ -208,30 +292,13 @@ def main(): ) print(f"stage1={STAGE1_KERNEL}") print(f"stage2={STAGE2_KERNEL}") + print(f"mxfp4_stage1={MXFP4_STAGE1_KERNEL}") + print(f"mxfp4_stage2={MXFP4_STAGE2_KERNEL}") weights = build_weights(SHAPE, device) hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) - runners = { - "aiter_moe": lambda: run_aiter_moe( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - "aiter_mxfp4_moe": lambda: run_aiter_moe( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_kimi_fp4": lambda: run_local_kimi( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - } + runners = make_runners(hidden, topk_ids, topk_weight, weights) outputs = {} for name, fn in runners.items(): @@ -241,14 +308,30 @@ def main(): raise RuntimeError(f"{name} output has non-finite values") outputs[name] = out - ref = outputs["aiter_moe"] - print( - "checks: " - f"mxfp4_vs_aiter_cos={cosine(outputs['aiter_mxfp4_moe'], ref):.6f} " - f"mxfp4_vs_aiter_max_abs={max_abs(outputs['aiter_mxfp4_moe'], ref):.6f} " - f"local_vs_aiter_cos={cosine(outputs['local_kimi_fp4'], ref):.6f} " - f"local_vs_aiter_max_abs={max_abs(outputs['local_kimi_fp4'], ref):.6f}" - ) + check_pairs = [ + ("aiter_mxfp4_vs_aiter", outputs["aiter_mxfp4_moe"], outputs["aiter_moe"]), + ("local_vs_aiter", outputs["local_kimi_fp4"], outputs["aiter_moe"]), + ( + "local_mxfp4_sort_vs_aiter", + outputs["local_kimi_fp4_mxfp4_sort"], + outputs["aiter_moe"], + ), + ( + "local_atomic_stage2_vs_aiter", + outputs["local_kimi_fp4_atomic_stage2"], + outputs["aiter_moe"], + ), + ( + "local_mxfp4_opt_vs_aiter_mxfp4", + outputs["local_mxfp4_opt"], + outputs["aiter_mxfp4_moe"], + ), + ] + for name, lhs, rhs in check_pairs: + print( + f"{name}_cos={cosine(lhs, rhs):.6f} " + f"{name}_max_abs={max_abs(lhs, rhs):.6f}" + ) for name, fn in runners.items(): us = bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py index 9a7f5d127..b486f710b 100644 --- a/kimi_fp4_moe_16384.py +++ b/kimi_fp4_moe_16384.py @@ -48,7 +48,7 @@ @dataclass(frozen=True) class Stage1Config: - tile_m: int = 64 + tile_m__64: int = 64 tile_n: int = 128 tile_k: int = 256 waves_per_eu: int = 4 @@ -127,7 +127,7 @@ def compile_kimi_fp4_stage1_16384(): inter_dim = INTER_DIM experts = EXPERTS topk = TOPK - tile_m = S1.tile_m + tile_m = S1.tile_m__64 tile_n = S1.tile_n tile_k = S1.tile_k model_dim_pad = 0 @@ -1766,7 +1766,7 @@ def kimi_fp4_stage1_16384(a: torch.Tensor, w1: torch.Tensor, w1_scale: torch.Ten dev = a.device if out is None: out = torch.empty((TOKEN, TOPK, INTER_DIM), dtype=dtypes.bf16, device=dev) - sort_block_m = S1.tile_m + sort_block_m = S1.tile_m__64 dense_blocks = min(TOKEN * TOPK * sort_block_m, sorted_token_ids.shape[0]) // sort_block_m grid_y = min(dense_blocks, sorted_expert_ids.shape[0]) args = (_ptr_view_safe(out.view(-1)), _ptr_view_safe(a.view(-1)), _ptr_view_safe(w1.view(-1)), _ptr_view_safe(a1_scale.view(-1)), _ptr_view_safe(w1_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(num_valid_ids), TOKEN, INTER_DIM * 2, MODEL_DIM, grid_y, torch.cuda.current_stream()) From 4c583c8145f6f6044e3a2f8beb43c7ee68269496 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 8 Jun 2026 08:05:26 +0000 Subject: [PATCH 006/118] zz --- kimi_fp4_moe_16384.py | 125 +++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py index b486f710b..1bf6edbe6 100644 --- a/kimi_fp4_moe_16384.py +++ b/kimi_fp4_moe_16384.py @@ -48,7 +48,7 @@ @dataclass(frozen=True) class Stage1Config: - tile_m__64: int = 64 + tile_m: int = 64 tile_n: int = 128 tile_k: int = 256 waves_per_eu: int = 4 @@ -127,9 +127,9 @@ def compile_kimi_fp4_stage1_16384(): inter_dim = INTER_DIM experts = EXPERTS topk = TOPK - tile_m = S1.tile_m__64 - tile_n = S1.tile_n - tile_k = S1.tile_k + tile_m = S1.tile_m # 64 + tile_n = S1.tile_n # 128 + tile_k = S1.tile_k # 256 model_dim_pad = 0 inter_dim_pad = 0 persist_m = 1 @@ -137,12 +137,12 @@ def compile_kimi_fp4_stage1_16384(): waves_per_eu = S1.waves_per_eu k_batch = 1 b_nt = S1.b_nt - xcd_swizzle = S1.xcd_swizzle + xcd_swizzle = S1.xcd_swizzle # TODO(zty), 为啥是4? gpu_arch = get_hip_arch() allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') sort_block_m = max(32, tile_m) - num_waves = min(4, tile_n // 32) + num_waves = min(4, tile_n // 32) # 4 total_threads = num_waves * 64 pack_M = 1 if tile_m < 32 else 2 n_per_wave = tile_n // num_waves @@ -152,7 +152,7 @@ def compile_kimi_fp4_stage1_16384(): elem_bytes = 1 a_elem_bytes = 1 b_elem_bytes = 1 - tile_k_bytes = int(tile_k) * int(a_elem_bytes) + tile_k_bytes = int(tile_k) * int(a_elem_bytes) # 256 a_elem_vec_pack = 2 cbsz = 4 blgp = 4 @@ -175,23 +175,24 @@ def out_elem(): bytes_per_thread_x = bytes_x_per_tile // total_threads _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') pad_k = 0 if _use_lds128 else 8 - lds_stride = tile_k + pad_k + lds_stride = tile_k + pad_k # 256 + 0 = 256 _use_cshuffle_epilog = True _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' module_name = f'mfma_moe1_silu_mul_afp4_wfp4_bf16_t{tile_m}x{tile_n}x{tile_k}_pm{persist_m}_async{_xcd_tag}_v32' _cshuffle_elem_bytes = 2 - _single_x_bytes = int(tile_m) * int(lds_stride) * int(a_elem_bytes) - lds_out_bytes = _cshuffle_elem_bytes * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 - lds_tid_bytes = int(tile_m) * 4 + _single_x_bytes = int(tile_m) * int(lds_stride) * int(a_elem_bytes) # 16k = 64 * 256 * 1 + lds_out_bytes = _cshuffle_elem_bytes * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 # 16k = 2 * 64 * 128 + lds_tid_bytes = int(tile_m) * 4 # 256 = 64 * 4 _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 _GLOBAL_ALIGN = 1024 - _std_pong = max(_single_x_bytes, lds_out_bytes) + lds_tid_bytes - _std_ping = _single_x_bytes - _std_pong_aligned = allocator_pong._align(_std_pong, 128) - _std_total = allocator_pong._align(_std_pong_aligned, _GLOBAL_ALIGN) + allocator_pong._align(_std_ping, 128) + _std_pong = max(_single_x_bytes, lds_out_bytes) + lds_tid_bytes # 16k + 256 + _std_ping = _single_x_bytes # 16k = 64 * 256 # A tile 放进lds的大小. + _std_pong_aligned = allocator_pong._align(_std_pong, 128) # 256 + _std_total = allocator_pong._align(_std_pong_aligned, _GLOBAL_ALIGN) + allocator_pong._align(_std_ping, 128) # _lds_limit = {'gfx950': 163840, 'gfx942': 65536}.get(gpu_arch, 0) - _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves >= 2) - if _split_lds_out: + _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves >= 2) # #False = 160k > 0 and 16k > 0 and () + print(f"{_split_lds_out=}, {_std_total=}, {_lds_limit=}, {num_waves=}, {_std_pong=}, {_std_ping=}, {_std_pong_aligned=}, {_std_total=}") + if _split_lds_out: # False _half_out_bytes = _cshuffle_elem_bytes * int(tile_m) * (int(tile_n) // 2) _pong_buffer_bytes = max(_single_x_bytes, _half_out_bytes) _ping_buffer_bytes = max(_single_x_bytes, _half_out_bytes) @@ -297,33 +298,33 @@ def moe_gemm1(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_sca vec16_x = T.vec(vec16_elems, x_elem) vec2_i64 = T.vec(2, i64) - def _ptr_buffer_resource(ptr, num_records_bytes): + def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放外面呢.. 创建 buffer resources. addr = fx.ptrtoint(ptr) addr_i64 = arith.index_cast(T.i64, addr) return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) - acc_init = arith.constant_vector(0.0, vec4_f32) - c_n_total = arith.constant(experts * (2 * inter_dim), index=True) - b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) + acc_init = arith.constant_vector(0.0, vec4_f32) # 这个可以优化到mfma第一次直接初始化掉. + c_n_total = arith.constant(experts * (2 * inter_dim), index=True) # 385 * 2 * 512. + b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) # B的layout. 这里我猜测 和我之前想得应该是一样的?TODO(zty): layout_b = b_layout.layout_b - sorted_m = size_expert_ids_in * arith.constant(sort_block_m, index=True) + sorted_m = size_expert_ids_in * arith.constant(sort_block_m, index=True) # 64. layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=sorted_m, c_k=arith.constant(model_dim, index=True)) layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=arith.constant(model_dim, index=True)) - _eff_lds_stride = lds_stride + _eff_lds_stride = lds_stride # 256. _eff_tile_k_bytes = tile_k_bytes - if const_expr(use_async_copy and a_elem_vec_pack > 1): - _eff_lds_stride = lds_stride // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) + if const_expr(use_async_copy and a_elem_vec_pack > 1): # 2 + _eff_lds_stride = lds_stride // a_elem_vec_pack # 128 = 256 // 2 + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack # 128 = 256 // 2 + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) # 64, 128 + stride_lds = fx.make_stride(_eff_lds_stride, 1) # 128, 1 + layout_lds = fx.make_layout(shape_lds, stride_lds) # 64, 128 tx = gpu.thread_id('x') by = gpu.block_id('x') bx_persist = gpu.block_id('y') if const_expr(xcd_swizzle > 0): _NUM_XCDS_S1 = 8 - _c1_sw = arith.constant(1, index=True) - _c_tn_sw = arith.constant(tile_n, index=True) - _c_idp_sw = arith.constant(2 * inter_dim_pad, index=True) + _c1_sw = arith.constant(1, index=True) # 1 + _c_tn_sw = arith.constant(tile_n, index=True) # 128 + _c_idp_sw = arith.constant(2 * inter_dim_pad, index=True) # 0 _c2_sw = arith.constant(2, index=True) _gx = (n_in - _c_idp_sw + _c2_sw * _c_tn_sw - _c1_sw) / _c_tn_sw / _c2_sw _c_pm_sw = arith.constant(persist_m, index=True) @@ -344,22 +345,22 @@ def _ptr_buffer_resource(ptr, num_records_bytes): _wgid_in_group = _wgid % _num_wgid_in_group bx_persist = _first_pid_m + _wgid_in_group % _group_size_m by = _wgid_in_group / _group_size_m - by_n = by * arith.constant(tile_n, index=True) + by_n = by * arith.constant(tile_n, index=True) # by * 128 k_base_idx = arith.index(0) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((num_waves, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) # 8 = 128 / 16. + layout_tx_wave_lane = fx.make_layout((num_waves, 64), stride=(64, 1)) # (4,64):(64,1) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) # (4,16):(16,1) base_ptr_pong = allocator_pong.get_base() base_ptr_ping = allocator_ping.get_base() lds_x_pong = SmemPtr(base_ptr_pong, lds_pong_offset, x_lds_elem(), shape=(_input_elems,)).get() lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() _lds_out_elem_type = T.bf16 - if const_expr(_split_lds_out and _use_cshuffle_epilog): + if const_expr(_split_lds_out and _use_cshuffle_epilog): # False _half_out_elems = int(tile_m) * (int(tile_n) // 2) lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() lds_out_B = SmemPtr(base_ptr_ping, lds_ping_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() else: - lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None + lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None # True (64 * 128) lds_out_B = None lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m,)).get() c_a_pack = arith.constant(int(a_elem_vec_pack), index=True) @@ -484,7 +485,7 @@ def x_tile_chunk_coord_i32(i: int): _tail_ku = k_unroll - _pad_ku_skip _tail_ku_packed = (_tail_ku + pack_K - 1) // pack_K if _pad_ku_skip > 0 else None - def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): + def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): # B g2r? c64 = arith.constant(64, index=True) base_k_bytes = base_k * arith.constant(int(b_elem_bytes), index=True) k0 = base_k_bytes // c64 + arith.constant(ku, index=True) @@ -498,7 +499,7 @@ def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): b1 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) return (b0, b1) - def load_b_tile(base_k, ku_limit=k_unroll): + def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. """Load separated gate and up B tiles.""" gate_b_tile = [] up_b_tile = [] @@ -589,7 +590,7 @@ def prefetch_ab_scale_tile(base_k, ku_packed_limit=k_unroll_packed): _eff_bytes_per_buffer = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) - def dma_x_tile_to_lds(base_k, lds_buffer): + def dma_x_tile_to_lds(base_k, lds_buffer): # A g2s c4_idx = arith.index(4) base_k_div4 = base_k / c_a_pack * arith.constant(int(elem_bytes), index=True) / arith.index(4) lds_ptr_i64 = None @@ -607,22 +608,22 @@ def dma_x_tile_to_lds(base_k, lds_buffer): lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=T.i64) lds_ptr_type = ir.Type.parse('!llvm.ptr<3>') lds_ptr = llvm.inttoptr(lds_ptr_type, lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) + rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) # 关键行. g2s loads了多少. def prefetch_x_to_lds(base_k, lds_buffer): dma_x_tile_to_lds(base_k, lds_buffer) - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): # A s2r col_base_swz_bytes = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) col_base_swz = col_base_swz_bytes if elem_bytes == 1 else col_base_swz_bytes / arith.index(2) idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) # float4 load. a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) a0 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) a1 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) return (a0, a1) - def prefetch_full_a_from_lds(lds_buffer, ku_limit=k_unroll): + def prefetch_full_a_from_lds(lds_buffer, ku_limit=k_unroll): # 啥时候用? for之前? """Load entire A tile from LDS into registers before compute.""" a_regs = [] for k_idx in range_constexpr(ku_limit): @@ -679,7 +680,7 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) return (gate_list, up_list, epilogue_pf) - def load_a_subtile(k_idx, mi_idx, lds_buffer): + def load_a_subtile(k_idx, mi_idx, lds_buffer): """Load a single A sub-tile from LDS (one ds_read).""" col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack mi_val = arith.constant(mi_idx * 16, index=True) @@ -717,7 +718,7 @@ def _pack(x0, x1, x2, x3): gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, gate_bs_val]) up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) - def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): + def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): # 核心调度. """One flatmm-style interleaved half-iteration (deep pipeline). Generalized for arbitrary m_repeat (block_m=32, 64, ...). @@ -777,12 +778,12 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti _ak, _ami = _pp_a_reads[_p][_a_j] _a_all[_ak, _ami] = load_a_subtile(_ak, _ami, lds_read) rocdl.sched_barrier(0) - rocdl.s_setprio(1) + rocdl.s_setprio(1) # 4个warp,还用设置这个么... 好像也没有interleave是吧. for _m_j in range_constexpr(len(_pp_mfma[_p])): _k_idx, _ni_idx, _ikxdl, _inxdl, _ku128 = _pp_mfma[_p][_m_j] _ni_packed_idx = _ni_idx // pack_N _up_b_single = (prev_up_w[_k_idx][0][_ni_idx], prev_up_w[_k_idx][1][_ni_idx]) - compute_bmajor_mfma_phase(prev_a_tile, (prev_gate_w[_k_idx][0][_ni_idx], prev_gate_w[_k_idx][1][_ni_idx]), _up_b_single, _prev_asvs, _prev_gsv_list[_ni_packed_idx], _prev_usv_list[_ni_packed_idx], acc_gate, acc_up, _k_idx, _ni_idx, _ikxdl, _inxdl) + compute_bmajor_mfma_phase(prev_a_tile, (prev_gate_w[_k_idx][0][_ni_idx], prev_gate_w[_k_idx][1][_ni_idx]), _up_b_single, _prev_asvs, _prev_gsv_list[_ni_packed_idx], _prev_usv_list[_ni_packed_idx], acc_gate, acc_up, _k_idx, _ni_idx, _ikxdl, _inxdl) # MFMA. 输出到 gate_list 和 up_list 里面来. rocdl.s_setprio(0) rocdl.sched_barrier(0) cur_a_tile = [] @@ -815,7 +816,7 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti return (cur_a_tile, cur_gate_w, cur_up_w, cur_a_scale, cur_gate_bs, cur_up_bs, acc_gate, acc_up) rocdl.sched_barrier(0) k0 = k_base_idx - prefetch_x_to_lds(k0, lds_x_pong) + prefetch_x_to_lds(k0, lds_x_pong) # TODO(zty) K0是什么意思? pong? 应该是说的 for开始前吧. rocdl.sched_barrier(0) _k0_scale = k_base_idx // arith.constant(pack_K * 128, index=True) a_scale_pong, gate_bs_pong, up_bs_pong = prefetch_ab_scale_tile(_k0_scale) @@ -832,7 +833,7 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti acc_up = [acc_init] * num_acc_n * m_repeat _k1 = k_base_idx + arith.constant(tile_k, index=True) rocdl.sched_barrier(0) - prefetch_x_to_lds(_k1, lds_x_ping) + prefetch_x_to_lds(_k1, lds_x_ping) # TODO(zty) K1是什么意思? ping? 应该是说的 for开始前吧. _k0_b = k_base_idx // arith.constant(2, index=True) gate_w0, up_w0 = load_b_tile(_k0_b) rocdl.s_waitcnt(0) @@ -998,21 +999,21 @@ def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): @flyc.jit def launch_kimi_fp4_stage1_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_max_token_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_inter_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): - _ = _cache_tag + _ = _cache_tag # 让函数和cache_tag绑定,避免重复编译 allocator_pong.finalized = False allocator_ping.finalized = False ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): + with ir.InsertionPoint(ctx.gpu_module_body): # 前面算好了怎么切,这个真正挂到kernel里面. allocator_pong.finalize() allocator_ping.finalize() - inter_dim_pad_total = arith.constant(2 * inter_dim_pad, index=True) - tile_k_stage2 = tile_k // 2 - tile2_pad = (tile_k_stage2 - (inter_dim - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 - inter_in = arith.index_cast(ir.IndexType.get(), i32_inter_in.ir_value()) - tile_n_index = arith.constant(tile_n, index=True) - gx = (inter_in - inter_dim_pad_total + tile2_pad + 2 * tile_n_index - 1) / tile_n_index / arith.constant(2, index=True) - _c_pm_l = arith.constant(persist_m, index=True) - gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l + inter_dim_pad_total = arith.constant(2 * inter_dim_pad, index=True) # 0 如果存在,*2, gemm1 + tile_k_stage2 = tile_k // 2 # 128 = 256 // 2 + tile2_pad = (tile_k_stage2 - (inter_dim - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 # 0 = div_up(pad, tile_k_stage2) + inter_in = arith.index_cast(ir.IndexType.get(), i32_inter_in.ir_value()) # 1024 + tile_n_index = arith.constant(tile_n, index=True) # 128 + gx = (inter_in - inter_dim_pad_total + tile2_pad + 2 * tile_n_index - 1) / tile_n_index / arith.constant(2, index=True) # 4 = div_up(1024, 2*128) # 成对处理tile_n + _c_pm_l = arith.constant(persist_m, index=True) # 这里是1. + gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l # div_up(expert_ids_in, 1) moe_gemm1(arg_out, arg_x, arg_w, arg_scale_x, arg_scale_w, arg_sorted_token_ids, arg_expert_ids, arg_max_token_ids, i32_tokens_in, i32_inter_in, i32_k_in, i32_size_expert_ids_in).launch(grid=(gx, gy, k_batch), block=(total_threads, 1, 1), stream=stream) return launch_kimi_fp4_stage1_16384 @@ -1766,7 +1767,7 @@ def kimi_fp4_stage1_16384(a: torch.Tensor, w1: torch.Tensor, w1_scale: torch.Ten dev = a.device if out is None: out = torch.empty((TOKEN, TOPK, INTER_DIM), dtype=dtypes.bf16, device=dev) - sort_block_m = S1.tile_m__64 + sort_block_m = S1.tile_m dense_blocks = min(TOKEN * TOPK * sort_block_m, sorted_token_ids.shape[0]) // sort_block_m grid_y = min(dense_blocks, sorted_expert_ids.shape[0]) args = (_ptr_view_safe(out.view(-1)), _ptr_view_safe(a.view(-1)), _ptr_view_safe(w1.view(-1)), _ptr_view_safe(a1_scale.view(-1)), _ptr_view_safe(w1_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(num_valid_ids), TOKEN, INTER_DIM * 2, MODEL_DIM, grid_y, torch.cuda.current_stream()) From b51091860e934c54526e6c2a078da7d2156952aa Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 8 Jun 2026 12:46:43 +0000 Subject: [PATCH 007/118] zz --- bench_flydsl_16384.py | 5 + kimi_fp4_moe_16384.py | 412 ++++++++++++++++++++++-------------------- 2 files changed, 217 insertions(+), 200 deletions(-) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index 084f89668..4296bcc5b 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -1,3 +1,5 @@ +import os +os.system("rm -rf ~/.flydsl") import argparse import sys from dataclasses import dataclass @@ -8,6 +10,9 @@ THIS_DIR = Path(__file__).resolve().parent UP_AITER = Path("/root/up-aiter") +BUILD_PYTHON_PACKAGES = THIS_DIR / "build-fly" / "python_packages" +if BUILD_PYTHON_PACKAGES.exists(): + sys.path.insert(0, str(BUILD_PYTHON_PACKAGES)) sys.path.insert(0, str(UP_AITER)) sys.path.insert(0, str(THIS_DIR)) diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py index 1bf6edbe6..e33c0620d 100644 --- a/kimi_fp4_moe_16384.py +++ b/kimi_fp4_moe_16384.py @@ -123,17 +123,17 @@ def kimi_moe_sorting_16384(topk_ids: torch.Tensor, topk_weight: torch.Tensor, mo @functools.lru_cache(maxsize=1) def compile_kimi_fp4_stage1_16384(): """Compile the fixed Kimi fp4 stage1 kernel selected for M=16384.""" - model_dim = MODEL_DIM - inter_dim = INTER_DIM - experts = EXPERTS - topk = TOPK - tile_m = S1.tile_m # 64 - tile_n = S1.tile_n # 128 - tile_k = S1.tile_k # 256 + model_dim__7168 = MODEL_DIM + inter_dim__512 = INTER_DIM + experts__385 = EXPERTS + topk__9 = TOPK + tile_m__64 = S1.tile_m # 64 + tile_n__128 = S1.tile_n # 128 + tile_k__256 = S1.tile_k # 256 model_dim_pad = 0 inter_dim_pad = 0 persist_m = 1 - use_async_copy = True + use_async_copy__True = True waves_per_eu = S1.waves_per_eu k_batch = 1 b_nt = S1.b_nt @@ -141,18 +141,18 @@ def compile_kimi_fp4_stage1_16384(): gpu_arch = get_hip_arch() allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') - sort_block_m = max(32, tile_m) - num_waves = min(4, tile_n // 32) # 4 - total_threads = num_waves * 64 - pack_M = 1 if tile_m < 32 else 2 - n_per_wave = tile_n // num_waves - pack_N = min(2, n_per_wave // 16) - pack_K = 2 + sort_block_m = max(32, tile_m__64) + num_waves__4 = min(4, tile_n__128 // 32) # 4 + total_threads = num_waves__4 * 64 + pack_M__2 = 1 if tile_m__64 < 32 else 2 + n_per_wave__32 = tile_n__128 // num_waves__4 + pack_N__2 = min(2, n_per_wave__32 // 16) + pack_K__2 = 2 scale_mn_pack = 2 elem_bytes = 1 a_elem_bytes = 1 b_elem_bytes = 1 - tile_k_bytes = int(tile_k) * int(a_elem_bytes) # 256 + tile_k_bytes = int(tile_k__256) * int(a_elem_bytes) # 256 a_elem_vec_pack = 2 cbsz = 4 blgp = 4 @@ -167,22 +167,22 @@ def _w_elem_type(): def out_elem(): return T.bf16 - _k_per_batch = model_dim - _k_dim = model_dim - bytes_x_per_tile = int(tile_m) * int(tile_k) * int(a_elem_bytes) + _k_per_batch = model_dim__7168 + _k_dim__7168 = model_dim__7168 + bytes_x_per_tile = int(tile_m__64) * int(tile_k__256) * int(a_elem_bytes) if bytes_x_per_tile % total_threads != 0: raise ValueError(f'tile_m*tile_k*elem_bytes must be divisible by {total_threads}') bytes_per_thread_x = bytes_x_per_tile // total_threads _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') pad_k = 0 if _use_lds128 else 8 - lds_stride = tile_k + pad_k # 256 + 0 = 256 + lds_stride = tile_k__256 + pad_k # 256 + 0 = 256 _use_cshuffle_epilog = True _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' - module_name = f'mfma_moe1_silu_mul_afp4_wfp4_bf16_t{tile_m}x{tile_n}x{tile_k}_pm{persist_m}_async{_xcd_tag}_v32' + module_name = f'mfma_moe1_silu_mul_afp4_wfp4_bf16_t{tile_m__64}x{tile_n__128}x{tile_k__256}_pm{persist_m}_async{_xcd_tag}_v32' _cshuffle_elem_bytes = 2 - _single_x_bytes = int(tile_m) * int(lds_stride) * int(a_elem_bytes) # 16k = 64 * 256 * 1 - lds_out_bytes = _cshuffle_elem_bytes * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 # 16k = 2 * 64 * 128 - lds_tid_bytes = int(tile_m) * 4 # 256 = 64 * 4 + _single_x_bytes = int(tile_m__64) * int(lds_stride) * int(a_elem_bytes) # 16k = 64 * 256 * 1 + lds_out_bytes = _cshuffle_elem_bytes * int(tile_m__64) * int(tile_n__128) if _use_cshuffle_epilog else 0 # 16k = 2 * 64 * 128 + lds_tid_bytes = int(tile_m__64) * 4 # 256 = 64 * 4 _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 _GLOBAL_ALIGN = 1024 _std_pong = max(_single_x_bytes, lds_out_bytes) + lds_tid_bytes # 16k + 256 @@ -190,10 +190,10 @@ def out_elem(): _std_pong_aligned = allocator_pong._align(_std_pong, 128) # 256 _std_total = allocator_pong._align(_std_pong_aligned, _GLOBAL_ALIGN) + allocator_pong._align(_std_ping, 128) # _lds_limit = {'gfx950': 163840, 'gfx942': 65536}.get(gpu_arch, 0) - _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves >= 2) # #False = 160k > 0 and 16k > 0 and () - print(f"{_split_lds_out=}, {_std_total=}, {_lds_limit=}, {num_waves=}, {_std_pong=}, {_std_ping=}, {_std_pong_aligned=}, {_std_total=}") + _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves__4 >= 2) # #False = 160k > 0 and 16k > 0 and () + print(f"{_split_lds_out=}, {_std_total=}, {_lds_limit=}, {num_waves__4=}, {_std_pong=}, {_std_ping=}, {_std_pong_aligned=}, {_std_total=}") if _split_lds_out: # False - _half_out_bytes = _cshuffle_elem_bytes * int(tile_m) * (int(tile_n) // 2) + _half_out_bytes = _cshuffle_elem_bytes * int(tile_m__64) * (int(tile_n__128) // 2) _pong_buffer_bytes = max(_single_x_bytes, _half_out_bytes) _ping_buffer_bytes = max(_single_x_bytes, _half_out_bytes) else: @@ -220,13 +220,13 @@ def x_lds_elem(): out_elem_bytes = 2 w_elem_bytes = 1 w_elem_pack = 2 - w_nbytes = experts * (2 * inter_dim) * model_dim * w_elem_bytes // w_elem_pack - _e_vec_s1 = min(tile_n // 32, 8) - _pipe_m_repeat = tile_m // 16 + w_nbytes = experts__385 * (2 * inter_dim__512) * model_dim__7168 * w_elem_bytes // w_elem_pack + _e_vec_s1 = min(tile_n__128 // 32, 8) + _pipe_m_repeat = tile_m__64 // 16 _pipe_k_unroll = tile_k_bytes // 128 - _pipe_k_unroll_packed = _pipe_k_unroll // pack_K - _pipe_m_repeat_packed = _pipe_m_repeat // pack_M - _pipe_num_acc_n = n_per_wave // 16 + _pipe_k_unroll_packed = _pipe_k_unroll // pack_K__2 + _pipe_m_repeat_packed = _pipe_m_repeat // pack_M__2 + _pipe_num_acc_n = n_per_wave__32 // 16 _pipe_a_groups = [] for _mi in range(_pipe_m_repeat): _grp = [] @@ -242,22 +242,22 @@ def x_lds_elem(): for ni in range(_pipe_num_acc_n): _pipe_b_loads.append(('gate', ku, ni)) _pipe_b_loads.append(('up', ku, ni)) - _pipe_num_acc_n_packed = _pipe_num_acc_n // pack_N + _pipe_num_acc_n_packed = _pipe_num_acc_n // pack_N__2 _pipe_all_mfma = [] for _ku128 in range(_pipe_k_unroll_packed): for _ni_packed in range(_pipe_num_acc_n_packed): - for _ikxdl in range(pack_K): - for _inxdl in range(pack_N): - _k_idx = _ku128 * pack_K + _ikxdl - _ni_idx = _ni_packed * pack_N + _inxdl + for _ikxdl in range(pack_K__2): + for _inxdl in range(pack_N__2): + _k_idx = _ku128 * pack_K__2 + _ikxdl + _ni_idx = _ni_packed * pack_N__2 + _inxdl _pipe_all_mfma.append((_k_idx, _ni_idx, _ikxdl, _inxdl, _ku128)) _pipe_mfma_per_phase = max(1, len(_pipe_all_mfma) // 4) - _pipe_n_phases = len(_pipe_all_mfma) // _pipe_mfma_per_phase - _a_groups_per_phase = (len(_pipe_a_groups) + _pipe_n_phases - 1) // _pipe_n_phases + _pipe_n_phases__4 = len(_pipe_all_mfma) // _pipe_mfma_per_phase + _a_groups_per_phase = (len(_pipe_a_groups) + _pipe_n_phases__4 - 1) // _pipe_n_phases__4 _pipe_phases = [] _mfma_i = 0 _a_i = 0 - for _p in range(_pipe_n_phases): + for _p in range(_pipe_n_phases__4): _a_reads = [] for _ in range(_a_groups_per_phase): if _a_i < len(_pipe_a_groups): @@ -267,9 +267,9 @@ def x_lds_elem(): _mfma_i += _pipe_mfma_per_phase _pipe_phases.append(_phase) _bi = 0 - for _p in range(1, _pipe_n_phases): + for _p in range(1, _pipe_n_phases__4): _rem_b = len(_pipe_b_loads) - _bi - _rem_p = _pipe_n_phases - _p + _rem_p = _pipe_n_phases__4 - _p _n_b = (_rem_b + _rem_p - 1) // _rem_p if _rem_p > 0 else 0 for _ in range(_n_b): if _bi < len(_pipe_b_loads): @@ -281,7 +281,7 @@ def x_lds_elem(): _pp_has_scale = [p['has_scale'] for p in _pipe_phases] fp4_ratio = 2 gui_ratio = 2 - _vmcnt_before_barrier = tile_m // 32 // fp4_ratio + tile_n // 32 * gui_ratio + _vmcnt_before_barrier__9 = tile_m__64 // 32 // fp4_ratio + tile_n__128 // 32 * gui_ratio # 8 = 64/32/2 + 128/32 * 2 @flyc.kernel(name=module_name) def moe_gemm1(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32): @@ -303,18 +303,18 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 addr_i64 = arith.index_cast(T.i64, addr) return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) acc_init = arith.constant_vector(0.0, vec4_f32) # 这个可以优化到mfma第一次直接初始化掉. - c_n_total = arith.constant(experts * (2 * inter_dim), index=True) # 385 * 2 * 512. - b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) # B的layout. 这里我猜测 和我之前想得应该是一样的?TODO(zty): + c_n_total = arith.constant(experts__385 * (2 * inter_dim__512), index=True) # 385 * 2 * 512. + b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K__2, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) # B的layout. 这里我猜测 和我之前想得应该是一样的?TODO(zty): layout_b = b_layout.layout_b sorted_m = size_expert_ids_in * arith.constant(sort_block_m, index=True) # 64. - layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=sorted_m, c_k=arith.constant(model_dim, index=True)) - layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=arith.constant(model_dim, index=True)) + layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=sorted_m, c_k=arith.constant(model_dim__7168, index=True)) + layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=arith.constant(model_dim__7168, index=True)) _eff_lds_stride = lds_stride # 256. _eff_tile_k_bytes = tile_k_bytes - if const_expr(use_async_copy and a_elem_vec_pack > 1): # 2 + if const_expr(use_async_copy__True and a_elem_vec_pack > 1): # 2 _eff_lds_stride = lds_stride // a_elem_vec_pack # 128 = 256 // 2 _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack # 128 = 256 // 2 - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) # 64, 128 + shape_lds = fx.make_shape(tile_m__64, _eff_lds_stride) # 64, 128 stride_lds = fx.make_stride(_eff_lds_stride, 1) # 128, 1 layout_lds = fx.make_layout(shape_lds, stride_lds) # 64, 128 tx = gpu.thread_id('x') @@ -323,7 +323,7 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 if const_expr(xcd_swizzle > 0): _NUM_XCDS_S1 = 8 _c1_sw = arith.constant(1, index=True) # 1 - _c_tn_sw = arith.constant(tile_n, index=True) # 128 + _c_tn_sw = arith.constant(tile_n__128, index=True) # 128 _c_idp_sw = arith.constant(2 * inter_dim_pad, index=True) # 0 _c2_sw = arith.constant(2, index=True) _gx = (n_in - _c_idp_sw + _c2_sw * _c_tn_sw - _c1_sw) / _c_tn_sw / _c2_sw @@ -345,10 +345,10 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 _wgid_in_group = _wgid % _num_wgid_in_group bx_persist = _first_pid_m + _wgid_in_group % _group_size_m by = _wgid_in_group / _group_size_m - by_n = by * arith.constant(tile_n, index=True) # by * 128 - k_base_idx = arith.index(0) + by_n = by * arith.constant(tile_n__128, index=True) # by * 128 + k_base_idx__0 = arith.index(0) k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) # 8 = 128 / 16. - layout_tx_wave_lane = fx.make_layout((num_waves, 64), stride=(64, 1)) # (4,64):(64,1) + layout_tx_wave_lane = fx.make_layout((num_waves__4, 64), stride=(64, 1)) # (4,64):(64,1) layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) # (4,16):(16,1) base_ptr_pong = allocator_pong.get_base() base_ptr_ping = allocator_ping.get_base() @@ -356,13 +356,13 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() _lds_out_elem_type = T.bf16 if const_expr(_split_lds_out and _use_cshuffle_epilog): # False - _half_out_elems = int(tile_m) * (int(tile_n) // 2) + _half_out_elems = int(tile_m__64) * (int(tile_n__128) // 2) lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() lds_out_B = SmemPtr(base_ptr_ping, lds_ping_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() else: - lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None # True (64 * 128) + lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m__64 * tile_n__128,)).get() if _use_cshuffle_epilog else None # True (64 * 128) lds_out_B = None - lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m,)).get() + lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m__64,)).get() c_a_pack = arith.constant(int(a_elem_vec_pack), index=True) c_elem_bytes = arith.constant(int(a_elem_bytes), index=True) x_nbytes_idx = tokens_in * k_in * c_elem_bytes / c_a_pack @@ -380,7 +380,7 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 sx_rsrc = _ptr_buffer_resource(arg_scale_x, sx_nbytes_i32) c32 = arith.constant(32, index=True) kblk_w = k_in / c32 - mn_w = arith.constant(experts * (2 * inter_dim), index=True) + mn_w = arith.constant(experts__385 * (2 * inter_dim__512), index=True) sw_nbytes_idx = mn_w * kblk_w sw_nbytes_i32 = arith.index_cast(T.i32, sw_nbytes_idx) sw_rsrc = _ptr_buffer_resource(arg_scale_w, sw_nbytes_i32) @@ -404,19 +404,19 @@ def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放 blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=T.i32) expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts, type=T.i32)) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts__385, type=T.i32)) def _moe_gemm1_body(): - expert_off_idx = expert_idx * arith.constant(2 * inter_dim, index=True) + expert_off_idx = expert_idx * arith.constant(2 * inter_dim__512, index=True) x_load_bytes = 16 num_x_loads = bytes_per_thread_x // x_load_bytes chunk_i32 = x_load_bytes // 4 c_k_div4 = k_in / c_a_pack * arith.constant(int(a_elem_bytes), index=True) / arith.index(4) - tile_k_dwords = int(tile_k) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + tile_k_dwords = int(tile_k__256) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) + layout_x_tile_div4 = fx.make_layout((tile_m__64, tile_k_dwords), stride=(tile_k_dwords, 1)) c_chunk_i32 = arith.constant(chunk_i32, index=True) tx_i32_base = tx * c_chunk_i32 - topk_i32 = arith.constant(topk) + topk_i32 = arith.constant(topk__9) mask24 = arith.constant(16777215) tokens_i32 = arith.index_cast(T.i32, tokens_in) @@ -448,19 +448,19 @@ def x_tile_chunk_coord_i32(i: int): lane_mod_16 = layout_get(coord_l16, 1) row_a_lds = lane_mod_16 col_offset_base = lane_div_16 * arith.constant(16, index=True) - num_acc_n = n_per_wave // 16 - c_n_per_wave = arith.constant(n_per_wave, index=True) - wave_n_id = wave_id % arith.constant(num_waves, index=True) + num_acc_n__2 = n_per_wave__32 // 16 + c_n_per_wave = arith.constant(n_per_wave__32, index=True) + wave_n_id = wave_id % arith.constant(num_waves__4, index=True) n_tile_base = wave_n_id * c_n_per_wave gate_n_intra_list = [] gate_n_blk_list = [] up_n_intra_list = [] up_n_blk_list = [] col_g_list = [] - c_n0_static = experts * (2 * inter_dim) // 16 + c_n0_static = experts__385 * (2 * inter_dim__512) // 16 layout_n_blk_intra = fx.make_layout((c_n0_static, 16), stride=(16, 1)) - inter_idx = arith.constant(inter_dim, index=True) - for i in range_constexpr(num_acc_n): + inter_idx = arith.constant(inter_dim__512, index=True) + for i in range_constexpr(num_acc_n__2): offset = i * 16 c_offset = arith.constant(offset, index=True) col_g = by_n + n_tile_base + c_offset + lane_mod_16 @@ -474,16 +474,16 @@ def x_tile_chunk_coord_i32(i: int): up_coord = idx2crd(up_row_w, layout_n_blk_intra) up_n_blk_list.append(layout_get(up_coord, 0)) up_n_intra_list.append(layout_get(up_coord, 1)) - m_repeat = tile_m // 16 + m_repeat__4 = tile_m__64 // 16 k_unroll = tile_k_bytes // 128 - k_unroll_packed = k_unroll // pack_K - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - _K_per_ku = tile_k // k_unroll - _pad_k_elems = model_dim_pad % tile_k if model_dim_pad > 0 else 0 + k_unroll_packed = k_unroll // pack_K__2 + m_repeat_packed__2 = m_repeat__4 // pack_M__2 + num_acc_n_packed__1 = num_acc_n__2 // pack_N__2 + _K_per_ku = tile_k__256 // k_unroll + _pad_k_elems = model_dim_pad % tile_k__256 if model_dim_pad > 0 else 0 _pad_ku_skip = _pad_k_elems // _K_per_ku _tail_ku = k_unroll - _pad_ku_skip - _tail_ku_packed = (_tail_ku + pack_K - 1) // pack_K if _pad_ku_skip > 0 else None + _tail_ku_packed = (_tail_ku + pack_K__2 - 1) // pack_K__2 if _pad_ku_skip > 0 else None def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): # B g2r? c64 = arith.constant(64, index=True) @@ -506,7 +506,7 @@ def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. for ku in range_constexpr(ku_limit): g_packs0, g_packs1 = ([], []) u_packs0, u_packs1 = ([], []) - for ni in range_constexpr(num_acc_n): + for ni in range_constexpr(num_acc_n__2): gb0, gb1 = load_b_packs_k64(base_k, ku, gate_n_blk_list[ni], gate_n_intra_list[ni]) g_packs0.append(gb0) g_packs1.append(gb1) @@ -519,14 +519,14 @@ def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. _scale_lane_elem = lane_div_16 * layout_b_scale.stride_klane + lane_mod_16 _gate_scale_bases = [] _up_scale_bases = [] - for _ni in range_constexpr(num_acc_n_packed): - _col_base = by_n + n_tile_base + arith.constant(_ni * 16 * pack_N, index=True) + for _ni in range_constexpr(num_acc_n_packed__1): + _col_base = by_n + n_tile_base + arith.constant(_ni * 16 * pack_N__2, index=True) _gate_mni = (expert_off_idx + _col_base) // arith.constant(32, index=True) _gate_scale_bases.append(_gate_mni * layout_b_scale.stride_n0 + _scale_lane_elem) _up_mni = (expert_off_idx + inter_idx + _col_base) // arith.constant(32, index=True) _up_scale_bases.append(_up_mni * layout_b_scale.stride_n0 + _scale_lane_elem) _a_scale_bases = [] - for _mi in range_constexpr(m_repeat_packed): + for _mi in range_constexpr(m_repeat_packed__2): _a_mni = _mi + bx_m // scale_mn_pack // 16 _a_scale_bases.append(_a_mni * layout_a_scale.stride_n0 + _scale_lane_elem) _c16_idx = arith.constant(16, index=True) @@ -540,12 +540,12 @@ def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. _n_half_i32 = arith.constant(0, type=T.i32) _bscale_shift = arith.constant(0, type=T.i32) _bscale_shift_hi = arith.constant(0, type=T.i32) - if const_expr(pack_M < scale_mn_pack): + if const_expr(pack_M__2 < scale_mn_pack): _m_half_idx = bx_m // _c16_idx % _c2_idx _m_half_i32 = arith.index_cast(T.i32, _m_half_idx) _scale_shift = _m_half_i32 * arith.constant(8, type=T.i32) _scale_shift_hi = _scale_shift + arith.constant(16, type=T.i32) - if const_expr(pack_N < scale_mn_pack): + if const_expr(pack_N__2 < scale_mn_pack): _n_half_idx = n_tile_base // _c16_idx % _c2_idx _n_half_i32 = arith.index_cast(T.i32, _n_half_idx) _bscale_shift = _n_half_i32 * arith.constant(8, type=T.i32) @@ -553,7 +553,7 @@ def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. def _rearrange_a_scale(raw_i32): """Rearrange scale bytes for pack_M=1: extract m_half's k0,k1 bytes.""" - if const_expr(pack_M >= scale_mn_pack): + if const_expr(pack_M__2 >= scale_mn_pack): return raw_i32 b_k0 = arith.andi(arith.shrui(raw_i32, _scale_shift), _scale_mask_lo) b_k1 = arith.andi(arith.shrui(raw_i32, _scale_shift_hi), _scale_mask_lo) @@ -561,7 +561,7 @@ def _rearrange_a_scale(raw_i32): def _rearrange_b_scale(raw_i32): """Rearrange scale bytes for pack_N=1: extract n_half's k0,k1 bytes.""" - if const_expr(pack_N >= scale_mn_pack): + if const_expr(pack_N__2 >= scale_mn_pack): return raw_i32 b_k0 = arith.andi(arith.shrui(raw_i32, _bscale_shift), _scale_mask_lo) b_k1 = arith.andi(arith.shrui(raw_i32, _bscale_shift_hi), _scale_mask_lo) @@ -573,11 +573,11 @@ def prefetch_ab_scale_tile(base_k, ku_packed_limit=k_unroll_packed): up_b_scale = [] for ku in range_constexpr(ku_packed_limit): k_off = (ku + base_k) * layout_b_scale.stride_k0 - for mi in range_constexpr(m_repeat_packed): + for mi in range_constexpr(m_repeat_packed__2): s = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[mi] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) s = _rearrange_a_scale(s) a_scale_tile.append(vector.from_elements(T.vec(1, T.i32), [s])) - for ni in range_constexpr(num_acc_n_packed): + for ni in range_constexpr(num_acc_n_packed__1): gs = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[ni] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) gs = _rearrange_b_scale(gs) gate_b_scale.append(vector.from_elements(T.vec(1, T.i32), [gs])) @@ -587,7 +587,7 @@ def prefetch_ab_scale_tile(base_k, ku_packed_limit=k_unroll_packed): return [a_scale_tile, gate_b_scale, up_b_scale] _dma_bytes = 16 _wave_size = 64 - _eff_bytes_per_buffer = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) + _eff_bytes_per_buffer = int(tile_m__64) * int(_eff_lds_stride) * int(a_elem_bytes) _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) def dma_x_tile_to_lds(base_k, lds_buffer): # A g2s @@ -628,7 +628,7 @@ def prefetch_full_a_from_lds(lds_buffer, ku_limit=k_unroll): # 啥时候用? f a_regs = [] for k_idx in range_constexpr(ku_limit): col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack - for mi_idx in range_constexpr(m_repeat): + for mi_idx in range_constexpr(m_repeat__4): mi_val = arith.constant(mi_idx * 16, index=True) curr_row = row_a_lds + mi_val a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) @@ -647,37 +647,37 @@ def compute_tile(acc_gate_in, acc_up_in, gate_b_tile_in, up_b_tile_in, a_tile_re def pack_i64x4_to_i32x8(x0, x1, x2, x3): v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) return vector.bitcast(vec8_i32, v4) - _eff_packed = (ku_count + pack_K - 1) // pack_K + _eff_packed = (ku_count + pack_K__2 - 1) // pack_K__2 for ku128 in range_constexpr(_eff_packed): - for ni in range_constexpr(num_acc_n_packed): - gate_bs_i32 = gate_b_scale[ku128 * num_acc_n_packed + ni] + for ni in range_constexpr(num_acc_n_packed__1): + gate_bs_i32 = gate_b_scale[ku128 * num_acc_n_packed__1 + ni] gate_bs_val = vector.extract(gate_bs_i32, static_position=[0], dynamic_position=[]) - up_bs_i32 = up_b_scale[ku128 * num_acc_n_packed + ni] + up_bs_i32 = up_b_scale[ku128 * num_acc_n_packed__1 + ni] up_bs_val = vector.extract(up_bs_i32, static_position=[0], dynamic_position=[]) - for ikxdl in range_constexpr(pack_K): - k_idx = ku128 * pack_K + ikxdl + for ikxdl in range_constexpr(pack_K__2): + k_idx = ku128 * pack_K__2 + ikxdl if const_expr(k_idx < ku_count): gate_bp0, gate_bp1 = gate_b_tile_in[k_idx] up_bp0, up_bp1 = up_b_tile_in[k_idx] - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl + for inxdl in range_constexpr(pack_N__2): + ni_idx = ni * pack_N__2 + inxdl gb0 = gate_bp0[ni_idx] gb1 = gate_bp1[ni_idx] gb128 = pack_i64x4_to_i32x8(gb0, gb1, c0_i64, c0_i64) ub0 = up_bp0[ni_idx] ub1 = up_bp1[ni_idx] ub128 = pack_i64x4_to_i32x8(ub0, ub1, c0_i64, c0_i64) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[ku128 * m_repeat_packed + mi] + for mi in range_constexpr(m_repeat_packed__2): + a_scale_i32 = a_scale[ku128 * m_repeat_packed__2 + mi] a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - _a_reg_idx = k_idx * m_repeat + mi_idx + for imxdl in range_constexpr(pack_M__2): + mi_idx = mi * pack_M__2 + imxdl + _a_reg_idx = k_idx * m_repeat__4 + mi_idx a0, a1 = a_tile_regs[_a_reg_idx] a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, gate_bs_val]) - up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) + acc_idx = mi_idx * num_acc_n__2 + ni_idx + gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, gate_bs_val]) + up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, up_bs_val]) return (gate_list, up_list, epilogue_pf) def load_a_subtile(k_idx, mi_idx, lds_buffer): @@ -688,7 +688,19 @@ def load_a_subtile(k_idx, mi_idx, lds_buffer): a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) return (a0, a1) - def compute_bmajor_mfma_phase(all_a_tiles, gate_b_single, up_b_single, a_scale_vals, gate_bs_val, up_bs_val, gate_list, up_list, k_idx, ni_idx, ikxdl, inxdl): + def compute_bmajor_mfma_phase(all_a_tiles, # 8 个 (ArithValue(type=i64, op=vector.extract), ArithValue(type=i64, op=vector.extract)) + # # A regs: indexed by [k_idx * m_repeat + mi_idx] + gate_b_single, # 2 个 + up_b_single, # 2 + a_scale_vals, # 2 + gate_bs_val, # + up_bs_val, + gate_list, + up_list, + k_idx, + ni_idx, + ikxdl, + inxdl): """B-major MFMA: fix one B (ni), cycle all A tiles (mi). Packs B once and reuses across all mi iterations. @@ -708,17 +720,17 @@ def _pack(x0, x1, x2, x3): mfma_res_ty = vec4_f32 gb128 = _pack(gate_b_single[0], gate_b_single[1], c0_i64, c0_i64) ub128 = _pack(up_b_single[0], up_b_single[1], c0_i64, c0_i64) - for mi_p in range_constexpr(m_repeat_packed): + for mi_p in range_constexpr(m_repeat_packed__2): a_scale_val = a_scale_vals[mi_p] - for imxdl in range_constexpr(pack_M): - mi_idx = mi_p * pack_M + imxdl - a_reg = all_a_tiles[k_idx * m_repeat + mi_idx] + for imxdl in range_constexpr(pack_M__2): + mi_idx = mi_p * pack_M__2 + imxdl + a_reg = all_a_tiles[k_idx * m_repeat__4 + mi_idx] a128 = _pack(a_reg[0], a_reg[1], c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, gate_bs_val]) - up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M + imxdl, a_scale_val, ikxdl * pack_N + inxdl, up_bs_val]) + acc_idx = mi_idx * num_acc_n__2 + ni_idx + gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, gate_bs_val]) + up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, up_bs_val]) - def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): # 核心调度. + def _interleaved_half(lds_read, lds_write, next_k_dma_py__todo, next_k_load___256_0, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): # 核心调度. """One flatmm-style interleaved half-iteration (deep pipeline). Generalized for arbitrary m_repeat (block_m=32, 64, ...). @@ -730,41 +742,43 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti Phase 1..N: B VMEM(distributed) + 2 ds_read(A, if avail) -> 4 MFMA(prev) Phase N+1..: remaining B VMEM -> 4 MFMA(prev) """ - _abs_k = k_base_idx + arith.constant(next_k_load, index=True) + _abs_k = k_base_idx__0 + arith.constant(next_k_load___256_0, index=True) _bk = _abs_k // arith.constant(2, index=True) - _sk = _abs_k // arith.constant(pack_K * 128, index=True) + _sk = _abs_k // arith.constant(pack_K__2 * 128, index=True) _k_off = _sk * layout_b_scale.stride_k0 + print(f"{_abs_k=} {_bk=}, f{_sk=}, f{_k_off=}") rocdl.sched_barrier(0) - rocdl.s_waitcnt(_vmcnt_before_barrier) + rocdl.s_waitcnt(_vmcnt_before_barrier__9) _barrier() rocdl.sched_barrier(0) - _abs_k_dma = k_base_idx + arith.constant(next_k_dma_py, index=True) - if const_expr(use_async_copy and next_k_dma_py < int(_k_dim)): - prefetch_x_to_lds(_abs_k_dma, lds_write) + _abs_k_dma__gloc = k_base_idx__0 + arith.constant(next_k_dma_py__todo, index=True) + if const_expr(use_async_copy__True and next_k_dma_py__todo < int(_k_dim__7168)): + prefetch_x_to_lds(_abs_k_dma__gloc, lds_write) # g2s_dma _prev_asvs = [] - for _mi_p in range_constexpr(m_repeat_packed): + for _mi_p in range_constexpr(m_repeat_packed__2): _prev_asvs.append(vector.extract(prev_a_scale[_mi_p], static_position=[0], dynamic_position=[])) - _prev_gsv_list = [] - for _gs_ni in range_constexpr(num_acc_n_packed): + _prev_gsv_list = [] # gate_scale_value + for _gs_ni in range_constexpr(num_acc_n_packed__1): _prev_gsv_list.append(vector.extract(prev_gate_bs[_gs_ni], static_position=[0], dynamic_position=[])) _prev_usv_list = [] - for _us_ni in range_constexpr(num_acc_n_packed): + for _us_ni in range_constexpr(num_acc_n_packed__1): _prev_usv_list.append(vector.extract(prev_up_bs[_us_ni], static_position=[0], dynamic_position=[])) _a_all = {} _b_gate_all = {} _b_up_all = {} - for _p in range_constexpr(_pipe_n_phases): + for _p in range_constexpr(_pipe_n_phases__4): + print(f'_pipe_n_phases={_pipe_n_phases__4}, _p={_p}') if const_expr(_pp_has_scale[_p]): _new_as_list = [] - for _mi_p in range_constexpr(m_repeat_packed): + for _mi_p in range_constexpr(m_repeat_packed__2): _raw_as = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[_mi_p] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) _new_as_list.append(_rearrange_a_scale(_raw_as)) _new_gs_list = [] - for _gs_ni in range_constexpr(num_acc_n_packed): + for _gs_ni in range_constexpr(num_acc_n_packed__1): _gs_raw = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[_gs_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) _new_gs_list.append(_rearrange_b_scale(_gs_raw)) _new_us_list = [] - for _us_ni in range_constexpr(num_acc_n_packed): + for _us_ni in range_constexpr(num_acc_n_packed__1): _us_raw = buffer_ops.buffer_load(sw_rsrc, _up_scale_bases[_us_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) _new_us_list.append(_rearrange_b_scale(_us_raw)) for _b_j in range_constexpr(len(_pp_b_loads[_p])): @@ -781,21 +795,21 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti rocdl.s_setprio(1) # 4个warp,还用设置这个么... 好像也没有interleave是吧. for _m_j in range_constexpr(len(_pp_mfma[_p])): _k_idx, _ni_idx, _ikxdl, _inxdl, _ku128 = _pp_mfma[_p][_m_j] - _ni_packed_idx = _ni_idx // pack_N + _ni_packed_idx = _ni_idx // pack_N__2 _up_b_single = (prev_up_w[_k_idx][0][_ni_idx], prev_up_w[_k_idx][1][_ni_idx]) compute_bmajor_mfma_phase(prev_a_tile, (prev_gate_w[_k_idx][0][_ni_idx], prev_gate_w[_k_idx][1][_ni_idx]), _up_b_single, _prev_asvs, _prev_gsv_list[_ni_packed_idx], _prev_usv_list[_ni_packed_idx], acc_gate, acc_up, _k_idx, _ni_idx, _ikxdl, _inxdl) # MFMA. 输出到 gate_list 和 up_list 里面来. rocdl.s_setprio(0) rocdl.sched_barrier(0) cur_a_tile = [] for _k in range_constexpr(k_unroll): - for _mi in range_constexpr(m_repeat): + for _mi in range_constexpr(m_repeat__4): cur_a_tile.append(_a_all[_k, _mi]) cur_gate_w = [] cur_up_w = [] for ku in range_constexpr(k_unroll): g_packs0, g_packs1 = ([], []) u_packs0, u_packs1 = ([], []) - for ni in range_constexpr(num_acc_n): + for ni in range_constexpr(num_acc_n__2): g = _b_gate_all[ku, ni] g_packs0.append(g[0]) g_packs1.append(g[1]) @@ -805,22 +819,22 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti cur_gate_w.append((g_packs0, g_packs1)) cur_up_w.append((u_packs0, u_packs1)) cur_a_scale = [] - for _mi_p in range_constexpr(m_repeat_packed): + for _mi_p in range_constexpr(m_repeat_packed__2): cur_a_scale.append(vector.from_elements(T.vec(1, T.i32), [_new_as_list[_mi_p]])) cur_gate_bs = [] - for _gs_ni in range_constexpr(num_acc_n_packed): + for _gs_ni in range_constexpr(num_acc_n_packed__1): cur_gate_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_gs_list[_gs_ni]])) cur_up_bs = [] - for _us_ni in range_constexpr(num_acc_n_packed): + for _us_ni in range_constexpr(num_acc_n_packed__1): cur_up_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_us_list[_us_ni]])) return (cur_a_tile, cur_gate_w, cur_up_w, cur_a_scale, cur_gate_bs, cur_up_bs, acc_gate, acc_up) rocdl.sched_barrier(0) - k0 = k_base_idx + k0 = k_base_idx__0 prefetch_x_to_lds(k0, lds_x_pong) # TODO(zty) K0是什么意思? pong? 应该是说的 for开始前吧. rocdl.sched_barrier(0) - _k0_scale = k_base_idx // arith.constant(pack_K * 128, index=True) + _k0_scale = k_base_idx__0 // arith.constant(pack_K__2 * 128, index=True) a_scale_pong, gate_bs_pong, up_bs_pong = prefetch_ab_scale_tile(_k0_scale) - _c_tile_m_idx = arith.constant(tile_m, index=True) + _c_tile_m_idx = arith.constant(tile_m__64, index=True) _tid_in_range = arith.cmpi(CmpIPredicate.ult, tx, _c_tile_m_idx) _if_tid = scf.IfOp(_tid_in_range) with ir.InsertionPoint(_if_tid.then_block): @@ -829,75 +843,73 @@ def _interleaved_half(lds_read, lds_write, next_k_dma_py, next_k_load, prev_a_ti _tid_vec1 = vector.from_elements(T.vec(1, T.i32), [_tid_val]) vector.store(_tid_vec1, lds_tid, [tx]) scf.YieldOp([]) - acc_gate = [acc_init] * num_acc_n * m_repeat - acc_up = [acc_init] * num_acc_n * m_repeat - _k1 = k_base_idx + arith.constant(tile_k, index=True) + acc_gate = [acc_init] * num_acc_n__2 * m_repeat__4 + acc_up = [acc_init] * num_acc_n__2 * m_repeat__4 # 这个算是声明了寄存器 C 是吧.. + _k1 = k_base_idx__0 + arith.constant(tile_k__256, index=True) rocdl.sched_barrier(0) prefetch_x_to_lds(_k1, lds_x_ping) # TODO(zty) K1是什么意思? ping? 应该是说的 for开始前吧. - _k0_b = k_base_idx // arith.constant(2, index=True) - gate_w0, up_w0 = load_b_tile(_k0_b) + _k0_b = k_base_idx__0 // arith.constant(2, index=True) + gate_w0__64_256, up_w0__64_256 = load_b_tile(_k0_b) rocdl.s_waitcnt(0) gpu.barrier() rocdl.sched_barrier(0) a_tile_pong = prefetch_full_a_from_lds(lds_x_pong) rocdl.sched_barrier(0) rocdl.s_waitcnt(6) - num_k_tiles_py = int(_k_dim) // int(tile_k) - odd_k_tiles = num_k_tiles_py % 2 == 1 - tail_tiles = 1 if odd_k_tiles else 2 - k_main2_py = (num_k_tiles_py - tail_tiles) * int(tile_k) - if const_expr(k_main2_py < 0): - k_main2_py = 0 - gate_w_pong = gate_w0 - up_w_pong = up_w0 + num_k_tiles_py__28 = int(_k_dim__7168) // int(tile_k__256) + odd_k_tiles__False = False + tail_tiles__2 = 2 + k_main2_py__6656 = (num_k_tiles_py__28 - 2) * int(tile_k__256) + print(f"k_main2_py: {k_main2_py__6656}", f"num_k_tiles_py: {num_k_tiles_py__28}", f"tail_tiles: {tail_tiles__2}", f"odd_k_tiles: {odd_k_tiles__False}") + gate_w_pong = gate_w0__64_256 # [64, 256) 相当于pong初始成了 gate_w0. + up_w_pong = up_w0__64_256 # [64,256) rocdl.sched_barrier(0) - if const_expr(k_main2_py > 0): - for k_iv_py in range_constexpr(0, k_main2_py, tile_k * 2): - next_k_load_1 = k_iv_py + tile_k - next_k_load_2 = k_iv_py + tile_k * 2 - next_k_dma_1 = k_iv_py + tile_k * 2 - next_k_dma_2 = k_iv_py + tile_k * 3 - a_tile_ping, gate_w_ping, up_w_ping, a_scale_ping, gate_bs_ping, up_bs_ping, acc_gate, acc_up = _interleaved_half( - lds_x_ping, - lds_x_pong, - next_k_dma_1, - next_k_load_1, - a_tile_pong, - gate_w_pong, - up_w_pong, - a_scale_pong, - gate_bs_pong, - up_bs_pong, - acc_gate, - acc_up, - ) - a_tile_pong, gate_w_pong, up_w_pong, a_scale_pong, gate_bs_pong, up_bs_pong, acc_gate, acc_up = _interleaved_half( - lds_x_pong, - lds_x_ping, - next_k_dma_2, - next_k_load_2, - a_tile_ping, - gate_w_ping, - up_w_ping, - a_scale_ping, - gate_bs_ping, - up_bs_ping, - acc_gate, - acc_up, - ) - if const_expr(odd_k_tiles): + for k_iv_py in range_constexpr(0, k_main2_py__6656, tile_k__256 * 2): # (0,K - tile*2, 2*tile). + next_k_load_1 = k_iv_py + tile_k__256 + next_k_load_2 = k_iv_py + tile_k__256 * 2 + next_k_dma_1 = k_iv_py + tile_k__256 * 2 + next_k_dma_2 = k_iv_py + tile_k__256 * 3 + a_tile_ping, gate_w_ping, up_w_ping, a_scale_ping, gate_bs_ping, up_bs_ping, acc_gate, acc_up = _interleaved_half( + lds_x_ping, # lds_read + lds_x_pong, # lds_write + next_k_dma_1, # next_k_dma_py + next_k_load_1, # next_k_load + a_tile_pong, # prev_a_tile + gate_w_pong, # prev_gate_w + up_w_pong, # prev_up_w + a_scale_pong, # prev_a_scale + gate_bs_pong, # prev_gate_bs + up_bs_pong, # prev_up_bs + acc_gate, # acc_gate + acc_up, # acc_up + ) # 我现在起码知道了 interleave_half要做的事情了... 这么多参数. + a_tile_pong, gate_w_pong, up_w_pong, a_scale_pong, gate_bs_pong, up_bs_pong, acc_gate, acc_up = _interleaved_half( + lds_x_pong, + lds_x_ping, + next_k_dma_2, + next_k_load_2, + a_tile_ping, + gate_w_ping, + up_w_ping, + a_scale_ping, + gate_bs_ping, + up_bs_ping, + acc_gate, + acc_up, + ) + if const_expr(odd_k_tiles__False): acc_gate, acc_up, epilogue_pf = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong, prefetch_epilogue=True, ku_count=_tail_ku if _pad_ku_skip > 0 else k_unroll) else: - _k_tail_rel = arith.constant(_k_dim - tile_k, index=True) - k_tail1 = k_base_idx + _k_tail_rel + _k_tail_rel = arith.constant(_k_dim__7168 - tile_k__256, index=True) + k_tail1 = k_base_idx__0 + _k_tail_rel x_regs_ping = [] prefetch_x_to_lds(k_tail1, lds_x_ping) if const_expr(_pad_ku_skip > 0): gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True), ku_limit=_tail_ku) - a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K * 128, index=True), ku_packed_limit=_tail_ku_packed) + a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K__2 * 128, index=True), ku_packed_limit=_tail_ku_packed) else: gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True)) - a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K * 128, index=True)) + a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K__2 * 128, index=True)) acc_gate, acc_up, _ = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong) rocdl.s_waitcnt(0) _barrier() @@ -927,10 +939,10 @@ def _silu_mul_vec4(gate_v4, up_v4): def _act_vec4(gate_v4, up_v4): return _silu_mul_vec4(gate_v4, up_v4) - acc = [None] * (int(num_acc_n) * int(m_repeat)) - for _mi in range_constexpr(m_repeat): - for _ni in range_constexpr(num_acc_n): - _aidx = _mi * num_acc_n + _ni + acc = [None] * (int(num_acc_n__2) * int(m_repeat__4)) + for _mi in range_constexpr(m_repeat__4): + for _ni in range_constexpr(num_acc_n__2): + _aidx = _mi * num_acc_n__2 + _ni acc[_aidx] = _act_vec4(acc_gate[_aidx], acc_up[_aidx]) mask24_i32 = arith.constant(16777215) topk_i32_v = topk_i32 @@ -949,7 +961,7 @@ def write_row_to_lds(*, mi: int, ii: int, row_in_tile, row, row_base_lds, col_ba vec1_out = T.vec(1, out_elem()) v1 = vector.from_elements(vec1_out, [v_out]) vector.store(v1, lds_out, [lds_idx], alignment=2) - _out_row_stride = inter_dim * out_elem_bytes + _out_row_stride = inter_dim__512 * out_elem_bytes def precompute_row(*, row_local, row): fused2 = memref.load(lds_tid, [row_local]) @@ -962,7 +974,7 @@ def precompute_row(*, row_local, row): row_valid = arith.andi(row_valid0, arith.andi(t_ok, s_ok)) t_idx = arith.index_cast(ir.IndexType.get(), t) s_idx = arith.index_cast(ir.IndexType.get(), s) - ts_idx = t_idx * arith.constant(topk, index=True) + s_idx + ts_idx = t_idx * arith.constant(topk__9, index=True) + s_idx row_byte_base = out_base_idx + ts_idx * arith.constant(_out_row_stride, index=True) return ((fused2, row_byte_base), row_valid) @@ -973,7 +985,7 @@ def _idx_to_llvm_ptr(idx_val, addr_space=1): ptr_ty = ir.Type.parse(f'!llvm.ptr<{addr_space}>') return llvm.inttoptr(ptr_ty, i64_raw) _e_vec = _e_vec_s1 - _cshuffle_nlane = min(32, tile_n // _e_vec) + _cshuffle_nlane = min(32, tile_n__128 // _e_vec) def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): fused, row_byte_base = row_ctx @@ -984,7 +996,7 @@ def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): frag_v = frag._value if hasattr(frag, '_value') else frag llvm.StoreOp(frag_v, out_ptr_v, alignment=_e_vec * out_elem_bytes, nontemporal=True) _frag_elem = ir.BF16Type.get() - c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m, tile_n=tile_n, e_vec=_e_vec, cshuffle_nlane=_cshuffle_nlane, block_size=total_threads, m_repeat=m_repeat, num_acc_n=num_acc_n, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=_frag_elem, write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair, lds_out_split=lds_out_B) + c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m__64, tile_n=tile_n__128, e_vec=_e_vec, cshuffle_nlane=_cshuffle_nlane, block_size=total_threads, m_repeat=m_repeat__4, num_acc_n=num_acc_n__2, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=_frag_elem, write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair, lds_out_split=lds_out_B) _if_blk = scf.IfOp(blk_valid) with ir.InsertionPoint(_if_blk.then_block): _ifexpert_of = scf.IfOp(exp_valid) @@ -995,7 +1007,7 @@ def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): gpu.barrier() scf.YieldOp([]) _for_ip.__exit__(None, None, None) - _cache_tag = (module_name, tile_m, tile_n, tile_k, model_dim_pad, inter_dim_pad, persist_m, use_async_copy, waves_per_eu, k_batch, xcd_swizzle) + _cache_tag = (module_name, tile_m__64, tile_n__128, tile_k__256, model_dim_pad, inter_dim_pad, persist_m, use_async_copy__True, waves_per_eu, k_batch, xcd_swizzle) @flyc.jit def launch_kimi_fp4_stage1_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_max_token_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_inter_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): @@ -1007,10 +1019,10 @@ def launch_kimi_fp4_stage1_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: allocator_pong.finalize() allocator_ping.finalize() inter_dim_pad_total = arith.constant(2 * inter_dim_pad, index=True) # 0 如果存在,*2, gemm1 - tile_k_stage2 = tile_k // 2 # 128 = 256 // 2 - tile2_pad = (tile_k_stage2 - (inter_dim - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 # 0 = div_up(pad, tile_k_stage2) + tile_k_stage2 = tile_k__256 // 2 # 128 = 256 // 2 + tile2_pad = (tile_k_stage2 - (inter_dim__512 - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 # 0 = div_up(pad, tile_k_stage2) inter_in = arith.index_cast(ir.IndexType.get(), i32_inter_in.ir_value()) # 1024 - tile_n_index = arith.constant(tile_n, index=True) # 128 + tile_n_index = arith.constant(tile_n__128, index=True) # 128 gx = (inter_in - inter_dim_pad_total + tile2_pad + 2 * tile_n_index - 1) / tile_n_index / arith.constant(2, index=True) # 4 = div_up(1024, 2*128) # 成对处理tile_n _c_pm_l = arith.constant(persist_m, index=True) # 这里是1. gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l # div_up(expert_ids_in, 1) From b115edff69e127eee42a61ea6b3f729ad671b5dd Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 04:11:54 +0000 Subject: [PATCH 008/118] Add runnable Kimi mxfp4 16384 FlyDSL path Extract fixed-shape mxfp4 MoE runners for M=16384, wire bench/profile entry points, and document correctness/performance status. Current FlyDSL scatter, GEMM1, and GEMM2 paths are runnable against the aiter mxfp4 pipeline. --- bench_flydsl_16384.py | 101 +- docs/kimi_fp4_moe_16384_dataflow.md | 537 ++++++++ docs/kimi_fp4_moe_16384_opt_notes.md | 566 ++++++++ kimi_fp4_moe_16384_opt.py | 1907 ++++++++++++++++++++++++++ profile_flydsl_16384.py | 176 +++ 5 files changed, 3268 insertions(+), 19 deletions(-) create mode 100644 docs/kimi_fp4_moe_16384_dataflow.md create mode 100644 docs/kimi_fp4_moe_16384_opt_notes.md create mode 100644 kimi_fp4_moe_16384_opt.py create mode 100644 profile_flydsl_16384.py diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index 4296bcc5b..fbf1d7d3c 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -36,7 +36,10 @@ MXFP4_STAGE2_KERNEL, run_kimi_fp4_flydsl_atomic_stage2_16384, run_kimi_fp4_flydsl_mxfp4_sort_16384, + run_kimi_fp4_mxfp4_moe_16384_aiter_ref, run_kimi_fp4_mxfp4_moe_16384_opt, + run_kimi_fp4_mxfp4_moe_16384_opt_gemm1, + run_kimi_fp4_mxfp4_moe_16384_opt_gemm2, ) @@ -200,6 +203,42 @@ def run_local_mxfp4_opt(hidden, topk_ids, topk_weight, weights): ) +def run_local_mxfp4_opt_gemm2(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_opt_gemm2( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_opt_gemm1(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_opt_gemm1( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_aiter_ref(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_aiter_ref( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + def make_runners(hidden, topk_ids, topk_weight, weights): return { "aiter_moe": lambda: run_aiter_moe( @@ -232,12 +271,30 @@ def make_runners(hidden, topk_ids, topk_weight, weights): topk_weight, weights["flydsl"], ), + "local_mxfp4_aiter_ref": lambda: run_local_mxfp4_aiter_ref( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), "local_mxfp4_opt": lambda: run_local_mxfp4_opt( hidden, topk_ids, topk_weight, weights["mxfp4"], ), + "local_mxfp4_opt_gemm1": lambda: run_local_mxfp4_opt_gemm1( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_mxfp4_opt_gemm2": lambda: run_local_mxfp4_opt_gemm2( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), } @@ -287,6 +344,11 @@ def main(): parser.add_argument("--warmup", type=int, default=5) parser.add_argument("--graph-iters", type=int, default=5) parser.add_argument("--measure", type=int, default=5) + parser.add_argument( + "--runners", + default=None, + help="comma-separated runner names; defaults to all runners", + ) args = parser.parse_args() device = torch.device("cuda") @@ -304,6 +366,12 @@ def main(): hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) runners = make_runners(hidden, topk_ids, topk_weight, weights) + if args.runners: + requested = [item.strip() for item in args.runners.split(",") if item.strip()] + unknown = [name for name in requested if name not in runners] + if unknown: + raise ValueError(f"unknown runners: {', '.join(unknown)}") + runners = {name: runners[name] for name in requested} outputs = {} for name, fn in runners.items(): @@ -313,26 +381,21 @@ def main(): raise RuntimeError(f"{name} output has non-finite values") outputs[name] = out - check_pairs = [ - ("aiter_mxfp4_vs_aiter", outputs["aiter_mxfp4_moe"], outputs["aiter_moe"]), - ("local_vs_aiter", outputs["local_kimi_fp4"], outputs["aiter_moe"]), - ( - "local_mxfp4_sort_vs_aiter", - outputs["local_kimi_fp4_mxfp4_sort"], - outputs["aiter_moe"], - ), - ( - "local_atomic_stage2_vs_aiter", - outputs["local_kimi_fp4_atomic_stage2"], - outputs["aiter_moe"], - ), - ( - "local_mxfp4_opt_vs_aiter_mxfp4", - outputs["local_mxfp4_opt"], - outputs["aiter_mxfp4_moe"], - ), + check_specs = [ + ("aiter_mxfp4_vs_aiter", "aiter_mxfp4_moe", "aiter_moe"), + ("local_vs_aiter", "local_kimi_fp4", "aiter_moe"), + ("local_mxfp4_sort_vs_aiter", "local_kimi_fp4_mxfp4_sort", "aiter_moe"), + ("local_atomic_stage2_vs_aiter", "local_kimi_fp4_atomic_stage2", "aiter_moe"), + ("local_mxfp4_ref_vs_aiter_mxfp4", "local_mxfp4_aiter_ref", "aiter_mxfp4_moe"), + ("local_mxfp4_opt_vs_aiter_mxfp4", "local_mxfp4_opt", "aiter_mxfp4_moe"), + ("local_mxfp4_opt_gemm1_vs_aiter_mxfp4", "local_mxfp4_opt_gemm1", "aiter_mxfp4_moe"), + ("local_mxfp4_opt_gemm2_vs_aiter_mxfp4", "local_mxfp4_opt_gemm2", "aiter_mxfp4_moe"), ] - for name, lhs, rhs in check_pairs: + for name, lhs_name, rhs_name in check_specs: + if lhs_name not in outputs or rhs_name not in outputs: + continue + lhs = outputs[lhs_name] + rhs = outputs[rhs_name] print( f"{name}_cos={cosine(lhs, rhs):.6f} " f"{name}_max_abs={max_abs(lhs, rhs):.6f}" diff --git a/docs/kimi_fp4_moe_16384_dataflow.md b/docs/kimi_fp4_moe_16384_dataflow.md new file mode 100644 index 000000000..1a2a59722 --- /dev/null +++ b/docs/kimi_fp4_moe_16384_dataflow.md @@ -0,0 +1,537 @@ +# Kimi FP4 MoE 16384 FlyDSL Dataflow + +这份文档只解释 `kimi_fp4_moe_16384.py` 里固定 M=16384 这条 FlyDSL 路径的 GEMM1 和 GEMM2 数据流。重点是 kernel tiling: 每个 CTA/wave 负责哪块 C,A/B 怎么搬,K loop 怎么走,以及按 tile 之后一次 forward 大概要发多少 A/B load。 + +## 固定形状 + +| 项 | 值 | +| --- | ---: | +| `TOKEN` | 16384 | +| `TOPK` | 9 | +| routed rows, no padding | `TOKEN * TOPK = 147456` | +| `EXPERTS` | 385 | +| model dim | 7168 | +| intermediate dim | 512 | +| sort block | 64 | +| CTA threads | 256 | +| waves per CTA | 4 | + +所有 A/W 都是 fp4 packed 成 `fp4x2` byte。代码里很多地方的 `tile_k=256` 表示 256 个 fp4 K 元素;按 global memory 字节算时要除以 2。 + +本文的数据量默认是每个 active CTA 自己发出的 logical traffic,不扣 L2/cache 命中,也不计很小的 sorted id、scale、topk weight 读流量。真实 DRAM traffic 会被 cache、expert 分布、padding 和 guard 影响。 + +## FlyDSL 数据流术语 + +这份 kernel 的主数据路径可以按下面几层看: + +| 动作 | FlyDSL/ROCDL 位置 | 含义 | +| --- | --- | --- | +| global pointer 变成 resource | `_ptr_buffer_resource` | 给 `buffer_ops` / raw buffer load 用 | +| A global -> LDS | `rocdl.raw_ptr_buffer_load_lds` in `dma_x_tile_to_lds` | 256 threads 合作把一个 A tile 搬进 ping/pong LDS | +| A LDS -> VGPR | `vector.load_op` in `lds_load_packs_k64` | 每个 wave 从 LDS 读它要喂给 MFMA 的 A subtile | +| B global -> VGPR | `_buffer_load_vec` in `load_b_packs_k64` | B 不进 LDS,按当前 wave 的 N slice 直接进寄存器 | +| scales global -> VGPR | `buffer_ops.buffer_load` in `prefetch_ab_scale_tile` | e8m0 scale,给 `mfma_scale` 用 | +| matrix compute | `rocdl.mfma_scale_f32_16x16x128_f8f6f4` | 真正发 MFMA 指令的地方 | +| C fragment -> LDS | `write_row_to_lds` | 把 lane-fragment 格式的 accumulator 整理进 LDS | +| LDS -> global C | `c_shuffle_epilog(... store_pair ...)` | C shuffle 后用 `llvm.StoreOp` 写回 global | + +直观理解:A 放 LDS 是因为同一个 A tile 会被 4 个 waves 分别乘不同 N slice 的 B;B 是每个 wave 独有的 N slice,直接进寄存器更合适。 + +## GEMM1: Stage1 Tiling + +Stage1 做的是: + +```text +gate = hidden @ W_gate +up = hidden @ W_up +out = silu(gate) * up +``` + +输出是 bf16 intermediate: + +```text +[TOKEN, TOPK, INTER_DIM] = [16384, 9, 512] +``` + +固定 tile: + +| 项 | 值 | +| --- | ---: | +| `tile_m` | 64 routed rows | +| `tile_n` | 128 intermediate columns | +| `tile_k` | 256 model-dim fp4 elements | +| K tiles | `7168 / 256 = 28` | +| N tiles | `512 / 128 = 4` | +| waves | 4 | +| `n_per_wave` | `128 / 4 = 32` | +| `m_repeat` | `64 / 16 = 4` | +| `num_acc_n` | `32 / 16 = 2` | +| `k_unroll` | `256 / 128 = 2` MFMA K chunks | + +### CTA 和 Wave 负责的 C 块 + +一个 Stage1 CTA 负责一个 logical C tile: + +```text +M: 64 sorted routed rows +N: 128 intermediate columns +K: loop over 7168 +``` + +4 个 waves 平分 N 维: + +| wave | N columns | +| ---: | --- | +| 0 | `by_n + 0..31` | +| 1 | `by_n + 32..63` | +| 2 | `by_n + 64..95` | +| 3 | `by_n + 96..127` | + +每个 wave 内部再拆成 16x16 MFMA tile: + +```text +M side: 4 blocks of 16 rows -> mi_idx = 0..3 +N side: 2 blocks of 16 cols -> ni_idx = 0..1 +``` + +所以每个 wave 同时维护: + +```text +4 * 2 = 8 accumulator fragments for gate +4 * 2 = 8 accumulator fragments for up +``` + +`acc_idx = mi_idx * num_acc_n + ni_idx`。每个 accumulator 是一个 `vec4_f32` lane fragment,整个 wave 合起来表示一个 16x16 C micro-tile。K loop 结束后,gate/up accumulator 先做 `silu(gate) * up`,再进入 C shuffle epilogue。 + +### GEMM1 Per K Tile 数据流 + +一个 Stage1 CTA 的一个 K tile 是: + +```text +A: 64 x 256 fp4 -> 64 * 256 / 2 = 8192 B = 8 KiB +B_gate: 128 x 256 fp4 -> 16 KiB +B_up: 128 x 256 fp4 -> 16 KiB +``` + +也就是每个 K tile: + +| 数据 | 路径 | 每 CTA footprint | +| --- | --- | ---: | +| A | global -> LDS | 8 KiB | +| A | LDS -> VGPR, all waves total | 32 KiB LDS reads | +| B gate | global -> VGPR | 16 KiB | +| B up | global -> VGPR | 16 KiB | +| B total | global -> VGPR | 32 KiB | + +A 的 global load 是整个 CTA 合作完成的。`_num_dma_loads = 2`,所以每个 thread 发 2 次 16B raw LDS load: + +```text +256 threads * 2 * 16 B = 8192 B +``` + +B 的 load 是按 wave 的 N slice 发的。每个 wave 每个 K tile 的 B footprint: + +```text +gate: 32 N cols * 256 K / 2 = 4 KiB +up: 32 N cols * 256 K / 2 = 4 KiB +total per wave = 8 KiB +``` + +4 waves 加起来就是 32 KiB。 + +### GEMM1 MFMA 数量 + +每个 wave 每个 K tile: + +```text +m_repeat(4) * num_acc_n(2) * k_unroll(2) * gate/up(2) += 32 MFMA +``` + +每个 CTA 每个 K tile: + +```text +4 waves * 32 = 128 MFMA +``` + +整个 K=7168: + +```text +28 K tiles * 128 = 3584 MFMA per CTA +``` + +### GEMM1 K Loop + +Stage1 的 K 维有 28 个 tile。代码里的关键变量是: + +```text +num_k_tiles_py = 28 +tail_tiles = 2 +k_main2_py = (28 - 2) * 256 = 6656 +``` + +主循环: + +```text +for k_iv_py in range(0, 6656, 512): + _interleaved_half(...) + _interleaved_half(...) +``` + +一个 `_interleaved_half` 可以理解成: + +```text +compute previous K tile +load current K tile's B and scales into VGPR +read current K tile's A from LDS into VGPR +DMA a future A tile into the other LDS buffer +return current tile as next half's previous tile +``` + +启动阶段先准备: + +```text +K0 A -> lds_x_pong +K0 scales +K1 A -> lds_x_ping +K0 B gate/up -> regs +K0 A LDS -> regs +``` + +主循环的 26 个 half 会计算 K0..K25,并持续把未来的 A tile 填到 ping/pong LDS。最后 tail 处理 K26 和 K27: + +```text +compute K26 +compute K27 +``` + +所以 Stage1 每个 CTA 总 global load footprint 约为: + +| 数据 | 公式 | 每 CTA | +| --- | --- | ---: | +| A | `28 * 8 KiB` | 224 KiB | +| B gate+up | `28 * 32 KiB` | 896 KiB | +| C store | `64 * 128 * 2 B` | 16 KiB | +| 合计, 不含 scales/sorted ids | | 1136 KiB | + +### GEMM1 写回 + +每个 wave 得到的是 MFMA lane-fragment layout,不是 contiguous C layout。写回分两步: + +1. `write_row_to_lds` 把 `acc[mi, ni]` 中的 f32 转 bf16,按 row/col 写到 `lds_out`。 +2. `c_shuffle_epilog` 让线程从 LDS 读出连续片段,再由 `store_pair` 用 `llvm.StoreOp` 写到 global。 + +Stage1 的 global out row 是 `(token_id, topk_id)` 对应的 `ts_idx = token * TOPK + topk`,列是 `INTER_DIM` 里的 `by_n + local_n`。padding row 会被 `row_valid` guard 掉。 + +## GEMM2: Stage2 Tiling + +Stage2 做的是: + +```text +out_topk_slot = intermediate @ W_down +out_topk_slot *= topk_weight +``` + +当前实现先写一个很大的 bf16 staging buffer: + +```text +target: [TOKEN, TOPK, MODEL_DIM] +``` + +然后 Python wrapper 里再做: + +```python +torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1, out=out) +``` + +固定 tile: + +| 项 | 值 | +| --- | ---: | +| `tile_m` | 64 routed rows | +| `tile_n` | 256 model columns | +| `tile_k` | 256 intermediate fp4 elements | +| K tiles | `512 / 256 = 2` | +| N tiles | `7168 / 256 = 28` | +| waves | 4 | +| `n_per_wave` | `256 / 4 = 64` | +| `m_repeat` | `64 / 16 = 4` | +| `num_acc_n` | `64 / 16 = 4` | +| `k_unroll` | `256 / 128 = 2` MFMA K chunks | + +Stage2 是 persistent-M grid: + +```text +grid.x = 28 N tiles +grid.y = CU count +``` + +每个 launched block 不是只做一个 fixed M tile,而是在 `scf.ForOp` 里按 CU 分配到多个 sorted M tiles。逻辑上仍然可以把它理解成很多 `(M tile, N tile)` CTA work items: + +```text +M tile = 64 sorted routed rows +N tile = 256 model columns +``` + +### CTA 和 Wave 负责的 C 块 + +一个 logical Stage2 CTA 负责: + +```text +M: 64 sorted routed rows +N: 256 model columns +K: 512 intermediate dim +``` + +4 个 waves 平分 N 维: + +| wave | N columns | +| ---: | --- | +| 0 | `by_n + 0..63` | +| 1 | `by_n + 64..127` | +| 2 | `by_n + 128..191` | +| 3 | `by_n + 192..255` | + +每个 wave 内部: + +```text +M side: 4 blocks of 16 rows -> mi_idx = 0..3 +N side: 4 blocks of 16 cols -> ni_idx = 0..3 +``` + +所以每个 wave 维护: + +```text +4 * 4 = 16 accumulator fragments +``` + +GEMM2 没有 gate/up 双 accumulator,只有一套 `acc`。 + +### GEMM2 Per K Tile 数据流 + +一个 Stage2 CTA 的一个 K tile: + +```text +A: 64 x 256 fp4 -> 8 KiB +B: 256 x 256 fp4 -> 32 KiB +``` + +| 数据 | 路径 | 每 CTA footprint | +| --- | --- | ---: | +| A | global -> LDS | 8 KiB | +| A | LDS -> VGPR, all waves total | 32 KiB LDS reads | +| B | global -> VGPR | 32 KiB | + +和 Stage1 对比: + +```text +Stage1: tile_n=128, 但要同时读 gate/up 两套 B -> 32 KiB B per K tile +Stage2: tile_n=256, 只读一套 down B -> 32 KiB B per K tile +``` + +所以两者每个 K tile 的 B global footprint 恰好一样大。 + +### GEMM2 MFMA 数量 + +每个 wave 每个 K tile: + +```text +m_repeat(4) * num_acc_n(4) * k_unroll(2) += 32 MFMA +``` + +每个 logical CTA 每个 K tile: + +```text +4 waves * 32 = 128 MFMA +``` + +整个 K=512: + +```text +2 K tiles * 128 = 256 MFMA per logical CTA +``` + +### GEMM2 K Loop + +GEMM2 的 K 只有两个 tile,所以没有长 main loop: + +```text +num_k_tiles = 2 +tail_tiles = 2 +k_main2_py = 0 +``` + +实际路径是 even-tail: + +1. load K0 的 B low half、scales。 +2. DMA K0 的 A 到 `lds_x_pong`。 +3. 从 `lds_x_pong` 预取 K0 的 A subtile。 +4. DMA K1 的 A 到 `lds_x_ping`。 +5. load K1 的 B、scales。 +6. compute K0。 +7. wait/barrier。 +8. 从 `lds_x_ping` 读 K1 的 A subtile。 +9. compute K1,并预取 epilogue 需要的 `sorted_weights`。 + +每个 logical CTA 总 global load/store footprint 约为: + +| 数据 | 公式 | 每 logical CTA | +| --- | --- | ---: | +| A | `2 * 8 KiB` | 16 KiB | +| B | `2 * 32 KiB` | 64 KiB | +| C staging store | `64 * 256 * 2 B` | 32 KiB | +| 合计, 不含 scales/sorted ids/topk weights | | 112 KiB | + +### GEMM2 写回和 TOPK Reduce + +GEMM2 epilogue 在 `write_row_to_lds` 里多做了一步: + +```text +v = accumulator * sorted_weight +``` + +然后和 Stage1 一样走 `c_shuffle_epilog` 写回 global。不过它写回的不是最终 `[TOKEN, MODEL_DIM]`,而是 topk slot staging: + +```text +target[token, topk, model_col] +``` + +最后 `torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1)` 再把 9 个 topk slot 合并。这是当前 FlyDSL 路径最显眼的数据流开销之一: + +| buffer | 大小 | +| --- | ---: | +| Stage1 intermediate `[16384, 9, 512]` bf16 | 144 MiB | +| Stage2 staging `[16384, 9, 7168]` bf16 | 2016 MiB | +| `torch.sum` 读取 staging | 2016 MiB | +| `torch.sum` 写最终 out `[16384, 7168]` bf16 | 224 MiB | + +这里的 MiB 按 1024 进制算。 + +## 一次 Forward 的 Tile 级 Traffic 公式 + +令: + +```text +M_tiles = ceil(num_valid_ids[0] / 64) +``` + +`num_valid_ids[0]` 由 sort kernel 产生,可能包含为了 expert/block 对齐产生的 padding。没有 padding 的理论下界是: + +```text +ceil(16384 * 9 / 64) = 2304 +``` + +当前 wrapper 分配的 `sorted_token_ids` 上界接近: + +```text +max_sorted = TOKEN * TOPK + EXPERTS * BLOCK_M - TOPK = 172087 +floor(max_sorted / 64) = 2688 blocks +``` + +真实 active work 由 `num_valid_ids[0]`、`exp_valid`、`tile_has_tokens` 和 row guard 共同决定。 + +### Stage1 + +Stage1 logical CTA 数: + +```text +CTA_s1 = M_tiles * 4 +``` + +因为 N tile 数是 4。 + +Traffic 公式: + +```text +A_s1 = CTA_s1 * 28 * 8 KiB +B_s1 = CTA_s1 * 28 * 32 KiB +C_s1 = CTA_s1 * 16 KiB +``` + +如果只按没有 padding 的 2304 个 M tiles 算: + +| 项 | 约 GiB | +| --- | ---: | +| A global load | 1.97 | +| B global load, logical | 7.88 | +| C store | 0.14 | +| total | 9.98 | + +如果按 2688 个 M tiles 上界算: + +| 项 | 约 GiB | +| --- | ---: | +| A global load | 2.30 | +| B global load, logical | 9.19 | +| C store | 0.16 | +| total | 11.65 | + +### Stage2 + +Stage2 logical CTA 数: + +```text +CTA_s2 = M_tiles * 28 +``` + +因为 N tile 数是 28。 + +Traffic 公式: + +```text +A_s2 = CTA_s2 * 2 * 8 KiB +B_s2 = CTA_s2 * 2 * 32 KiB +C_s2 = CTA_s2 * 32 KiB +``` + +如果只按没有 padding 的 2304 个 M tiles 算: + +| 项 | 约 GiB | +| --- | ---: | +| A global load | 0.98 | +| B global load, logical | 3.94 | +| C staging store | 1.97 | +| total | 6.89 | + +如果按 2688 个 M tiles 上界算: + +| 项 | 约 GiB | +| --- | ---: | +| A global load | 1.15 | +| B global load, logical | 4.59 | +| C staging store | 2.30 | +| total | 8.04 | + +Stage2 后面的 `torch.sum` 还会额外读约 1.97 GiB staging,并写约 0.22 GiB final output。 + +## 读代码时的最短路径 + +GEMM1 建议按这个顺序看: + +1. `Stage1Config`: 确认 `tile_m/tile_n/tile_k`。 +2. `compile_kimi_fp4_stage1_16384`: 看 derived constants,比如 `n_per_wave`、`m_repeat`、`k_unroll`。 +3. `moe_gemm1`: 看 grid/block id 怎么映射到 `by_n` 和 `bx_m`。 +4. `dma_x_tile_to_lds`: 看 A global -> LDS。 +5. `load_b_packs_k64`: 看 B global -> VGPR。 +6. `compute_bmajor_mfma_phase`: 看 MFMA 真正在哪里发。 +7. `_interleaved_half`: 看 K loop pipeline。 +8. `write_row_to_lds` + `c_shuffle_epilog`: 看 accumulator 怎么变成 global C。 + +GEMM2 建议按这个顺序看: + +1. `Stage2Config`: 确认 `64x256x256` 和 `persist_m=-1`。 +2. `compile_kimi_fp4_stage2_16384`: 看 persistent grid 和 derived constants。 +3. `_moe_gemm2_then_body`: 看一个 logical M tile 的实际工作。 +4. `load_b_tile_lo/load_b_tile_hi`: 看 B split load。 +5. `compute_tile`: 看 A LDS read、B pack、scale、MFMA。 +6. `write_row_to_lds`: 看 topk weight 乘在哪里做。 +7. wrapper `kimi_fp4_stage2_16384`: 看 `target` staging 和最终 `torch.sum`。 + +## 最重要的性能理解点 + +1. 每个 CTA 的 A global load 很小,但同一个 M tile 会被不同 N tiles 重复加载到 LDS。Stage1 重复 4 次,Stage2 重复 28 次。 +2. B global logical traffic 比 A 大很多,尤其 Stage1 的 28 个 K tiles 每 CTA 要读 896 KiB 的 gate/up B。实际 DRAM 是否这么大取决于 expert 分布和 L2 复用。 +3. Stage1 和 Stage2 每个 K tile 每个 CTA 都是 128 条 wave-level MFMA,但 Stage1 有 28 个 K tiles,Stage2 只有 2 个 K tiles。 +4. 当前 Stage2 的 GEMM 本身不是唯一问题。它写 bf16 `[TOKEN, TOPK, MODEL_DIM]` staging,再用 PyTorch reduce,这会带来约 2 GiB 级别的额外读写。 +5. 对齐 mxfp4 性能时,除了 GEMM tile 本身,还要对齐 Stage2 输出格式和 reduce 路径,否则 `torch.sum` 这段数据流会一直留在 critical path 上。 diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md new file mode 100644 index 000000000..ce95d9841 --- /dev/null +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -0,0 +1,566 @@ +# Kimi FP4 MoE 16384 Opt Notes + +## Scope + +This note tracks the migration experiment for the fixed Kimi M=16384 row: + +- `TOKEN=16384` +- `EXPERTS=385` +- `MODEL_DIM=7168` +- `INTER_DIM=512` +- `TOPK=9` +- current FlyDSL kernels: + - `flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4` + - `flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4` +- mxfp4 row selected by aiter for this same shape: + - `mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128` + - `mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT` + +The new experiment file is `kimi_fp4_moe_16384_opt.py`. + +## Current FlyDSL Path + +`kimi_fp4_moe_16384.py` is already specialized to the single CSV-selected +FlyDSL row. Its end-to-end path is: + +1. `moe_sorting_opus_fwd` with `BLOCK_M=64`. + It produces `sorted_ids`, `sorted_weights`, `sorted_expert_ids`, and + `num_valid_ids`. +2. `fused_dynamic_mxfp4_quant_moe_sort(hidden_states, ...)`. + For M=16384 this is the large-M split path: per-token fp4 quant first, + then scale sorting/swizzle through `mxfp4_moe_sort_hip`. +3. FlyDSL stage1 writes bf16 intermediate `[TOKEN, TOPK, INTER_DIM]`. +4. `fused_dynamic_mxfp4_quant_moe_sort(a2.view(-1, INTER_DIM), ...)`. +5. FlyDSL stage2 writes weighted bf16 per topk slot into a large + `[TOKEN, TOPK, MODEL_DIM]` staging buffer, then `torch.sum(..., dim=1)`. + +The important point: the current FlyDSL path already uses the mxfp4 scale-sort +helper for activation scales. It does not use the mxfp4 MoE sorter or the +mxfp4 output/scatter-reduce path. + +## Aiter mxfp4 Path + +The aiter mxfp4 route in `fused_moe.py` does a different pipeline: + +1. `mxfp4_moe_sort` with `BM=128`. + This emits `sorted_token_ids`, `sorted_expert_ids`, `cumsum_tensor`, + `reverse_sorted`, `sorted_weights`, `masked_m`, and `m_indices`. +2. `mxfp4_moe_quant` quantizes the original hidden states once. +3. `mxfp4_moe_sort_scales` produces the GEMM-consumed scale layout. +4. `mxfp4_moe_gemm1_a4w4` consumes `m_indices` and the mxfp4 preshuffled + weight/scale layout. +5. For this M=16384 row, stage2 uses `_MXFP4OUT`: + `mxfp4_moe_gemm2_a4w4_mxfp4out` writes packed fp4 output plus e8m0 scales, + then `mxfp4_moe_scatter_reduce_q` does weighted topk reduce. + +This avoids the FlyDSL path's large bf16 `[TOKEN, TOPK, MODEL_DIM]` stage2 +buffer and the final `torch.sum`. + +## Experiments Added + +`kimi_fp4_moe_16384_opt.py` has two entry points: + +- `run_kimi_fp4_flydsl_mxfp4_sort_16384` + - runs `mxfp4_moe_sort(BM=128)`; + - expands `sorted_expert_ids` from BM128 to BM64 with `repeat_interleave`; + - reuses the existing FlyDSL stage1/stage2 kernels. +- `run_kimi_fp4_flydsl_atomic_stage2_16384` + - keeps the current FlyDSL stage1; + - calls the generic FlyDSL stage2 in `mode="atomic"` to avoid the explicit + `[TOKEN, TOPK, MODEL_DIM]` bf16 staging buffer plus final `torch.sum`; + - this is a direct test of whether output accumulation, not mxfp4out, is + enough to close the gap. +- `run_kimi_fp4_mxfp4_moe_16384_opt` + - fixed-shape extraction of aiter's mxfp4 pipeline; + - no CSV dispatch; + - uses the mxfp4 sort, quant, sort_scales, gemm1, gemm2_mxfp4out, and + scatter_reduce_q operations directly. + +`bench_flydsl_16384.py` now compares: + +- `aiter_moe` +- `aiter_mxfp4_moe` +- `local_kimi_fp4` +- `local_kimi_fp4_mxfp4_sort` +- `local_kimi_fp4_atomic_stage2` +- `local_mxfp4_opt` + +## Validation + +Command: + +```bash +CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python bench_flydsl_16384.py --warmup 5 --graph-iters 5 --measure 5 +``` + +Result: + +```text +aiter_mxfp4_vs_aiter_cos=0.981046 aiter_mxfp4_vs_aiter_max_abs=1.828125 +local_vs_aiter_cos=1.000000 local_vs_aiter_max_abs=0.000000 +local_mxfp4_sort_vs_aiter_cos=1.000000 local_mxfp4_sort_vs_aiter_max_abs=0.000000 +local_atomic_stage2_vs_aiter_cos=0.999991 local_atomic_stage2_vs_aiter_max_abs=0.093750 +local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.000000 +aiter_moe_us=2289.4 +aiter_mxfp4_moe_us=1811.5 +local_kimi_fp4_us=2311.2 +local_kimi_fp4_mxfp4_sort_us=2375.4 +local_kimi_fp4_atomic_stage2_us=2745.6 +local_mxfp4_opt_us=1830.6 +``` + +Syntax check: + +```bash +/opt/venv/bin/python -m py_compile \ + kimi_fp4_moe_16384.py \ + kimi_fp4_moe_16384_opt.py \ + bench_flydsl_16384.py \ + profile_flydsl_16384.py +``` + +## Torch Profiler Snapshot + +Command: + +```bash +CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_kimi_fp4,local_mxfp4_opt \ + --warmup 3 --iters 5 --trace-dir profiler_traces +``` + +Profiler traces: + +- `profiler_traces/profile_16384_aiter_mxfp4_moe.json.gz` +- `profiler_traces/profile_16384_local_kimi_fp4.json.gz` +- `profiler_traces/profile_16384_local_mxfp4_opt.json.gz` + +### `aiter_mxfp4_moe` + +Total device time: `1920.5us/iter`, `8` kernels per iter. + +| idx | avg us | note | +| --- | ---: | --- | +| 0 | 6.4 | mxfp4 sort count | +| 1 | 10.7 | mxfp4 sort cumsum | +| 2 | 33.1 | mxfp4 sort place/pad | +| 3 | 52.4 | `mxfp4_moe_quant` | +| 4 | 59.5 | `mxfp4_moe_sort_scales` | +| 5 | 722.0 | `mxfp4_moe_gemm1_a4w4` | +| 6 | 905.7 | `mxfp4_moe_gemm2_a4w4_mxfp4out` | +| 7 | 130.7 | `mxfp4_moe_scatter_reduce_q` | + +### `local_kimi_fp4` + +Total device time: `2351.9us/iter`, `11` kernels per iter. + +| idx | avg us | note | +| --- | ---: | --- | +| 0 | 4.9 | Opus sort clear workspace | +| 1 | 4.8 | Opus sort phase 0 | +| 2 | 5.0 | Opus sort phase 1 | +| 3 | 65.0 | Opus sort phase 2/3 | +| 4 | 69.3 | quant hidden | +| 5 | 42.7 | scale sort hidden | +| 6 | 806.3 | FlyDSL stage1 | +| 7 | 31.4 | quant intermediate | +| 8 | 6.1 | scale sort intermediate | +| 9 | 928.9 | FlyDSL stage2 bf16 topk staging | +| 10 | 387.4 | PyTorch `torch.sum(TOPK)` reduce | + +### `local_mxfp4_opt` + +Total device time: `1872.4us/iter`, `8` kernels per iter. + +| idx | avg us | note | +| --- | ---: | --- | +| 0 | 6.6 | mxfp4 sort count | +| 1 | 10.7 | mxfp4 sort cumsum | +| 2 | 33.0 | mxfp4 sort place/pad | +| 3 | 53.2 | `mxfp4_moe_quant` | +| 4 | 58.7 | `mxfp4_moe_sort_scales` | +| 5 | 709.8 | `mxfp4_moe_gemm1_a4w4` | +| 6 | 870.6 | `mxfp4_moe_gemm2_a4w4_mxfp4out` | +| 7 | 129.7 | `mxfp4_moe_scatter_reduce_q` | + +### Delta Summary + +Compared with `aiter_mxfp4_moe`, `local_kimi_fp4` spends roughly: + +- `+84us` in stage1 (`806us` vs `722us`). +- `+23us` in stage2 GEMM itself (`929us` vs `906us`), but this is not the main + issue. +- `+387us` in the separate PyTorch TOPK reduce after stage2. +- `+50us` more in sort/quant/scale-sort orchestration because the current path + uses Opus sort plus two generic quant+scale-sort pairs instead of the mxfp4 + BM128 prologue. + +The main gap is therefore the stage2 output/reduce design: current FlyDSL +materializes bf16 `[TOKEN, TOPK, MODEL_DIM]` and then reduces it, while mxfp4 +materializes packed fp4 output plus scales and uses a specialized +scatter/reduce kernel. + +## Conclusions + +The "maybe sort should be written into the kernel" hypothesis is not enough by +itself. Replacing Opus sorting with `mxfp4_moe_sort` is correct after expanding +BM128 expert ids to BM64, but it does not improve performance for the current +FlyDSL GEMMs. It is slightly slower in the measured run because it pads to +BM128 and still executes the same FlyDSL stage2 bf16 staging plus `torch.sum`. + +The speed gap is more likely in the stage2 output/reduce design: + +- FlyDSL current path materializes bf16 topk output and reduces with + `torch.sum`. +- mxfp4 uses `_MXFP4OUT` to materialize packed fp4 output and reduces with + `mxfp4_moe_scatter_reduce_q`. + +The atomic FlyDSL experiment confirms that plain atomic accumulation is not the +missing piece for this shape. It avoids the explicit `torch.sum`, but bf16 +atomics are much slower here and introduce small order-dependent numeric drift: +`local_kimi_fp4_atomic_stage2_us=2745.0`, slower than both the current reduce +path and mxfp4. + +The current performance-aligned optimized path is `local_mxfp4_opt`. It is a +fixed-shape extraction of the mxfp4 pipeline and lands within about 1% of +`aiter_mxfp4_moe` in the measured run (`1822.4us` vs `1804.1us`) while avoiding +the dynamic CSV/fused_moe dispatch. + +The next useful migration step is therefore not just moving sort into FlyDSL. +It should be one of: + +1. Add a FlyDSL stage2 mxfp4out epilogue and use `mxfp4_moe_scatter_reduce_q`. +2. Port the scatter-reduce-q logic to FlyDSL after stage2 can emit packed fp4 + output plus e8m0 scales. +3. Then revisit a native FlyDSL sorter or BM128 stage1/stage2 tiling if the + remaining overhead is still sorting-related. + +The fixed `local_mxfp4_opt` path is useful as the migration reference because +it strips away the CSV/dynamic fused_moe dispatch and leaves only the exact +ops needed for this Kimi row. + +## Migration Plan + +The migration is tracked as one kernel at a time, with a fixed-shape aiter +oracle kept next to the active FlyDSL candidate: + +- `run_kimi_fp4_mxfp4_moe_16384_aiter_ref` + keeps the extracted Kimi M=16384 mxfp4 pipeline on aiter kernels only. +- `run_kimi_fp4_mxfp4_moe_16384_opt` + is the active migration candidate. +- `_run_mxfp4_pipeline_16384(...)` + has explicit switches for `gemm1`, `gemm2`, and `scatter_reduce_q`. + +The intended order remains: + +1. Port `scatter_reduce_q`. +2. Port `gemm2_a4w4_mxfp4out`. +3. Port `gemm1_a4w4`. +4. Revisit the aux kernels only after the GEMM/reduce path is performance + aligned. + +## Migration Log + +### Step 0: Fixed Aiter Oracle + +`local_mxfp4_aiter_ref` was added to `bench_flydsl_16384.py`. It calls the +same fixed-shape pipeline as `local_mxfp4_opt`, but leaves all kernels on +aiter. This gives a local oracle that avoids CSV dispatch while preserving the +exact mxfp4 behavior. + +Validation: + +```text +local_mxfp4_aiter_ref_vs_aiter_mxfp4 cos=1.000000 max_abs=0.000000 +``` + +### Step 1: FlyDSL `scatter_reduce_q` + +`kimi_fp4_moe_16384_opt.py` now contains +`kimi_mxfp4_scatter_reduce_q_16384`, a fixed-shape FlyDSL port of aiter's +`scatter_reduce_mxfp4_kernel<7168, 9, 8, true>`. + +The kernel shape is fixed to: + +- `D_HIDDEN=7168` +- `TOPK=9` +- `THREADS_PER_CTA=128` +- `COLS_PER_THREAD=8` +- grid `x=7`, grid `y=16384` + +The first correct version decoded each FP4 nibble with scalar select logic. +It was bitwise correct after using `math.fma` and `v_cvt_pk_bf16_f32`, but +the scatter kernel took about `514us`, far slower than aiter's `~132us`. + +The optimized version uses the gfx950 intrinsic +`llvm.amdgcn.cvt.scalef32.pk.f32.fp4`, matching aiter's +`__builtin_amdgcn_cvt_scalef32_pk_f32_fp4` path. Each thread loads one packed +`u32`, calls the intrinsic four times to decode 8 FP4 values to f32 with the +E8M0 scale applied, accumulates with `math.fma`, then packs the final 8 values +to 4 bf16 words with `v_cvt_pk_bf16_f32`. + +The attempted `vector<8xf4E2M1FN>` route does not currently lower cleanly in +FlyDSL/LLVM: it leaves an unrealized conversion cast from `vector<8xi4>` to +`vector<8xf4E2M1FN>`. Keep using the AMD intrinsic for this port. + +Validation: + +```text +local_mxfp4_opt_vs_aiter_mxfp4 cos=1.000000 max_abs=0.000000 +``` + +Profiler snapshot after intrinsic decode: + +```text +local_mxfp4_aiter_ref device_total_us_per_iter=1927.1 + scatter_reduce_mxfp4_kernel ~132.7us + +local_mxfp4_opt device_total_us_per_iter=1958.8 + flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9 ~144.2us +``` + +CUDAGraph snapshot: + +```text +aiter_mxfp4_moe_us=1798.2 +local_mxfp4_aiter_ref_us=1794.3 +local_mxfp4_opt_us=1825.1 +``` + +Selected bench command after adding `--runners`: + +```bash +CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_aiter_ref,local_mxfp4_opt \ + --warmup 3 --graph-iters 5 --measure 3 +``` + +Result: + +```text +local_mxfp4_ref_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_ref_vs_aiter_mxfp4_max_abs=0.000000 +local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1822.3 +local_mxfp4_aiter_ref_us=1820.4 +local_mxfp4_opt_us=1829.0 +``` + +Current status: the first real migrated kernel is bitwise correct and within +roughly `+11-12us` of the aiter scatter kernel in profiler, `+31us` end to end +in one CUDAGraph run and `+9us` in the selected bench run above. The next step +is `gemm2_a4w4_mxfp4out`, because +that is the largest remaining single kernel and it defines the packed FP4 +output contract consumed by this scatter/reduce kernel. + +### Step 2: FlyDSL `gemm2_a4w4_mxfp4out` Candidate + +`kimi_fp4_moe_16384_opt.py` now contains +`kimi_mxfp4_gemm2_mxfp4out_16384`, an experimental fixed-shape FlyDSL port of +aiter's Kimi-only `mxfp4_moe_gemm2_a4w4_mxfp4out` path. + +The implemented contract matches the aiter mxfp4-out path: + +- input A is already sorted flat: `[max_sorted, 512 / 2]` packed FP4 +- input A scale is the shuffled scale buffer produced by aiter GEMM1 +- input B is the mxfp4 preshuffled W2 buffer +- output is sorted-row-major `flat_out_q` plus `flat_out_scale` +- output is consumed by `kimi_mxfp4_scatter_reduce_q_16384` + +The first version intentionally prioritizes correctness over scheduling: + +- BM=128, BN=256, BK=256, K=512 +- 2D grid: N block by sorted-M block +- no persistent work loop yet +- no AGPR accumulator inline-asm path yet +- f32 CShuffle-style epilogue quantizes 8 contiguous f32 values per thread +- uses `llvm.amdgcn.cvt.scalef32.pk.fp4.f32` for FP4 packing + +Validation: + +```text +local_mxfp4_opt_gemm2_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm2_vs_aiter_mxfp4_max_abs=0.000000 +``` + +CUDAGraph snapshot: + +```text +aiter_mxfp4_moe_us=1831.7 +local_mxfp4_aiter_ref_us=1822.5 +local_mxfp4_opt_us=1819.1 +local_mxfp4_opt_gemm2_us=2089.7 +``` + +Profiler snapshot: + +```text +local_mxfp4_aiter_ref: + aiter gemm2 mxfp4out ~856.4us + aiter scatter_reduce_q ~128.9us + +local_mxfp4_opt_gemm2: + flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0 ~1172.2us + flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9 ~139.9us +``` + +Conclusion: the GEMM2 port is bitwise correct, but not performance aligned. +The current gap is dominated by GEMM2 itself (`~+315us` in the profiler +snapshot). The most likely reasons are exactly the deliberate omissions: +aiter uses a persistent 1D grid capped around CU count and pins the BM=128 +non-atomic path accumulators into AGPRs; this FlyDSL v0 uses many more CTAs and +regular MFMA accumulator values. The next optimization target is to change the +FlyDSL GEMM2 launch/body to a persistent work loop, then investigate AGPR MFMA +inline asm or compiler support if the remaining gap is still large. + +### Step 3: FlyDSL `gemm1_a4w4` Candidate + +`kimi_fp4_moe_16384_opt.py` now contains +`kimi_mxfp4_gemm1_16384`, a fixed-shape FlyDSL candidate for aiter's selected +Kimi mxfp4 GEMM1: + +```text +mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128 +``` + +The runner wired into `bench_flydsl_16384.py` is: + +```text +local_mxfp4_opt_gemm1 +``` + +That path uses aiter sort, quant, sort_scales, a FlyDSL GEMM1, aiter GEMM2 +mxfp4out, and the existing FlyDSL scatter/reduce-q. + +Correctness fixes made during the port: + +- GEMM1 scale indexing must advance one `kBS_stride_k0_dw` per BK=256 tile. + The first draft used `k_tile * k_unroll * kBS_stride_k0_dw`, which skipped + every other scale block after tile 0. +- Invalid padded `m_indices` rows must read one-past the A buffer, matching + aiter's MUBUF OOB-zero behavior. Falling back to token 0 made padded rows + nonzero and broke the GEMM1 output. +- After those fixes, `inter_sorted_quant[:cumsum]` is bitwise exact versus + aiter GEMM1. The used prefix of `inter_sorted_shuffled_scale` is also exact; + unused tail bytes may differ because both outputs are allocated with + `torch.empty`. + +CUDAGraph snapshot on `CUDA_VISIBLE_DEVICES=6`: + +```text +local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.023438 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.023438 +aiter_mxfp4_moe_us=1850.6 +local_mxfp4_opt_us=1840.2 +local_mxfp4_opt_gemm1_us=2298.9 +``` + +Profiler snapshot on `CUDA_VISIBLE_DEVICES=6`: + +```text +local_mxfp4_aiter_ref: + device_kernel_calls_per_iter=8 + aiter gemm1 ~727.3us + aiter gemm2 mxfp4out ~916.3us + aiter scatter_reduce_q ~134.3us + +local_mxfp4_opt_gemm1: + device_kernel_calls_per_iter=8 + flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v0 ~1228.1us + aiter gemm2 mxfp4out ~861.4us + flydsl scatter_reduce_q ~137.5us +``` + +Kernel count status: aligned. The aiter reference, `local_mxfp4_opt`, and +`local_mxfp4_opt_gemm1` all launch 8 kernels per iteration: + +```text +sort_count +sort_cumsum +sort_place_pad +quant +sort_scales +gemm1 +gemm2_mxfp4out +scatter_reduce_q +``` + +Performance status: GEMM1 is functionally aligned but not performance aligned. +The current gap is about `+500us` in profiler (`~1228us` FlyDSL vs `~727us` +aiter). The known missing pieces are aiter's overlapped A/B/scale pipeline and +BM=128 AGPR accumulator inline-asm path. A quick attempt to express ping-pong A +staging at the Python level was not kept because it broke correctness and did +not improve time; this needs a more literal port of aiter's physical LDS slots +and wait/barrier schedule. + +### Step 4: GEMM1 Resource Inspection + +The selected aiter HIP GEMM1 instance was compiled with: + +```text +-Rpass-analysis=kernel-resource-usage +``` + +Selected source: + +```text +/root/up-aiter/aiter/jit/build/module_moe_mxfp4_gemm/blob/instances/mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128.cu +``` + +Compiler resource report: + +```text +TotalSGPRs: 49 +VGPRs: 165 +AGPRs: 168 +ScratchSize [bytes/lane]: 0 +Dynamic Stack: False +Occupancy [waves/SIMD]: 1 +SGPRs Spill: 0 +VGPRs Spill: 0 +LDS Size [bytes/block]: 131072 +``` + +The FlyDSL GEMM1 hsaco metadata currently reports: + +```text +agpr_count: 0 +sgpr_count: 46 +vgpr_count: 222 +sgpr_spill_count: 0 +vgpr_spill_count: 0 +private_segment_fixed_size: 0 +group_segment_fixed_size: 131072 +max_flat_workgroup_size: 256 +wavefront_size: 64 +``` + +Disassembly confirms the structural difference. aiter's MFMA accumulators are +allocated in AGPRs: + +```asm +v_mfma_scale_f32_16x16x128_f8f6f4 a[0:3], ... +v_mfma_scale_f32_16x16x128_f8f6f4 a[4:7], ... +``` + +The FlyDSL candidate currently accumulates into VGPRs: + +```asm +v_mfma_scale_f32_16x16x128_f8f6f4 v[2:5], ... +v_mfma_scale_f32_16x16x128_f8f6f4 v[6:9], ... +``` + +Local artifacts: + +```text +resource_inspect/aiter_gemm1_rpass/compile.stderr +resource_inspect/aiter_gemm1_rpass/aiter_gemm1_bm128.hsaco +resource_inspect/aiter_gemm1_rpass/aiter_gemm1_bm128.s +resource_inspect/flydsl_gemm1.hsaco +resource_inspect/flydsl_gemm1.s +``` + +Conclusion: this is not a spill problem. Both kernels have zero scratch and the +same 128KiB LDS allocation. The main confirmed resource gap is that aiter uses +168 AGPRs for accumulators while FlyDSL uses 0 AGPRs and raises VGPR pressure to +222. The next GEMM1 optimization should port the AGPR MFMA inline-asm path from +aiter before spending time on smaller schedule tweaks. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py new file mode 100644 index 000000000..adff8c675 --- /dev/null +++ b/kimi_fp4_moe_16384_opt.py @@ -0,0 +1,1907 @@ +"""Experimental Kimi fp4 MoE paths for the fixed M=16384 shape. + +This file is intentionally separate from ``kimi_fp4_moe_16384.py``. It keeps +the known-good FlyDSL GEMMs intact while extracting the relevant mxfp4_moe +orchestration from aiter for direct comparison and incremental migration. +""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import aiter +import flydsl.compiler as flyc +import flydsl.expr as fx +from aiter import dtypes +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from aiter.ops.flydsl.kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from aiter.ops.flydsl.kernels.mfma_epilogues import c_shuffle_epilog +from aiter.ops.flydsl.kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + BLOCK_M, + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, + kimi_fp4_stage1_16384, + kimi_fp4_stage2_16384, + kimi_moe_sorting_16384, +) + + +MXFP4_BLOCK_M = 128 +MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" +MXFP4_STAGE2_KERNEL = ( + "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _empty_bf16(device: torch.device) -> torch.Tensor: + return torch.empty((0,), dtype=dtypes.bf16, device=device) + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + q_nbytes = mxfp4_max_sorted_16384() * (MODEL_DIM // 2) + scale_nbytes = mxfp4_max_sorted_16384() * (MODEL_DIM // 32) + reverse_nbytes = TOKEN * TOPK * 4 + weights_nbytes = mxfp4_max_sorted_16384() * 4 + out_nbytes = TOKEN * MODEL_DIM * 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, scale_nbytes) + reverse_rsrc = _ptr_buffer_resource(arg_reverse_sorted, reverse_nbytes) + weights_rsrc = _ptr_buffer_resource(arg_sorted_weights, weights_nbytes) + out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + c0_f32 = arith.constant(0.0, type=f32) + + def _fma_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc = [c0_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + for i in range_constexpr(TOPK): + reverse_off = token_i32 * c_topk_i32 + arith.constant(i, type=i32) + sorted_pos = ArithValue( + buffer_ops.buffer_load(reverse_rsrc, reverse_off, vec_width=1, dtype=i32) + ) + route_w = buffer_ops.buffer_load(weights_rsrc, sorted_pos, vec_width=1, dtype=f32) + + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue( + buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i32) + ) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue( + buffer_ops.buffer_load(q_rsrc, q_idx, vec_width=1, dtype=i32, cache_modifier=4) + ) + decoded_pairs = [] + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pairs.append( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD): + decoded = vector.extract( + decoded_pairs[k // 2], + static_position=[k % 2], + dynamic_position=[], + ) + acc[k] = _fma_f32(decoded, route_w, acc[k]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + packed_words.append(rocdl.cvt_pk_bf16_f32(acc[2 * k], acc[2 * k + 1])) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + buffer_ops.buffer_store( + out_i32_vec, + out_rsrc, + out_word_off, + cache_modifier=4, + ) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a correctness-first BM128 port of aiter's selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _lds_acc_bytes = tile_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_offset + max(_single_x_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v0" + + @flyc.kernel(name=module_name) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + m_indices_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = buffer_ops.buffer_load(m_indices_rsrc, sorted_row_i, vec_width=1, dtype=i32) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + chunk_base = bx_m / arith.constant(32, index=True) + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + (chunk_base + arith.constant(mi, index=True)) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + for k_tile in range_constexpr(num_k_tiles): + gpu.barrier() + dma_x_tile_to_lds(k_tile) + b_tile = load_b_tile(k_tile) + a_scale = load_a_scale_tile(k_tile) + b_scale = load_b_scale_tile(k_tile) + rocdl.s_waitcnt(0) + gpu.barrier() + acc = compute_tile(acc, b_tile, a_scale, b_scale) + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + for mi in range_constexpr(m_repeat): + row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(32, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(128, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + scales_per_mr = [] + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for mr in range_constexpr(m_repeat): + row_local = arith.constant(mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp + up_col = gate_col + arith.constant(128, index=True) + gate_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = arith.maximumf(local_max, abs_v) + + peer1 = local_max.shuffle_xor(c1_i32, arith.constant(64, type=i32)) + local_max = arith.maximumf(local_max, peer1) + peer2 = local_max.shuffle_xor(c2_i32, arith.constant(64, type=i32)) + local_max = arith.maximumf(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_local) + byte_pos = ( + by * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + ku = by >> arith.constant(1, index=True) + ikxdl = by % arith.constant(2, index=True) + for sub in range_constexpr(tile_m // 32): + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[sub * 2] + hi = scales_per_mr[sub * 2 + 1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + ``mxfp4_moe_gemm2_a4w4_mxfp4out`` path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The initial version uses a simple 2D CTA grid for debuggability. The aiter + kernel uses a persistent 1D grid and AGPR MFMA accumulation; those are the + next performance-alignment steps once this path is numerically stable. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + x_row_base_div4.append((bx_m + row_local) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def load_a_scale_tile(scale_k_tile: int): + a_scale_tile = [] + chunk_base = bx_m / arith.constant(32, index=True) + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + (chunk_base + arith.constant(mi, index=True)) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + rocdl.sched_barrier(0) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def precompute_row(*, row_local, row): + row_i32 = arith.index_cast(i32, row) + row_valid = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) + return (row, row_valid) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = amax_bf16.shuffle_xor(c1_i32, arith.constant(64, type=i32)) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = amax_bf16.shuffle_xor(c2_i32, arith.constant(64, type=i32)) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=tile_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_row_to_lds, + precompute_row=precompute_row, + store_pair=store_pair, + ) + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + gpu.barrier() + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed mxfp4_moe three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=dtypes.i32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=dtypes.i32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=dtypes.i32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=dtypes.i32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=dtypes.fp32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) + m_indices = torch.empty((max_sorted,), device=device, dtype=dtypes.i32) + + aiter.mxfp4_moe_sort( + topk_ids=topk_ids, + topk_weight=topk_weight, + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + bf16_zero_out=_empty_bf16(device), + bf16_zero_workspace=_empty_bf16(device), + M_logical=TOKEN, + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + D_INTER=INTER_DIM, + MB=block_m, + prologue=1, + ) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +def expand_mxfp4_expert_ids_for_flydsl( + sorted_expert_ids: torch.Tensor, + *, + source_block_m: int = MXFP4_BLOCK_M, + target_block_m: int = BLOCK_M, +) -> torch.Tensor: + """Expand mxfp4 BM=128 expert ids into the BM=64 format FlyDSL expects.""" + if source_block_m == target_block_m: + return sorted_expert_ids + if source_block_m % target_block_m != 0: + raise ValueError( + f"cannot expand expert ids from block_m={source_block_m} " + f"to target_block_m={target_block_m}" + ) + return torch.repeat_interleave( + sorted_expert_ids, + source_block_m // target_block_m, + ) + + +def run_kimi_fp4_flydsl_mxfp4_sort_16384( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Use mxfp4_moe sorting, then run the existing fixed FlyDSL GEMMs.""" + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + flydsl_expert_ids = expand_mxfp4_expert_ids_for_flydsl( + sort.sorted_expert_ids, + source_block_m=sort.block_m, + target_block_m=BLOCK_M, + ) + moe_out = torch.empty( + (TOKEN, MODEL_DIM), + dtype=hidden_states.dtype, + device=hidden_states.device, + ) + a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( + hidden_states, + sorted_ids=sort.sorted_token_ids, + num_valid_ids=sort.cumsum_tensor, + token_num=TOKEN, + topk=TOPK, + block_size=sort.block_m, + num_rows=None, + ) + a2 = kimi_fp4_stage1_16384( + a1, + w1, + w1_scale.view(dtypes.fp8_e8m0), + a1_scale, + sort.sorted_token_ids, + flydsl_expert_ids, + sort.cumsum_tensor, + ) + a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( + a2.view(-1, INTER_DIM), + sorted_ids=sort.sorted_token_ids, + num_valid_ids=sort.cumsum_tensor, + token_num=TOKEN, + topk=TOPK, + block_size=sort.block_m, + num_rows=None, + ) + return kimi_fp4_stage2_16384( + a2_q.view(TOKEN, TOPK, -1), + w2, + w2_scale.view(dtypes.fp8_e8m0), + a2_scale, + sort.sorted_token_ids, + sort.sorted_weights, + flydsl_expert_ids, + sort.cumsum_tensor, + moe_out, + ) + + +def run_kimi_fp4_flydsl_atomic_stage2_16384( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Use the fixed FlyDSL stage1 and generic FlyDSL atomic stage2.""" + from aiter.ops.flydsl.moe_kernels import flydsl_moe_stage2 + + sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out = ( + kimi_moe_sorting_16384(topk_ids, topk_weight, hidden_states.dtype) + ) + a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( + hidden_states, + sorted_ids=sorted_ids, + num_valid_ids=num_valid_ids, + token_num=TOKEN, + topk=TOPK, + block_size=BLOCK_M, + num_rows=None, + ) + a2 = kimi_fp4_stage1_16384( + a1, + w1, + w1_scale.view(dtypes.fp8_e8m0), + a1_scale, + sorted_ids, + sorted_expert_ids, + num_valid_ids, + ) + a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( + a2.view(-1, INTER_DIM), + sorted_ids=sorted_ids, + num_valid_ids=num_valid_ids, + token_num=TOKEN, + topk=TOPK, + block_size=BLOCK_M, + num_rows=None, + ) + return flydsl_moe_stage2( + a2_q.view(TOKEN, TOPK, -1), + w2, + sorted_ids, + sorted_expert_ids, + num_valid_ids, + out=moe_out.zero_(), + topk=TOPK, + tile_m=64, + tile_n=256, + tile_k=256, + a_dtype="fp4", + b_dtype="fp4", + out_dtype="bf16", + mode="atomic", + w2_scale=w2_scale.view(dtypes.fp8_e8m0), + a2_scale=a2_scale, + sorted_weights=sorted_weights, + sort_block_m=BLOCK_M, + persist=True, + b_nt=0, + xcd_swizzle=4, + ) + + +def _run_mxfp4_pipeline_16384( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, + *, + use_flydsl_gemm1: bool = False, + use_flydsl_gemm2: bool = False, + use_flydsl_scatter_reduce_q: bool = False, +) -> torch.Tensor: + """Fixed-shape mxfp4 pipeline with per-kernel migration switches.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + aiter.mxfp4_moe_quant( + a_input=hidden_states, + a_quant=a_quant, + a_scale=a_scale, + bf16_zero_out=_empty_bf16(device), + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + MB=sort.block_m, + ) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + aiter.mxfp4_moe_sort_scales( + a_scale=a_scale, + sorted_token_ids=sort.sorted_token_ids, + cumsum_tensor=sort.cumsum_tensor, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + D_INTER=INTER_DIM, + MB=sort.block_m, + max_sorted=sort.max_sorted, + ) + + inter_sorted_quant = torch.empty( + (sort.max_sorted, INTER_DIM // 2), + device=device, + dtype=torch.uint8, + ) + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = sort.max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + if use_flydsl_gemm1: + kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + ) + else: + aiter.mxfp4_moe_gemm1_a4w4( + cumsum_tensor=sort.cumsum_tensor, + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w12_shuffled_quant=w1_u8, + w12_shuffled_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + hidden_states=hidden_states, + kernelName=MXFP4_STAGE1_KERNEL, + ) + + flat_out_q = torch.empty( + (sort.max_sorted, MODEL_DIM // 2), + dtype=torch.uint8, + device=device, + ) + flat_out_scale = torch.empty( + (sort.max_sorted, MODEL_DIM // 32), + dtype=torch.uint8, + device=device, + ) + if use_flydsl_gemm2: + kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + cumsum_tensor=sort.cumsum_tensor, + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + ) + else: + aiter.mxfp4_moe_gemm2_a4w4_mxfp4out( + cumsum_tensor=sort.cumsum_tensor, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w3_shuffled_quant=w2_u8, + w3_shuffled_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + NE=EXPERTS, + D_HIDDEN=MODEL_DIM, + D_INTER=INTER_DIM, + max_sorted=sort.max_sorted, + ) + + out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=device) + if use_flydsl_scatter_reduce_q: + kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + out=out, + ) + else: + aiter.mxfp4_moe_scatter_reduce_q( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + out=out, + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + MB=sort.block_m, + ) + return out + + +def run_kimi_fp4_mxfp4_moe_16384_aiter_ref( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Fixed-shape extraction of aiter's mxfp4 path, kept as the oracle.""" + return _run_mxfp4_pipeline_16384( + hidden_states, + w1, + w2, + topk_ids, + topk_weight, + w1_scale, + w2_scale, + use_flydsl_gemm1=False, + use_flydsl_gemm2=False, + use_flydsl_scatter_reduce_q=False, + ) + + +def run_kimi_fp4_mxfp4_moe_16384_opt( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Current migration candidate: aiter mxfp4 GEMMs plus FlyDSL scatter/reduce-q.""" + return _run_mxfp4_pipeline_16384( + hidden_states, + w1, + w2, + topk_ids, + topk_weight, + w1_scale, + w2_scale, + use_flydsl_gemm1=False, + use_flydsl_gemm2=False, + use_flydsl_scatter_reduce_q=True, + ) + + +def run_kimi_fp4_mxfp4_moe_16384_opt_gemm1( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Experimental candidate with FlyDSL GEMM1 plus FlyDSL scatter/reduce-q.""" + return _run_mxfp4_pipeline_16384( + hidden_states, + w1, + w2, + topk_ids, + topk_weight, + w1_scale, + w2_scale, + use_flydsl_gemm1=True, + use_flydsl_gemm2=False, + use_flydsl_scatter_reduce_q=True, + ) + + +def run_kimi_fp4_mxfp4_moe_16384_opt_gemm2( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Experimental candidate with FlyDSL GEMM2 MXFP4-out plus FlyDSL scatter/reduce-q.""" + return _run_mxfp4_pipeline_16384( + hidden_states, + w1, + w2, + topk_ids, + topk_weight, + w1_scale, + w2_scale, + use_flydsl_gemm1=False, + use_flydsl_gemm2=True, + use_flydsl_scatter_reduce_q=True, + ) diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py new file mode 100644 index 000000000..768a18d82 --- /dev/null +++ b/profile_flydsl_16384.py @@ -0,0 +1,176 @@ +import argparse +import sys +from collections import defaultdict +from pathlib import Path + +import torch +from torch.profiler import ProfilerActivity, profile + + +THIS_DIR = Path(__file__).resolve().parent +UP_AITER = Path("/root/up-aiter") +sys.path.insert(0, str(UP_AITER)) +sys.path.insert(0, str(THIS_DIR)) + +from bench_flydsl_16384 import ( # noqa: E402 + M, + SHAPE, + build_inputs, + build_weights, + make_runners, +) + + +def _is_cuda_event(evt) -> bool: + device_type = str(getattr(evt, "device_type", "")) + device_time = float(getattr(evt, "self_device_time_total", 0.0) or 0.0) + return device_time > 0.0 and "CUDA" in device_type.upper() + + +def _event_name(evt) -> str: + return getattr(evt, "name", None) or getattr(evt, "key", "") + + +def _profile_runner(fn, *, warmup: int, iters: int, trace_path: Path | None): + for _ in range(warmup): + fn() + torch.cuda.synchronize() + + with profile(activities=[ProfilerActivity.CUDA], record_shapes=False) as prof: + for _ in range(iters): + fn() + torch.cuda.synchronize() + + if trace_path is not None: + trace_path.parent.mkdir(parents=True, exist_ok=True) + prof.export_chrome_trace(str(trace_path)) + + events = [ + (_event_name(evt), float(evt.self_device_time_total)) + for evt in prof.events() + if _is_cuda_event(evt) + ] + return events + + +def _split_by_iteration(events, iters: int): + if not events: + return [] + if len(events) % iters != 0: + return [] + per_iter = len(events) // iters + chunks = [] + for i in range(iters): + chunks.append(events[i * per_iter : (i + 1) * per_iter]) + return chunks + + +def _print_ordered_report(name: str, events, iters: int, top: int | None): + chunks = _split_by_iteration(events, iters) + total_us = sum(us for _, us in events) / iters if iters else 0.0 + + print() + print(f"== {name} ==") + print(f"device_total_us_per_iter={total_us:.1f}") + + if not chunks: + print(f"device_kernel_events={len(events)}") + print("warning=kernel sequence could not be evenly split by iteration") + return + + per_iter = len(chunks[0]) + print(f"device_kernel_calls_per_iter={per_iter}") + print("ordered kernels:") + print(f"{'idx':>3} {'avg_us':>9} {'pct':>6} kernel") + + rows = [] + for idx in range(per_iter): + names = [chunk[idx][0] for chunk in chunks] + times = [chunk[idx][1] for chunk in chunks] + same_name = all(item == names[0] for item in names) + kernel = names[0] if same_name else "" + avg_us = sum(times) / len(times) + pct = 100.0 * avg_us / total_us if total_us else 0.0 + rows.append((idx, avg_us, pct, kernel)) + + rows_to_print = rows if top is None else rows[:top] + for idx, avg_us, pct, kernel in rows_to_print: + print(f"{idx:3d} {avg_us:9.1f} {pct:5.1f}% {kernel}") + + if top is not None and len(rows) > top: + hidden_us = sum(row[1] for row in rows[top:]) + print(f"... hidden_tail_us={hidden_us:.1f}") + + grouped = defaultdict(lambda: [0, 0.0]) + for kernel, us in events: + item = grouped[kernel] + item[0] += 1 + item[1] += us + + print("grouped kernels:") + print(f"{'calls/it':>8} {'avg_us/it':>10} {'avg_us/call':>12} kernel") + grouped_rows = [] + for kernel, (count, total) in grouped.items(): + calls_per_iter = count / iters + avg_per_iter = total / iters + avg_per_call = total / count + grouped_rows.append((avg_per_iter, calls_per_iter, avg_per_call, kernel)) + grouped_rows.sort(reverse=True) + grouped_to_print = grouped_rows if top is None else grouped_rows[:top] + for avg_per_iter, calls_per_iter, avg_per_call, kernel in grouped_to_print: + print( + f"{calls_per_iter:8.1f} {avg_per_iter:10.1f} " + f"{avg_per_call:12.1f} {kernel}" + ) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--runners", + default="aiter_mxfp4_moe,local_kimi_fp4,local_mxfp4_opt", + help="comma-separated runner names from bench_flydsl_16384.py", + ) + parser.add_argument("--warmup", type=int, default=5) + parser.add_argument("--iters", type=int, default=5) + parser.add_argument("--top", type=int, default=None) + parser.add_argument( + "--trace-dir", + default=None, + help="optional directory for Chrome trace .json.gz files", + ) + args = parser.parse_args() + + device = torch.device("cuda") + print(f"GPU: {torch.cuda.get_device_name(0)}") + print( + f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} " + f"INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}" + ) + print(f"warmup={args.warmup} iters={args.iters}") + + weights = build_weights(SHAPE, device) + hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) + runners = make_runners(hidden, topk_ids, topk_weight, weights) + + requested = [item.strip() for item in args.runners.split(",") if item.strip()] + unknown = [item for item in requested if item not in runners] + if unknown: + raise ValueError(f"unknown runners: {', '.join(unknown)}") + + trace_dir = Path(args.trace_dir) if args.trace_dir else None + for name in requested: + trace_path = trace_dir / f"profile_16384_{name}.json.gz" if trace_dir else None + events = _profile_runner( + runners[name], + warmup=args.warmup, + iters=args.iters, + trace_path=trace_path, + ) + _print_ordered_report(name, events, args.iters, args.top) + if trace_path is not None: + print(f"trace={trace_path}") + + +if __name__ == "__main__": + main() From 767164983b16a1699cc0ce58c10f8a1aa7e6f731 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 04:19:27 +0000 Subject: [PATCH 009/118] Relax Kimi mxfp4 GEMM1 pre-barrier wait Keep the fixed-shape FlyDSL GEMM1 single-buffered but wait only for the older A-to-LDS VMEM loads before the cross-wave barrier. Document grid differences and the validated v1 profiling result. --- docs/kimi_fp4_moe_16384_opt_notes.md | 109 +++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 7 +- 2 files changed, 114 insertions(+), 2 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index ce95d9841..7f16a3492 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -564,3 +564,112 @@ same 128KiB LDS allocation. The main confirmed resource gap is that aiter uses 168 AGPRs for accumulators while FlyDSL uses 0 AGPRs and raises VGPR pressure to 222. The next GEMM1 optimization should port the AGPR MFMA inline-asm path from aiter before spending time on smaller schedule tweaks. + +### Step 5: Grid and Waitcnt Comparison + +Current grid status for the fixed M=16384 mxfp4 path: + +```text +sort_count: grid=[16, 1, 1] block=[1024, 1, 1] +sort_cumsum: grid=[1, 1, 1] block=[1024, 1, 1] +sort_place_pad: grid=[16, 1, 1] block=[1024, 1, 1] +quant: grid=[512, 1, 1] block=[1024, 1, 1] +sort_scales: grid=[512, 1, 1] block=[1024, 1, 1] +aiter GEMM1: grid=[6136, 1, 1] block=[256, 1, 1] +FlyDSL GEMM1: grid=[4, 1534, 1] block=[256, 1, 1] +aiter GEMM2: grid=[256, 1, 1] block=[256, 1, 1] +FlyDSL GEMM2: grid=[28, 1534, 1] block=[256, 1, 1] +scatter_reduce_q: grid=[7, 16384, 1] block=[128, 1, 1] +``` + +GEMM1 launches the same number of CTAs: + +```text +1534 M blocks * 4 N blocks = 6136 CTAs +``` + +aiter expresses this as a 1D grid and maps `pid / 4` to M and `pid % 4` to N. +FlyDSL expresses the same logical work as a 2D grid with `x=N` and `y=M`. +This grid shape is not the main GEMM1 gap. + +GEMM2 is different: aiter's nonatomic mxfp4out path is persistent and launches +only `NUM_CU=256` CTAs, while the current FlyDSL GEMM2 candidate launches the +full logical tile grid: + +```text +28 N blocks * 1534 M blocks = 42952 CTAs +``` + +That explains why the GEMM2 candidate is also slower; it is not just a local +MFMA schedule issue. + +Static GEMM1 ISA counts before the waitcnt tweak: + +```text + aiter GEMM1 FlyDSL GEMM1 v0 +mfma_scale 1792 1792 +buffer_load 408 622 +ds_read 536 480 +ds_write 128 96 +s_waitcnt 320 499 +s_barrier 30 58 +s_nop 123 455 +``` + +The MFMA count is aligned, so the gap is in load/wait/barrier scheduling and +epilogue/control overhead. The original FlyDSL loop did: + +```text +barrier +A raw load -> LDS +B load -> VGPR +A/B scale load -> VGPR +s_waitcnt(0) +barrier +compute +``` + +The first small optimization keeps the single-LDS-buffer structure but changes +the pre-compute wait from `s_waitcnt(0)` to `s_waitcnt(14)`. For this GEMM1 +tile, each K tile issues: + +```text +8 A raw LDS VMEM loads +8 B vector VMEM loads +6 scale VMEM loads +``` + +Waiting until `vmcnt <= 14` is enough for the older 8 A->LDS loads to complete +before the cross-wave barrier. The newer B and scale loads can continue until +their values are actually consumed by the MFMA path. This mirrors the aiter +idea of not draining all VMEM before the barrier. + +Validated result for `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v1`: + +```text +CUDAGraph: + local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 + local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 + aiter_mxfp4_moe_us=1804.5 + local_mxfp4_opt_gemm1_us=2248.6 + +Profiler: + FlyDSL GEMM1 v1 ~1184.5us + previous FlyDSL GEMM1 v0 snapshot ~1226.6us + aiter GEMM1 snapshot ~725.0us +``` + +The v1 resource metadata remains: + +```text +agpr_count=0 +sgpr_count=46 +vgpr_count=222 +spill=0 +LDS=131072 +``` + +An attempted one-ahead LDS double-buffer/prefetch experiment reduced time a +little but produced incorrect output, so it was not kept. A correct version +needs to match aiter's physical LDS slot lifetime and explicit LDS read/write +ordering more closely instead of just moving Python-level loads. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index adff8c675..cbee71ca2 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -357,7 +357,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v0" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v1" @flyc.kernel(name=module_name) def gemm1( @@ -641,7 +641,10 @@ def _then_body(): b_tile = load_b_tile(k_tile) a_scale = load_a_scale_tile(k_tile) b_scale = load_b_scale_tile(k_tile) - rocdl.s_waitcnt(0) + # Only the raw A->LDS loads must be complete before the + # cross-wave barrier. B and scale VMEM loads can keep running + # until the MFMA path consumes them. + rocdl.s_waitcnt(14) gpu.barrier() acc = compute_tile(acc, b_tile, a_scale, b_scale) From 40aaeb3a696d605f3b2c5213de6ed518aa711042 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 05:18:03 +0000 Subject: [PATCH 010/118] Checkpoint runnable Kimi mxfp4 FlyDSL GEMM1 --- docs/kimi_fp4_moe_16384_opt_notes.md | 55 +++++++++++++++++ kimi_fp4_moe_16384_opt.py | 88 +++++++++++++++++++++++++--- 2 files changed, 136 insertions(+), 7 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 7f16a3492..a960d6fad 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -669,7 +669,62 @@ spill=0 LDS=131072 ``` +Because VGPR does not spill, AGPR is not the first required porting target. It +may still help occupancy or scheduling later, but the confirmed gap is currently +extra load/wait/barrier work in the FlyDSL GEMM1 body. + An attempted one-ahead LDS double-buffer/prefetch experiment reduced time a little but produced incorrect output, so it was not kept. A correct version needs to match aiter's physical LDS slot lifetime and explicit LDS read/write ordering more closely instead of just moving Python-level loads. + +### Step 6: GEMM1 Load Reduction Checkpoint + +The next two changes were kept in `kimi_fp4_moe_16384_opt.py` after validating +correctness against aiter mxfp4. + +First, the A raw LDS DMA byte count was fixed for packed FP4: + +```python +bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads +``` + +The old expression missed the FP4 pack ratio and loaded twice the required A +bytes per K tile. Static ISA counts changed from: + +```text +FlyDSL v1 buffer_load total: 622 + buffer_load_dwordx4 lds,offen: 224 +``` + +to: + +```text +FlyDSL v2 buffer_load total: 510 + buffer_load_dwordx4 lds,offen: 112 +``` + +That aligns the A raw vector load count with aiter, whose corresponding +`buffer_load_dwordx4 lds,offen` count is 116. + +Second, A scales were moved from per-K-tile global scalar loads into a CTA-level +LDS preload that mirrors aiter's `issue_a_scale_load` / `issue_a_scale_ds_read` +structure: + +```text +A scale global -> LDS once per CTA +MFMA loop reads A scale dwords from LDS +``` + +Validated CUDAGraph result for +`flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v3`: + +```text +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1813.3 +local_mxfp4_opt_gemm1_us=2148.7 +``` + +This is a runnable checkpoint. It improves the earlier v1 CUDAGraph snapshot +(`2248.6us`) but GEMM1 is still not fully aligned with aiter. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index cbee71ca2..0b15fecc3 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -322,12 +322,15 @@ def compile_kimi_mxfp4_gemm1_16384(): _eff_lds_stride = tile_k // a_elem_vec_pack _eff_tile_k_bytes = tile_k // a_elem_vec_pack _single_x_bytes = tile_m * _eff_lds_stride + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _single_x_bytes + _lds_scale_bytes _lds_acc_bytes = tile_m * tile_n * 4 gpu_arch = get_hip_arch() allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") lds_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_offset + max(_single_x_bytes, _lds_acc_bytes) + lds_scale_offset = lds_offset + _single_x_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) x_nbytes = TOKEN * (MODEL_DIM // 2) x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 @@ -357,7 +360,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v1" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v3" @flyc.kernel(name=module_name) def gemm1( @@ -412,6 +415,13 @@ def gemm1( base_ptr = allocator.get_base() lds_x = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() shape_lds = fx.make_shape(tile_m, _eff_lds_stride) @@ -440,7 +450,7 @@ def gemm1( n_blk_list[ni] = _div_pow2(global_n, 16) n_intra_list[ni] = global_n % arith.constant(16, index=True) - bytes_per_thread_x = tile_m * tile_k // total_threads + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads x_load_bytes = 16 num_x_loads = bytes_per_thread_x // x_load_bytes chunk_i32 = x_load_bytes // 4 @@ -515,15 +525,17 @@ def load_b_tile(k_tile: int): def load_a_scale_tile(k_tile: int): a_scale_tile = [] - chunk_base = bx_m / arith.constant(32, index=True) for mi in range_constexpr(m_repeat_packed): scale_idx = ( - (chunk_base + arith.constant(mi, index=True)) - * arith.constant(k_as_per_chunk_dw, index=True) + arith.constant(mi * k_as_per_chunk_dw, index=True) + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + lane_word ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) return a_scale_tile @@ -633,8 +645,70 @@ def dma_x_tile_to_lds(k_tile: int): arith.constant(0, type=i32), ) + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + def _then_body(): acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + for k_tile in range_constexpr(num_k_tiles): gpu.barrier() dma_x_tile_to_lds(k_tile) From 6ff8329524bba168cc9868f426d562898813b03e Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 05:27:44 +0000 Subject: [PATCH 011/118] Pipeline Kimi mxfp4 GEMM1 LDS loads --- docs/kimi_fp4_moe_16384_opt_notes.md | 74 ++++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 59 ++++++++++++++-------- 2 files changed, 112 insertions(+), 21 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index a960d6fad..4c7532da4 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -728,3 +728,77 @@ local_mxfp4_opt_gemm1_us=2148.7 This is a runnable checkpoint. It improves the earlier v1 CUDAGraph snapshot (`2248.6us`) but GEMM1 is still not fully aligned with aiter. + +### Step 7: GEMM1 Two-Slot A Pipeline + +The next useful optimization is `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v5`. +It changes the GEMM1 K loop from a single A LDS slot to two A LDS slots: + +```text +slot 0: compute K tile i +slot 1: preload A for K tile i + 1 +``` + +B and B-scale for the next tile are also issued before computing the current +tile. This mirrors the important part of aiter's two-stage GEMM1 pipeline +without changing FlyDSL compiler passes. + +The launch grid is not the main GEMM1 issue: + +```text +aiter GEMM1 CTA grid: 6136 x 1 x 1, block 256 +FlyDSL GEMM1 CTA grid: 4 x 1534 x 1, block 256 +``` + +Both are 6136 CTAs. `rocprofv3` reports global work-items, so the same launch +appears as: + +```text +aiter: Grid_Size=(1570816, 1, 1) +FlyDSL: Grid_Size=(1024, 1534, 1) +``` + +Static GEMM1 ISA counts after v5: + +```text + aiter GEMM1 FlyDSL GEMM1 v3 FlyDSL GEMM1 v5 +mfma_scale 1792 1792 1792 +buffer_load 408 414 414 +ds_read 536 543 543 +ds_write 128 96 96 +s_waitcnt 320 599 492 +s_barrier 30 58 31 +s_nop 123 388 416 +``` + +Validated CUDAGraph result for v5: + +```text +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1805.4 +local_mxfp4_opt_gemm1_us=2128.0 +``` + +Torch profiler snapshot for the GEMM1 kernel itself: + +```text +aiter GEMM1: 733.9us +FlyDSL v5: 1070.8us +``` + +Resource metadata from the FlyDSL cached artifact: + +```text +agpr_count=0 +sgpr_count=42 +vgpr_count=238 +spill=0 +LDS=131072 +``` + +This confirms the current remaining GEMM1 gap is no longer grid or raw load +count. The biggest static differences are now the extra `s_waitcnt` count and +the much larger `s_nop` scheduler padding. A tried source-level reorder that +held A fixed while sweeping N groups stayed correct but regressed CUDAGraph +time to about `2286.8us`, so it was not kept. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 0b15fecc3..46765f74e 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -322,14 +322,15 @@ def compile_kimi_mxfp4_gemm1_16384(): _eff_lds_stride = tile_k // a_elem_vec_pack _eff_tile_k_bytes = tile_k // a_elem_vec_pack _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _single_x_bytes + _lds_scale_bytes + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes _lds_acc_bytes = tile_m * tile_n * 4 gpu_arch = get_hip_arch() allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _single_x_bytes + lds_scale_offset = lds_offset + _x_slots_bytes allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) x_nbytes = TOKEN * (MODEL_DIM // 2) @@ -360,7 +361,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v3" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v5" @flyc.kernel(name=module_name) def gemm1( @@ -414,7 +415,9 @@ def gemm1( do_gemm = arith.andi(blk_valid, exp_valid) base_ptr = allocator.get_base() - lds_x = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() lds_scale_i32 = SmemPtr( base_ptr, @@ -555,10 +558,10 @@ def load_b_scale_tile(k_tile: int): b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) return b_scale_tile - def lds_load_packs_k64(curr_row_a_lds, col_base): + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x, [idx_a16]) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) return ( vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), @@ -573,7 +576,7 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): cbsz = 4 blgp = 4 - def compute_tile(acc_in, b_tile_in, a_scale, b_scale): + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): acc_list = list(acc_in) for k_idx in range_constexpr(k_unroll): ikxdl = k_idx @@ -588,7 +591,7 @@ def compute_tile(acc_in, b_tile_in, a_scale, b_scale): for imxdl in range_constexpr(pack_M): mi_idx = mi * pack_M + imxdl curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) for inxdl in range_constexpr(pack_N): ni_idx = ni * pack_N + inxdl @@ -615,7 +618,7 @@ def compute_tile(acc_in, b_tile_in, a_scale, b_scale): _dma_bytes = 16 _wave_size = 64 - def dma_x_tile_to_lds(k_tile: int): + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): c4_idx = arith.index(4) base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) lds_ptr_i64 = None @@ -628,7 +631,7 @@ def dma_x_tile_to_lds(k_tile: int): global_offset = arith.index_cast(i32, global_byte_idx) if const_expr(i == 0): lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x) + memref.extract_aligned_pointer_as_index(lds_x_tile) + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) ) lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) @@ -709,18 +712,32 @@ def _then_body(): rocdl.s_waitcnt(0) gpu.barrier() + dma_x_tile_to_lds(0, lds_x_slots[0]) + b_tile = load_b_tile(0) + b_scale = load_b_scale_tile(0) + rocdl.s_waitcnt(10) + gpu.barrier() + a_scale = load_a_scale_tile(0) + for k_tile in range_constexpr(num_k_tiles): - gpu.barrier() - dma_x_tile_to_lds(k_tile) - b_tile = load_b_tile(k_tile) - a_scale = load_a_scale_tile(k_tile) - b_scale = load_b_scale_tile(k_tile) - # Only the raw A->LDS loads must be complete before the - # cross-wave barrier. B and scale VMEM loads can keep running - # until the MFMA path consumes them. - rocdl.s_waitcnt(14) - gpu.barrier() - acc = compute_tile(acc, b_tile, a_scale, b_scale) + if const_expr(k_tile + 1 < num_k_tiles): + next_slot = (k_tile + 1) % 2 + dma_x_tile_to_lds(k_tile + 1, lds_x_slots[next_slot]) + b_tile_next = load_b_tile(k_tile + 1) + b_scale_next = load_b_scale_tile(k_tile + 1) + + curr_slot = k_tile % 2 + acc = compute_tile(acc, lds_x_slots[curr_slot], b_tile, a_scale, b_scale) + + if const_expr(k_tile + 1 < num_k_tiles): + # Only the next raw A->LDS loads must be complete before + # that LDS slot is read by the next compute tile. The next + # B and B-scale VMEM loads can remain outstanding. + rocdl.s_waitcnt(10) + gpu.barrier() + b_tile = b_tile_next + b_scale = b_scale_next + a_scale = load_a_scale_tile(k_tile + 1) gpu.barrier() From c4a9fbf4240e7f498cd2e203fba8571f411fccf2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 05:44:25 +0000 Subject: [PATCH 012/118] Checkpoint runnable Kimi mxfp4 GEMM1 optimization Current optimized FlyDSL GEMM1 path compiles and has been validated runnable; profiler/resource scratch outputs are intentionally left untracked. --- kimi_fp4_moe_16384_opt.py | 121 ++++++++++++++++++++++++++++++++------ 1 file changed, 103 insertions(+), 18 deletions(-) diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 46765f74e..2f992da55 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -94,6 +94,54 @@ def _ptr_buffer_resource(ptr, num_records_bytes: int): ) +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4).result + + +def _dpp_xor_f32(src, offset: int): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(False, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + @functools.lru_cache(maxsize=1) def compile_kimi_mxfp4_scatter_reduce_q_16384(): """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. @@ -361,7 +409,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v5" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v7" @flyc.kernel(name=module_name) def gemm1( @@ -390,9 +438,9 @@ def gemm1( w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - m_indices_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) tx = gpu.thread_id("x") by = gpu.block_id("x") @@ -400,16 +448,11 @@ def gemm1( bx_m = bx * arith.constant(tile_m, index=True) bx_m_i32 = arith.index_cast(i32, bx_m) - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) + num_valid_i32 = _global_load_i32(numids_ptr, 0) num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_i32 = _global_load_i32(expert_ptr, bx) expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) do_gemm = arith.andi(blk_valid, exp_valid) @@ -478,7 +521,7 @@ def gemm1( x_row_local.append(row_local) x_col_local_i32.append(col_local_i32) sorted_row_i = bx_m + row_local - actual_row = buffer_ops.buffer_load(m_indices_rsrc, sorted_row_i, vec_width=1, dtype=i32) + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) # aiter lets invalid padded rows read one-past the A buffer; MUBUF # OOB returns zero, which keeps padded inter rows zero. @@ -579,7 +622,6 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): acc_list = list(acc_in) for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx b_packs0, b_packs1 = b_tile_in[k_idx] col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) for mi in range_constexpr(m_repeat_packed): @@ -607,9 +649,52 @@ def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): acc_list[acc_idx], cbsz, blgp, - ikxdl * _scale_pack_m + imxdl, + k_idx * _scale_pack_m + imxdl, a_scale_val, - ikxdl * _scale_pack_n + inxdl, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + a_pairs = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + a128 = a_pairs[k_idx * m_repeat + mi_idx] + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, b_scale_val, ], ) @@ -727,7 +812,7 @@ def _then_body(): b_scale_next = load_b_scale_tile(k_tile + 1) curr_slot = k_tile % 2 - acc = compute_tile(acc, lds_x_slots[curr_slot], b_tile, a_scale, b_scale) + acc = compute_tile_jmajor(acc, lds_x_slots[curr_slot], b_tile, a_scale, b_scale) if const_expr(k_tile + 1 < num_k_tiles): # Only the next raw A->LDS loads must be complete before @@ -818,9 +903,9 @@ def _max_u32(a, b): abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) local_max = arith.maximumf(local_max, abs_v) - peer1 = local_max.shuffle_xor(c1_i32, arith.constant(64, type=i32)) + peer1 = _dpp_xor_f32(local_max, 1) local_max = arith.maximumf(local_max, peer1) - peer2 = local_max.shuffle_xor(c2_i32, arith.constant(64, type=i32)) + peer2 = _dpp_xor_f32(local_max, 2) local_max = arith.maximumf(local_max, peer2) amax_i32 = local_max.bitcast(i32) From 1af39d1f1e82c5ef9faacc751b376df742dd2617 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 06:17:51 +0000 Subject: [PATCH 013/118] Optimize Kimi mxfp4 GEMM1 scheduling --- docs/kimi_fp4_moe_16384_opt_notes.md | 190 +++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 133 ++++++++++++++++--- 2 files changed, 306 insertions(+), 17 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 4c7532da4..f749d130e 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -802,3 +802,193 @@ count. The biggest static differences are now the extra `s_waitcnt` count and the much larger `s_nop` scheduler padding. A tried source-level reorder that held A fixed while sweeping N groups stayed correct but regressed CUDAGraph time to about `2286.8us`, so it was not kept. + +### Step 8: v7 Load Count and ATT Checkpoint + +The current committed checkpoint is: + +```text +c4a9fbf4 Checkpoint runnable Kimi mxfp4 GEMM1 optimization +``` + +`kimi_fp4_moe_16384_opt.py` is back at module suffix `v7`. This version is +bit-exact against aiter mxfp4 for GEMM1: + +```text +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +``` + +The pipeline kernel count is aligned with aiter mxfp4: both paths launch 8 +kernels. GEMM1 launch shape is also equivalent in CTA count: + +```text +aiter GEMM1: wg=(256,1,1), grid=(1570816,1,1) threads = 6136 CTAs +FlyDSL v7: wg=(256,1,1), grid=(1024,1534,1) threads = 6136 CTAs +``` + +Static ISA confirms the important global load widths/counts are now aligned: + +```text + aiter GEMM1 FlyDSL GEMM1 v7 +v_mfma 1792 1792 +buffer_load 408 408 +buffer_load_x4 340 340 +buffer_load_dw 68 68 +global_load 4 4 +ds_read 536 543 +ds_write 128 96 +s_waitcnt 320 121 +s_barrier 30 31 +s_nop 123 441 +``` + +So the remaining gap is not extra `buffer_load` instructions or a different +preshuffle load width. The remaining differences are scheduling/LDS details: +FlyDSL still has more compiler scheduler padding and slightly different LDS +traffic. + +ATT decode for v7 shows the practical bottleneck more clearly: + +```text +aiter GEMM1: + total cycles 5.49M + total stalls 3.62M (65.9%) + MFMA/FMA 1.43M + VMEM-load 740.9K + VMEM-wait 644.9K + LDS 386.6K + barrier 166.8K + +FlyDSL GEMM1 v7: + total cycles 8.20M + total stalls 6.61M (80.6%) + VMEM-wait 2.54M + MFMA/FMA 1.71M + VMEM-load 1.28M + barrier 656.8K + LDS 147K + LDS/SMEMwait 129.7K +``` + +The next optimization target is therefore source scheduling: preserve the +matched load counts but make the K loop closer to aiter's `run_one` sequence, +where B/B-scale loads are issued per J cluster around MFMA clusters instead of +creating long outstanding VMEM regions that later force large waits. + +A v8 experiment moved A LDS reads before issuing the next tile's A/B VMEM +prefetch. It remained correct: + +```text +cos=1.000000 +max_abs=0.000000 +``` + +but regressed CUDAGraph time from the v7 range (`~2059-2078us`) to +`~2105-2148us`, likely because it reduced useful B-load overlap. That source +change was removed and should not be used as the next baseline. + +### Step 9: v9-v11 GEMM1 Scheduling Alignment + +The next successful direction was to match aiter's K-loop schedule more closely +instead of changing load counts. + +`v9` changed B from one-ahead to two-ahead: + +```text +initial: load B0 and B1 +loop K=i: compute with B_i, issue B_{i+2} by J cluster +``` + +This stayed bit-exact and improved GEMM1 from the v7 `~997-1042us` profiler +range to: + +```text +FlyDSL GEMM1 v9: 964.3us +``` + +ATT showed this was directionally useful but still wrong for A scheduling: +issuing future A before reading current A caused many compiler-inserted +`s_waitcnt vmcnt(0)` waits at the current A LDS read. + +`v10` fixed the order to the aiter shape: + +```text +read current A from LDS +issue future A -> LDS +compute current J cluster +issue future B for that J +``` + +This removed the large pre-A-read VMEM wait cluster. Results: + +```text +CUDAGraph short: + aiter_mxfp4_moe_us=1824.7 + local_mxfp4_opt_gemm1_us=1851.2 + +Torch profiler: + aiter GEMM1=729.8us + FlyDSL GEMM1 v10=752.7us + +ATT v10: + total cycles 5.63M + total stalls 3.89M (69.1%) + MFMA/FMA 1.47M + VMEM-wait 894.6K + VMEM-load 576.0K + LDS 413.2K + barrier 150.5K +``` + +`v11` then made A two-ahead as well: + +```text +initial: load A0/A1 and B0/B1 +loop K=i: read A_i, issue A_{i+2}, compute B_i, issue B_{i+2} +barrier wait keeps the newest future A+B tile outstanding +``` + +This remains bit-exact: + +```text +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +``` + +Longer CUDAGraph run: + +```text +CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ + --warmup 5 --graph-iters 20 --measure 20 + +aiter_mxfp4_moe_us=1816.8 +local_mxfp4_opt_gemm1_us=1845.2 +``` + +Profiler snapshot from a separate run: + +```text +aiter GEMM1=729.7us +FlyDSL GEMM1 v11=761.5us +``` + +ATT v11: + +```text +instructions 4479 +total cycles 5.83M +total stalls 4.01M (68.8%) +MFMA/FMA 1.53M +VMEM-wait 792.1K +VMEM-load 669.3K +LDS 430.2K +barrier 211.5K +``` + +Current conclusion: the main scheduling gap has been closed at the Python +level. Static load counts still match aiter (`buffer_load=408`, `MFMA=1792`). +The remaining GEMM1 difference is now small and is likely in lower-level +scheduling details, MFMA operand/register allocation, and the FlyDSL lowering +around waits/barriers rather than missing Python-level work. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 2f992da55..f1187f963 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -409,7 +409,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v7" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v11" @flyc.kernel(name=module_name) def gemm1( @@ -567,6 +567,20 @@ def load_b_tile(k_tile: int): b_tile.append((packs0, packs1)) return b_tile + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 def load_a_scale_tile(k_tile: int): @@ -700,6 +714,70 @@ def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): ) return acc_list + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + a128 = a_pairs[k_idx * m_repeat + mi_idx] + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + _dma_bytes = 16 _wave_size = 64 @@ -798,31 +876,52 @@ def _then_body(): gpu.barrier() dma_x_tile_to_lds(0, lds_x_slots[0]) - b_tile = load_b_tile(0) - b_scale = load_b_scale_tile(0) - rocdl.s_waitcnt(10) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) gpu.barrier() a_scale = load_a_scale_tile(0) for k_tile in range_constexpr(num_k_tiles): - if const_expr(k_tile + 1 < num_k_tiles): - next_slot = (k_tile + 1) % 2 - dma_x_tile_to_lds(k_tile + 1, lds_x_slots[next_slot]) - b_tile_next = load_b_tile(k_tile + 1) - b_scale_next = load_b_scale_tile(k_tile + 1) - curr_slot = k_tile % 2 - acc = compute_tile_jmajor(acc, lds_x_slots[curr_slot], b_tile, a_scale, b_scale) + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + ) if const_expr(k_tile + 1 < num_k_tiles): - # Only the next raw A->LDS loads must be complete before - # that LDS slot is read by the next compute tile. The next - # B and B-scale VMEM loads can remain outstanding. - rocdl.s_waitcnt(10) + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) gpu.barrier() - b_tile = b_tile_next - b_scale = b_scale_next a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next gpu.barrier() From eac281aea11dae68b4b0b97d4a169716d64941b1 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 06:38:37 +0000 Subject: [PATCH 014/118] Document Kimi GEMM1 resource audit --- docs/kimi_fp4_moe_16384_opt_notes.md | 68 ++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index f749d130e..f475e44ad 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -992,3 +992,71 @@ level. Static load counts still match aiter (`buffer_load=408`, `MFMA=1792`). The remaining GEMM1 difference is now small and is likely in lower-level scheduling details, MFMA operand/register allocation, and the FlyDSL lowering around waits/barriers rather than missing Python-level work. + +## GEMM1 Grid / Resource Audit + +The current saved code is commit `1af39d1f Optimize Kimi mxfp4 GEMM1 scheduling`. +The code state intentionally remains v11 after later experiments did not give a +stable win. + +GEMM1 launch/resource comparison from rocprof kernel traces: + +| kernel | workgroup | grid reported by rocprof | CTA count | LDS | VGPR | AGPR | SGPR | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| aiter GEMM1 | 256 | `(1570816, 1, 1)` | `1570816 / 256 = 6136` | 131072 | 168 | 0 | 112 | +| FlyDSL GEMM1 v11 | 256 | `(1024, 1534, 1)` | `(1024 / 256) * 1534 = 6136` | 131072 | 168 | 0 | 112 | +| FlyDSL GEMM1 v18 experiment | 256 | `(1024, 1534, 1)` | `(1024 / 256) * 1534 = 6136` | 131072 | 168 | 0 | 112 | + +So the grid shape differs (`aiter` flattens to 1D, FlyDSL uses `(N block, M +block)`), but the physical CTA count and resource numbers match. Since `N` +has four blocks, FlyDSL's 2D launch maps to the same logical tile order aiter +gets from `pid / 4` and `pid % 4`; changing to 1D would mainly add block-id +decode arithmetic unless the backend scheduler treats 1D/2D dispatch +differently. + +Static ATT instruction counts also show that the suspected extra preshuffle +loads are not the remaining issue: + +| instruction group | aiter | FlyDSL v11/v18 | +| --- | ---: | ---: | +| `v_mfma` | 1792 | 1792 | +| `buffer_load_dwordx4` | 340 | 340 | +| `buffer_load_dword` | 68 | 68 | +| `global_load` | 4 | 4 | + +Remaining notable static differences: + +| group | aiter | FlyDSL v11 | +| --- | ---: | ---: | +| total instructions | 4368 | 4479 | +| `s_waitcnt` | 320 | 375 | +| `s_barrier` | 30 | 31 | +| `ds_read` | 536 | 543 | +| `ds_write` | 128 | 96 | +| `v_add*` bucket | 143 | 255 | +| `v_or*` bucket | 55 | 133 | +| max ops | `v_max_f32/v_max3_f32` | `v_maximum3_f32` | + +Negative experiments after v11: + +- v18 changed MFMA operand packing from padded `i32x8` to direct `i32x4`. + It stayed bit-exact, but static ISA stayed effectively unchanged and long + CUDAGraph/profiler runs were not consistently faster. Not retained. +- Waitcnt bitfield encoder experiments with explicit `vmcnt=15/13` were + bit-exact but slower than the existing raw wait values. Not retained. +- Epilogue `local_max = fabs(result[0])` matched aiter source more closely but + slowed the measured GEMM1 path. Not retained. +- v20 forced volatile scalar LDS stores in the C-shuffle epilogue to avoid + `ds_write2_b32`. Without an explicit wait it was numerically unstable; with + the wait it was bit-exact but slower (`aiter_mxfp4_moe_us=1815.6`, + `local_mxfp4_opt_gemm1_us=1838.0` in a short graph run). Not retained. + +Next optimization targets: + +1. Reduce FlyDSL's extra epilogue/address arithmetic (`v_add*`, `v_or*`) if it + can be done without changing correctness. +2. Investigate why FlyDSL emits more `s_waitcnt` and one extra barrier in the + generated ISA. +3. Treat the Python-level GEMM1 schedule as close to the current ceiling until + a lowering/pass or targeted inline-asm change removes static instruction + differences. From 9a5b943c68fb8c170a209ef6915de43ea9851ed9 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 06:46:59 +0000 Subject: [PATCH 015/118] Tune Kimi GEMM1 epilogue max lowering --- docs/kimi_fp4_moe_16384_opt_notes.md | 76 ++++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 12 +++-- 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index f475e44ad..7815ad0ca 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1060,3 +1060,79 @@ Next optimization targets: 3. Treat the Python-level GEMM1 schedule as close to the current ceiling until a lowering/pass or targeted inline-asm change removes static instruction differences. + +## Relaxed-Correctness GEMM1 v21 + +The correctness target was relaxed from bit-exact replacement to cosine-level +similarity. Under that target, v21 keeps the v11 schedule and changes only the +epilogue max reduction used for MXFP4 scale selection: + +```python +arith.maximumf(...) +``` + +becomes: + +```python +arith.MaxNumFOp(..., fastmath=arith.FastMathFlags.fast) +``` + +This aligns the generated max instructions more closely with aiter and removes +the `v_maximum3_f32` sequence from FlyDSL GEMM1. + +ATT static comparison: + +| group | aiter | FlyDSL v11 | FlyDSL v21 | +| --- | ---: | ---: | ---: | +| total instructions | 4368 | 4480 | 4480 | +| `v_mfma` | 1792 | 1792 | 1792 | +| `buffer_load_dwordx4` | 340 | 340 | 340 | +| `buffer_load_dword` | 68 | 68 | 68 | +| `global_load` | 4 | 4 | 4 | +| `v_maximum3` | 0 | 48 | 0 | +| `v_max3_f32` | 24 | 0 | 32 | +| `v_max_f32` | 40 | 0 | 16 | +| `s_waitcnt` | 320 | 375 | 375 | +| `s_barrier` | 30 | 31 | 31 | + +The full buffer-load variant breakdown remains exactly matched in v21: + +| buffer-load variant | count | +| --- | ---: | +| `buffer_load_dword lds,offen` | 12 | +| `buffer_load_dword offen` | 4 | +| `buffer_load_dword offen,offset` | 52 | +| `buffer_load_dwordx4 lds,offen` | 116 | +| `buffer_load_dwordx4 offen` | 56 | +| `buffer_load_dwordx4 offen,offset` | 168 | + +Measurements on GPU 6: + +```text +CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ + --warmup 8 --graph-iters 40 --measure 40 + +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1811.1 +local_mxfp4_opt_gemm1_us=1833.2 +``` + +Sanity rerun: + +```text +CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ + --warmup 5 --graph-iters 20 --measure 20 + +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1814.4 +local_mxfp4_opt_gemm1_us=1836.7 +``` + +A direct global-store experiment (`v23`) was also tested to mimic aiter's +`global_store` epilogue instead of FlyDSL `buffer_store`. It was not retained: +it produced `cos=0.999992`, `max_abs=1.007812`, and `local_mxfp4_opt_gemm1_us=1841.0` +in a short graph run. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index f1187f963..856eaf3f9 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -409,7 +409,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v11" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v21" @flyc.kernel(name=module_name) def gemm1( @@ -939,6 +939,10 @@ def _then_body(): c23_i32 = arith.constant(23, type=i32) c254_i32 = arith.constant(254, type=i32) c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) for mi in range_constexpr(m_repeat): row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) @@ -1000,12 +1004,12 @@ def _max_u32(a, b): res = _silu_mul(gate_v, up_v) result_vals.append(res) abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = arith.maximumf(local_max, abs_v) + local_max = _fmax_num(local_max, abs_v) peer1 = _dpp_xor_f32(local_max, 1) - local_max = arith.maximumf(local_max, peer1) + local_max = _fmax_num(local_max, peer1) peer2 = _dpp_xor_f32(local_max, 2) - local_max = arith.maximumf(local_max, peer2) + local_max = _fmax_num(local_max, peer2) amax_i32 = local_max.bitcast(i32) quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 From a471ed43a829bf3b9ffded51774805ce2871ae20 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 10:14:40 +0000 Subject: [PATCH 016/118] Optimize Kimi mxfp4 FlyDSL GEMM2 --- bench_flydsl_16384.py | 24 + docs/kimi_fp4_moe_16384_opt_notes.md | 383 +++++++ gpu_select.py | 205 ++++ kimi_fp4_moe_16384_opt.py | 1440 ++++++++++++++++++++------ profile_flydsl_16384.py | 4 + 5 files changed, 1756 insertions(+), 300 deletions(-) create mode 100644 gpu_select.py diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index fbf1d7d3c..a82d90333 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -1,5 +1,9 @@ import os os.system("rm -rf ~/.flydsl") +from gpu_select import bind_empty_gpu_for_torch + +bind_empty_gpu_for_torch("bench_flydsl_16384") + import argparse import sys from dataclasses import dataclass @@ -37,6 +41,7 @@ run_kimi_fp4_flydsl_atomic_stage2_16384, run_kimi_fp4_flydsl_mxfp4_sort_16384, run_kimi_fp4_mxfp4_moe_16384_aiter_ref, + run_kimi_fp4_mxfp4_moe_16384_all_flydsl, run_kimi_fp4_mxfp4_moe_16384_opt, run_kimi_fp4_mxfp4_moe_16384_opt_gemm1, run_kimi_fp4_mxfp4_moe_16384_opt_gemm2, @@ -239,6 +244,18 @@ def run_local_mxfp4_aiter_ref(hidden, topk_ids, topk_weight, weights): ) +def run_local_mxfp4_all_flydsl(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + def make_runners(hidden, topk_ids, topk_weight, weights): return { "aiter_moe": lambda: run_aiter_moe( @@ -295,6 +312,12 @@ def make_runners(hidden, topk_ids, topk_weight, weights): topk_weight, weights["mxfp4"], ), + "local_mxfp4_all_flydsl": lambda: run_local_mxfp4_all_flydsl( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), } @@ -390,6 +413,7 @@ def main(): ("local_mxfp4_opt_vs_aiter_mxfp4", "local_mxfp4_opt", "aiter_mxfp4_moe"), ("local_mxfp4_opt_gemm1_vs_aiter_mxfp4", "local_mxfp4_opt_gemm1", "aiter_mxfp4_moe"), ("local_mxfp4_opt_gemm2_vs_aiter_mxfp4", "local_mxfp4_opt_gemm2", "aiter_mxfp4_moe"), + ("local_mxfp4_all_flydsl_vs_aiter_mxfp4", "local_mxfp4_all_flydsl", "aiter_mxfp4_moe"), ] for name, lhs_name, rhs_name in check_specs: if lhs_name not in outputs or rhs_name not in outputs: diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 7815ad0ca..6aaf40a16 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1136,3 +1136,386 @@ A direct global-store experiment (`v23`) was also tested to mimic aiter's `global_store` epilogue instead of FlyDSL `buffer_store`. It was not retained: it produced `cos=0.999992`, `max_abs=1.007812`, and `local_mxfp4_opt_gemm1_us=1841.0` in a short graph run. + +Current acceptance rule: the GEMM1 replacement no longer needs to be bit-exact +against aiter. Candidate kernels are acceptable when their final MoE output is +finite and cosine-similar to the aiter mxfp4 path. This keeps fastmath, +instruction-order, and scale/rounding variants in scope even when `max_abs` +changes. + +Additional negative experiments after v21: + +- v24 initialized the epilogue max from `fabs(result[0])` like the aiter C++ + source, then reduced the remaining seven values. It stayed cosine-equivalent + but regressed the short graph run to about `1839.3us`. Not retained. +- v25 merged the initial A-scale wait/barrier with the A0/A1/B0/B1 prologue + wait. It stayed cosine-equivalent but regressed to about `1840.3us`. Not + retained. +- v26 replaced the main-loop `rocdl.s_waitcnt(14)` with inline asm + `s_waitcnt vmcnt(10)`. It was slower at about `1840.7us`. Not retained. +- v27 moved the initial A-scale wait into a combined `vmcnt(20)` prologue wait. + It stayed cosine-equivalent with small `max_abs` drift but measured about + `1838.7us`. Not retained. +- v28 changed B-q loads to use scalar `soffset` plus per-lane `voffset`, closer + to aiter's source. It regressed to about `1847.1us`. Not retained. +- v29 simplified the B-q N address formula using lane-local constants. It stayed + cosine-equivalent but regressed to about `1851.0us`. Not retained. +- v30 added fastmath to the SiLU add/mul chain. It stayed cosine-equivalent but + regressed to about `1851.1us`. Not retained. + +Follow-up relaxed-scale experiments: + +- v31 forced GEMM1 output scale to exponent byte `123`, which is the dominant + byte in the aiter output scale distribution for this synthetic benchmark. It + failed the relaxed correctness target (`cos=0.790916`) and did not improve + speed (`local_mxfp4_opt_gemm1_us=1837.5` in a short graph run). Not retained. +- v32 removed the cross-kk max reduction and broadcast the kk0 lane's scale + across the 32-column group. It also failed the relaxed correctness target + (`cos=0.891668`) and regressed speed (`local_mxfp4_opt_gemm1_us=1841.8` in a + short graph run). Not retained. + +The best retained GEMM1 remains v21. + +Latest CUDAGraph total timings on GPU 6: + +```text +CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_opt,local_mxfp4_opt_gemm1 \ + --warmup 5 --graph-iters 20 --measure 20 + +local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 +aiter_mxfp4_moe_us=1813.2 +local_mxfp4_opt_us=1833.8 +local_mxfp4_opt_gemm1_us=1835.9 +``` + +Latest non-CUDAGraph torch-profiler per-kernel breakdown on GPU 6 +(`warmup=3`, `iters=5`): + +| path / kernel | avg us | +| --- | ---: | +| aiter sort_count | 6.7 | +| aiter sort_cumsum | 10.7 | +| aiter sort_place_pad | 33.3 | +| aiter quant | 53.3 | +| aiter sort_scales | 60.2 | +| aiter GEMM1 | 718.9 | +| aiter GEMM2 | 907.0 | +| aiter scatter_reduce | 131.1 | +| aiter total | 1921.3 | +| local opt sort_count | 6.7 | +| local opt sort_cumsum | 11.9 | +| local opt sort_place_pad | 35.0 | +| local opt quant | 58.7 | +| local opt sort_scales | 65.2 | +| local opt aiter GEMM1 | 733.1 | +| local opt aiter GEMM2 | 906.4 | +| local opt FlyDSL scatter_reduce | 137.6 | +| local opt total | 1954.6 | +| local opt GEMM1 sort_count | 6.6 | +| local opt GEMM1 sort_cumsum | 10.9 | +| local opt GEMM1 sort_place_pad | 33.7 | +| local opt GEMM1 quant | 58.8 | +| local opt GEMM1 sort_scales | 61.4 | +| local opt GEMM1 FlyDSL GEMM1 v21 | 741.0 | +| local opt GEMM1 aiter GEMM2 | 906.8 | +| local opt GEMM1 FlyDSL scatter_reduce | 137.6 | +| local opt GEMM1 total | 1956.9 | + +## Full FlyDSL Initial Migration + +The first all-FlyDSL mxfp4 pipeline is now wired as +`local_mxfp4_all_flydsl`. This path uses fixed-shape FlyDSL kernels for every +runtime stage: + +1. `flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v0` +2. `flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v0` +3. `flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v0` +4. `flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0` +5. `flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0` +6. `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v21` +7. `flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0` +8. `flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9` + +Correctness checks: + +- FlyDSL sort now matches aiter's `cumsum`, `masked_m`, full + `sorted_expert_ids` including the unused tail, `reverse_sorted` token/topk + mapping, `m_indices`, and `sorted_weights`. +- FlyDSL quant is bitwise equal to aiter for both `a_quant` and `a_scale`. +- FlyDSL sort_scales is bitwise equal to aiter for the consumed shuffled scale + byte range. +- End-to-end all-FlyDSL output matches aiter mxfp4: + +```text +CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 0 --graph-iters 1 --measure 1 + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=2245.7 +local_mxfp4_all_flydsl_us=2738.0 +``` + +Initial non-CUDAGraph profiler breakdown (`warmup=1`, `iters=2`): + +| stage | kernel | avg us | +| --- | --- | ---: | +| sort_count | FlyDSL v0 | 189.2 | +| sort_cumsum | FlyDSL v0 | 227.1 | +| sort_place_pad | FlyDSL v0 | 194.8 | +| quant | FlyDSL v0 | 61.1 | +| sort_scales | FlyDSL v0 | 58.7 | +| GEMM1 | FlyDSL v21 | 738.6 | +| GEMM2 | FlyDSL v0 | 1233.4 | +| scatter_reduce_q | FlyDSL | 138.4 | +| total | all FlyDSL | 2841.3 | + +The aux kernels intentionally prioritize algorithm/precision alignment over +performance. The obvious next optimization targets are the three sort kernels +and GEMM2 v0. + +## Sort Kernel v1 Optimization + +The initial FlyDSL sort used global atomics directly in `sort_count` and +`sort_place_pad`, and did most of `sort_cumsum` on thread 0. v1 ports the key +aiter structure: + +- `sort_count`: per-CTA `local_count[NE]` in LDS with LDS atomic add, then one + global write per expert. +- `sort_place_pad`: per-CTA `local_offsets[NE]` plus `row_starts[NE+1]` in LDS, + with LDS atomic add for placement. +- `sort_cumsum`: each thread handles one expert's 16 CTA counts, thread 0 only + performs the prefix scan over padded counts, then experts update + `block_offsets` and `sorted_expert_ids` in parallel. + +Correctness after v1: + +- `cumsum`, `masked_m`, full `sorted_expert_ids`, `reverse_sorted` token/topk + mapping, `m_indices`, and `sorted_weights` match the aiter three-stage sort. +- End-to-end all-FlyDSL output remains bitwise equal to aiter mxfp4: + +```text +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +``` + +Profiler comparison for the three FlyDSL sort kernels: + +| kernel | v0 avg us | v1 avg us | +| --- | ---: | ---: | +| sort_count | 189.2 | 7.2 | +| sort_cumsum | 227.1 | 16.6 | +| sort_place_pad | 194.8 | 35.8 | +| sort total | 611.1 | 59.6 | + +The remaining sort gap versus aiter is now small enough that GEMM2 v0 is again +the dominant all-FlyDSL bottleneck. + +## Pure Aiter vs Pure FlyDSL Snapshot + +`bench_flydsl_16384.py` and `profile_flydsl_16384.py` now auto-select a clean +GPU before importing torch. The selector uses `rocm-smi`, chooses the physical +GPU with the lowest process VRAM, and exits if no GPU has process VRAM below +1KB. It binds the process by setting `HIP_VISIBLE_DEVICES`, +and `CUDA_VISIBLE_DEVICES`. It intentionally does not set +`ROCR_VISIBLE_DEVICES`, because combining ROCR and HIP filters can hide the +selected device when the physical GPU index is not zero. + +Measured with the current all-FlyDSL path and no mixed local-opt middle variant: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 3 --iters 10 --top 30 + +[profile_flydsl_16384] Auto-selected GPU 0 (process_vram=0B, total_used=297766912B) +``` + +| stage | pure aiter | pure FlyDSL | delta | ratio | +| --- | ---: | ---: | ---: | ---: | +| sort_count | 6.4 us | 6.7 us | +0.3 us | 1.05x | +| sort_cumsum | 10.3 us | 16.2 us | +5.9 us | 1.57x | +| sort_place_pad | 32.4 us | 36.8 us | +4.4 us | 1.14x | +| quant | 58.6 us | 63.0 us | +4.4 us | 1.08x | +| sort_scales | 56.8 us | 57.6 us | +0.8 us | 1.01x | +| GEMM1 | 716.5 us | 735.3 us | +18.8 us | 1.03x | +| GEMM2 | 892.8 us | 1176.8 us | +284.0 us | 1.32x | +| scatter_reduce | 135.2 us | 148.4 us | +13.2 us | 1.10x | +| total | 1909.1 us | 2240.8 us | +331.7 us | 1.17x | + +Both paths launch 8 device kernels. On a clean GPU, sort_scales is essentially +matched; the remaining all-FlyDSL gap is dominated by GEMM2. + +CUDAGraph end-to-end timing from the same snapshot: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --graph-iters 20 --measure 20 + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1855.2 +local_mxfp4_all_flydsl_us=2146.7 +``` + +GEMM2 v1 persistent resource comparison: + +| kernel | grid | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| aiter GEMM2 nonatomic mxfp4out | 256 CTAs | 133120 B | 66 | 288 | 128 | 0 | 0 | 0 B | +| FlyDSL GEMM2 v1 persistent | 256 CTAs | 133120 B | 53 | 272 | 16 | 0 | 0 | 0 B | + +So the remaining GEMM2 gap is not a scratch-spill problem. Both kernels use +the same LDS allocation and neither spills SGPR/VGPR. The main remaining +resource/scheduling difference is accumulator placement and generated schedule: +aiter reserves 128 AGPRs for the nonatomic BM128 path, while the current FlyDSL +kernel reports only 16 AGPRs and relies mostly on VGPR/ordinary generated MFMA +values. + +## GEMM2 v2 AGPR Hint and GPU Selection Audit + +The GPU selector now checks both process VRAM and instantaneous GPU busy +percentage before binding torch. It still uses the physical `rocm-smi` +`cardN` / `GPU[N]` index for `HIP_VISIBLE_DEVICES` and +`CUDA_VISIBLE_DEVICES`, but now requires: + +```text +process_vram < 1024 B +GPU use <= 0% +``` + +This avoids the ROCm-SMI `showpids` table ambiguity where the `GPU(s)` column +can show per-process visible ordinals; the selector uses the physical +`showpidgpus` DRM-device mapping plus total card memory and `showuse`. + +GEMM2 v2 changed only codegen hints: + +```python +value_attrs={"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} +compile_hints["llvm_options"] = {"amdgpu-mfma-vgpr-form": False} +``` + +Resource metadata for v2: + +| kernel | grid | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| FlyDSL GEMM2 v2 agprhint | 256 CTAs | 133120 B | 53 | 348 | 128 | 0 | 0 | 0 B | + +The AGPR count now matches aiter, but VGPR rises substantially. A profiler run +on a clean GPU measured: + +```text +aiter GEMM2: 902.3 us +FlyDSL GEMM2 v2 agprhint: 1072.3 us +``` + +An additional v3 experiment staged A scales through LDS, matching aiter's +nonatomic scale path more closely. It stayed correct but regressed: + +```text +aiter GEMM2: 911.4 us +FlyDSL GEMM2 v3 agpr_scalelds: 1090.9 us +``` + +The v3 scale-staging edit was rejected; the saved GEMM2 code is v2 agprhint. + +## GEMM2 v4-v8 Cleanup and DPP Amax + +The later GEMM2 experiments were kept in +`kimi_fp4_moe_16384_opt.py` only. The current saved kernel is: + +```text +flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax +``` + +Accumulated changes after v2: + +| version | change | result | +| --- | --- | --- | +| v4_noguard | Removed redundant block/expert/row validity checks after switching to persistent work over valid blocks. | Correct, small speedup. | +| v5_xloadpacked | Fixed X DMA byte count to use packed fp4 bytes, reducing A `buffer_load_dwordx4` from 32 to 24. | Correct by cosine, large speedup. | +| v6_scalelds | Staged A scales through LDS, matching aiter's scale-sharing path more closely. | Correct, reduced scalar global loads. | +| v7_noendbar | Removed the end-of-work barrier and relied on the next persistent iteration's entry barrier. | Correct, small speedup. | +| v8_dppamax | Replaced epilogue `shuffle_xor` amax reduction with explicit DPP update intrinsic. | Correct, large speedup; GEMM2 nearly matches aiter. | + +Profiler command: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 3 --iters 10 --top 30 +``` + +Latest clean-GPU profiler snapshot: + +| stage | pure aiter | pure FlyDSL v8 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.7 us | 7.2 us | +0.5 us | +| sort_cumsum | 10.9 us | 16.4 us | +5.5 us | +| sort_place_pad | 33.1 us | 37.6 us | +4.5 us | +| quant | 60.0 us | 63.0 us | +3.0 us | +| sort_scales | 61.2 us | 57.8 us | -3.4 us | +| GEMM1 | 752.0 us | 748.4 us | -3.6 us | +| GEMM2 | 912.6 us | 917.2 us | +4.6 us | +| scatter_reduce | 138.0 us | 156.4 us | +18.4 us | +| total | 1974.5 us | 2004.0 us | +29.5 us | + +Both paths still launch 8 device kernels per iteration. GEMM2 is no longer the +dominant gap in this snapshot; the remaining all-FlyDSL gap is mostly +scatter_reduce plus small sort/cumsum overhead. + +CUDAGraph end-to-end timing: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --graph-iters 20 --measure 20 + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1859.3 +local_mxfp4_all_flydsl_us=1909.0 +``` + +v8 ISA comparison against the aiter mxfp4out kernel: + +| instruction/resource | aiter | FlyDSL v8 | +| --- | ---: | ---: | +| `v_mfma_scale_f32_16x16x128_f8f6f4` | 128 | 128 | +| `buffer_load_dwordx4` | 24 | 24 | +| `buffer_load_dword` | 6 | 8 | +| `ds_write_b32` | 128 | 128 | +| `ds_read_b128` | 64 | 64 | +| `s_barrier` | 4 | 4 | +| `s_waitcnt` | 54 | 46 | +| amax quad reduction | `v_max_u32_dpp` x32 | `v_mov_b32_dpp` x32 + `v_max_u32_e32` x32 | +| output stores | `global_store_*` x32 | `buffer_store_*` x32 | +| LDS | 133120 B | 133120 B | +| AGPR | 128 | 128 | +| VGPR | 384 | 364 | +| SGPR | 73 | 48 | +| spills/private segment | 0 / 0 B | 0 / 0 B | + +The v8 DPP change removes the previous `ds_swizzle_b32` epilogue lowering. The +remaining low-level differences worth checking next are the output store form +(`global_store_* nt` in aiter versus `buffer_store_*` in FlyDSL) and the +FlyDSL scatter_reduce kernel. + +## GPU Selection Note + +`gpu_select.py` intentionally treats `rocm-smi cardN` / `GPU[N]` as the +physical GPU index. It binds the process with: + +```text +HIP_VISIBLE_DEVICES=N +CUDA_VISIBLE_DEVICES=N +``` + +Torch then sees the selected physical GPU as logical `cuda:0`. The selector +does not set `ROCR_VISIBLE_DEVICES`, because setting both HIP and ROCR filters +can remap or hide devices unexpectedly. The current safety gate requires +process VRAM below 1024 bytes and GPU use at 0 percent before selecting a card. diff --git a/gpu_select.py b/gpu_select.py new file mode 100644 index 000000000..afbc0e1d6 --- /dev/null +++ b/gpu_select.py @@ -0,0 +1,205 @@ +import json +import os +import re +import subprocess +import sys +from dataclasses import dataclass + + +@dataclass(frozen=True) +class GpuUsage: + index: int + total_used_bytes: int + process_used_bytes: int + gpu_busy_percent: int + + +def _parse_int(value: object) -> int: + try: + return int(str(value).strip()) + except (TypeError, ValueError): + return 0 + + +def _rocm_smi_json(*args: str) -> dict: + proc = subprocess.run( + ["rocm-smi", *args, "--json"], + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + if proc.returncode != 0: + raise RuntimeError(proc.stderr.strip() or "rocm-smi failed") + try: + return json.loads(proc.stdout) + except json.JSONDecodeError as exc: + raise RuntimeError(f"failed to parse rocm-smi JSON: {exc}") from exc + + +def _rocm_smi_text(*args: str) -> str: + proc = subprocess.run( + ["rocm-smi", *args], + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + if proc.returncode != 0: + raise RuntimeError(proc.stderr.strip() or "rocm-smi failed") + return proc.stdout + + +def _card_total_used_bytes() -> dict[int, int]: + data = _rocm_smi_json("--showmeminfo", "vram") + result = {} + for card, fields in data.items(): + match = re.fullmatch(r"card(\d+)", str(card)) + if not match: + continue + result[int(match.group(1))] = _parse_int(fields.get("VRAM Total Used Memory (B)")) + return result + + +def _card_gpu_busy_percent() -> dict[int, int]: + data = _rocm_smi_json("--showuse") + result = {} + for card, fields in data.items(): + match = re.fullmatch(r"card(\d+)", str(card)) + if not match: + continue + result[int(match.group(1))] = _parse_int(fields.get("GPU use (%)")) + return result + + +def _pid_gpu_map(text: str) -> dict[int, list[int]]: + result: dict[int, list[int]] = {} + current_pid: int | None = None + for line in text.splitlines(): + match = re.match(r"^PID\s+(\d+)\s+is using", line.strip()) + if match: + current_pid = int(match.group(1)) + result.setdefault(current_pid, []) + continue + if current_pid is None: + continue + stripped = line.strip() + if not stripped: + continue + if re.fullmatch(r"\d+(?:\s+\d+)*", stripped): + result[current_pid].extend(int(item) for item in stripped.split()) + current_pid = None + return result + + +def _pid_vram_map(text: str) -> dict[int, int]: + result: dict[int, int] = {} + in_table = False + for line in text.splitlines(): + stripped = line.strip() + if stripped.startswith("PID") and "VRAM USED" in stripped: + in_table = True + continue + if not in_table: + continue + if not stripped or stripped.startswith("="): + continue + parts = stripped.split() + if len(parts) < 4 or not parts[0].isdigit(): + continue + result[int(parts[0])] = _parse_int(parts[3]) + return result + + +def _card_process_used_bytes(cards: set[int]) -> dict[int, int]: + text = _rocm_smi_text("--showpidgpus", "--showpids") + pid_to_gpus = _pid_gpu_map(text) + pid_to_vram = _pid_vram_map(text) + result = {card: 0 for card in cards} + for pid, gpus in pid_to_gpus.items(): + vram = pid_to_vram.get(pid, 0) + for gpu in gpus: + if gpu in result: + result[gpu] += vram + return result + + +def get_gpu_usage() -> list[GpuUsage]: + total_used = _card_total_used_bytes() + if not total_used: + raise RuntimeError("rocm-smi reported no GPU cards") + gpu_busy = _card_gpu_busy_percent() + process_used = _card_process_used_bytes(set(total_used)) + return [ + GpuUsage( + index=index, + total_used_bytes=total, + process_used_bytes=process_used[index], + gpu_busy_percent=gpu_busy.get(index, 0), + ) + for index, total in sorted(total_used.items()) + ] + + +def select_empty_gpu( + max_process_used_bytes: int = 1024, + max_gpu_busy_percent: int = 0, +) -> GpuUsage: + usages = get_gpu_usage() + idle = [ + gpu + for gpu in usages + if gpu.process_used_bytes < max_process_used_bytes + and gpu.gpu_busy_percent <= max_gpu_busy_percent + ] + if not idle: + summary = ", ".join( + f"gpu{gpu.index}:proc={gpu.process_used_bytes}B," + f"busy={gpu.gpu_busy_percent}%,total={gpu.total_used_bytes}B" + for gpu in usages + ) + raise RuntimeError( + f"no GPU has process VRAM < {max_process_used_bytes} bytes " + f"and GPU use <= {max_gpu_busy_percent}%; {summary}" + ) + return min( + idle, + key=lambda gpu: ( + gpu.process_used_bytes, + gpu.gpu_busy_percent, + gpu.total_used_bytes, + gpu.index, + ), + ) + + +def bind_empty_gpu_for_torch(script_name: str, max_process_used_bytes: int = 1024) -> int | None: + if os.environ.get("FLYDSL_AUTO_GPU", "1").lower() in {"0", "false", "no"}: + return None + already_bound = os.environ.get("FLYDSL_GPU_BOUND_FOR_TORCH") + if already_bound is not None: + try: + return int(already_bound) + except ValueError: + return None + + try: + selected = select_empty_gpu(max_process_used_bytes=max_process_used_bytes) + except Exception as exc: + print(f"[{script_name}] GPU auto-select failed: {exc}", file=sys.stderr) + raise SystemExit(1) from exc + + gpu = str(selected.index) + os.environ["HIP_VISIBLE_DEVICES"] = gpu + os.environ["CUDA_VISIBLE_DEVICES"] = gpu + os.environ.pop("ROCR_VISIBLE_DEVICES", None) + os.environ["FLYDSL_GPU_BOUND_FOR_TORCH"] = gpu + print( + f"[{script_name}] Auto-selected physical ROCm GPU/card {gpu} " + f"(torch will see it as cuda:0; " + f"process_vram={selected.process_used_bytes}B, " + f"busy={selected.gpu_busy_percent}%, " + f"total_used={selected.total_used_bytes}B)", + flush=True, + ) + return selected.index diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 856eaf3f9..3078783c3 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -117,6 +117,54 @@ def _global_load_i32(global_ptr, elem_offset): return llvm.LoadOp(T.i32, ptr, alignment=4).result +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + def _dpp_xor_f32(src, offset: int): src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) if offset == 1: @@ -142,6 +190,30 @@ def _dpp_xor_f32(src, offset: int): return out_i32.bitcast(T.f32) +def _dpp_xor_i32(src, offset: int): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(False, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + @functools.lru_cache(maxsize=1) def compile_kimi_mxfp4_scatter_reduce_q_16384(): """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. @@ -1166,9 +1238,9 @@ def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - C: packed fp4 plus e8m0 block scales, sorted-row-major - The initial version uses a simple 2D CTA grid for debuggability. The aiter - kernel uses a persistent 1D grid and AGPR MFMA accumulation; those are the - next performance-alignment steps once this path is numerically stable. + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. """ tile_m = MXFP4_BLOCK_M @@ -1178,6 +1250,7 @@ def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): max_sorted = mxfp4_max_sorted_16384() num_m_blocks = max_sorted // tile_m num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 _scale_pack_m = 2 _scale_pack_n = 2 @@ -1239,7 +1312,13 @@ def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): k_bs_stride_n0_dw = 128 k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0" + # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA + # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve + # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax" @flyc.kernel(name=module_name) def gemm2_mxfp4out( @@ -1271,10 +1350,7 @@ def gemm2_mxfp4out( numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) + pid = gpu.block_id("x") num_valid_i32 = buffer_ops.buffer_load( numids_rsrc, @@ -1283,17 +1359,17 @@ def gemm2_mxfp4out( dtype=i32, ) num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) base_ptr = allocator.get_base() lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() shape_lds = fx.make_shape(tile_m, _eff_lds_stride) stride_lds = fx.make_stride(_eff_lds_stride, 1) @@ -1310,18 +1386,8 @@ def gemm2_mxfp4out( row_a_lds = lane_mod_16 col_offset_base = lane_div_16 * arith.constant(16, index=True) n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // total_threads + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads x_load_bytes = 16 num_x_loads = bytes_per_thread_x // x_load_bytes chunk_i32 = x_load_bytes // 4 @@ -1331,7 +1397,6 @@ def gemm2_mxfp4out( tx_i32_base = tx * c_chunk_i32 c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - x_row_base_div4 = [] x_col_local_i32 = [] x_row_local = [] for i in range_constexpr(num_x_loads): @@ -1345,77 +1410,6 @@ def gemm2_mxfp4out( ) x_row_local.append(row_local) x_col_local_i32.append(col_local_i32) - x_row_base_div4.append((bx_m + row_local) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def load_a_scale_tile(scale_k_tile: int): - a_scale_tile = [] - chunk_base = bx_m / arith.constant(32, index=True) - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - (chunk_base + arith.constant(mi, index=True)) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) @@ -1477,177 +1471,293 @@ def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): _dma_bytes = 16 _wave_size = 64 - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), ) - def _then_body(): - rocdl.sched_barrier(0) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def precompute_row(*, row_local, row): - row_i32 = arith.index_cast(i32, row) - row_valid = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) - return (row, row_valid) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = amax_bf16.shuffle_xor(c1_i32, arith.constant(64, type=i32)) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = amax_bf16.shuffle_xor(c2_i32, arith.constant(64, type=i32)) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), ) - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=tile_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_row_to_lds, - precompute_row=precompute_row, - store_pair=store_pair, - ) + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=tile_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_row_to_lds, + precompute_row=None, + store_pair=store_pair, + ) - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): _then_body() - scf.YieldOp([]) - gpu.barrier() + + total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) @flyc.jit def launch_gemm2_mxfp4out( @@ -1674,12 +1784,15 @@ def launch_gemm2_mxfp4out( scale_w, expert_ids, num_valid_ids, + value_attrs=gemm2_agpr_value_attrs, ).launch( - grid=(num_n_blocks, num_m_blocks, 1), + grid=(persistent_ctas, 1, 1), block=(total_threads, 1, 1), stream=stream, ) + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + return launch_gemm2_mxfp4out @@ -1729,11 +1842,345 @@ def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: return ((cumsum_max + block_m - 1) // block_m) * block_m +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + expert_starts_nbytes = (EXPERTS + 1) * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_expert_starts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + masked_rsrc = _ptr_buffer_resource(arg_masked_m, masked_nbytes) + real_rsrc = _ptr_buffer_resource(arg_real_counts, real_counts_nbytes) + starts_rsrc = _ptr_buffer_resource(arg_expert_starts, expert_starts_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_sorted_expert_ids, expert_nbytes) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + for c in range_constexpr(sort_ctas): + cnt = buffer_ops.buffer_load( + offsets_rsrc, + tx_i32 * c_sort_ctas + arith.constant(c, type=i32), + vec_width=1, + dtype=i32, + ) + total = total + cnt + padded = (total + c_bm_minus_1) & c_bm_mask + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + buffer_ops.buffer_store(total, real_rsrc, tx_i32) + buffer_ops.buffer_store(padded, masked_rsrc, tx_i32) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + acc = c0_i32 + for e in range_constexpr(EXPERTS): + e_i32 = arith.constant(e, type=i32) + padded = memref.load(padded_count, [arith.index(e)]) + memref.store(acc, expert_starts, [arith.index(e)]) + buffer_ops.buffer_store(acc, starts_rsrc, e_i32) + acc = acc + padded + + memref.store(acc, expert_starts, [arith.index(EXPERTS)]) + buffer_ops.buffer_store(acc, starts_rsrc, arith.constant(EXPERTS, type=i32)) + buffer_ops.buffer_store(acc, cumsum_rsrc, c0_i32) + tail_b0 = acc >> arith.constant(7, type=i32) + for b in range( + ArithValue(tail_b0).index_cast(T.index), + arith.index(max_blocks), + arith.index(1), + ): + buffer_ops.buffer_store(c0_i32, expert_rsrc, arith.index_cast(i32, b)) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = buffer_ops.buffer_load(offsets_rsrc, off, vec_width=1, dtype=i32) + buffer_ops.buffer_store(acc, offsets_rsrc, off) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start >> arith.constant(7, type=i32) + b1 = end >> arith.constant(7, type=i32) + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + buffer_ops.buffer_store(tx_i32, expert_rsrc, arith.index_cast(i32, b)) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_expert_starts: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + topk_weight_rsrc = _ptr_buffer_resource(arg_topk_weight, weight_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + real_rsrc = _ptr_buffer_resource(arg_real_counts, real_counts_nbytes) + starts_rsrc = _ptr_buffer_resource(arg_expert_starts, expert_starts_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + reverse_rsrc = _ptr_buffer_resource(arg_reverse_sorted, reverse_nbytes) + weights_rsrc = _ptr_buffer_resource(arg_sorted_weights, sorted_nbytes) + mindices_rsrc = _ptr_buffer_resource(arg_m_indices, sorted_nbytes) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = buffer_ops.buffer_load(offsets_rsrc, off, vec_width=1, dtype=i32) + start = buffer_ops.buffer_load(offsets_rsrc, e_i32 * c_sort_ctas, vec_width=1, dtype=i32) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = buffer_ops.buffer_load(starts_rsrc, arith.constant(EXPERTS, type=i32), vec_width=1, dtype=i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = buffer_ops.buffer_load(real_rsrc, e_i32, vec_width=1, dtype=i32) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + buffer_ops.buffer_store(c_pad, sorted_rsrc, j_i32) + buffer_ops.buffer_store(c_pad, mindices_rsrc, j_i32) + buffer_ops.buffer_store(c0_f32, weights_rsrc, j_i32) + scf.YieldOp([]) + + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + idx_i32 = arith.index_cast(i32, idx) + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = buffer_ops.buffer_load(topk_weight_rsrc, idx, vec_width=1, dtype=f32) + buffer_ops.buffer_store(packed_id, sorted_rsrc, sp) + buffer_ops.buffer_store(token_id & c_mask_token, mindices_rsrc, sp) + buffer_ops.buffer_store(w, weights_rsrc, sp) + buffer_ops.buffer_store(sp, reverse_rsrc, idx_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + expert_starts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + expert_starts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + expert_starts, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + def kimi_mxfp4_sort_16384( topk_ids: torch.Tensor, topk_weight: torch.Tensor, *, block_m: int = MXFP4_BLOCK_M, + use_flydsl: bool = False, ) -> Mxfp4SortBuffers: """Run the fixed mxfp4_moe three-stage sorter for Kimi M=16384.""" if tuple(topk_ids.shape) != (TOKEN, TOPK): @@ -1759,26 +2206,49 @@ def kimi_mxfp4_sort_16384( masked_m = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) m_indices = torch.empty((max_sorted,), device=device, dtype=dtypes.i32) - aiter.mxfp4_moe_sort( - topk_ids=topk_ids, - topk_weight=topk_weight, - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - bf16_zero_out=_empty_bf16(device), - bf16_zero_workspace=_empty_bf16(device), - M_logical=TOKEN, - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - D_INTER=INTER_DIM, - MB=block_m, - prologue=1, - ) + if use_flydsl: + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=dtypes.i32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) + expert_starts = torch.empty((EXPERTS + 1,), device=device, dtype=dtypes.i32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + _ptr_view_safe(expert_starts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + else: + aiter.mxfp4_moe_sort( + topk_ids=topk_ids, + topk_weight=topk_weight, + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + bf16_zero_out=_empty_bf16(device), + bf16_zero_workspace=_empty_bf16(device), + M_logical=TOKEN, + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + D_INTER=INTER_DIM, + MB=block_m, + prologue=1, + ) return Mxfp4SortBuffers( sorted_token_ids=sorted_token_ids, sorted_expert_ids=sorted_expert_ids, @@ -1792,6 +2262,323 @@ def kimi_mxfp4_sort_16384( ) +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL port of aiter.mxfp4_moe_quant for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL port of aiter.mxfp4_moe_sort_scales for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + def expand_mxfp4_expert_ids_for_flydsl( sorted_expert_ids: torch.Tensor, *, @@ -1949,6 +2736,9 @@ def _run_mxfp4_pipeline_16384( w1_scale: torch.Tensor, w2_scale: torch.Tensor, *, + use_flydsl_sort: bool = False, + use_flydsl_quant: bool = False, + use_flydsl_sort_scales: bool = False, use_flydsl_gemm1: bool = False, use_flydsl_gemm2: bool = False, use_flydsl_scatter_reduce_q: bool = False, @@ -1957,20 +2747,23 @@ def _run_mxfp4_pipeline_16384( device = hidden_states.device w1_u8 = _as_u8_storage(w1) w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight, use_flydsl=use_flydsl_sort) a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - aiter.mxfp4_moe_quant( - a_input=hidden_states, - a_quant=a_quant, - a_scale=a_scale, - bf16_zero_out=_empty_bf16(device), - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - MB=sort.block_m, - ) + if use_flydsl_quant: + kimi_mxfp4_quant_16384(hidden_states, a_quant, a_scale) + else: + aiter.mxfp4_moe_quant( + a_input=hidden_states, + a_quant=a_quant, + a_scale=a_scale, + bf16_zero_out=_empty_bf16(device), + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + MB=sort.block_m, + ) padded_rows = ((sort.max_sorted + 31) // 32) * 32 a_scale_sorted_shuffled = torch.empty( @@ -1978,18 +2771,26 @@ def _run_mxfp4_pipeline_16384( device=device, dtype=torch.uint8, ) - aiter.mxfp4_moe_sort_scales( - a_scale=a_scale, - sorted_token_ids=sort.sorted_token_ids, - cumsum_tensor=sort.cumsum_tensor, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - D_INTER=INTER_DIM, - MB=sort.block_m, - max_sorted=sort.max_sorted, - ) + if use_flydsl_sort_scales: + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + else: + aiter.mxfp4_moe_sort_scales( + a_scale=a_scale, + sorted_token_ids=sort.sorted_token_ids, + cumsum_tensor=sort.cumsum_tensor, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + NE=EXPERTS, + TOPK=TOPK, + D_HIDDEN=MODEL_DIM, + D_INTER=INTER_DIM, + MB=sort.block_m, + max_sorted=sort.max_sorted, + ) inter_sorted_quant = torch.empty( (sort.max_sorted, INTER_DIM // 2), @@ -2111,6 +2912,9 @@ def run_kimi_fp4_mxfp4_moe_16384_aiter_ref( topk_weight, w1_scale, w2_scale, + use_flydsl_sort=False, + use_flydsl_quant=False, + use_flydsl_sort_scales=False, use_flydsl_gemm1=False, use_flydsl_gemm2=False, use_flydsl_scatter_reduce_q=False, @@ -2135,6 +2939,9 @@ def run_kimi_fp4_mxfp4_moe_16384_opt( topk_weight, w1_scale, w2_scale, + use_flydsl_sort=False, + use_flydsl_quant=False, + use_flydsl_sort_scales=False, use_flydsl_gemm1=False, use_flydsl_gemm2=False, use_flydsl_scatter_reduce_q=True, @@ -2159,6 +2966,9 @@ def run_kimi_fp4_mxfp4_moe_16384_opt_gemm1( topk_weight, w1_scale, w2_scale, + use_flydsl_sort=False, + use_flydsl_quant=False, + use_flydsl_sort_scales=False, use_flydsl_gemm1=True, use_flydsl_gemm2=False, use_flydsl_scatter_reduce_q=True, @@ -2183,7 +2993,37 @@ def run_kimi_fp4_mxfp4_moe_16384_opt_gemm2( topk_weight, w1_scale, w2_scale, + use_flydsl_sort=False, + use_flydsl_quant=False, + use_flydsl_sort_scales=False, use_flydsl_gemm1=False, use_flydsl_gemm2=True, use_flydsl_scatter_reduce_q=True, ) + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Initial full FlyDSL mxfp4 pipeline port for fixed Kimi M=16384.""" + return _run_mxfp4_pipeline_16384( + hidden_states, + w1, + w2, + topk_ids, + topk_weight, + w1_scale, + w2_scale, + use_flydsl_sort=True, + use_flydsl_quant=True, + use_flydsl_sort_scales=True, + use_flydsl_gemm1=True, + use_flydsl_gemm2=True, + use_flydsl_scatter_reduce_q=True, + ) diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index 768a18d82..087162b82 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -3,6 +3,10 @@ from collections import defaultdict from pathlib import Path +from gpu_select import bind_empty_gpu_for_torch + +bind_empty_gpu_for_torch("profile_flydsl_16384") + import torch from torch.profiler import ProfilerActivity, profile From a091cb4fef61110b59869daa2f128789fb0834f4 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 11:12:19 +0000 Subject: [PATCH 017/118] Optimize Kimi MXFP4 scatter reduce --- docs/kimi_fp4_moe_16384_opt_notes.md | 75 +++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 108 +++++++++++++++++---------- 2 files changed, 142 insertions(+), 41 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 6aaf40a16..de26782cb 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1505,6 +1505,81 @@ remaining low-level differences worth checking next are the output store form (`global_store_* nt` in aiter versus `buffer_store_*` in FlyDSL) and the FlyDSL scatter_reduce kernel. +## Scatter Reduce v4 Route Vector + +The saved scatter kernel in `kimi_fp4_moe_16384_opt.py` is now: + +```text +flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v4_routevec +``` + +The v4 change keeps the v3 raw global I/O path and adds one vector preload for +the first eight `reverse_sorted[token, topk]` route ids: + +- routes 0..7: one `vector<8xi32>` load, lowering to `s_load_dwordx8` +- route 8: one scalar `s_load_dword` + +Correctness remains exact against aiter for the fixed test input: + +```text +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +``` + +Profiler snapshot: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --iters 30 --top 30 +``` + +| stage | aiter | FlyDSL v4 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.3 us | 6.7 us | +0.4 us | +| sort_cumsum | 10.4 us | 15.6 us | +5.2 us | +| sort_place_pad | 32.3 us | 35.9 us | +3.6 us | +| quant | 58.4 us | 58.9 us | +0.5 us | +| sort_scales | 55.8 us | 54.3 us | -1.5 us | +| GEMM1 | 706.8 us | 718.8 us | +12.0 us | +| GEMM2 | 875.5 us | 865.8 us | -9.7 us | +| scatter_reduce | 134.5 us | 140.0 us | +5.5 us | +| total | 1880.0 us | 1896.1 us | +16.1 us | + +CUDAGraph end-to-end timing: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --graph-iters 20 --measure 20 + +aiter_mxfp4_moe_us=1859.5 +local_mxfp4_all_flydsl_us=1883.3 +``` + +Scatter ISA/resource comparison: + +| instruction/resource | aiter NT | FlyDSL v3 globalio | FlyDSL v4 routevec | +| --- | ---: | ---: | ---: | +| `v_pk_fma_f32` | 36 | 36 | 36 | +| `v_cvt_scalef32_pk_f32_fp4` | 36 | 36 | 36 | +| `v_cvt_pk_bf16_f32` | 4 | 4 | 4 | +| `global_load_dword` | 18 | 18 | 18 | +| `s_load_dword` | 11 | 18 | 10 | +| `s_load_dwordx8` | 2 | 1 | 2 | +| `global_store_dwordx4` | 1 | 1 | 1 | +| `s_waitcnt` | 19 | 35 | 27 | +| SGPR | 34 | 36 | 38 | +| VGPR | 62 | 28 | 29 | +| spills/private segment | 0 / 0 B | 0 / 0 B | 0 / 0 B | + +v4 reduces the remaining scatter gap from the earlier `~18us` snapshot to about +`5.5us` in the latest profiler run. A v5 experiment staged all route +weight/scale/q values before decode to increase ILP, but it measured +`141.1us`, so it was rejected. The remaining difference is likely mostly +instruction scheduling: aiter spends many more VGPRs to keep more memory results +live, while the current FlyDSL version is still more serialized around waits. + ## GPU Selection Note `gpu_select.py` intentionally treats `rocm-smi cardN` / `GPU[N]` as the diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 3078783c3..81915c2c4 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -100,7 +100,7 @@ def _extract_global_ptr(ptr): return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) -def _global_load_i32(global_ptr, elem_offset): +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): if isinstance(elem_offset, int): elem_offset = arith.constant(elem_offset, type=T.i32) elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset @@ -114,7 +114,34 @@ def _global_load_i32(global_ptr, elem_offset): elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4).result + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) def _elem_offset_to_i64(elem_offset): @@ -229,12 +256,7 @@ def compile_kimi_mxfp4_scatter_reduce_q_16384(): qcols_i32 = MODEL_DIM // 2 // 4 scols_i32 = MODEL_DIM // 32 // 4 out_i32_stride = MODEL_DIM // 2 - q_nbytes = mxfp4_max_sorted_16384() * (MODEL_DIM // 2) - scale_nbytes = mxfp4_max_sorted_16384() * (MODEL_DIM // 32) - reverse_nbytes = TOKEN * TOPK * 4 - weights_nbytes = mxfp4_max_sorted_16384() * 4 - out_nbytes = TOKEN * MODEL_DIM * 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9" + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v4_routevec" @flyc.kernel(name=module_name) def scatter_reduce_q( @@ -247,11 +269,11 @@ def scatter_reduce_q( i32 = T.i32 f32 = T.f32 - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, scale_nbytes) - reverse_rsrc = _ptr_buffer_resource(arg_reverse_sorted, reverse_nbytes) - weights_rsrc = _ptr_buffer_resource(arg_sorted_weights, weights_nbytes) - out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes) + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) tx = gpu.thread_id("x") bx = gpu.block_id("x") @@ -271,9 +293,11 @@ def scatter_reduce_q( c_scols_i32 = arith.constant(scols_i32, type=i32) c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + vec2_f32 = T.vec(2, f32) c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - def _fma_f32(a, b, c): + def _fma_v2_f32(a, b, c): return ArithValue( _math_fma( arith._to_raw(a), @@ -282,33 +306,28 @@ def _fma_f32(a, b, c): ) ) - acc = [c0_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD)] + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] blk = col_base_i32 >> arith.constant(5, type=i32) scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) q_col_word = col_base_i32 >> c3_i32 - for i in range_constexpr(TOPK): - reverse_off = token_i32 * c_topk_i32 + arith.constant(i, type=i32) - sorted_pos = ArithValue( - buffer_ops.buffer_load(reverse_rsrc, reverse_off, vec_width=1, dtype=i32) - ) - route_w = buffer_ops.buffer_load(weights_rsrc, sorted_pos, vec_width=1, dtype=f32) + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos): + route_w = _global_load_f32(weights_ptr, sorted_pos) scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue( - buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i32) - ) + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) scale_shift = (blk & c3_i32) << c3_i32 e8 = (scale_word >> scale_shift) & c255_i32 scale = (e8 << c23_i32).bitcast(f32) q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue( - buffer_ops.buffer_load(q_rsrc, q_idx, vec_width=1, dtype=i32, cache_modifier=4) - ) - decoded_pairs = [] + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pairs.append( + decoded_pair = ( llvm.call_intrinsic( T.vec(2, f32), "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", @@ -317,25 +336,32 @@ def _fma_f32(a, b, c): [], ) ) - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD): - decoded = vector.extract( - decoded_pairs[k // 2], - static_position=[k % 2], + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], dynamic_position=[], ) - acc[k] = _fma_f32(decoded, route_w, acc[k]) + ) + accumulate_route(sorted_pos) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + accumulate_route(sorted_pos) packed_words = [] for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - packed_words.append(rocdl.cvt_pk_bf16_f32(acc[2 * k], acc[2 * k + 1])) + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - buffer_ops.buffer_store( - out_i32_vec, - out_rsrc, - out_word_off, - cache_modifier=4, - ) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) @flyc.jit def launch_scatter_reduce_q( From e83e61b2ca2aa48b92e0e5b8eb4f82033a421a74 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 11:22:39 +0000 Subject: [PATCH 018/118] Optimize Kimi MXFP4 sort cumsum --- docs/kimi_fp4_moe_16384_opt_notes.md | 67 ++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 102 +++++++++++++++------------ 2 files changed, 122 insertions(+), 47 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index de26782cb..fb837424d 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1580,6 +1580,73 @@ weight/scale/q values before decode to increase ILP, but it measured instruction scheduling: aiter spends many more VGPRs to keep more memory results live, while the current FlyDSL version is still more serialized around waits. +## Sort Cumsum v2-v4 + +After committing scatter v4, the sort-cumsum path was optimized in +`kimi_fp4_moe_16384_opt.py`. The saved cumsum kernel is now: + +```text +flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio +``` + +Changes: + +- v2 removed the global `expert_starts` scratch buffer. `sort_cumsum` now keeps + expert starts only in LDS, and `sort_place_pad` reads the final row start from + `cumsum_tensor[0]`, matching aiter's data flow more closely. +- v2 also removed the single-thread tail clear of `sorted_expert_ids`; aiter + does not clear blocks after `cumsum_tensor[0]`. +- v3 changed the tid0 prefix scan over `NE=385` experts from a fully unrolled + `range_constexpr` to an explicit dynamic `scf.for`, reducing the huge unrolled + LDS read/write sequence. +- v4 switched `sort_cumsum` I/O from buffer resources to raw global pointer + loads/stores. The first pass over `block_offsets[e, 0:16]` uses + `vector<4xi32>` loads, lowering closer to aiter's `global_load_dwordx4`. + +Validation: + +```text +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +``` + +Profiler snapshot: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --iters 30 --top 30 +``` + +| stage | aiter | FlyDSL after cumsum v4 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 5.9 us | 6.8 us | +0.9 us | +| sort_cumsum | 10.2 us | 9.6 us | -0.6 us | +| sort_place_pad | 32.4 us | 35.7 us | +3.3 us | +| quant | 58.4 us | 59.5 us | +1.1 us | +| sort_scales | 55.9 us | 55.1 us | -0.8 us | +| GEMM1 | 702.5 us | 723.5 us | +21.0 us | +| GEMM2 | 863.4 us | 871.0 us | +7.6 us | +| scatter_reduce | 134.9 us | 140.6 us | +5.7 us | +| total | 1863.6 us | 1901.7 us | +38.1 us | + +The cumsum kernel itself moved from the previous `~15.6us` range to `9.6us`, +slightly faster than aiter in this run. v4 was kept; v2/v3 were intermediate. + +CUDAGraph end-to-end timing after cumsum v4: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --graph-iters 20 --measure 20 + +aiter_mxfp4_moe_us=1851.1 +local_mxfp4_all_flydsl_us=1878.7 +``` + +At this point `sort_cumsum` is no longer a remaining gap. The still-visible +sort-side delta is mostly `sort_place_pad`. + ## GPU Selection Note `gpu_select.py` intentionally treats `rocm-smi cardN` / `GPU[N]` as the diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 81915c2c4..36c77fadb 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -144,6 +144,14 @@ def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + def _elem_offset_to_i64(elem_offset): if isinstance(elem_offset, int): return arith.constant(elem_offset, type=T.i64) @@ -1894,7 +1902,6 @@ def compile_kimi_mxfp4_sort_16384(): masked_nbytes = EXPERTS * 4 block_offsets_nbytes = EXPERTS * sort_ctas * 4 real_counts_nbytes = EXPERTS * 4 - expert_starts_nbytes = (EXPERTS + 1) * 4 gpu_arch = get_hip_arch() allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") @@ -1955,14 +1962,13 @@ def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): scf.YieldOp([]) @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v1", + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", known_block_size=[threads, 1, 1], ) def sort_cumsum( arg_block_offsets: fx.Pointer, arg_masked_m: fx.Pointer, arg_real_counts: fx.Pointer, - arg_expert_starts: fx.Pointer, arg_cumsum_tensor: fx.Pointer, arg_sorted_expert_ids: fx.Pointer, ): @@ -1970,12 +1976,11 @@ def sort_cumsum( tx = gpu.thread_id("x") tx_i32 = arith.index_cast(i32, tx) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - masked_rsrc = _ptr_buffer_resource(arg_masked_m, masked_nbytes) - real_rsrc = _ptr_buffer_resource(arg_real_counts, real_counts_nbytes) - starts_rsrc = _ptr_buffer_resource(arg_expert_starts, expert_starts_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_sorted_expert_ids, expert_nbytes) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) base_ptr = allocator.get_base() total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() @@ -1990,42 +1995,49 @@ def sort_cumsum( _if_sum = scf.IfOp(e_valid) with ir.InsertionPoint(_if_sum.then_block): total = c0_i32 - for c in range_constexpr(sort_ctas): - cnt = buffer_ops.buffer_load( - offsets_rsrc, - tx_i32 * c_sort_ctas + arith.constant(c, type=i32), - vec_width=1, - dtype=i32, + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, ) - total = total + cnt + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt padded = (total + c_bm_minus_1) & c_bm_mask memref.store(total, total_count, [tx]) memref.store(padded, padded_count, [tx]) - buffer_ops.buffer_store(total, real_rsrc, tx_i32) - buffer_ops.buffer_store(padded, masked_rsrc, tx_i32) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) scf.YieldOp([]) gpu.barrier() _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) with ir.InsertionPoint(_if_t0.then_block): - acc = c0_i32 - for e in range_constexpr(EXPERTS): - e_i32 = arith.constant(e, type=i32) - padded = memref.load(padded_count, [arith.index(e)]) - memref.store(acc, expert_starts, [arith.index(e)]) - buffer_ops.buffer_store(acc, starts_rsrc, e_i32) - acc = acc + padded - - memref.store(acc, expert_starts, [arith.index(EXPERTS)]) - buffer_ops.buffer_store(acc, starts_rsrc, arith.constant(EXPERTS, type=i32)) - buffer_ops.buffer_store(acc, cumsum_rsrc, c0_i32) - tail_b0 = acc >> arith.constant(7, type=i32) - for b in range( - ArithValue(tail_b0).index_cast(T.index), - arith.index(max_blocks), + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), arith.index(1), - ): - buffer_ops.buffer_store(c0_i32, expert_rsrc, arith.index_cast(i32, b)) + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) scf.YieldOp([]) gpu.barrier() @@ -2034,8 +2046,8 @@ def sort_cumsum( acc = memref.load(expert_starts, [tx]) for c in range_constexpr(sort_ctas): off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = buffer_ops.buffer_load(offsets_rsrc, off, vec_width=1, dtype=i32) - buffer_ops.buffer_store(acc, offsets_rsrc, off) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) acc = acc + cnt start = memref.load(expert_starts, [tx]) @@ -2047,11 +2059,11 @@ def sort_cumsum( ArithValue(b1).index_cast(T.index), arith.index(1), ): - buffer_ops.buffer_store(tx_i32, expert_rsrc, arith.index_cast(i32, b)) + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) scf.YieldOp([]) @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v1", + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v2_cumsumtail", known_block_size=[threads, 1, 1], ) def sort_place_pad( @@ -2059,7 +2071,7 @@ def sort_place_pad( arg_topk_weight: fx.Pointer, arg_block_offsets: fx.Pointer, arg_real_counts: fx.Pointer, - arg_expert_starts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_reverse_sorted: fx.Pointer, arg_sorted_weights: fx.Pointer, @@ -2076,7 +2088,7 @@ def sort_place_pad( topk_weight_rsrc = _ptr_buffer_resource(arg_topk_weight, weight_nbytes) offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) real_rsrc = _ptr_buffer_resource(arg_real_counts, real_counts_nbytes) - starts_rsrc = _ptr_buffer_resource(arg_expert_starts, expert_starts_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) reverse_rsrc = _ptr_buffer_resource(arg_reverse_sorted, reverse_nbytes) weights_rsrc = _ptr_buffer_resource(arg_sorted_weights, sorted_nbytes) @@ -2109,7 +2121,7 @@ def sort_place_pad( _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) with ir.InsertionPoint(_if_last_start.then_block): - last = buffer_ops.buffer_load(starts_rsrc, arith.constant(EXPERTS, type=i32), vec_width=1, dtype=i32) + last = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) memref.store(last, row_starts, [arith.index(EXPERTS)]) scf.YieldOp([]) gpu.barrier() @@ -2170,7 +2182,6 @@ def launch_sort( m_indices: fx.Pointer, block_offsets: fx.Pointer, real_counts: fx.Pointer, - expert_starts: fx.Pointer, stream: fx.Stream, ): allocator.finalized = False @@ -2182,7 +2193,6 @@ def launch_sort( block_offsets, masked_m, real_counts, - expert_starts, cumsum_tensor, sorted_expert_ids, ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) @@ -2191,7 +2201,7 @@ def launch_sort( topk_weight, block_offsets, real_counts, - expert_starts, + cumsum_tensor, sorted_token_ids, reverse_sorted, sorted_weights, @@ -2237,7 +2247,6 @@ def kimi_mxfp4_sort_16384( raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=dtypes.i32) real_counts = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) - expert_starts = torch.empty((EXPERTS + 1,), device=device, dtype=dtypes.i32) args = ( _ptr_view_safe(topk_ids.view(-1)), _ptr_view_safe(topk_weight.view(-1)), @@ -2250,7 +2259,6 @@ def kimi_mxfp4_sort_16384( _ptr_view_safe(m_indices.view(-1)), _ptr_view_safe(block_offsets.view(-1)), _ptr_view_safe(real_counts.view(-1)), - _ptr_view_safe(expert_starts.view(-1)), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_sort_16384(), args) From b8987598b6d816ba35f14a6bc0305800db710ea2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 11:30:29 +0000 Subject: [PATCH 019/118] Profile Kimi MXFP4 under graph replay by default --- profile_flydsl_16384.py | 102 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 92 insertions(+), 10 deletions(-) diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index 087162b82..876872f71 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -57,6 +57,52 @@ def _profile_runner(fn, *, warmup: int, iters: int, trace_path: Path | None): return events +def _capture_graph(fn, *, warmup: int, graph_iters: int): + side = torch.cuda.Stream() + side.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(side): + for _ in range(warmup): + fn() + torch.cuda.current_stream().wait_stream(side) + torch.cuda.synchronize() + + graph = torch.cuda.CUDAGraph() + with torch.cuda.graph(graph): + for _ in range(graph_iters): + fn() + + graph.replay() + torch.cuda.synchronize() + return graph + + +def _profile_runner_graph( + fn, + *, + warmup: int, + graph_iters: int, + replays: int, + trace_path: Path | None, +): + graph = _capture_graph(fn, warmup=warmup, graph_iters=graph_iters) + + with profile(activities=[ProfilerActivity.CUDA], record_shapes=False) as prof: + for _ in range(replays): + graph.replay() + torch.cuda.synchronize() + + if trace_path is not None: + trace_path.parent.mkdir(parents=True, exist_ok=True) + prof.export_chrome_trace(str(trace_path)) + + events = [ + (_event_name(evt), float(evt.self_device_time_total)) + for evt in prof.events() + if _is_cuda_event(evt) + ] + return events + + def _split_by_iteration(events, iters: int): if not events: return [] @@ -132,11 +178,28 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument( "--runners", - default="aiter_mxfp4_moe,local_kimi_fp4,local_mxfp4_opt", + default="aiter_mxfp4_moe,local_mxfp4_all_flydsl", help="comma-separated runner names from bench_flydsl_16384.py", ) + parser.add_argument( + "--mode", + choices=("graph", "eager"), + default="graph", + help="profile CUDA/HIP graph replay by default; use eager for normal launch profiling", + ) parser.add_argument("--warmup", type=int, default=5) - parser.add_argument("--iters", type=int, default=5) + parser.add_argument( + "--iters", + type=int, + default=5, + help="eager iterations, or graph replay count in graph mode", + ) + parser.add_argument( + "--graph-iters", + type=int, + default=20, + help="pipeline iterations captured inside each graph replay", + ) parser.add_argument("--top", type=int, default=None) parser.add_argument( "--trace-dir", @@ -151,7 +214,17 @@ def main(): f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} " f"INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}" ) - print(f"warmup={args.warmup} iters={args.iters}") + if args.mode == "graph" and args.graph_iters <= 0: + raise ValueError("--graph-iters must be positive in graph mode") + if args.iters <= 0: + raise ValueError("--iters must be positive") + + logical_iters = args.iters * args.graph_iters if args.mode == "graph" else args.iters + print( + f"mode={args.mode} warmup={args.warmup} " + f"iters={args.iters} graph_iters={args.graph_iters if args.mode == 'graph' else 0} " + f"logical_iters={logical_iters}" + ) weights = build_weights(SHAPE, device) hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) @@ -165,13 +238,22 @@ def main(): trace_dir = Path(args.trace_dir) if args.trace_dir else None for name in requested: trace_path = trace_dir / f"profile_16384_{name}.json.gz" if trace_dir else None - events = _profile_runner( - runners[name], - warmup=args.warmup, - iters=args.iters, - trace_path=trace_path, - ) - _print_ordered_report(name, events, args.iters, args.top) + if args.mode == "graph": + events = _profile_runner_graph( + runners[name], + warmup=args.warmup, + graph_iters=args.graph_iters, + replays=args.iters, + trace_path=trace_path, + ) + else: + events = _profile_runner( + runners[name], + warmup=args.warmup, + iters=args.iters, + trace_path=trace_path, + ) + _print_ordered_report(name, events, logical_iters, args.top) if trace_path is not None: print(f"trace={trace_path}") From 9882c6243ce6525e56e1a117859b8794c3d7b304 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 12:01:37 +0000 Subject: [PATCH 020/118] Stabilize Kimi MXFP4 graph profiling --- bench_flydsl_16384.py | 22 ++- docs/kimi_fp4_moe_16384_opt_notes.md | 110 ++++++++++- kimi_fp4_moe_16384_opt.py | 14 +- profile_flydsl_16384.py | 274 +++++++++++++++++++++++---- 4 files changed, 369 insertions(+), 51 deletions(-) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index a82d90333..c873ba246 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -5,6 +5,7 @@ bind_empty_gpu_for_torch("bench_flydsl_16384") import argparse +import statistics import sys from dataclasses import dataclass from pathlib import Path @@ -364,15 +365,18 @@ def max_abs(a, b): def main(): parser = argparse.ArgumentParser() - parser.add_argument("--warmup", type=int, default=5) - parser.add_argument("--graph-iters", type=int, default=5) - parser.add_argument("--measure", type=int, default=5) + parser.add_argument("--warmup", type=int, default=20) + parser.add_argument("--graph-iters", type=int, default=40) + parser.add_argument("--measure", type=int, default=40) + parser.add_argument("--repeat", type=int, default=3) parser.add_argument( "--runners", default=None, help="comma-separated runner names; defaults to all runners", ) args = parser.parse_args() + if args.repeat <= 0: + raise ValueError("--repeat must be positive") device = torch.device("cuda") print(f"GPU: {torch.cuda.get_device_name(0)}") @@ -426,7 +430,17 @@ def main(): ) for name, fn in runners.items(): - us = bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) + samples = [ + bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) + for _ in range(args.repeat) + ] + us = float(statistics.median(samples)) + if len(samples) > 1: + formatted = ",".join(f"{sample:.1f}" for sample in samples) + print( + f"{name}_samples_us={formatted} " + f"range_us={min(samples):.1f}..{max(samples):.1f}" + ) print(f"{name}_us={us:.1f}") diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index fb837424d..406d5b146 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1174,7 +1174,59 @@ Follow-up relaxed-scale experiments: (`cos=0.891668`) and regressed speed (`local_mxfp4_opt_gemm1_us=1841.8` in a short graph run). Not retained. -The best retained GEMM1 remains v21. +The best retained GEMM1 was v21 until the later DPP bound-control cleanup below. + +### GEMM1 v34 DPP Bound Control + +The saved GEMM1 kernel is now: + +```text +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v34_dppbound +``` + +This keeps the v21 schedule and f32 amax reduction, but changes the explicit +DPP exchange used by the epilogue quad reduction to request `bound_ctrl:1`. +That matches the DPP form emitted by aiter GEMM1: + +```text +v_mov_b32_dpp ... quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf bound_ctrl:1 +v_mov_b32_dpp ... quad_perm:[2,3,0,1] row_mask:0xf bank_mask:0xf bound_ctrl:1 +``` + +The change is deliberately narrow: MFMA schedule, global/LDS load counts, +wait/barrier placement, and the scale math stay unchanged. The DPP helper now +accepts an optional `bound_ctrl` argument; existing GEMM2/scatter uses keep the +old default. + +Validation: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 5 --graph-iters 20 --measure 20 + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_us=1853.5 +local_mxfp4_all_flydsl_us=1872.0 +``` + +Graph-profiler GEMM1 samples after the change landed around `705-706us` +(`705.9us` in the last valid ordered run). For comparison, the previous v21 +snapshots in the same graph-profiling setup were typically in the `714-723us` +range. End-to-end graph replay still has several microseconds of run-to-run +noise, so this is treated as a small GEMM1-local win rather than a full pipeline +match. + +Rejected follow-up checks: + +- `v33_i32dppamax` replaced the two post-DPP f32 max ops with unsigned integer + max on the nonnegative f32 bit patterns. It sometimes measured similarly to + v34, but it changed the scale-selection path more than necessary and was not + more stable end-to-end. +- `v34_i32dpp_noexpguard` removed the expert-id validity check after the same + i32 DPP change. It stayed correct for the fixed benchmark but did not improve + GEMM1 timing, so the guard was restored. Latest CUDAGraph total timings on GPU 6: @@ -1661,3 +1713,59 @@ Torch then sees the selected physical GPU as logical `cuda:0`. The selector does not set `ROCR_VISIBLE_DEVICES`, because setting both HIP and ROCR filters can remap or hide devices unexpectedly. The current safety gate requires process VRAM below 1024 bytes and GPU use at 0 percent before selecting a card. + +## Graph Replay Measurement Defaults + +`bench_flydsl_16384.py` now defaults to a longer graph replay measurement: + +```text +--warmup 20 --graph-iters 40 --measure 40 --repeat 3 +``` + +Each repeat captures a fresh graph and reports the median elapsed time per +logical MoE invocation. The printed `_us` value is the median across +the repeats, with `_samples_us` showing the individual sample medians. + +`profile_flydsl_16384.py` now profiles graph replay by default with: + +```text +--warmup 20 --iters 5 --graph-iters 20 --repeat 5 --expected-kernels 8 +``` + +The profiler keeps the per-sample window at 100 logical iterations because +larger windows on this setup often drop device events. The script rejects +samples whose device event stream cannot be split into exactly 8 kernels per +logical iteration, then reports median per-kernel timings and an ordered kernel +diff. + +Latest graph replay end-to-end timing on auto-selected GPU/card 3: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl + +aiter_mxfp4_moe_samples_us=1847.5,1841.6,1841.3 range_us=1841.3..1847.5 +aiter_mxfp4_moe_us=1841.6 +local_mxfp4_all_flydsl_samples_us=1864.0,1865.8,1863.5 range_us=1863.5..1865.8 +local_mxfp4_all_flydsl_us=1864.0 +``` + +Latest graph replay profiler median over 5 valid samples: + +| stage | aiter | FlyDSL all | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.4 us | 6.4 us | +0.1 us | +| sort_cumsum | 10.3 us | 9.6 us | -0.7 us | +| sort_place_pad | 32.0 us | 35.0 us | +3.0 us | +| quant | 59.8 us | 59.8 us | -0.0 us | +| sort_scales | 55.2 us | 54.5 us | -0.7 us | +| GEMM1 | 698.9 us | 703.9 us | +5.0 us | +| GEMM2 | 855.0 us | 852.0 us | -3.0 us | +| scatter_reduce | 135.6 us | 139.7 us | +4.1 us | +| total kernel sum | 1853.2 us | 1861.2 us | +8.0 us | + +The profiler kernel sum is useful for stage attribution, but the event-timed +bench graph replay remains the authoritative end-to-end number. In this +snapshot the main remaining profiler-visible gaps are `GEMM1`, `scatter_reduce`, +and `sort_place_pad`; `GEMM2`, `sort_cumsum`, and `sort_scales` are roughly +matched or slightly ahead in FlyDSL. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 36c77fadb..8b01f3426 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -200,7 +200,7 @@ def _lds_atomic_add_i32(lds_memref, elem_offset, value): ).result -def _dpp_xor_f32(src, offset: int): +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) if offset == 1: dpp_ctrl = 0xB1 @@ -217,7 +217,7 @@ def _dpp_xor_f32(src, offset: int): arith.constant(dpp_ctrl, type=T.i32), arith.constant(0xF, type=T.i32), arith.constant(0xF, type=T.i32), - arith.constant(False, type=ir.IntegerType.get_signless(1)), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), ], [], [], @@ -225,7 +225,7 @@ def _dpp_xor_f32(src, offset: int): return out_i32.bitcast(T.f32) -def _dpp_xor_i32(src, offset: int): +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) if offset == 1: dpp_ctrl = 0xB1 @@ -242,7 +242,7 @@ def _dpp_xor_i32(src, offset: int): arith.constant(dpp_ctrl, type=T.i32), arith.constant(0xF, type=T.i32), arith.constant(0xF, type=T.i32), - arith.constant(False, type=ir.IntegerType.get_signless(1)), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), ], [], [], @@ -515,7 +515,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v21" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v34_dppbound" @flyc.kernel(name=module_name) def gemm1( @@ -1112,9 +1112,9 @@ def _max_u32(a, b): abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) local_max = _fmax_num(local_max, abs_v) - peer1 = _dpp_xor_f32(local_max, 1) + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) local_max = _fmax_num(local_max, peer2) amax_i32 = local_max.bitcast(i32) diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index 876872f71..a63eee834 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -1,4 +1,5 @@ import argparse +import statistics import sys from collections import defaultdict from pathlib import Path @@ -40,7 +41,7 @@ def _profile_runner(fn, *, warmup: int, iters: int, trace_path: Path | None): fn() torch.cuda.synchronize() - with profile(activities=[ProfilerActivity.CUDA], record_shapes=False) as prof: + with profile(activities=[ProfilerActivity.CUDA], record_shapes=False, acc_events=True) as prof: for _ in range(iters): fn() torch.cuda.synchronize() @@ -86,7 +87,7 @@ def _profile_runner_graph( ): graph = _capture_graph(fn, warmup=warmup, graph_iters=graph_iters) - with profile(activities=[ProfilerActivity.CUDA], record_shapes=False) as prof: + with profile(activities=[ProfilerActivity.CUDA], record_shapes=False, acc_events=True) as prof: for _ in range(replays): graph.replay() torch.cuda.synchronize() @@ -115,40 +116,79 @@ def _split_by_iteration(events, iters: int): return chunks -def _print_ordered_report(name: str, events, iters: int, top: int | None): +STAGE_NAMES = ( + "sort_count", + "sort_cumsum", + "sort_place_pad", + "quant", + "sort_scales", + "GEMM1", + "GEMM2", + "scatter_reduce", +) + + +def _median(values) -> float: + return float(statistics.median(values)) if values else 0.0 + + +def _ordered_rows(events, iters: int): chunks = _split_by_iteration(events, iters) total_us = sum(us for _, us in events) / iters if iters else 0.0 + if not chunks: + return None + rows = [] + for idx in range(len(chunks[0])): + names = [chunk[idx][0] for chunk in chunks] + times = [chunk[idx][1] for chunk in chunks] + same_name = all(item == names[0] for item in names) + kernel = names[0] if same_name else "" + avg_us = sum(times) / len(times) + pct = 100.0 * avg_us / total_us if total_us else 0.0 + rows.append( + { + "idx": idx, + "avg_us": avg_us, + "pct": pct, + "kernel": kernel, + } + ) + return { + "events": events, + "total_us": total_us, + "kernel_calls_per_iter": len(chunks[0]), + "rows": rows, + } + + +def _print_ordered_report(name: str, events, iters: int, top: int | None): + report = _ordered_rows(events, iters) + total_us = sum(us for _, us in events) / iters if iters else 0.0 print() print(f"== {name} ==") print(f"device_total_us_per_iter={total_us:.1f}") - if not chunks: + if report is None: print(f"device_kernel_events={len(events)}") print("warning=kernel sequence could not be evenly split by iteration") return - per_iter = len(chunks[0]) + per_iter = report["kernel_calls_per_iter"] print(f"device_kernel_calls_per_iter={per_iter}") print("ordered kernels:") print(f"{'idx':>3} {'avg_us':>9} {'pct':>6} kernel") - - rows = [] - for idx in range(per_iter): - names = [chunk[idx][0] for chunk in chunks] - times = [chunk[idx][1] for chunk in chunks] - same_name = all(item == names[0] for item in names) - kernel = names[0] if same_name else "" - avg_us = sum(times) / len(times) - pct = 100.0 * avg_us / total_us if total_us else 0.0 - rows.append((idx, avg_us, pct, kernel)) + rows = report["rows"] rows_to_print = rows if top is None else rows[:top] - for idx, avg_us, pct, kernel in rows_to_print: - print(f"{idx:3d} {avg_us:9.1f} {pct:5.1f}% {kernel}") + for row in rows_to_print: + print( + f"{row['idx']:3d} {row['avg_us']:9.1f} " + f"{row['pct']:5.1f}% {row['kernel']}" + ) if top is not None and len(rows) > top: - hidden_us = sum(row[1] for row in rows[top:]) + hidden_us = sum(row["avg_us"] for row in rows[top:]) print(f"... hidden_tail_us={hidden_us:.1f}") grouped = defaultdict(lambda: [0, 0.0]) @@ -174,6 +214,141 @@ def _print_ordered_report(name: str, events, iters: int, top: int | None): ) +def _collect_reports( + name: str, + fn, + *, + mode: str, + warmup: int, + iters: int, + graph_iters: int, + logical_iters: int, + repeat: int, + max_retries: int, + trace_dir: Path | None, + expected_kernel_calls: int | None, +): + reports = [] + attempts = 0 + max_attempts = repeat + max_retries + while len(reports) < repeat and attempts < max_attempts: + attempts += 1 + trace_path = None + if trace_dir is not None: + trace_path = trace_dir / f"profile_16384_{name}_sample{len(reports) + 1}.json.gz" + if mode == "graph": + events = _profile_runner_graph( + fn, + warmup=warmup, + graph_iters=graph_iters, + replays=iters, + trace_path=trace_path, + ) + else: + events = _profile_runner( + fn, + warmup=warmup, + iters=iters, + trace_path=trace_path, + ) + report = _ordered_rows(events, logical_iters) + if report is None: + print( + f"{name} sample attempt {attempts}: dropped " + f"(device_kernel_events={len(events)})" + ) + continue + if ( + expected_kernel_calls is not None + and report["kernel_calls_per_iter"] != expected_kernel_calls + ): + print( + f"{name} sample attempt {attempts}: dropped " + f"(kernels/iter={report['kernel_calls_per_iter']}, " + f"expected={expected_kernel_calls})" + ) + continue + reports.append(report) + print( + f"{name} sample {len(reports)}/{repeat}: " + f"device_total_us_per_iter={report['total_us']:.1f}, " + f"kernels/iter={report['kernel_calls_per_iter']}" + ) + if trace_path is not None: + print(f"trace={trace_path}") + + if len(reports) < repeat: + raise RuntimeError( + f"{name}: only collected {len(reports)} valid profiler samples " + f"after {attempts} attempts" + ) + return reports + + +def _summarize_reports(name: str, reports, top: int | None): + total_us = _median([report["total_us"] for report in reports]) + per_iter = reports[0]["kernel_calls_per_iter"] + rows = [] + for idx in range(per_iter): + values = [report["rows"][idx]["avg_us"] for report in reports] + kernels = [report["rows"][idx]["kernel"] for report in reports] + kernel = kernels[0] if all(item == kernels[0] for item in kernels) else "" + avg_us = _median(values) + rows.append( + { + "idx": idx, + "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", + "avg_us": avg_us, + "pct": 100.0 * avg_us / total_us if total_us else 0.0, + "kernel": kernel, + "min_us": min(values), + "max_us": max(values), + } + ) + + print() + print(f"== {name} median over {len(reports)} samples ==") + print(f"device_total_us_per_iter={total_us:.1f}") + print(f"device_kernel_calls_per_iter={per_iter}") + print(f"{'idx':>3} {'stage':<15} {'median_us':>10} {'range_us':>17} {'pct':>6} kernel") + rows_to_print = rows if top is None else rows[:top] + for row in rows_to_print: + range_text = f"{row['min_us']:.1f}..{row['max_us']:.1f}" + print( + f"{row['idx']:3d} {row['stage']:<15} {row['avg_us']:10.1f} " + f"{range_text:>17} {row['pct']:5.1f}% {row['kernel']}" + ) + if top is not None and len(rows) > top: + hidden_us = sum(row["avg_us"] for row in rows[top:]) + print(f"... hidden_tail_us={hidden_us:.1f}") + return {"name": name, "total_us": total_us, "rows": rows} + + +def _print_diff_report(base, candidate): + if len(base["rows"]) != len(candidate["rows"]): + print() + print("== kernel diff ==") + print("warning=runner kernel counts differ; ordered diff skipped") + return + + print() + print(f"== kernel diff: {candidate['name']} - {base['name']} ==") + print(f"{'stage':<15} {'base_us':>9} {'cand_us':>9} {'diff_us':>9} {'diff_pct':>9}") + for base_row, cand_row in zip(base["rows"], candidate["rows"]): + diff_us = cand_row["avg_us"] - base_row["avg_us"] + diff_pct = 100.0 * diff_us / base_row["avg_us"] if base_row["avg_us"] else 0.0 + print( + f"{base_row['stage']:<15} {base_row['avg_us']:9.1f} " + f"{cand_row['avg_us']:9.1f} {diff_us:9.1f} {diff_pct:8.1f}%" + ) + total_diff = candidate["total_us"] - base["total_us"] + total_pct = 100.0 * total_diff / base["total_us"] if base["total_us"] else 0.0 + print( + f"{'total':<15} {base['total_us']:9.1f} " + f"{candidate['total_us']:9.1f} {total_diff:9.1f} {total_pct:8.1f}%" + ) + + def main(): parser = argparse.ArgumentParser() parser.add_argument( @@ -187,7 +362,7 @@ def main(): default="graph", help="profile CUDA/HIP graph replay by default; use eager for normal launch profiling", ) - parser.add_argument("--warmup", type=int, default=5) + parser.add_argument("--warmup", type=int, default=20) parser.add_argument( "--iters", type=int, @@ -200,6 +375,24 @@ def main(): default=20, help="pipeline iterations captured inside each graph replay", ) + parser.add_argument( + "--repeat", + type=int, + default=5, + help="valid profiler samples to collect per runner", + ) + parser.add_argument( + "--max-retries", + type=int, + default=10, + help="extra profiler attempts allowed when event sequences are incomplete", + ) + parser.add_argument( + "--expected-kernels", + type=int, + default=8, + help="expected device kernels per logical iteration; set 0 to disable", + ) parser.add_argument("--top", type=int, default=None) parser.add_argument( "--trace-dir", @@ -218,12 +411,16 @@ def main(): raise ValueError("--graph-iters must be positive in graph mode") if args.iters <= 0: raise ValueError("--iters must be positive") + if args.repeat <= 0: + raise ValueError("--repeat must be positive") + if args.max_retries < 0: + raise ValueError("--max-retries must be non-negative") logical_iters = args.iters * args.graph_iters if args.mode == "graph" else args.iters print( f"mode={args.mode} warmup={args.warmup} " f"iters={args.iters} graph_iters={args.graph_iters if args.mode == 'graph' else 0} " - f"logical_iters={logical_iters}" + f"logical_iters={logical_iters} repeat={args.repeat}" ) weights = build_weights(SHAPE, device) @@ -236,26 +433,25 @@ def main(): raise ValueError(f"unknown runners: {', '.join(unknown)}") trace_dir = Path(args.trace_dir) if args.trace_dir else None + summaries = [] for name in requested: - trace_path = trace_dir / f"profile_16384_{name}.json.gz" if trace_dir else None - if args.mode == "graph": - events = _profile_runner_graph( - runners[name], - warmup=args.warmup, - graph_iters=args.graph_iters, - replays=args.iters, - trace_path=trace_path, - ) - else: - events = _profile_runner( - runners[name], - warmup=args.warmup, - iters=args.iters, - trace_path=trace_path, - ) - _print_ordered_report(name, events, logical_iters, args.top) - if trace_path is not None: - print(f"trace={trace_path}") + reports = _collect_reports( + name, + runners[name], + mode=args.mode, + warmup=args.warmup, + iters=args.iters, + graph_iters=args.graph_iters, + logical_iters=logical_iters, + repeat=args.repeat, + max_retries=args.max_retries, + trace_dir=trace_dir, + expected_kernel_calls=args.expected_kernels or None, + ) + summaries.append(_summarize_reports(name, reports, args.top)) + + if len(summaries) >= 2: + _print_diff_report(summaries[0], summaries[1]) if __name__ == "__main__": From e9a76f03dab5e6a977fc790ef4c85f9b44156a99 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 12:12:49 +0000 Subject: [PATCH 021/118] Align Kimi sort place and scatter kernels --- docs/kimi_fp4_moe_16384_opt_notes.md | 78 ++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 105 +++++++++++++++------------ 2 files changed, 137 insertions(+), 46 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 406d5b146..96af97c3b 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1769,3 +1769,81 @@ bench graph replay remains the authoritative end-to-end number. In this snapshot the main remaining profiler-visible gaps are `GEMM1`, `scatter_reduce`, and `sort_place_pad`; `GEMM2`, `sort_cumsum`, and `sort_scales` are roughly matched or slightly ahead in FlyDSL. + +## Sort Place/Scatter v4-v6 Alignment + +The saved sort placement kernel is now: + +```text +flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v4_globalio +``` + +Changes: + +- Match aiter's phase order: place real routed tokens first, then barrier, then + fill the padded tail for each expert. +- Switch `sort_place_pad` from buffer resources to raw global loads/stores, + matching the plain pointer access style used by aiter's HIP kernel. + +The saved scatter kernel is now: + +```text +flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload +``` + +Change: + +- Keep the v4 route-vector preload and raw global I/O, but preload only the 9 + route weights before entering the decode/FMA body. Unlike the rejected v5 + experiment, this does not stage all q/scale payloads, so it adds latency + hiding without substantially increasing vector-register pressure. + +Validation: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --warmup 5 \ + --graph-iters 20 --measure 10 --repeat 1 + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +``` + +Profiler baseline at the start of this round, before the changes: + +| stage | aiter | previous FlyDSL | delta | +| --- | ---: | ---: | ---: | +| sort_place_pad | 32.2 us | 35.2 us | +3.0 us | +| scatter_reduce | 135.0 us | 140.2 us | +5.2 us | + +Profiler after the changes, run 1: + +| stage | aiter | FlyDSL v4/v6 | delta | +| --- | ---: | ---: | ---: | +| sort_place_pad | 32.1 us | 34.1 us | +2.0 us | +| scatter_reduce | 135.5 us | 130.5 us | -5.0 us | +| total kernel sum | 1860.1 us | 1860.1 us | +0.0 us | + +Profiler after the changes, run 2: + +| stage | aiter | FlyDSL v4/v6 | delta | +| --- | ---: | ---: | ---: | +| sort_place_pad | 31.8 us | 34.3 us | +2.5 us | +| scatter_reduce | 134.6 us | 130.6 us | -4.0 us | +| total kernel sum | 1853.4 us | 1861.7 us | +8.3 us | + +Default graph replay end-to-end timing after the changes: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl + +aiter_mxfp4_moe_samples_us=1872.3,1876.8,1856.9 range_us=1856.9..1876.8 +aiter_mxfp4_moe_us=1872.3 +local_mxfp4_all_flydsl_samples_us=1864.4,1864.2,1862.8 range_us=1862.8..1864.4 +local_mxfp4_all_flydsl_us=1864.2 +``` + +Interpretation: `scatter_reduce` is now faster than aiter in the graph-profiler +breakdown. `sort_place_pad` improved by about 1 us but is still roughly +2-2.5 us slower than aiter, so the next sort-side work should focus there. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 8b01f3426..8e7a9d88a 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -152,6 +152,14 @@ def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = Fal return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + def _elem_offset_to_i64(elem_offset): if isinstance(elem_offset, int): return arith.constant(elem_offset, type=T.i64) @@ -264,7 +272,7 @@ def compile_kimi_mxfp4_scatter_reduce_q_16384(): qcols_i32 = MODEL_DIM // 2 // 4 scols_i32 = MODEL_DIM // 32 // 4 out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v4_routevec" + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" @flyc.kernel(name=module_name) def scatter_reduce_q( @@ -322,9 +330,7 @@ def _fma_v2_f32(a, b, c): reverse_base = token_i32 * c_topk_i32 route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - def accumulate_route(sorted_pos): - route_w = _global_load_f32(weights_ptr, sorted_pos) - + def accumulate_route(sorted_pos, route_w): scale_idx = sorted_pos * c_scols_i32 + scale_word_col scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) scale_shift = (blk & c3_i32) << c3_i32 @@ -346,6 +352,8 @@ def accumulate_route(sorted_pos): ) acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + route_pos = [] + route_weights = [] for i in range_constexpr(8): sorted_pos = ArithValue( vector.extract( @@ -354,12 +362,17 @@ def accumulate_route(sorted_pos): dynamic_position=[], ) ) - accumulate_route(sorted_pos) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) sorted_pos = ArithValue( _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) ) - accumulate_route(sorted_pos) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) packed_words = [] for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): @@ -2063,7 +2076,7 @@ def sort_cumsum( scf.YieldOp([]) @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v2_cumsumtail", + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v4_globalio", known_block_size=[threads, 1, 1], ) def sort_place_pad( @@ -2084,15 +2097,15 @@ def sort_place_pad( tx_i32 = arith.index_cast(i32, tx) bx_i32 = arith.index_cast(i32, bx) - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - topk_weight_rsrc = _ptr_buffer_resource(arg_topk_weight, weight_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - real_rsrc = _ptr_buffer_resource(arg_real_counts, real_counts_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - reverse_rsrc = _ptr_buffer_resource(arg_reverse_sorted, reverse_nbytes) - weights_rsrc = _ptr_buffer_resource(arg_sorted_weights, sorted_nbytes) - mindices_rsrc = _ptr_buffer_resource(arg_m_indices, sorted_nbytes) + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) base_ptr = allocator.get_base() local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() @@ -2113,40 +2126,19 @@ def sort_place_pad( with ir.InsertionPoint(_if_init.then_block): e_i32 = tx_i32 off = e_i32 * c_sort_ctas + bx_i32 - local = buffer_ops.buffer_load(offsets_rsrc, off, vec_width=1, dtype=i32) - start = buffer_ops.buffer_load(offsets_rsrc, e_i32 * c_sort_ctas, vec_width=1, dtype=i32) + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) memref.store(local, local_offsets, [tx]) memref.store(start, row_starts, [tx]) scf.YieldOp([]) _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) with ir.InsertionPoint(_if_last_start.then_block): - last = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + last = _global_load_i32(cumsum_ptr, c0_i32) memref.store(last, row_starts, [arith.index(EXPERTS)]) scf.YieldOp([]) gpu.barrier() - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = buffer_ops.buffer_load(real_rsrc, e_i32, vec_width=1, dtype=i32) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - buffer_ops.buffer_store(c_pad, sorted_rsrc, j_i32) - buffer_ops.buffer_store(c_pad, mindices_rsrc, j_i32) - buffer_ops.buffer_store(c0_f32, weights_rsrc, j_i32) - scf.YieldOp([]) - - gpu.barrier() - c_start = bx * arith.constant(per_cta, index=True) c_end = c_start + arith.constant(per_cta, index=True) c_total = arith.constant(total_pairs, index=True) @@ -2157,16 +2149,37 @@ def sort_place_pad( _if = scf.IfOp(valid) with ir.InsertionPoint(_if.then_block): idx_i32 = arith.index_cast(i32, idx) - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) token_id = idx_i32 // c_topk topk_id = idx_i32 % c_topk packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = buffer_ops.buffer_load(topk_weight_rsrc, idx, vec_width=1, dtype=f32) - buffer_ops.buffer_store(packed_id, sorted_rsrc, sp) - buffer_ops.buffer_store(token_id & c_mask_token, mindices_rsrc, sp) - buffer_ops.buffer_store(w, weights_rsrc, sp) - buffer_ops.buffer_store(sp, reverse_rsrc, idx_i32) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) scf.YieldOp([]) @flyc.jit From 75045f9e2cc88ae3ce954c78a2c7574cdd9b1164 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 12:26:09 +0000 Subject: [PATCH 022/118] Tune Kimi sort placement loop --- docs/kimi_fp4_moe_16384_opt_notes.md | 60 ++++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 34 ++++++++-------- 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 96af97c3b..edeb7b620 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1847,3 +1847,63 @@ local_mxfp4_all_flydsl_us=1864.2 Interpretation: `scatter_reduce` is now faster than aiter in the graph-profiler breakdown. `sort_place_pad` improved by about 1 us but is still roughly 2-2.5 us slower than aiter, so the next sort-side work should focus there. + +## Sort Place v5 Dynamic Placement Loop + +Current saved sort placement kernel: + +```text +flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v5_placeloop +``` + +Change from v4: + +- Keep the raw global I/O and aiter-like phase order from v4. +- Replace the compile-time unrolled real-token placement loop with one dynamic + `scf.ForOp(c_start + tx, end, 1024)`. +- Keep the padding loop compile-time unrolled. A dynamic padding-loop + experiment did not improve the graph-profiler timing. + +Rejected follow-up: + +- `v6_exactend` removed the `min(c_start + per_cta, total_pairs)` end bound + because this shape has exactly `16 * 9216 == 16384 * 9` routed pairs. It was + slower in the graph profiler, so the saved version keeps the v5 bound form. + +Graph replay profiler median over 5 valid samples: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --max-retries 10 +``` + +| stage | aiter | FlyDSL v5 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.0 us | 6.4 us | +0.5 us | +| sort_cumsum | 10.2 us | 9.7 us | -0.5 us | +| sort_place_pad | 31.9 us | 32.9 us | +1.0 us | +| quant | 58.8 us | 59.4 us | +0.6 us | +| sort_scales | 55.1 us | 54.9 us | -0.2 us | +| GEMM1 | 698.9 us | 710.9 us | +12.0 us | +| GEMM2 | 859.9 us | 858.2 us | -1.6 us | +| scatter_reduce | 134.5 us | 130.5 us | -4.1 us | +| total kernel sum | 1855.0 us | 1863.3 us | +8.3 us | + +Default graph replay end-to-end timing: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_samples_us=1864.9,1856.7,1853.7 range_us=1853.7..1864.9 +aiter_mxfp4_moe_us=1856.7 +local_mxfp4_all_flydsl_samples_us=1862.3,1863.3,1862.6 range_us=1862.3..1863.3 +local_mxfp4_all_flydsl_us=1862.6 +``` + +Interpretation: v5 recovers most of the previous `sort_place_pad` gap, from +roughly +2-3 us down to about +1 us in graph replay profiling. The all-FlyDSL +path still launches the same 8 kernels as aiter; the remaining graph-profiler +gap is mostly `GEMM1`, with `sort_place_pad` now a smaller residual item. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 8e7a9d88a..7c35e1eff 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -2076,7 +2076,7 @@ def sort_cumsum( scf.YieldOp([]) @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v4_globalio", + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v5_placeloop", known_block_size=[threads, 1, 1], ) def sort_place_pad( @@ -2143,23 +2143,21 @@ def sort_place_pad( c_end = c_start + arith.constant(per_cta, index=True) c_total = arith.constant(total_pairs, index=True) end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) gpu.barrier() From cb53288a4c041ce62e75f3ab08b3a7baa9665ec3 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 12:31:00 +0000 Subject: [PATCH 023/118] Record rejected Kimi sort padding loop --- docs/kimi_fp4_moe_16384_opt_notes.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index edeb7b620..0796306aa 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1907,3 +1907,15 @@ Interpretation: v5 recovers most of the previous `sort_place_pad` gap, from roughly +2-3 us down to about +1 us in graph replay profiling. The all-FlyDSL path still launches the same 8 kernels as aiter; the remaining graph-profiler gap is mostly `GEMM1`, with `sort_place_pad` now a smaller residual item. + +Rejected v7 padding-loop follow-up: + +- `v7_hippadloop` changed the padding expert loop to an explicit dynamic + `scf.ForOp(e_lo, e_hi, 1)`, closer to the aiter HIP source. +- Static ISA became much smaller: v5 `sort_place_pad` was about 1079 assembly + lines with 79 static `global_store_dword` and 79 static `s_cbranch` + occurrences; v7 dropped to about 201 lines, 7 stores, and 8 branches. +- Measured graph performance did not improve. A 3-sample graph profiler saw + `sort_place_pad` around 33.0 us, and the default graph replay bench reported + `local_mxfp4_all_flydsl_us=1864.1`, slightly slower than saved v5's + `1862.6`. The saved code therefore remains v5. From 5e38bf83197d9573f090612d8d017c001479eda8 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 12:48:40 +0000 Subject: [PATCH 024/118] Align Kimi sort place padding path --- docs/kimi_fp4_moe_16384_opt_notes.md | 64 ++++++++++++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 43 ++++++++++--------- 2 files changed, 88 insertions(+), 19 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 0796306aa..15baeda70 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1919,3 +1919,67 @@ Rejected v7 padding-loop follow-up: `sort_place_pad` around 33.0 us, and the default graph replay bench reported `local_mxfp4_all_flydsl_us=1864.1`, slightly slower than saved v5's `1862.6`. The saved code therefore remains v5. + +## Sort Place v14 Padding Lane Mask + +Current saved sort placement kernel: + +```text +flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask +``` + +Change from v5: + +- Keep the v5 dynamic placement loop. +- Add a padding-phase guard `tx < BM` before the unrolled expert padding loop. + Padding per expert is always in `[0, BM)`, because `sort_cumsum` rounds each + expert's real count up to a multiple of `BM=128`. Therefore lanes + `tx>=128` cannot write padding and can skip the whole padding phase. + +Rejected follow-ups while searching for this: + +- `v8_udivrem`, `v9_udivmulsub`, `v10_divsimulsub`, and `v13_magicdiv9` + tried to replace `token_id = idx / 9` and `topk_id = idx % 9` lowering. + All were correct but slower in graph profiling. +- `v11_ldsorder` changed sort-place LDS layout to look more like aiter's + compiler-chosen layout. It was correct but slower in the short graph bench. +- `v12_i32while` changed the placement loop from index `scf.ForOp` to an i32 + `scf.WhileOp`. It was correct but did not improve `sort_place_pad`. + +Graph replay profiler median over 5 valid samples: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --max-retries 15 +``` + +| stage | aiter | FlyDSL v14 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.3 us | 6.5 us | +0.2 us | +| sort_cumsum | 10.4 us | 9.7 us | -0.7 us | +| sort_place_pad | 32.0 us | 32.1 us | +0.1 us | +| quant | 59.5 us | 59.7 us | +0.1 us | +| sort_scales | 55.4 us | 55.0 us | -0.4 us | +| GEMM1 | 699.3 us | 711.8 us | +12.4 us | +| GEMM2 | 861.8 us | 855.4 us | -6.4 us | +| scatter_reduce | 135.3 us | 130.4 us | -4.8 us | +| total kernel sum | 1860.6 us | 1860.7 us | +0.1 us | + +Default graph replay end-to-end timing: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_samples_us=1890.5,1852.8,1855.9 range_us=1852.8..1890.5 +aiter_mxfp4_moe_us=1855.9 +local_mxfp4_all_flydsl_samples_us=1879.8,1865.2,1864.9 range_us=1864.9..1879.8 +local_mxfp4_all_flydsl_us=1865.2 +``` + +Interpretation: `sort_place_pad` is now effectively aligned in graph replay +profiling, with the remaining measured gap around +0.1 us. End-to-end graph +timing is still dominated by GEMM variance and should not be used to judge this +specific sort-place change in isolation. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 7c35e1eff..3da9a6390 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -2076,7 +2076,7 @@ def sort_cumsum( scf.YieldOp([]) @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v5_placeloop", + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", known_block_size=[threads, 1, 1], ) def sort_place_pad( @@ -2161,24 +2161,29 @@ def sort_place_pad( gpu.barrier() - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) @flyc.jit def launch_sort( From a94e936a1991910c748355aa3b19b67cde570ac9 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 13:30:28 +0000 Subject: [PATCH 025/118] Align Kimi mxfp4 GEMM1 AGPR path --- docs/kimi_fp4_moe_16384_opt_notes.md | 90 +++++++++++++++++++ kimi_fp4_moe_16384_opt.py | 125 ++++++++++++++++++++------- 2 files changed, 183 insertions(+), 32 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 15baeda70..2f78bd6b7 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -1983,3 +1983,93 @@ Interpretation: `sort_place_pad` is now effectively aligned in graph replay profiling, with the remaining measured gap around +0.1 us. End-to-end graph timing is still dominated by GEMM variance and should not be used to judge this specific sort-place change in isolation. + +## GEMM1 v36 AGPR Inline MFMA + +Current saved GEMM1 kernel: + +```text +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm +``` + +Motivation: + +- aiter BM128 GEMM1 uses inline asm constraints to keep accumulators in AGPR: + `=a` for the first zero-init MFMA and tied `+a` for accumulation. +- The previous FlyDSL `v34_dppbound` used the ROCDL MFMA intrinsic for the main + loop. Its final ISA had all MFMA destinations in VGPR, with resource usage + around `VGPR=256, AGPR=80` and graph-profiler GEMM1 medians about + `707-709 us`, roughly `+10-14 us` slower than aiter. + +Change: + +- Keep the v34 schedule, loads, waits, barriers, and epilogue. +- Replace only the GEMM1 main-loop MFMA calls in `compute_tile_jmajor*` with + inline asm using the same instruction: + `v_mfma_scale_f32_16x16x128_f8f6f4`. +- Use `=a,v,v,v,v` for the first MFMA of each accumulator and + `=a,v,v,v,v,0` for subsequent tied accumulation. The tied form maps to the + same LLVM constraint shape emitted by clang for HIP `"+a"` inline asm. + +Rejected checks while developing v36: + +- `v35_agprinit` changed only the first MFMA to `=a` and left later MFMA calls + as ROCDL intrinsics. It compiled but failed correctness + (`cos=0.960782`), because LLVM did not preserve the AGPR accumulator chain in + the same way aiter's tied asm does. +- `v35_inlinevgprtest` used the same inline asm text with `=v` output. It was + bitwise correct, proving the operand packing and `op_sel` mapping were + correct; the issue was specifically the incomplete AGPR constraint chain. + +Resource / ISA checks: + +| kernel | MFMA dest AGPR | MFMA src acc AGPR | VGPR / AGPR | spills | +| --- | ---: | ---: | ---: | ---: | +| aiter BM128 | 1792 / 1792 | 1760 / 1792 | 165 / 168 | 0 | +| FlyDSL v34 | 0 / 1792 | 0 / 1792 | 256 / 80 | 0 | +| FlyDSL v36 | 1792 / 1792 | 1760 / 1792 | 169 / 128 | 0 | + +Static instruction counts relevant to scheduling: + +| kernel | `s_waitcnt` | `s_barrier` | `buffer_load_dwordx4` | `buffer_load_lds` | `ds_read_b128` | +| --- | ---: | ---: | ---: | ---: | ---: | +| aiter BM128 | 320 | 30 | 340 | 128 | 480 | +| FlyDSL v34 | 375 | 31 | 340 | 128 | 480 | +| FlyDSL v36 | 287 | 31 | 340 | 128 | 480 | + +Default graph-profiler validation (`warmup=20`, `iters=5`, +`graph_iters=20`, `repeat=5`; only `--max-retries 30` was changed to tolerate +profiler event drops): + +| run | aiter GEMM1 | FlyDSL v36 GEMM1 | delta | +| --- | ---: | ---: | ---: | +| 1 | 695.5 us | 694.5 us | -1.1 us | +| 2 | 696.9 us | 693.5 us | -3.4 us | +| 3 | 695.1 us | 694.1 us | -1.0 us | + +Full graph-profiler totals from the same runs: + +| run | aiter total | FlyDSL all-FlyDSL total | delta | +| --- | ---: | ---: | ---: | +| 1 | 1856.8 us | 1843.5 us | -13.4 us | +| 2 | 1858.4 us | 1842.3 us | -16.1 us | +| 3 | 1851.5 us | 1842.7 us | -8.8 us | + +Default graph replay correctness / timing: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl + +local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 +local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 +aiter_mxfp4_moe_samples_us=1859.5,1855.5,1850.2 range_us=1850.2..1859.5 +aiter_mxfp4_moe_us=1855.5 +local_mxfp4_all_flydsl_samples_us=1841.5,1839.9,1841.0 range_us=1839.9..1841.5 +local_mxfp4_all_flydsl_us=1841.0 +``` + +Interpretation: GEMM1 is now effectively aligned with aiter for the fixed +M=16384 Kimi mxfp4 path. In the three default graph-profiler runs above, +FlyDSL v36 GEMM1 is slightly faster than aiter by about `1-3 us`, and the +all-FlyDSL pipeline remains bitwise equal to aiter for the benchmark output. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 3da9a6390..c987a4d30 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -528,7 +528,7 @@ def compile_kimi_mxfp4_gemm1_16384(): # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v34_dppbound" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" @flyc.kernel(name=module_name) def gemm1( @@ -547,6 +547,7 @@ def gemm1( f32 = T.f32 vec4_f32 = T.vec(4, f32) vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) vec4_i64 = T.vec(4, i64) vec8_i32 = T.vec(8, i32) vec16_x = T.vec(16, T.f8) @@ -748,6 +749,49 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) return vector.bitcast(vec8_i32, v4) + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + c0_i64 = arith.constant(0, type=i64) cbsz = 4 blgp = 4 @@ -790,15 +834,15 @@ def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): ) return acc_list - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): acc_list = list(acc_in) - a_pairs = [] + a_pairs_v4 = [] for k_idx in range_constexpr(k_unroll): col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) for mi_idx in range_constexpr(m_repeat): curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) for ni in range_constexpr(num_acc_n_packed): b_scale_i32 = b_scale[ni] @@ -815,22 +859,29 @@ def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): b_packs0, b_packs1 = b_tile_in[k_idx] b0 = b_packs0[ni_idx] b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - a128 = a_pairs[k_idx * m_repeat + mi_idx] - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, + op_sel_a, a_scale_val, - k_idx * _scale_pack_n + inxdl, + op_sel_b, b_scale_val, - ], - ) + ) return acc_list def compute_tile_jmajor_prefetch_a_b( @@ -842,16 +893,17 @@ def compute_tile_jmajor_prefetch_a_b( next_a_tile: int, next_a_slot: int, next_b_tile: int, + init_zero: bool = False, ): acc_list = list(acc_in) next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs = [] + a_pairs_v4 = [] for k_idx in range_constexpr(k_unroll): col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) for mi_idx in range_constexpr(m_repeat): curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) @@ -870,22 +922,29 @@ def compute_tile_jmajor_prefetch_a_b( b_packs0, b_packs1 = b_tile_in[k_idx] b0 = b_packs0[ni_idx] b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - a128 = a_pairs[k_idx * m_repeat + mi_idx] - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, + op_sel_a, a_scale_val, - k_idx * _scale_pack_n + inxdl, + op_sel_b, b_scale_val, - ], - ) + ) rocdl.sched_barrier(0) for k_idx in range_constexpr(k_unroll): @@ -1018,6 +1077,7 @@ def _then_body(): k_tile + 2, next_slot, k_tile + 2, + init_zero=(k_tile == 0), ) else: acc = compute_tile_jmajor( @@ -1026,6 +1086,7 @@ def _then_body(): b_tiles[curr_b_slot], a_scale, b_scales[curr_b_slot], + init_zero=(k_tile == 0), ) if const_expr(k_tile + 1 < num_k_tiles): From af6e440ac8f5cbb80b9569d4dead44403c481eb6 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 14:35:11 +0000 Subject: [PATCH 026/118] zz --- bench_flydsl_16384.py | 120 -------- kimi_fp4_moe_16384_opt.py | 561 +++++--------------------------------- profile.sh | 9 + profile_flydsl_16384.py | 2 +- 4 files changed, 75 insertions(+), 617 deletions(-) create mode 100644 profile.sh diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index c873ba246..d3a73199c 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -39,13 +39,7 @@ from kimi_fp4_moe_16384_opt import ( # noqa: E402 MXFP4_STAGE1_KERNEL, MXFP4_STAGE2_KERNEL, - run_kimi_fp4_flydsl_atomic_stage2_16384, - run_kimi_fp4_flydsl_mxfp4_sort_16384, - run_kimi_fp4_mxfp4_moe_16384_aiter_ref, run_kimi_fp4_mxfp4_moe_16384_all_flydsl, - run_kimi_fp4_mxfp4_moe_16384_opt, - run_kimi_fp4_mxfp4_moe_16384_opt_gemm1, - run_kimi_fp4_mxfp4_moe_16384_opt_gemm2, ) @@ -173,78 +167,6 @@ def run_local_kimi(hidden, topk_ids, topk_weight, weights): ) -def run_local_kimi_mxfp4_sort(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_flydsl_mxfp4_sort_16384( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_kimi_atomic_stage2(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_flydsl_atomic_stage2_16384( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_opt(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_opt( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_opt_gemm2(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_opt_gemm2( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_opt_gemm1(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_opt_gemm1( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_aiter_ref(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_aiter_ref( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - def run_local_mxfp4_all_flydsl(hidden, topk_ids, topk_weight, weights): return run_kimi_fp4_mxfp4_moe_16384_all_flydsl( hidden, @@ -277,42 +199,6 @@ def make_runners(hidden, topk_ids, topk_weight, weights): topk_weight, weights["flydsl"], ), - "local_kimi_fp4_mxfp4_sort": lambda: run_local_kimi_mxfp4_sort( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - "local_kimi_fp4_atomic_stage2": lambda: run_local_kimi_atomic_stage2( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - "local_mxfp4_aiter_ref": lambda: run_local_mxfp4_aiter_ref( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_opt": lambda: run_local_mxfp4_opt( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_opt_gemm1": lambda: run_local_mxfp4_opt_gemm1( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_opt_gemm2": lambda: run_local_mxfp4_opt_gemm2( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), "local_mxfp4_all_flydsl": lambda: run_local_mxfp4_all_flydsl( hidden, topk_ids, @@ -411,12 +297,6 @@ def main(): check_specs = [ ("aiter_mxfp4_vs_aiter", "aiter_mxfp4_moe", "aiter_moe"), ("local_vs_aiter", "local_kimi_fp4", "aiter_moe"), - ("local_mxfp4_sort_vs_aiter", "local_kimi_fp4_mxfp4_sort", "aiter_moe"), - ("local_atomic_stage2_vs_aiter", "local_kimi_fp4_atomic_stage2", "aiter_moe"), - ("local_mxfp4_ref_vs_aiter_mxfp4", "local_mxfp4_aiter_ref", "aiter_mxfp4_moe"), - ("local_mxfp4_opt_vs_aiter_mxfp4", "local_mxfp4_opt", "aiter_mxfp4_moe"), - ("local_mxfp4_opt_gemm1_vs_aiter_mxfp4", "local_mxfp4_opt_gemm1", "aiter_mxfp4_moe"), - ("local_mxfp4_opt_gemm2_vs_aiter_mxfp4", "local_mxfp4_opt_gemm2", "aiter_mxfp4_moe"), ("local_mxfp4_all_flydsl_vs_aiter_mxfp4", "local_mxfp4_all_flydsl", "aiter_mxfp4_moe"), ] for name, lhs_name, rhs_name in check_specs: diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index c987a4d30..3adb7175d 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -1,9 +1,4 @@ -"""Experimental Kimi fp4 MoE paths for the fixed M=16384 shape. - -This file is intentionally separate from ``kimi_fp4_moe_16384.py``. It keeps -the known-good FlyDSL GEMMs intact while extracting the relevant mxfp4_moe -orchestration from aiter for direct comparison and incremental migration. -""" +"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" from __future__ import annotations import functools @@ -11,10 +6,8 @@ import torch -import aiter import flydsl.compiler as flyc import flydsl.expr as fx -from aiter import dtypes from flydsl._mlir import ir from flydsl._mlir.dialects import llvm, memref, scf from flydsl._mlir.dialects.arith import CmpIPredicate @@ -25,21 +18,20 @@ from flydsl.expr.typing import T from flydsl.runtime.device import get_rocm_arch as get_hip_arch from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from aiter.ops.flydsl.kernels.layout_utils import ( +from kernels.layout_utils import ( _div_pow2, crd2idx, idx2crd, get as layout_get, ) -from aiter.ops.flydsl.kernels.mfma_epilogues import c_shuffle_epilog -from aiter.ops.flydsl.kernels.mfma_preshuffle_pipeline import ( +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( _buffer_load_vec, swizzle_xor16, tile_chunk_coord_i32, ) from kimi_fp4_moe_16384 import ( - BLOCK_M, EXPERTS, INTER_DIM, MODEL_DIM, @@ -47,9 +39,6 @@ TOPK, _ptr_view_safe, _run_compiled, - kimi_fp4_stage1_16384, - kimi_fp4_stage2_16384, - kimi_moe_sorting_16384, ) @@ -75,10 +64,6 @@ class Mxfp4SortBuffers: block_m: int -def _empty_bf16(device: torch.device) -> torch.Tensor: - return torch.empty((0,), dtype=dtypes.bf16, device=device) - - def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: if t.element_size() == 1 and t.dtype != torch.uint8: return t.view(torch.uint8) @@ -433,7 +418,7 @@ def kimi_mxfp4_scatter_reduce_q_16384( f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" ) if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=flat_out_q.device) + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) args = ( _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), @@ -1340,7 +1325,7 @@ def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. This is the first direct FlyDSL port of aiter's Kimi-only - ``mxfp4_moe_gemm2_a4w4_mxfp4out`` path. It keeps the public shape fixed: + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - A: sorted fp4, ``[max_sorted, 512 / 2]`` - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` @@ -2293,9 +2278,8 @@ def kimi_mxfp4_sort_16384( topk_weight: torch.Tensor, *, block_m: int = MXFP4_BLOCK_M, - use_flydsl: bool = False, ) -> Mxfp4SortBuffers: - """Run the fixed mxfp4_moe three-stage sorter for Kimi M=16384.""" + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" if tuple(topk_ids.shape) != (TOKEN, TOPK): raise ValueError( f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" @@ -2307,59 +2291,37 @@ def kimi_mxfp4_sort_16384( device = topk_ids.device max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=dtypes.i32) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) sorted_expert_ids = torch.empty( (max_sorted // block_m,), device=device, - dtype=dtypes.i32, + dtype=torch.int32, ) - cumsum_tensor = torch.empty((1,), device=device, dtype=dtypes.i32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=dtypes.i32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=dtypes.fp32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) - m_indices = torch.empty((max_sorted,), device=device, dtype=dtypes.i32) - - if use_flydsl: - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=dtypes.i32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=dtypes.i32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - else: - aiter.mxfp4_moe_sort( - topk_ids=topk_ids, - topk_weight=topk_weight, - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - bf16_zero_out=_empty_bf16(device), - bf16_zero_workspace=_empty_bf16(device), - M_logical=TOKEN, - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - D_INTER=INTER_DIM, - MB=block_m, - prologue=1, - ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) return Mxfp4SortBuffers( sorted_token_ids=sorted_token_ids, sorted_expert_ids=sorted_expert_ids, @@ -2534,7 +2496,7 @@ def kimi_mxfp4_quant_16384( a_quant: torch.Tensor | None = None, a_scale: torch.Tensor | None = None, ) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL port of aiter.mxfp4_moe_quant for the fixed Kimi shape.""" + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") device = hidden_states.device @@ -2678,7 +2640,7 @@ def kimi_mxfp4_sort_scales_16384( cumsum_tensor: torch.Tensor, a_scale_sorted_shuffled: torch.Tensor, ) -> torch.Tensor: - """FlyDSL port of aiter.mxfp4_moe_sort_scales for the fixed Kimi shape.""" + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" args = ( _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), _ptr_view_safe(sorted_token_ids.view(-1)), @@ -2690,155 +2652,7 @@ def kimi_mxfp4_sort_scales_16384( return a_scale_sorted_shuffled -def expand_mxfp4_expert_ids_for_flydsl( - sorted_expert_ids: torch.Tensor, - *, - source_block_m: int = MXFP4_BLOCK_M, - target_block_m: int = BLOCK_M, -) -> torch.Tensor: - """Expand mxfp4 BM=128 expert ids into the BM=64 format FlyDSL expects.""" - if source_block_m == target_block_m: - return sorted_expert_ids - if source_block_m % target_block_m != 0: - raise ValueError( - f"cannot expand expert ids from block_m={source_block_m} " - f"to target_block_m={target_block_m}" - ) - return torch.repeat_interleave( - sorted_expert_ids, - source_block_m // target_block_m, - ) - - -def run_kimi_fp4_flydsl_mxfp4_sort_16384( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Use mxfp4_moe sorting, then run the existing fixed FlyDSL GEMMs.""" - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - flydsl_expert_ids = expand_mxfp4_expert_ids_for_flydsl( - sort.sorted_expert_ids, - source_block_m=sort.block_m, - target_block_m=BLOCK_M, - ) - moe_out = torch.empty( - (TOKEN, MODEL_DIM), - dtype=hidden_states.dtype, - device=hidden_states.device, - ) - a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( - hidden_states, - sorted_ids=sort.sorted_token_ids, - num_valid_ids=sort.cumsum_tensor, - token_num=TOKEN, - topk=TOPK, - block_size=sort.block_m, - num_rows=None, - ) - a2 = kimi_fp4_stage1_16384( - a1, - w1, - w1_scale.view(dtypes.fp8_e8m0), - a1_scale, - sort.sorted_token_ids, - flydsl_expert_ids, - sort.cumsum_tensor, - ) - a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( - a2.view(-1, INTER_DIM), - sorted_ids=sort.sorted_token_ids, - num_valid_ids=sort.cumsum_tensor, - token_num=TOKEN, - topk=TOPK, - block_size=sort.block_m, - num_rows=None, - ) - return kimi_fp4_stage2_16384( - a2_q.view(TOKEN, TOPK, -1), - w2, - w2_scale.view(dtypes.fp8_e8m0), - a2_scale, - sort.sorted_token_ids, - sort.sorted_weights, - flydsl_expert_ids, - sort.cumsum_tensor, - moe_out, - ) - - -def run_kimi_fp4_flydsl_atomic_stage2_16384( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Use the fixed FlyDSL stage1 and generic FlyDSL atomic stage2.""" - from aiter.ops.flydsl.moe_kernels import flydsl_moe_stage2 - - sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out = ( - kimi_moe_sorting_16384(topk_ids, topk_weight, hidden_states.dtype) - ) - a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( - hidden_states, - sorted_ids=sorted_ids, - num_valid_ids=num_valid_ids, - token_num=TOKEN, - topk=TOPK, - block_size=BLOCK_M, - num_rows=None, - ) - a2 = kimi_fp4_stage1_16384( - a1, - w1, - w1_scale.view(dtypes.fp8_e8m0), - a1_scale, - sorted_ids, - sorted_expert_ids, - num_valid_ids, - ) - a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort( - a2.view(-1, INTER_DIM), - sorted_ids=sorted_ids, - num_valid_ids=num_valid_ids, - token_num=TOKEN, - topk=TOPK, - block_size=BLOCK_M, - num_rows=None, - ) - return flydsl_moe_stage2( - a2_q.view(TOKEN, TOPK, -1), - w2, - sorted_ids, - sorted_expert_ids, - num_valid_ids, - out=moe_out.zero_(), - topk=TOPK, - tile_m=64, - tile_n=256, - tile_k=256, - a_dtype="fp4", - b_dtype="fp4", - out_dtype="bf16", - mode="atomic", - w2_scale=w2_scale.view(dtypes.fp8_e8m0), - a2_scale=a2_scale, - sorted_weights=sorted_weights, - sort_block_m=BLOCK_M, - persist=True, - b_nt=0, - xcd_swizzle=4, - ) - - -def _run_mxfp4_pipeline_16384( +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( hidden_states: torch.Tensor, w1: torch.Tensor, w2: torch.Tensor, @@ -2846,35 +2660,14 @@ def _run_mxfp4_pipeline_16384( topk_weight: torch.Tensor, w1_scale: torch.Tensor, w2_scale: torch.Tensor, - *, - use_flydsl_sort: bool = False, - use_flydsl_quant: bool = False, - use_flydsl_sort_scales: bool = False, - use_flydsl_gemm1: bool = False, - use_flydsl_gemm2: bool = False, - use_flydsl_scatter_reduce_q: bool = False, ) -> torch.Tensor: - """Fixed-shape mxfp4 pipeline with per-kernel migration switches.""" + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" device = hidden_states.device w1_u8 = _as_u8_storage(w1) w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight, use_flydsl=use_flydsl_sort) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - if use_flydsl_quant: - kimi_mxfp4_quant_16384(hidden_states, a_quant, a_scale) - else: - aiter.mxfp4_moe_quant( - a_input=hidden_states, - a_quant=a_quant, - a_scale=a_scale, - bf16_zero_out=_empty_bf16(device), - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - MB=sort.block_m, - ) + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) padded_rows = ((sort.max_sorted + 31) // 32) * 32 a_scale_sorted_shuffled = torch.empty( @@ -2882,259 +2675,35 @@ def _run_mxfp4_pipeline_16384( device=device, dtype=torch.uint8, ) - if use_flydsl_sort_scales: - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - else: - aiter.mxfp4_moe_sort_scales( - a_scale=a_scale, - sorted_token_ids=sort.sorted_token_ids, - cumsum_tensor=sort.cumsum_tensor, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - D_INTER=INTER_DIM, - MB=sort.block_m, - max_sorted=sort.max_sorted, - ) - - inter_sorted_quant = torch.empty( - (sort.max_sorted, INTER_DIM // 2), - device=device, - dtype=torch.uint8, - ) - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = sort.max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - if use_flydsl_gemm1: - kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - ) - else: - aiter.mxfp4_moe_gemm1_a4w4( - cumsum_tensor=sort.cumsum_tensor, - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w12_shuffled_quant=w1_u8, - w12_shuffled_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - hidden_states=hidden_states, - kernelName=MXFP4_STAGE1_KERNEL, - ) - - flat_out_q = torch.empty( - (sort.max_sorted, MODEL_DIM // 2), - dtype=torch.uint8, - device=device, - ) - flat_out_scale = torch.empty( - (sort.max_sorted, MODEL_DIM // 32), - dtype=torch.uint8, - device=device, - ) - if use_flydsl_gemm2: - kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - cumsum_tensor=sort.cumsum_tensor, - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - ) - else: - aiter.mxfp4_moe_gemm2_a4w4_mxfp4out( - cumsum_tensor=sort.cumsum_tensor, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w3_shuffled_quant=w2_u8, - w3_shuffled_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - NE=EXPERTS, - D_HIDDEN=MODEL_DIM, - D_INTER=INTER_DIM, - max_sorted=sort.max_sorted, - ) - - out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=device) - if use_flydsl_scatter_reduce_q: - kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - out=out, - ) - else: - aiter.mxfp4_moe_scatter_reduce_q( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - out=out, - NE=EXPERTS, - TOPK=TOPK, - D_HIDDEN=MODEL_DIM, - MB=sort.block_m, - ) - return out - - -def run_kimi_fp4_mxfp4_moe_16384_aiter_ref( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Fixed-shape extraction of aiter's mxfp4 path, kept as the oracle.""" - return _run_mxfp4_pipeline_16384( - hidden_states, - w1, - w2, - topk_ids, - topk_weight, - w1_scale, - w2_scale, - use_flydsl_sort=False, - use_flydsl_quant=False, - use_flydsl_sort_scales=False, - use_flydsl_gemm1=False, - use_flydsl_gemm2=False, - use_flydsl_scatter_reduce_q=False, - ) - - -def run_kimi_fp4_mxfp4_moe_16384_opt( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Current migration candidate: aiter mxfp4 GEMMs plus FlyDSL scatter/reduce-q.""" - return _run_mxfp4_pipeline_16384( - hidden_states, - w1, - w2, - topk_ids, - topk_weight, - w1_scale, - w2_scale, - use_flydsl_sort=False, - use_flydsl_quant=False, - use_flydsl_sort_scales=False, - use_flydsl_gemm1=False, - use_flydsl_gemm2=False, - use_flydsl_scatter_reduce_q=True, + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, ) - -def run_kimi_fp4_mxfp4_moe_16384_opt_gemm1( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Experimental candidate with FlyDSL GEMM1 plus FlyDSL scatter/reduce-q.""" - return _run_mxfp4_pipeline_16384( - hidden_states, - w1, - w2, - topk_ids, - topk_weight, - w1_scale, - w2_scale, - use_flydsl_sort=False, - use_flydsl_quant=False, - use_flydsl_sort_scales=False, - use_flydsl_gemm1=True, - use_flydsl_gemm2=False, - use_flydsl_scatter_reduce_q=True, + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, ) - -def run_kimi_fp4_mxfp4_moe_16384_opt_gemm2( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Experimental candidate with FlyDSL GEMM2 MXFP4-out plus FlyDSL scatter/reduce-q.""" - return _run_mxfp4_pipeline_16384( - hidden_states, - w1, - w2, - topk_ids, - topk_weight, - w1_scale, - w2_scale, - use_flydsl_sort=False, - use_flydsl_quant=False, - use_flydsl_sort_scales=False, - use_flydsl_gemm1=False, - use_flydsl_gemm2=True, - use_flydsl_scatter_reduce_q=True, + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + cumsum_tensor=sort.cumsum_tensor, ) - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Initial full FlyDSL mxfp4 pipeline port for fixed Kimi M=16384.""" - return _run_mxfp4_pipeline_16384( - hidden_states, - w1, - w2, - topk_ids, - topk_weight, - w1_scale, - w2_scale, - use_flydsl_sort=True, - use_flydsl_quant=True, - use_flydsl_sort_scales=True, - use_flydsl_gemm1=True, - use_flydsl_gemm2=True, - use_flydsl_scatter_reduce_q=True, + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, ) diff --git a/profile.sh b/profile.sh new file mode 100644 index 000000000..c3eb6c364 --- /dev/null +++ b/profile.sh @@ -0,0 +1,9 @@ + /opt/venv/bin/python profile_flydsl_16384.py \ + --mode graph \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 20 \ + --iters 10 \ + --graph-iters 40 \ + --repeat 5 \ + --expected-kernels 8 \ + --trace-dir profiler_traces diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index a63eee834..4043f19ae 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -384,7 +384,7 @@ def main(): parser.add_argument( "--max-retries", type=int, - default=10, + default=40, help="extra profiler attempts allowed when event sequences are incomplete", ) parser.add_argument( From e0926a9a38958b60a289342f7ab4fff4030f8a7d Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 16:39:41 +0000 Subject: [PATCH 027/118] Add FlyDSL Kimi BM16 mxfp4 small path --- kimi_fp4_moe_small_bm16.py | 1822 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1822 insertions(+) create mode 100644 kimi_fp4_moe_small_bm16.py diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py new file mode 100644 index 000000000..b703cc70e --- /dev/null +++ b/kimi_fp4_moe_small_bm16.py @@ -0,0 +1,1822 @@ +"""Fixed-shape Kimi mxfp4 MoE BM16 small-M path. + +This file is the small-M counterpart of ``kimi_fp4_moe_16384_opt.py``. The +target aiter route is: + + mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT + mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT + +The first migrated piece is the aiter ``prologue=0`` auxiliary kernel: +single-CTA sort plus full-grid zero-init of the bf16 atomic output buffer. +""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import crd2idx, idx2crd, get as layout_get +from kernels.mfma_preshuffle_pipeline import _buffer_load_vec, swizzle_xor16 + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOPK, + _ptr_view_safe, + _run_compiled, +) +from kimi_fp4_moe_16384_opt import ( + _extract_global_ptr, + _global_load_i32, + _global_load_f32, + _ptr_buffer_resource, + _global_store_f32, + _global_store_i32, + _global_store_vec4_i32, + _lds_atomic_add_i32, +) + + +BM16 = 16 +THREADS_SORT = 1024 +INLINE_ZERO_CTAS = 128 +SUPPORTED_SMALL_MS = (4, 8, 16, 32, 64, 128) +DPP_ROW_SHR_1 = 0x111 +DPP_ROW_SHR_2 = 0x112 +DPP_ROW_SHR_4 = 0x114 +DPP_ROW_SHR_8 = 0x118 +DPP_ROW_MASK = 0xF +DPP_BANK_MASK = 0xF + + +@dataclass +class SmallMxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + atomic_output: torch.Tensor + max_sorted: int + block_m: int = BM16 + + +def mxfp4_small_max_sorted(m: int, block_m: int = BM16) -> int: + active = min(EXPERTS, m * TOPK) + cumsum_max = m * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +def _unwrap_val(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + +def _ptr_buffer_resource_dynamic(ptr, num_records_bytes): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _record_current_stream(*items): + stream = torch.cuda.current_stream() + for item in items: + if item is None: + continue + if isinstance(item, SmallMxfp4SortBuffers): + _record_current_stream( + item.sorted_token_ids, + item.sorted_expert_ids, + item.cumsum_tensor, + item.reverse_sorted, + item.sorted_weights, + item.masked_m, + item.m_indices, + item.atomic_output, + ) + elif isinstance(item, torch.Tensor): + item.record_stream(stream) + + +def _dpp_allwave_prefix_sum_i32(val, lane, wave, scratch_mr, *, num_waves: int): + """Inclusive i32 prefix sum across ``num_waves`` waves. + + This matches the shape of aiter's DPP scan: row_shr within each row, then + bpermute for the 16/32-lane row carry, then a tiny LDS cross-wave scan. + """ + + zero = arith.constant(0, type=T.i32) + val_raw = _unwrap_val(val) + zero_raw = _unwrap_val(zero) + for dpp_op, threshold in ( + (DPP_ROW_SHR_1, 1), + (DPP_ROW_SHR_2, 2), + (DPP_ROW_SHR_4, 4), + (DPP_ROW_SHR_8, 8), + ): + remote = rocdl.update_dpp( + T.i32, + zero_raw, + val_raw, + dpp_op, + DPP_ROW_MASK, + DPP_BANK_MASK, + True, + ) + remote = ArithValue(remote) + use_remote = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(threshold, type=T.i32)) + val = arith.select(use_remote, val + remote, val) + val_raw = _unwrap_val(val) + + src_lane_16 = (lane & arith.constant(0x30, type=T.i32)) - arith.constant(1, type=T.i32) + remote16 = rocdl.ds_bpermute(T.i32, src_lane_16 * arith.constant(4, type=T.i32), val) + use16 = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(16, type=T.i32)) + val = arith.select(use16, val + ArithValue(remote16), val) + + src_lane_32 = (lane & arith.constant(0x30, type=T.i32)) - arith.constant(17, type=T.i32) + remote32 = rocdl.ds_bpermute(T.i32, src_lane_32 * arith.constant(4, type=T.i32), val) + use32 = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(32, type=T.i32)) + val = arith.select(use32, val + ArithValue(remote32), val) + + lane_last = arith.cmpi(CmpIPredicate.eq, lane, arith.constant(63, type=T.i32)) + if_last = scf.IfOp(lane_last) + with ir.InsertionPoint(if_last.then_block): + memref.store(arith._to_raw(val), scratch_mr, [ArithValue(wave).index_cast(T.index)]) + scf.YieldOp([]) + gpu.barrier() + + cross = zero + for w in range_constexpr(num_waves - 1): + wt = ArithValue(memref.load(scratch_mr, [arith.index(w)])) + add_w = arith.cmpi(CmpIPredicate.sgt, wave, arith.constant(w, type=T.i32)) + cross = arith.select(add_w, cross + wt, cross) + return val + cross + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_zero_init_bm16(): + """Compile the BM16 inline-quant prologue kernel. + + This mirrors aiter's + ``launch_sort_only_with_zero_init<385,9,16,7168,128,1024>``. + """ + + threads = THREADS_SORT + block_m = BM16 + max_count_slots = max(EXPERTS, threads) + topk_nbytes = 128 * TOPK * 4 + topk_weight_nbytes = 128 * TOPK * 4 + max_sorted = mxfp4_small_max_sorted(128, block_m) + sorted_nbytes = max_sorted * 4 + expert_nbytes = (max_sorted // block_m) * 4 + cumsum_nbytes = 4 + reverse_nbytes = 128 * TOPK * 4 + weights_nbytes = max_sorted * 4 + masked_nbytes = EXPERTS * 4 + output_nbytes = 128 * MODEL_DIM * 2 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_cumsum_offset = lds_count_offset + max_count_slots * 4 + lds_counter_offset = lds_cumsum_offset + (EXPERTS + 1) * 4 + lds_scratch_offset = lds_counter_offset + EXPERTS * 4 + allocator.ptr = lds_scratch_offset + 16 * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v0", + known_block_size=[threads, 1, 1], + ) + def sort_zero_init( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_atomic_output: fx.Pointer, + i32_m: fx.Int32, + ): + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + weight_ptr = _extract_global_ptr(arg_topk_weight) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + sorted_weight_ptr = _extract_global_ptr(arg_sorted_weights) + masked_ptr = _extract_global_ptr(arg_masked_m) + mindices_ptr = _extract_global_ptr(arg_m_indices) + output_ptr = _extract_global_ptr(arg_atomic_output) + + base_ptr = allocator.get_base() + count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(max_count_slots,)).get() + cumsum = SmemPtr(base_ptr, lds_cumsum_offset, T.i32, shape=(EXPERTS + 1,)).get() + counter = SmemPtr(base_ptr, lds_counter_offset, T.i32, shape=(EXPERTS,)).get() + scratch = SmemPtr(base_ptr, lds_scratch_offset, T.i32, shape=(16,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_block_m = arith.constant(block_m, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + c_token_mask = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + is_sort_cta = arith.cmpi(CmpIPredicate.eq, bx_i32, c0_i32) + + # CTA0 does the single-CTA sort. All CTAs also participate in zero-init + # below, matching aiter's sort_quant_kernel_impl prologue=0 path. + sort_if = scf.IfOp(is_sort_cta) + with ir.InsertionPoint(sort_if.then_block): + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(if_zero.then_block): + memref.store(c0_i32, count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + m_idx = ArithValue(i32_m).index_cast(T.index) + total_pairs_idx = m_idx * arith.constant(TOPK, index=True) + + count_loop = scf.ForOp(tx, total_pairs_idx, c_threads_idx) + with ir.InsertionPoint(count_loop.body): + idx = count_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = _global_load_i32(topk_ptr, idx_i32) + _lds_atomic_add_i32(count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + lane_i32 = tx_i32 % arith.constant(64, type=i32) + wave_i32 = tx_i32 // arith.constant(64, type=i32) + scan_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + cnt = ArithValue( + arith.select(scan_valid, memref.load(count, [tx]), arith._to_raw(c0_i32)) + ) + padded = (cnt + c_bm_minus_1) & c_bm_mask + padded = ArithValue(arith.select(scan_valid, arith._to_raw(padded), arith._to_raw(c0_i32))) + inclusive = _dpp_allwave_prefix_sum_i32( + padded, + lane_i32, + wave_i32, + scratch, + num_waves=16, + ) + start = inclusive - padded + + if_scan_store = scf.IfOp(scan_valid) + with ir.InsertionPoint(if_scan_store.then_block): + memref.store(arith._to_raw(start), cumsum, [tx]) + memref.store(c0_i32, counter, [tx]) + _global_store_i32(masked_ptr, tx_i32, padded) + b0 = start // c_block_m + b1 = inclusive // c_block_m + fill_experts = scf.ForOp( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ) + with ir.InsertionPoint(fill_experts.body): + b = fill_experts.induction_variable + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + scf.YieldOp([]) + + if_first = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(if_first.then_block): + memref.store(c0_i32, cumsum, [arith.index(0)]) + scf.YieldOp([]) + + if_last_expert = scf.IfOp( + arith.cmpi(CmpIPredicate.eq, tx_i32, arith.constant(EXPERTS - 1, type=i32)) + ) + with ir.InsertionPoint(if_last_expert.then_block): + memref.store(arith._to_raw(inclusive), cumsum, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, inclusive) + scf.YieldOp([]) + gpu.barrier() + + place_loop = scf.ForOp(tx, total_pairs_idx, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + eid_idx = eid.index_cast(T.index) + pos = _lds_atomic_add_i32(counter, eid, c1_i32) + start = ArithValue(memref.load(cumsum, [eid_idx])) + sp = start + pos + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_token_mask) | (topk_id << c_topk_shift) + route_w = _global_load_f32(weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_token_mask) + _global_store_f32(sorted_weight_ptr, sp, route_w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + gpu.barrier() + + pad_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + if_pad = scf.IfOp(pad_valid) + with ir.InsertionPoint(if_pad.then_block): + e = tx + e_i32 = tx_i32 + cnt = ArithValue(memref.load(count, [e])) + start = ArithValue(memref.load(cumsum, [e])) + end = ArithValue(memref.load(cumsum, [e + arith.index(1)])) + real_end = start + cnt + pad = i32_m & c_token_mask + pad_loop = scf.ForOp( + ArithValue(real_end).index_cast(T.index), + ArithValue(end).index_cast(T.index), + arith.index(1), + ) + with ir.InsertionPoint(pad_loop.body): + j = pad_loop.induction_variable + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, pad) + _global_store_i32(mindices_ptr, j_i32, pad) + _global_store_f32(sorted_weight_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + scf.YieldOp([]) + + # Full-grid zero-init: int4 stores over M * H * sizeof(bf16). + zero_vec = vector.from_elements(vec4_i32, [c0_i32, c0_i32, c0_i32, c0_i32]) + m_idx = ArithValue(i32_m).index_cast(T.index) + total_vecs = m_idx * arith.constant((MODEL_DIM * 2) // 16, index=True) + gtid = bx * arith.constant(threads, index=True) + tx + step = arith.constant(INLINE_ZERO_CTAS * threads, index=True) + zero_loop = scf.ForOp(gtid, total_vecs, step) + with ir.InsertionPoint(zero_loop.body): + vi = zero_loop.induction_variable + elem_i32 = vi * arith.constant(4, index=True) + _global_store_vec4_i32(output_ptr, elem_i32, zero_vec, nontemporal=True) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_zero_init( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + atomic_output: fx.Pointer, + m: fx.Int32, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_zero_init( + topk_ids, + topk_weight, + sorted_token_ids, + sorted_expert_ids, + cumsum_tensor, + reverse_sorted, + sorted_weights, + masked_m, + m_indices, + atomic_output, + m, + ).launch( + grid=(INLINE_ZERO_CTAS, 1, 1), + block=(threads, 1, 1), + stream=stream, + ) + + return launch_sort_zero_init + + +def kimi_mxfp4_sort_zero_init_bm16( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + m: int | None = None, + max_sorted: int | None = None, + atomic_output: torch.Tensor | None = None, +) -> SmallMxfp4SortBuffers: + """Run the fixed Kimi BM16 inline-quant prologue in FlyDSL.""" + + if m is None: + m = int(topk_ids.shape[0]) + if m not in SUPPORTED_SMALL_MS: + raise ValueError(f"BM16 small path supports M in {SUPPORTED_SMALL_MS}, got {m}") + if topk_ids.shape != (m, TOPK): + raise ValueError(f"expected topk_ids shape {(m, TOPK)}, got {tuple(topk_ids.shape)}") + if topk_weight.shape != (m, TOPK): + raise ValueError(f"expected topk_weight shape {(m, TOPK)}, got {tuple(topk_weight.shape)}") + + device = topk_ids.device + if max_sorted is None: + max_sorted = mxfp4_small_max_sorted(m, BM16) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty((max_sorted // BM16,), device=device, dtype=torch.int32) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((m * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + if atomic_output is None: + atomic_output = torch.empty((m, MODEL_DIM), device=device, dtype=torch.bfloat16) + elif atomic_output.shape != (m, MODEL_DIM): + raise ValueError( + f"expected atomic_output shape {(m, MODEL_DIM)}, got {tuple(atomic_output.shape)}" + ) + + args = ( + _ptr_view_safe(topk_ids.contiguous().view(-1)), + _ptr_view_safe(topk_weight.contiguous().view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(atomic_output.view(-1)), + int(m), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_zero_init_bm16(), args) + + buffers = SmallMxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + atomic_output=atomic_output, + max_sorted=max_sorted, + ) + _record_current_stream(topk_ids, topk_weight, buffers) + return buffers + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_inline_bm16(): + """Compile FlyDSL BM16 inline-quant GEMM1. + + This is the fixed-shape port target for + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT``. + """ + + tile_m = BM16 + tile_n = 256 + tile_k = 256 + total_threads = 256 + num_n_blocks = (2 * INTER_DIM) // tile_n + max_sorted = mxfp4_small_max_sorted(128, BM16) + + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + num_k_tiles = MODEL_DIM // tile_k + a_elem_vec_pack = 2 + eff_lds_stride = tile_k // a_elem_vec_pack + single_x_bytes = tile_m * eff_lds_stride + lds_scale_bytes = num_k_tiles * 256 + lds_acc_bytes = tile_m * tile_n * 4 + + hidden_max_nbytes = 128 * MODEL_DIM * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = (max_sorted // BM16) * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = (max_sorted // BM16) * 128 * 4 + + b_kpack_bytes = 16 + b_kpack_elems = b_kpack_bytes + b_c_k = MODEL_DIM // 2 + b_c_k0 = b_c_k // 64 + b_stride_nlane = b_kpack_elems + b_stride_klane = 16 * b_stride_nlane + b_stride_k0 = 4 * b_stride_klane + b_stride_n0 = b_c_k0 * b_stride_k0 + expert_b_stride = ((2 * INTER_DIM) // 16) * b_stride_n0 + + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + single_x_bytes + allocator.ptr = lds_offset + max(single_x_bytes + lds_scale_bytes, lds_acc_bytes) + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v0" + + @flyc.kernel(name=module_name) + def gemm1_inline( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_hidden: fx.Pointer, + arg_w: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + i32_m: fx.Int32, + ): + i8 = T.i8 + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec4_f32 = T.vec(4, f32) + vec16_x = T.vec(16, T.f8) + + hidden_bytes_i64 = ( + ArithValue(arith.ExtSIOp(i64, _unwrap_val(i32_m)).result) + * arith.constant(MODEL_DIM * 2, type=i64) + ) + hidden_rsrc = _ptr_buffer_resource_dynamic(arg_hidden, hidden_bytes_i64) + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + tx_i32 = arith.index_cast(i32, tx) + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.readfirstlane(i32, num_valid_i32) + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_i32 = rocdl.readfirstlane(i32, expert_i32) + expert_idx = arith.index_cast(T.index, expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(single_x_bytes,)).get() + lds_x_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(single_x_bytes // 4,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, eff_lds_stride) + layout_lds = fx.make_layout(shape_lds, fx.make_stride(eff_lds_stride, 1)) + k_blocks16 = arith.constant(eff_lds_stride // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + wave_i32 = arith.index_cast(i32, wave_id) + lane_i32 = arith.index_cast(i32, lane_id) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(expert_b_stride, index=True) + + r_in_chunk = wave_id * arith.constant(4, index=True) + lane_div_16 + r_in_chunk_i32 = arith.index_cast(i32, r_in_chunk) + row_token = _global_load_i32(m_indices_ptr, bx_m_i32 + r_in_chunk_i32) + row_token_idx = ArithValue(row_token).index_cast(T.index) + + n_blk_list = [] + n_intra_list = [] + for ni in range_constexpr(num_acc_n): + global_n = by_n + n_tile_base + arith.constant(ni * 16, index=True) + lane_mod_16 + n_blk_list.append(global_n // arith.constant(16, index=True)) + n_intra_list.append(global_n % arith.constant(16, index=True)) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(b_stride_n0, index=True) + + k0 * arith.constant(b_stride_k0, index=True) + + lane_div_16 * arith.constant(b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=2, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + scale_idx = arith.constant(k_tile * 64, index=True) + lane_word + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + return vector.from_elements(T.vec(1, i32), [s]) + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n // 2): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=2) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + c64_i32 = arith.constant(64, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def inline_quant_tile(k_tile: int): + scale_accum = c0_i32 + lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) + lane_mod4 = lane_id % arith.constant(4, index=True) + for b128 in range_constexpr(2): + v_byte_off = ( + row_token_idx * arith.constant(MODEL_DIM * 2, index=True) + + arith.constant(k_tile * tile_k * 2 + b128 * 256, index=True) + + lane_div4 * arith.constant(64, index=True) + + lane_mod4 * arith.constant(16, index=True) + ) + h16 = _buffer_load_vec( + buffer_ops, + vector, + hidden_rsrc, + v_byte_off, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + h4 = vector.bitcast(vec4_i32, h16) + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(c1_i32, c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & arith.constant(255, type=i32) + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + kb_in_kt = arith.constant(b128 * 4, index=True) + lane_div4 + col_sw = swizzle_xor16(r_in_chunk, kb_in_kt * arith.constant(16, index=True), k_blocks16) + byte_idx = crd2idx( + [r_in_chunk, col_sw + lane_mod4 * arith.constant(4, index=True)], + layout_lds, + ) + word_idx = byte_idx // arith.constant(4, index=True) + vector.store( + vector.from_elements(T.vec(1, i32), [packed]), + lds_x_i32, + [word_idx], + alignment=4, + ) + scale_accum = scale_accum | (e8m0 << arith.constant(b128 * 16, type=i32)) + + lane_tgt = lane_div4 * arith.constant(16, index=True) + r_in_chunk + scale_idx = arith.constant(k_tile * 64, index=True) + lane_tgt + vector.store( + vector.from_elements(T.vec(1, i32), [scale_accum]), + lds_scale_i32, + [scale_idx], + alignment=4, + ) + + def lds_load_packs_k64(curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_i8, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile, a_scale, b_scale): + acc_list = list(acc_in) + a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 64, index=True) + a0, a1 = lds_load_packs_k64(row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + b_packs0, b_packs1 = b_tile[k_idx] + for ni in range_constexpr(num_acc_n // 2): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(2): + ni_idx = ni * 2 + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_list[ni_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[ni_idx], + cbsz, + blgp, + k_idx * 2, + a_scale_val, + k_idx * 2 + inxdl, + b_scale_val, + ], + ) + return acc_list + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b)).result) + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * num_acc_n + for k_tile in range_constexpr(num_k_tiles): + inline_quant_tile(k_tile) + b_tile = load_b_tile(k_tile) + b_scale = load_b_scale_tile(k_tile) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile) + acc = compute_tile(acc, b_tile, a_scale, b_scale) + gpu.barrier() + + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(32, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(128, index=True) + row_base = lane_div_16 * arith.constant(4, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + row_local = m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp + up_col = gate_col + arith.constant(128, index=True) + gate_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + gate_col], + ), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + up_col], + ), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = local_max.shuffle_xor(c1_i32, c64_i32) + local_max = _fmax_num(local_max, peer1) + peer2 = local_max.shuffle_xor(c2_i32, c64_i32) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_local) + byte_pos = ( + by * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(if_scale.then_block): + ku = by >> arith.constant(1, index=True) + ikxdl = by % arith.constant(2, index=True) + dword_off = ( + bx * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + byte_off = arith.index_cast( + i32, + dword_off * arith.constant(4, index=True) + + ikxdl * arith.constant(2, index=True), + ) + buffer_ops.buffer_store( + e8m0_i8, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + buffer_ops.buffer_store( + arith.TruncIOp(i8, c0_i32).result, + out_scale_rsrc, + byte_off + c1_i32, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1_inline( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + hidden: fx.Pointer, + w: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + m: fx.Int32, + m_blocks: fx.Int32, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1_inline( + inter_sorted_quant, + inter_sorted_scale, + hidden, + w, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + m, + ).launch( + grid=(num_n_blocks, m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1_inline + + +def kimi_mxfp4_gemm1_inline_bm16( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + *, + m: int | None = None, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """Run the local FlyDSL BM16 inline-quant GEMM1.""" + + if m is None: + m = int(hidden_states.shape[0]) + max_sorted = int(sorted_expert_ids.shape[0]) * BM16 + device = hidden_states.device + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = (inter_scale_rows + 31) // 32 * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + if w1.element_size() == 1 and w1.dtype != torch.uint8: + w1 = w1.view(torch.uint8) + args = ( + _ptr_view_safe(inter_sorted_quant.view(-1)), + _ptr_view_safe(inter_sorted_shuffled_scale.view(-1)), + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(w1.view(-1)), + _ptr_view_safe(w1_scale.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + int(m), + int(sorted_expert_ids.shape[0]), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_inline_bm16(), args) + _record_current_stream( + hidden_states, + w1, + w1_scale, + sorted_expert_ids, + m_indices, + cumsum_tensor, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_atomic_bm16(): + """Compile FlyDSL BM16 atomic GEMM2. + + Fixed-shape port target: + ``mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT``. + """ + + tile_m = BM16 + tile_n = 256 + tile_k = 256 + total_threads = 256 + num_n_blocks = MODEL_DIM // tile_n + max_sorted = mxfp4_small_max_sorted(128, BM16) + + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = INTER_DIM // tile_k + k_half = INTER_DIM // 2 + single_a_bytes = tile_m * (tile_k // 2) + lds_a_bytes = k_unroll * single_a_bytes + lds_acc_bytes = tile_m * tile_n * 4 + + a_q_nbytes = max_sorted * k_half + k_as_c_k1 = (INTER_DIM // 32) // 4 // 2 + k_as_per_chunk_dw = k_as_c_k1 * 64 + a_scale_nbytes = (max_sorted // BM16) * k_as_per_chunk_dw * 4 + b_q_nbytes = EXPERTS * MODEL_DIM * k_half + k_bs_c_n1 = MODEL_DIM // 16 // 2 + k_bs_c_k1 = (INTER_DIM // 32) // 4 // 2 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = k_bs_c_k1 * 64 + k_bs_per_expert_dw = k_bs_c_n1 * k_bs_stride_n0_dw + b_scale_nbytes = EXPERTS * k_bs_per_expert_dw * 4 + sorted_nbytes = max_sorted * 4 + out_nbytes = 128 * MODEL_DIM * 2 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_gemm2") + lds_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_offset + max(lds_a_bytes, lds_acc_bytes) + + module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v0" + + @flyc.kernel(name=module_name) + def gemm2_atomic( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_w: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + i32_m: fx.Int32, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec2_bf16 = T.vec(2, T.bf16) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec4_f32 = T.vec(4, f32) + vec16_x = T.vec(16, T.f8) + + a_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, a_q_nbytes) + a_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, a_scale_nbytes) + b_q_rsrc = _ptr_buffer_resource(arg_w, b_q_nbytes) + b_scale_rsrc = _ptr_buffer_resource(arg_w_scale, b_scale_nbytes) + out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_token_ptr = _extract_global_ptr(arg_sorted_token_ids) + sorted_weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + m_block_idx = pid // arith.constant(num_n_blocks, index=True) + n_block_idx = pid % arith.constant(num_n_blocks, index=True) + m_row = m_block_idx * arith.constant(tile_m, index=True) + + expert_i32 = _global_load_i32(expert_ptr, m_block_idx) + expert_i32 = rocdl.readfirstlane(i32, expert_i32) + expert_idx = arith.index_cast(T.index, expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + num_valid_i32 = _global_load_i32(cumsum_ptr, 0) + num_valid_i32 = rocdl.readfirstlane(i32, num_valid_i32) + m_row_i32 = arith.index_cast(i32, m_row) + blk_valid = arith.cmpi(CmpIPredicate.ult, m_row_i32, num_valid_i32) + do_gemm = arith.andi(exp_valid, blk_valid) + + base_ptr = allocator.get_base() + lds_a_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(lds_a_bytes,)).get() + lds_a_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(lds_a_bytes // 4,)).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, tile_k // 2) + layout_lds = fx.make_layout(shape_lds, fx.make_stride(tile_k // 2, 1)) + k_blocks16 = arith.constant((tile_k // 2) // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + wave_i32 = arith.index_cast(i32, wave_id) + lane_i32 = arith.index_cast(i32, lane_id) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c64_i32 = arith.constant(64, type=i32) + c0_i64 = arith.constant(0, type=i64) + zero_i32 = arith.constant(0) + c0_f32 = arith.constant(0.0, type=f32) + + def load_a_to_lds(slot: int, kt: int): + row_off = lane_id // arith.constant(8, index=True) + lane_mod8 = lane_id % arith.constant(8, index=True) + lds_row = wave_id * arith.constant(8, index=True) + row_off + actual_row = m_row + lds_row + global_off = ( + actual_row * arith.constant(k_half, index=True) + + arith.constant(kt * (tile_k // 2), index=True) + + lane_mod8 * arith.constant(16, index=True) + ) + a16 = _buffer_load_vec( + buffer_ops, + vector, + a_q_rsrc, + global_off, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + a_i32x4 = vector.bitcast(T.vec(4, i32), a16) + col_sw = swizzle_xor16(lds_row, lane_mod8 * arith.constant(16, index=True), k_blocks16) + byte_idx = ( + arith.constant(slot * single_a_bytes, index=True) + + crd2idx([lds_row, col_sw], layout_lds) + ) + word_idx = byte_idx // arith.constant(4, index=True) + for wi in range_constexpr(4): + word = vector.extract(a_i32x4, static_position=[wi], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, i32), [word]), + lds_a_i32, + [word_idx + arith.constant(wi, index=True)], + alignment=4, + ) + + def guarded_load_a_to_lds(slot: int, kt: int): + if_wave = scf.IfOp(arith.cmpi(CmpIPredicate.ult, wave_i32, c2_i32)) + with ir.InsertionPoint(if_wave.then_block): + load_a_to_lds(slot, kt) + scf.YieldOp([]) + + def load_a_packs_from_lds(slot: int, k_idx: int): + col_base = col_offset_base + arith.constant(k_idx * 64, index=True) + col_sw = swizzle_xor16(row_a_lds, col_base, k_blocks16) + idx_a16 = ( + arith.constant(slot * single_a_bytes, index=True) + + crd2idx([row_a_lds, col_sw], layout_lds) + ) + loaded = vector.load_op(vec16_x, lds_a_i8, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + n_base = n_block_idx * arith.constant(tile_n, index=True) + n_wave_base = n_base + wave_id * arith.constant(n_per_wave, index=True) + b_load_s_bases = [] + for j in range_constexpr(num_acc_n): + col = n_wave_base + arith.constant(j * 16, index=True) + b_load_s_bases.append( + expert_idx * arith.constant(MODEL_DIM * k_half, index=True) + + col * arith.constant(k_half, index=True) + ) + + def load_b_pack(kt: int, k_idx: int, j: int): + v_off = ( + lane_div_16 * arith.constant(256, index=True) + + lane_mod_16 * arith.constant(16, index=True) + + arith.constant(kt * 2048 + k_idx * 1024, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + b_q_rsrc, + b_load_s_bases[j] + v_off, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=2, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(kt: int): + b_tile = [] + for k_idx in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for j in range_constexpr(num_acc_n): + b0, b1 = load_b_pack(kt, k_idx, j) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def load_a_scale_kt(kt: int): + scale_idx = ( + m_block_idx * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(kt * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(a_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) + return vector.from_elements(T.vec(1, i32), [s]) + + def load_b_scale_kt(kt: int): + mni_base = ( + n_block_idx * arith.constant(tile_n // 16 // 2, index=True) + + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + ) + vals = [] + for mw in range_constexpr(num_acc_n // 2): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(mw, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(kt * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(b_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=2) + vals.append(vector.from_elements(T.vec(1, i32), [s])) + return vals + + cbsz = 4 + blgp = 4 + + def compute_kt(acc_in, slot: int, kt: int, b_tile, a_scale, b_scale): + acc_list = list(acc_in) + a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) + for k_idx in range_constexpr(k_unroll): + a0, a1 = load_a_packs_from_lds(slot, k_idx) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + b_packs0, b_packs1 = b_tile[k_idx] + for mni in range_constexpr(num_acc_n // 2): + b_scale_val = vector.extract(b_scale[mni], static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(2): + j = mni * 2 + inxdl + b128 = pack_i64x4_to_i32x8(b_packs0[j], b_packs1[j], c0_i64, c0_i64) + acc_list[j] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[j], + cbsz, + blgp, + k_idx * 2, + a_scale_val, + k_idx * 2 + inxdl, + b_scale_val, + ], + ) + return acc_list + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * num_acc_n + + guarded_load_a_to_lds(0, 0) + guarded_load_a_to_lds(1, 1) + b0 = load_b_tile(0) + b1 = load_b_tile(1) + a_scale0 = load_a_scale_kt(0) + a_scale1 = load_a_scale_kt(1) + b_scale0 = load_b_scale_kt(0) + b_scale1 = load_b_scale_kt(1) + + rocdl.s_waitcnt(0) + gpu.barrier() + acc = compute_kt(acc, 0, 0, b0, a_scale0, b_scale0) + acc = compute_kt(acc, 1, 1, b1, a_scale1, b_scale1) + + for j in range_constexpr(num_acc_n): + col_local = wave_id * arith.constant(n_per_wave, index=True) + col_local = col_local + arith.constant(j * 16, index=True) + lane_mod_16 + row_base = lane_div_16 * arith.constant(4, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx // arith.constant(32, index=True) + n_lane = tx % arith.constant(32, index=True) + col_start = n_lane * arith.constant(2, index=True) + col_start_i32 = arith.index_cast(i32, col_start) + n_block_elem_i32 = arith.index_cast( + i32, + n_block_idx * arith.constant(tile_n, index=True), + ) + + for mr in range_constexpr(BM16 // 8): + row_in_block = arith.constant(mr * 8, index=True) + m_lane + sorted_pos = m_row + row_in_block + sorted_pos_i32 = arith.index_cast(i32, sorted_pos) + packed = _global_load_i32(sorted_token_ptr, sorted_pos) + token_id = packed & arith.constant(0x00FFFFFF, type=i32) + token_ok = arith.cmpi(CmpIPredicate.ult, token_id, i32_m) + if_token = scf.IfOp(token_ok) + with ir.InsertionPoint(if_token.then_block): + weight = _global_load_f32(sorted_weights_ptr, sorted_pos) + for s_idx in range_constexpr(4): + lds_col = ( + col_start + + arith.constant(s_idx * 64, index=True) + ) + v0 = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_in_block * arith.constant(tile_n, index=True) + lds_col], + ), + static_position=[0], + dynamic_position=[], + ) + v1 = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [ + row_in_block * arith.constant(tile_n, index=True) + + lds_col + + arith.constant(1, index=True) + ], + ), + static_position=[0], + dynamic_position=[], + ) + b0 = arith.trunc_f(T.bf16, v0 * weight) + b1 = arith.trunc_f(T.bf16, v1 * weight) + frag = vector.from_elements(vec2_bf16, [b0, b1]) + elem_off = ( + token_id * arith.constant(MODEL_DIM, type=i32) + + n_block_elem_i32 + + col_start_i32 + + arith.constant(s_idx * 64, type=i32) + ) + byte_off = elem_off * c2_i32 + rocdl.raw_ptr_buffer_atomic_fadd( + frag, + out_rsrc, + byte_off, + zero_i32, + zero_i32, + ) + scf.YieldOp([]) + + if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm2_atomic( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + w: fx.Pointer, + w_scale: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + m: fx.Int32, + m_blocks: fx.Int32, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_atomic( + inter_sorted_quant, + inter_sorted_scale, + w, + w_scale, + sorted_expert_ids, + cumsum_tensor, + sorted_token_ids, + sorted_weights, + out, + m, + ).launch( + grid=(m_blocks * num_n_blocks, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm2_atomic + + +def kimi_mxfp4_gemm2_atomic_bm16( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + sorted_token_ids: torch.Tensor, + sorted_weights: torch.Tensor, + atomic_output: torch.Tensor, + *, + m: int, +) -> torch.Tensor: + """Run the local FlyDSL BM16 atomic GEMM2. + + ``atomic_output`` must already be zero-initialized. The fused BM16 sort + kernel in this file does that, matching the aiter small-M pipeline. + """ + + if w2.element_size() == 1 and w2.dtype != torch.uint8: + w2 = w2.view(torch.uint8) + args = ( + _ptr_view_safe(inter_sorted_quant.view(-1)), + _ptr_view_safe(inter_sorted_shuffled_scale.view(-1)), + _ptr_view_safe(w2.view(-1)), + _ptr_view_safe(w2_scale.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(atomic_output.view(-1)), + int(m), + int(sorted_expert_ids.shape[0]), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_atomic_bm16(), args) + _record_current_stream( + inter_sorted_quant, + inter_sorted_shuffled_scale, + w2, + w2_scale, + sorted_expert_ids, + cumsum_tensor, + sorted_token_ids, + sorted_weights, + atomic_output, + ) + return atomic_output + + +def run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_weight: torch.Tensor, + topk_ids: torch.Tensor, + *, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """FlyDSL sort + FlyDSL GEMM1 + aiter GEMM2 validation harness.""" + + import aiter + + m = int(hidden_states.shape[0]) + if w2.element_size() == 1 and w2.dtype != torch.uint8: + w2 = w2.view(torch.uint8) + + sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_inline_bm16( + hidden_states, + w1, + w1_scale, + sort.sorted_expert_ids, + sort.m_indices, + sort.cumsum_tensor, + m=m, + ) + aiter.mxfp4_moe_gemm2_a4w4( + cumsum_tensor=sort.cumsum_tensor, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w3_shuffled_quant=w2, + w3_shuffled_scale=w2_scale, + sorted_token_ids=sort.sorted_token_ids, + sorted_expert_ids=sort.sorted_expert_ids, + sorted_weights=sort.sorted_weights, + flat_out=sort.atomic_output, + M_logical=m, + max_sorted=sort.max_sorted, + kernelName="mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT", + ) + _record_current_stream( + hidden_states, + w1, + w1_scale, + w2, + w2_scale, + topk_weight, + topk_ids, + sort, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + sort.atomic_output._flydsl_keepalive = ( + sort, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + return sort.atomic_output + + +def run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_weight: torch.Tensor, + topk_ids: torch.Tensor, + *, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """FlyDSL-only BM16 small-M mxfp4 MoE path.""" + + m = int(hidden_states.shape[0]) + sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_inline_bm16( + hidden_states, + w1, + w1_scale, + sort.sorted_expert_ids, + sort.m_indices, + sort.cumsum_tensor, + m=m, + ) + kimi_mxfp4_gemm2_atomic_bm16( + inter_sorted_quant, + inter_sorted_shuffled_scale, + w2, + w2_scale, + sort.sorted_expert_ids, + sort.cumsum_tensor, + sort.sorted_token_ids, + sort.sorted_weights, + sort.atomic_output, + m=m, + ) + _record_current_stream( + hidden_states, + w1, + w1_scale, + w2, + w2_scale, + topk_weight, + topk_ids, + sort, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + sort.atomic_output._flydsl_keepalive = ( + sort, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + return sort.atomic_output + + +def run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_weight: torch.Tensor, + topk_ids: torch.Tensor, + *, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Small-M BM16 pipeline harness. + + The prologue is the local FlyDSL port above. GEMM1/GEMM2 still call the + aiter BM16 mxfp4 kernels and are kept here only to validate the migrated + sort buffers before replacing those GEMMs with FlyDSL bodies. + """ + + import aiter + + m = int(hidden_states.shape[0]) + if hidden_states.shape != (m, MODEL_DIM): + raise ValueError( + f"expected hidden_states shape {(m, MODEL_DIM)}, got {tuple(hidden_states.shape)}" + ) + if w1.element_size() == 1 and w1.dtype != torch.uint8: + w1 = w1.view(torch.uint8) + if w2.element_size() == 1 and w2.dtype != torch.uint8: + w2 = w2.view(torch.uint8) + + sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) + device = hidden_states.device + max_sorted = sort.max_sorted + + a_quant = torch.empty((m, MODEL_DIM // 2), device=device, dtype=torch.uint8) + a_scale = torch.empty((m, MODEL_DIM // 32), device=device, dtype=torch.uint8) + a_scale_sorted_shuffled = torch.empty((0,), device=device, dtype=torch.uint8) + + inter_sorted_quant = torch.empty( + (max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8 + ) + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = (inter_scale_rows + 31) // 32 * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), device=device, dtype=torch.uint8 + ) + + aiter.mxfp4_moe_gemm1_a4w4( + cumsum_tensor=sort.cumsum_tensor, + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w12_shuffled_quant=w1, + w12_shuffled_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + hidden_states=hidden_states, + kernelName="mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT", + ) + + aiter.mxfp4_moe_gemm2_a4w4( + cumsum_tensor=sort.cumsum_tensor, + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w3_shuffled_quant=w2, + w3_shuffled_scale=w2_scale, + sorted_token_ids=sort.sorted_token_ids, + sorted_expert_ids=sort.sorted_expert_ids, + sorted_weights=sort.sorted_weights, + flat_out=sort.atomic_output, + M_logical=m, + max_sorted=max_sorted, + kernelName="mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT", + ) + _record_current_stream( + hidden_states, + w1, + w1_scale, + w2, + w2_scale, + topk_weight, + topk_ids, + sort, + a_quant, + a_scale, + a_scale_sorted_shuffled, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + sort.atomic_output._flydsl_keepalive = ( + sort, + a_quant, + a_scale, + a_scale_sorted_shuffled, + inter_sorted_quant, + inter_sorted_shuffled_scale, + ) + return sort.atomic_output From 8e080479dfb8944a92e460d6072ad782d491275f Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 17:35:55 +0000 Subject: [PATCH 028/118] Optimize Kimi BM16 mxfp4 FlyDSL pipeline --- bench.py | 106 ++++++---- docs/kimi_fp4_moe_16384_opt_notes.md | 53 +++++ kimi_fp4_moe_small_bm16.py | 282 ++++++++++++++++++--------- 3 files changed, 313 insertions(+), 128 deletions(-) diff --git a/bench.py b/bench.py index 84e9f26cf..0db1a1601 100644 --- a/bench.py +++ b/bench.py @@ -3,6 +3,10 @@ from dataclasses import dataclass import os +from gpu_select import bind_empty_gpu_for_torch + +bind_empty_gpu_for_torch("bench") + import torch import aiter @@ -22,12 +26,20 @@ class Shape: KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) +DEFAULT_WARMUP = 100 +DEFAULT_EAGER_ITERS = 1000 +DEFAULT_GRAPH_ITERS = 2000 +DEFAULT_GRAPH_MEASURE = 51 +DEFAULT_GRAPH_WARMUP_REPLAYS = 5 + # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) MXFP4_TUNED = [ (128, 16, "BM16_INLINEQUANT", "TOPK{topk}_BM16_ATOMIC_NT"), # M<=128: BM16 inline-quant, g2 non-temporal - (256, 32, "BM32_CACHED", "TOPK{topk}_BM32_ATOMIC"), # M<=256: BM32 cached - (10**9, 128, "BM128", "BM128_NONATOMIC"), # M>256: BM128 non-atomic + (512, 32, "BM32_NT", "TOPK{topk}_BM32_ATOMIC_NT"), # M<=512: BM32 read-once, g2 non-temporal + (2048, 32, "BM32_CACHED", "TOPK{topk}_BM32_ATOMIC"), # M<=2048: BM32 cached + (4096, 128, "BM128", "BM128_NONATOMIC"), # M=4096: bf16 flat_out + scatter_reduce + (10**9, 128, "BM128", "BM128_NONATOMIC_MXFP4OUT"), # M>=8192: mxfp4 flat_out + scatter_reduce_q ] @@ -166,7 +178,7 @@ def fn(): # ── timing ─────────────────────────────────────────────────────────────────── -def bench(fn, warmup=5, iters=30): +def bench(fn, warmup=DEFAULT_WARMUP, iters=DEFAULT_EAGER_ITERS): """Eager wall-clock timing. Includes per-kernel CPU launch overhead, so on launch/latency-bound (small-M) shapes it OVER-estimates vs the real e2e path, which replays a single CUDA graph (one launch, no inter-kernel CPU bubbles).""" @@ -182,8 +194,13 @@ def bench(fn, warmup=5, iters=30): ts.sort() return ts[len(ts) // 2] * 1e6 # median us -tag = 0 -def bench_cudagraph(fn, warmup=5, iters=60, measure=5): +def bench_cudagraph( + fn, + warmup=DEFAULT_WARMUP, + iters=DEFAULT_GRAPH_ITERS, + measure=DEFAULT_GRAPH_MEASURE, + graph_warmup_replays=DEFAULT_GRAPH_WARMUP_REPLAYS, +): """CUDA-graph-faithful timing: capture `iters` back-to-back fn() calls into a SINGLE graph, replay the whole graph, and divide total GPU time by `iters`. The whole MoE pipeline runs as one graph -- CPU launch overhead and inter- @@ -207,36 +224,22 @@ def bench_cudagraph(fn, warmup=5, iters=60, measure=5): for _ in range(iters): fn() - g.replay() # warm the full graph once - # torch.cuda.synchronize() + for _ in range(graph_warmup_replays): + g.replay() + torch.cuda.synchronize() start = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] end = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] totals = [] - activities = [ - torch.profiler.ProfilerActivity.CPU, - torch.profiler.ProfilerActivity.CUDA, - ] - from contextlib import nullcontext - with nullcontext() as prof: - # with torch.profiler.profile(activities=activities, record_shapes=False) as prof: + for _ in range(measure): + start[_].record() g.replay() - g.replay() - for _ in range(measure): - start[_].record() - g.replay() - end[_].record() - torch.cuda.synchronize() - for _ in range(measure): - totals.append(start[_].elapsed_time(end[_]) * 1e3) # ms -> us, total for `iters` - totals.sort() - global tag - tag += 1 - out = f"{tag}.json.gz" - print(f"dump to: {out}") - if prof is not None: - prof.export_chrome_trace(out) - + end[_].record() + torch.cuda.synchronize() + for _ in range(measure): + totals.append(start[_].elapsed_time(end[_]) * 1e3) # ms -> us, total for `iters` + totals.sort() + return totals[len(totals) // 2] / iters # median per-call us @@ -247,18 +250,25 @@ def cosine(a, b): def main(): ap = argparse.ArgumentParser() - # ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") - ap.add_argument("-M", "--M-list", default="16384") + ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") + #ap.add_argument("-M", "--M-list", default="16384") ap.add_argument("--check", default=True, action="store_true", help="cross-backend output cosine-sim sanity check per M") ap.add_argument("--cudagraph", default=True, action="store_true", help="time via CUDA-graph capture+replay (excludes CPU launch " "overhead; faithful to the e2e cudagraph path). Default is " "eager perf_counter, which includes launch overhead.") - ap.add_argument("--iters", type=int, default=100, + ap.add_argument("--iters", type=int, default=DEFAULT_EAGER_ITERS, help="eager perf_counter iterations") - ap.add_argument("--graph-iters", type=int, default=60, + ap.add_argument("--graph-iters", type=int, default=DEFAULT_GRAPH_ITERS, help="fn() calls captured per graph; total GPU time / this") + ap.add_argument("--warmup", type=int, default=DEFAULT_WARMUP, + help="warmup fn() calls before timing or graph capture") + ap.add_argument("--measure", type=int, default=DEFAULT_GRAPH_MEASURE, + help="CUDA-graph replay measurements; median is reported") + ap.add_argument("--graph-warmup-replays", type=int, + default=DEFAULT_GRAPH_WARMUP_REPLAYS, + help="full-graph replays before CUDA-event measurement") ap.add_argument("--ref-max-M", type=int, default=16385, help="run torch_moe ground-truth ref for M<=this (slow on large " "M since torch_moe loops over experts in python).") @@ -267,10 +277,24 @@ def main(): device = torch.device("cuda") shape = KIMI Ms = [int(x) for x in args.M_list.split(",")] - do_bench = bench_cudagraph if args.cudagraph else bench - bench_iters = args.graph_iters if args.cudagraph else args.iters - timing_mode = (f"cudagraph replay ({args.graph_iters}/graph)" - if args.cudagraph else "eager perf_counter") + def time_fn(fn): + if args.cudagraph: + return bench_cudagraph( + fn, + warmup=args.warmup, + iters=args.graph_iters, + measure=args.measure, + graph_warmup_replays=args.graph_warmup_replays, + ) + return bench(fn, warmup=args.warmup, iters=args.iters) + + timing_mode = ( + f"cudagraph replay ({args.graph_iters}/graph, " + f"warmup={args.warmup}, measure={args.measure}, " + f"graph_warmup_replays={args.graph_warmup_replays})" + if args.cudagraph + else f"eager perf_counter (warmup={args.warmup}, iters={args.iters})" + ) print(f"GPU: {torch.cuda.get_device_name(0)}") print(f"Timing: {timing_mode}") @@ -332,14 +356,14 @@ def main(): fly_ref_cos = (cosine(out.float(), ref_out) if finite and ref_out is not None else float("nan")) print(f"bench flydsl, M={M} mx⋅fly={fly_mx_cos:.4f} fly⋅ref={fly_ref_cos:.4f}") - fly_us = do_bench(f_fn, iters=bench_iters) + fly_us = time_fn(f_fn) fly_ok = True except Exception as e: print(f" [flydsl M={M}] ERROR: {type(e).__name__}: {e}", flush=True) try: print(f"bench mxfp4, M={M} bm={mx_bm} mx⋅ref={mx_ref_cos:.4f}") - mx_us = do_bench(mx_fn, iters=bench_iters) + mx_us = time_fn(mx_fn) except Exception as e: print(f"{M:>6} | mxfp4 timing ERROR: {type(e).__name__}: {e} — skipping") continue @@ -361,4 +385,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 2f78bd6b7..4c70762a4 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2073,3 +2073,56 @@ Interpretation: GEMM1 is now effectively aligned with aiter for the fixed M=16384 Kimi mxfp4 path. In the three default graph-profiler runs above, FlyDSL v36 GEMM1 is slightly faster than aiter by about `1-3 us`, and the all-FlyDSL pipeline remains bitwise equal to aiter for the benchmark output. + +## Small-M BM16 GEMM1 Pipeline v1 + +Target: + +```text +mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT +mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT +``` + +Change in `kimi_fp4_moe_small_bm16.py`: + +- Switch GEMM1 inline quant packing from the f32 fp4 intrinsic to the bf16 + intrinsic used by aiter: + `llvm.amdgcn.cvt.scalef32.pk.fp4.bf16`. +- Split inline quant into hidden load and finish/write phases. +- Add 3 physical A LDS slots and 2 B register stages. +- Preload the first two K tiles, then in the main K loop compute the current + tile while issuing the next tile's B loads and finishing the next tile's + hidden inline quant into a separate LDS slot. +- Keep the drained last two K tiles as pure compute, matching the aiter + `kStages=2` structure. + +Default graph replay measurement uses the longer `bench.py` defaults: + +```text +warmup=100 graph_iters=2000 measure=51 graph_warmup_replays=5 +``` + +Stage-delta graph replay result after the pipeline change: + +| M | aiter | FlyDSL sort + aiter GEMM | FlyDSL GEMM1 + aiter GEMM2 | all FlyDSL | sort delta | GEMM1 delta | GEMM2 delta | +| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| 4 | 39.164 us | 40.300 us | 52.012 us | 53.232 us | +1.135 us | +11.712 us | +1.220 us | +| 8 | 58.727 us | 59.326 us | 66.738 us | 68.100 us | +0.599 us | +7.412 us | +1.362 us | +| 16 | 96.095 us | 97.186 us | 99.299 us | 100.989 us | +1.091 us | +2.113 us | +1.690 us | +| 32 | 146.344 us | 147.723 us | 152.987 us | 154.751 us | +1.380 us | +5.264 us | +1.764 us | +| 64 | 200.434 us | 202.720 us | 211.454 us | 214.212 us | +2.286 us | +8.734 us | +2.758 us | +| 128 | 251.650 us | 255.206 us | 261.301 us | 265.713 us | +3.556 us | +6.095 us | +4.412 us | + +Correctness stayed close to aiter for every row above: + +```text +cos(sort_aiter, aiter) >= 0.999996 +cos(gemm1fly_aiter, aiter) >= 0.999997 +cos(allfly, aiter) >= 0.999997 +``` + +Interpretation: the previous BM16 FlyDSL GEMM1 path serialized inline quant, +B loads, wait/barrier, and MFMA for every K tile. The v1 pipeline removes a +large part of that bubble. The largest remaining gaps are now `M=4` +(`+11.7 us` GEMM1) and `M=64` (`+8.7 us` GEMM1), while `M=16` is within about +`+2.1 us` for GEMM1. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index b703cc70e..8115aa228 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -514,9 +514,12 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): num_acc_n = n_per_wave // 16 k_unroll = tile_k // 128 num_k_tiles = MODEL_DIM // tile_k + k_stages = 2 + a_stages = 3 a_elem_vec_pack = 2 eff_lds_stride = tile_k // a_elem_vec_pack single_x_bytes = tile_m * eff_lds_stride + lds_x_bytes = a_stages * single_x_bytes lds_scale_bytes = num_k_tiles * 256 lds_acc_bytes = tile_m * tile_n * 4 @@ -547,10 +550,10 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): gpu_arch = get_hip_arch() allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_gemm1") lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + single_x_bytes - allocator.ptr = lds_offset + max(single_x_bytes + lds_scale_bytes, lds_acc_bytes) + lds_scale_offset = lds_offset + lds_x_bytes + allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v0" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v1" @flyc.kernel(name=module_name) def gemm1_inline( @@ -568,7 +571,9 @@ def gemm1_inline( i32 = T.i32 i64 = T.i64 f32 = T.f32 + vec1_i32 = T.vec(1, i32) vec4_i32 = T.vec(4, i32) + vec2_bf16 = T.vec(2, T.bf16) vec2_i64 = T.vec(2, i64) vec4_i64 = T.vec(4, i64) vec8_i32 = T.vec(8, i32) @@ -605,8 +610,8 @@ def gemm1_inline( do_gemm = arith.andi(blk_valid, exp_valid) base_ptr = allocator.get_base() - lds_x_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(single_x_bytes,)).get() - lds_x_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(single_x_bytes // 4,)).get() + lds_x_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(lds_x_bytes,)).get() + lds_x_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(lds_x_bytes // 4,)).get() lds_scale_i32 = SmemPtr( base_ptr, lds_scale_offset, @@ -732,87 +737,96 @@ def load_b_scale_tile(k_tile: int): def _max_u32(a, b): return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - def inline_quant_tile(k_tile: int): - scale_accum = c0_i32 + def inline_quant_load_half(k_tile: int, b128: int): lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) lane_mod4 = lane_id % arith.constant(4, index=True) - for b128 in range_constexpr(2): - v_byte_off = ( - row_token_idx * arith.constant(MODEL_DIM * 2, index=True) - + arith.constant(k_tile * tile_k * 2 + b128 * 256, index=True) - + lane_div4 * arith.constant(64, index=True) - + lane_mod4 * arith.constant(16, index=True) - ) - h16 = _buffer_load_vec( - buffer_ops, - vector, - hidden_rsrc, - v_byte_off, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - h4 = vector.bitcast(vec4_i32, h16) - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(c1_i32, c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & arith.constant(255, type=i32) - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) + v_byte_off = ( + row_token_idx * arith.constant(MODEL_DIM * 2, index=True) + + arith.constant(k_tile * tile_k * 2 + b128 * 256, index=True) + + lane_div4 * arith.constant(64, index=True) + + lane_mod4 * arith.constant(16, index=True) + ) + h16 = _buffer_load_vec( + buffer_ops, + vector, + hidden_rsrc, + v_byte_off, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + return vector.bitcast(vec4_i32, h16) - kb_in_kt = arith.constant(b128 * 4, index=True) + lane_div4 - col_sw = swizzle_xor16(r_in_chunk, kb_in_kt * arith.constant(16, index=True), k_blocks16) - byte_idx = crd2idx( - [r_in_chunk, col_sw + lane_mod4 * arith.constant(4, index=True)], - layout_lds, + def inline_quant_finish_half(a_slot: int, k_tile: int, b128: int, h4): + lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) + lane_mod4 = lane_id % arith.constant(4, index=True) + local_amax = c0_i32 + bf16_pairs = [] + for j in range_constexpr(4): + w = ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + bf16_pairs.append( + vector.bitcast( + vec2_bf16, + vector.from_elements(vec1_i32, [w]), + ) ) - word_idx = byte_idx // arith.constant(4, index=True) - vector.store( - vector.from_elements(T.vec(1, i32), [packed]), - lds_x_i32, - [word_idx], - alignment=4, + + peer1 = local_amax.shuffle_xor(c1_i32, c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & arith.constant(255, type=i32) + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.bf16", + [ + packed, + bf16_pairs[pair], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) ) - scale_accum = scale_accum | (e8m0 << arith.constant(b128 * 16, type=i32)) + kb_in_kt = arith.constant(b128 * 4, index=True) + lane_div4 + col_sw = swizzle_xor16(r_in_chunk, kb_in_kt * arith.constant(16, index=True), k_blocks16) + byte_idx = crd2idx( + [r_in_chunk, col_sw + lane_mod4 * arith.constant(4, index=True)], + layout_lds, + ) + word_idx = byte_idx // arith.constant(4, index=True) + word_idx = word_idx + arith.constant(a_slot * (single_x_bytes // 4), index=True) + vector.store( + vector.from_elements(T.vec(1, i32), [packed]), + lds_x_i32, + [word_idx], + alignment=4, + ) + return e8m0 + + def inline_quant_write_scale(k_tile: int, e8m0_0, e8m0_1): + lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) lane_tgt = lane_div4 * arith.constant(16, index=True) + r_in_chunk scale_idx = arith.constant(k_tile * 64, index=True) + lane_tgt + scale_accum = e8m0_0 | (e8m0_1 << c16_i32) vector.store( vector.from_elements(T.vec(1, i32), [scale_accum]), lds_scale_i32, @@ -820,9 +834,17 @@ def inline_quant_tile(k_tile: int): alignment=4, ) - def lds_load_packs_k64(curr_row_a_lds, col_base): + def inline_quant_tile(k_tile: int, a_slot: int): + h4_0 = inline_quant_load_half(k_tile, 0) + e8m0_0 = inline_quant_finish_half(a_slot, k_tile, 0, h4_0) + h4_1 = inline_quant_load_half(k_tile, 1) + e8m0_1 = inline_quant_finish_half(a_slot, k_tile, 1, h4_1) + inline_quant_write_scale(k_tile, e8m0_0, e8m0_1) + + def lds_load_packs_k64(curr_row_a_lds, col_base, a_slot: int): col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + idx_a16 = idx_a16 + arith.constant(a_slot * single_x_bytes, index=True) loaded_a16 = vector.load_op(vec16_x, lds_x_i8, [idx_a16]) a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) return ( @@ -838,12 +860,12 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): cbsz = 4 blgp = 4 - def compute_tile(acc_in, b_tile, a_scale, b_scale): + def compute_tile(acc_in, b_tile, a_scale, b_scale, a_slot: int): acc_list = list(acc_in) a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) for k_idx in range_constexpr(k_unroll): col_base = col_offset_base + arith.constant(k_idx * 64, index=True) - a0, a1 = lds_load_packs_k64(row_a_lds, col_base) + a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) b_packs0, b_packs1 = b_tile[k_idx] for ni in range_constexpr(num_acc_n // 2): @@ -870,6 +892,53 @@ def compute_tile(acc_in, b_tile, a_scale, b_scale): ) return acc_list + def compute_tile_prefetch_b(acc_in, b_tile, a_scale, b_scale, a_slot: int, next_k_tile: int): + acc_list = list(acc_in) + a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) + a128_vals = [] + next_b_tile = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 64, index=True) + a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) + a128_vals.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + next_b_tile.append(([], [])) + + for ni in range_constexpr(num_acc_n // 2): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(2): + ni_idx = ni * 2 + inxdl + rocdl.sched_barrier(0) + rocdl.s_setprio(1) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_list[ni_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128_vals[k_idx], + b128, + acc_list[ni_idx], + cbsz, + blgp, + k_idx * 2, + a_scale_val, + k_idx * 2 + inxdl, + b_scale_val, + ], + ) + rocdl.s_setprio(0) + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + next_b0, next_b1 = load_b_packs_k64(next_k_tile, k_idx, ni_idx) + next_b_tile[k_idx][0].append(next_b0) + next_b_tile[k_idx][1].append(next_b1) + rocdl.sched_barrier(0) + + return acc_list, next_b_tile + def _fmax_num(a, b): return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b)).result) @@ -882,15 +951,54 @@ def _silu_mul(g, u): def _then_body(): acc = [arith.constant_vector(0.0, vec4_f32)] * num_acc_n - for k_tile in range_constexpr(num_k_tiles): - inline_quant_tile(k_tile) - b_tile = load_b_tile(k_tile) - b_scale = load_b_scale_tile(k_tile) + b_stages = [] + b_scale_stages = [] + for k_tile in range_constexpr(k_stages): + inline_quant_tile(k_tile, k_tile) + b_stages.append(load_b_tile(k_tile)) + b_scale_stages.append(load_b_scale_tile(k_tile)) + + for offset in range_constexpr(0, num_k_tiles - k_stages): + read_slot = offset % a_stages + slot_b = offset % k_stages + next_k_tile = offset + k_stages + write_slot = next_k_tile % a_stages rocdl.s_waitcnt(0) gpu.barrier() - a_scale = load_a_scale_tile(k_tile) - acc = compute_tile(acc, b_tile, a_scale, b_scale) + a_scale = load_a_scale_tile(offset) + h4_0 = inline_quant_load_half(next_k_tile, 0) + h4_1 = inline_quant_load_half(next_k_tile, 1) + rocdl.sched_barrier(0) + acc, next_b_tile = compute_tile_prefetch_b( + acc, + b_stages[slot_b], + a_scale, + b_scale_stages[slot_b], + read_slot, + next_k_tile, + ) + b_scale_stages[slot_b] = load_b_scale_tile(next_k_tile) + e8m0_0 = inline_quant_finish_half(write_slot, next_k_tile, 0, h4_0) + e8m0_1 = inline_quant_finish_half(write_slot, next_k_tile, 1, h4_1) + inline_quant_write_scale(next_k_tile, e8m0_0, e8m0_1) + b_stages[slot_b] = next_b_tile + + for tail in range_constexpr(0, k_stages): + k_tile = num_k_tiles - k_stages + tail + read_slot = k_tile % a_stages + slot_b = k_tile % k_stages + rocdl.s_waitcnt(0) gpu.barrier() + a_scale = load_a_scale_tile(k_tile) + acc = compute_tile( + acc, + b_stages[slot_b], + a_scale, + b_scale_stages[slot_b], + read_slot, + ) + + gpu.barrier() for j in range_constexpr(num_acc_n): j_local = j // 2 From 15c83c979f05d120b5edf2807f61fe497562efee Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 18:21:05 +0000 Subject: [PATCH 029/118] Align Kimi BM16 inline quant schedule --- kimi_fp4_moe_small_bm16.py | 81 +++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 8115aa228..68c3c60bd 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -35,6 +35,7 @@ INTER_DIM, MODEL_DIM, TOPK, + _barrier, _ptr_view_safe, _run_compiled, ) @@ -553,7 +554,7 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v1" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v4" @flyc.kernel(name=module_name) def gemm1_inline( @@ -726,6 +727,7 @@ def load_b_scale_tile(k_tile: int): c254_i32 = arith.constant(254, type=i32) cffff_i32 = arith.constant(0xFFFF, type=i32) c7fff_i32 = arith.constant(0x7FFF, type=i32) + c7fff7fff_i32 = arith.constant(0x7FFF7FFF, type=i32) chi_mask_i32 = arith.constant(-65536, type=i32) c0x200000_i32 = arith.constant(0x200000, type=i32) c64_i32 = arith.constant(64, type=i32) @@ -737,6 +739,58 @@ def load_b_scale_tile(k_tile: int): def _max_u32(a, b): return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def _pkmax_u16(a, b): + return ArithValue( + llvm.inline_asm( + i32, + [_raw(a), _raw(b)], + "v_pk_max_u16 $0, $1, $2", + "=v,v,v", + has_side_effects=False, + ) + ) + + def _max_u32_dpp_xor1(src): + peer = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.update.dpp.i32", + [ + _raw(src), + _raw(src), + arith.constant(0xB1, type=i32), + arith.constant(0xF, type=i32), + arith.constant(0xF, type=i32), + arith.constant(True, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + ) + return _max_u32(src, peer) + + def _max_u32_dpp_xor2(src): + peer = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.update.dpp.i32", + [ + _raw(src), + _raw(src), + arith.constant(0x4E, type=i32), + arith.constant(0xF, type=i32), + arith.constant(0xF, type=i32), + arith.constant(True, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + ) + return _max_u32(src, peer) + def inline_quant_load_half(k_tile: int, b128: int): lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) lane_mod4 = lane_id % arith.constant(4, index=True) @@ -762,14 +816,11 @@ def inline_quant_load_half(k_tile: int, b128: int): def inline_quant_finish_half(a_slot: int, k_tile: int, b128: int, h4): lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) lane_mod4 = lane_id % arith.constant(4, index=True) - local_amax = c0_i32 + hm = [] bf16_pairs = [] for j in range_constexpr(4): w = ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) + hm.append(w & c7fff7fff_i32) bf16_pairs.append( vector.bitcast( vec2_bf16, @@ -777,10 +828,14 @@ def inline_quant_finish_half(a_slot: int, k_tile: int, b128: int, h4): ) ) - peer1 = local_amax.shuffle_xor(c1_i32, c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) + m01 = _pkmax_u16(hm[0], hm[1]) + m23 = _pkmax_u16(hm[2], hm[3]) + m0123 = _pkmax_u16(m01, m23) + lo_abs = m0123 & cffff_i32 + hi_abs = m0123 >> c16_i32 + local_amax = _max_u32(lo_abs, hi_abs) + local_amax = _max_u32_dpp_xor1(local_amax) + local_amax = _max_u32_dpp_xor2(local_amax) f32bits = local_amax << c16_i32 bexp = ((f32bits + c0x200000_i32) >> c23_i32) & arith.constant(255, type=i32) @@ -963,8 +1018,7 @@ def _then_body(): slot_b = offset % k_stages next_k_tile = offset + k_stages write_slot = next_k_tile % a_stages - rocdl.s_waitcnt(0) - gpu.barrier() + _barrier(lgkmcnt=0) a_scale = load_a_scale_tile(offset) h4_0 = inline_quant_load_half(next_k_tile, 0) h4_1 = inline_quant_load_half(next_k_tile, 1) @@ -987,8 +1041,7 @@ def _then_body(): k_tile = num_k_tiles - k_stages + tail read_slot = k_tile % a_stages slot_b = k_tile % k_stages - rocdl.s_waitcnt(0) - gpu.barrier() + _barrier(lgkmcnt=0) a_scale = load_a_scale_tile(k_tile) acc = compute_tile( acc, From e39773011dac5408695725ca4df8124881f914cc Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 18:21:10 +0000 Subject: [PATCH 030/118] Increase small-M benchmark graph sampling --- bench.py | 13 ++++++----- docs/kimi_fp4_moe_16384_opt_notes.md | 32 +++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/bench.py b/bench.py index 0db1a1601..11963ee17 100644 --- a/bench.py +++ b/bench.py @@ -26,11 +26,14 @@ class Shape: KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) -DEFAULT_WARMUP = 100 -DEFAULT_EAGER_ITERS = 1000 -DEFAULT_GRAPH_ITERS = 2000 -DEFAULT_GRAPH_MEASURE = 51 -DEFAULT_GRAPH_WARMUP_REPLAYS = 5 +# Small-M MoE paths are tens of microseconds, so keep the default benchmark +# deliberately long: amortize event/replay overhead and report a median across +# many full-graph replays. Measurement time is less important than stability. +DEFAULT_WARMUP = 200 +DEFAULT_EAGER_ITERS = 5000 +DEFAULT_GRAPH_ITERS = 5000 +DEFAULT_GRAPH_MEASURE = 101 +DEFAULT_GRAPH_WARMUP_REPLAYS = 10 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 4c70762a4..e8f413774 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2096,7 +2096,8 @@ Change in `kimi_fp4_moe_small_bm16.py`: - Keep the drained last two K tiles as pure compute, matching the aiter `kStages=2` structure. -Default graph replay measurement uses the longer `bench.py` defaults: +Default graph replay measurement used the then-current longer `bench.py` +defaults: ```text warmup=100 graph_iters=2000 measure=51 graph_warmup_replays=5 @@ -2126,3 +2127,32 @@ B loads, wait/barrier, and MFMA for every K tile. The v1 pipeline removes a large part of that bubble. The largest remaining gaps are now `M=4` (`+11.7 us` GEMM1) and `M=64` (`+8.7 us` GEMM1), while `M=16` is within about `+2.1 us` for GEMM1. + +## Bench.py Accurate Small-M Defaults + +`bench.py` defaults were increased again for small-M decisions, where the +pipeline is only tens of microseconds and single replay/event overhead can hide +real differences: + +```text +warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 +eager_iters=5000 +``` + +Validation command: + +```text +/opt/venv/bin/python bench.py -M 4,8,16,32,64,128 --ref-max-M 128 +``` + +This run compares aiter's `mxfp4_moe` CSV path against the original untagged +`fused_moe` FlyDSL CSV path, not the local extracted BM16 file. + +| M | mxfp4 | FlyDSL fused_moe | ratio | mx.fly | mx.ref | fly.ref | +| ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| 4 | 39.2 us | 52.3 us | 1.34x | 0.9845 | 0.9533 | 0.9482 | +| 8 | 58.4 us | 71.9 us | 1.23x | 0.9868 | 0.9524 | 0.9485 | +| 16 | 95.9 us | 115.4 us | 1.20x | 0.9876 | 0.9538 | 0.9515 | +| 32 | 145.8 us | 160.7 us | 1.10x | 0.9868 | 0.9548 | 0.9520 | +| 64 | 200.3 us | 209.7 us | 1.05x | 0.9874 | 0.9555 | 0.9529 | +| 128 | 251.4 us | 262.8 us | 1.05x | 0.9875 | 0.9562 | 0.9536 | From 41928f0a3a932720b1521738dd3fc976734f9af1 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 18:58:07 +0000 Subject: [PATCH 031/118] Add Kimi BM16 stage benchmark --- bench_small_bm16.py | 181 +++++++++++++++++++++++++++ docs/kimi_fp4_moe_16384_opt_notes.md | 39 ++++++ 2 files changed, 220 insertions(+) create mode 100644 bench_small_bm16.py diff --git a/bench_small_bm16.py b/bench_small_bm16.py new file mode 100644 index 000000000..08380f457 --- /dev/null +++ b/bench_small_bm16.py @@ -0,0 +1,181 @@ +import argparse +import statistics + +import bench as b +from kimi_fp4_moe_small_bm16 import ( + run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl, + run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2, + run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm, +) + + +RUNNER_ORDER = ( + "aiter", + "sort_aiter", + "gemm1fly_aiter", + "allfly", +) + + +def _time_fn(fn, args): + samples = [] + for _ in range(args.repeat): + if args.eager: + samples.append(b.bench(fn, warmup=args.warmup, iters=args.iters)) + else: + samples.append( + b.bench_cudagraph( + fn, + warmup=args.warmup, + iters=args.graph_iters, + measure=args.measure, + graph_warmup_replays=args.graph_warmup_replays, + ) + ) + return float(statistics.median(samples)), samples + + +def _fmt_samples(samples): + if len(samples) <= 1: + return "" + body = ",".join(f"{sample:.3f}" for sample in samples) + return f" samples={body}" + + +def _make_runners(shape, m, hidden, topk_ids, topk_weight, weights, device): + w = weights["mxfp4"] + aiter_fn, _, _ = b.make_mxfp4_fn( + shape, m, hidden, topk_ids, topk_weight, w, device + ) + + def sort_aiter(): + return run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm( + hidden, + w["w1"], + w["w2"], + topk_weight, + topk_ids, + w1_scale=w["w1_scale"], + w2_scale=w["w2_scale"], + ) + + def gemm1fly_aiter(): + return run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2( + hidden, + w["w1"], + w["w2"], + topk_weight, + topk_ids, + w1_scale=w["w1_scale"], + w2_scale=w["w2_scale"], + ) + + def allfly(): + return run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl( + hidden, + w["w1"], + w["w2"], + topk_weight, + topk_ids, + w1_scale=w["w1_scale"], + w2_scale=w["w2_scale"], + ) + + return { + "aiter": aiter_fn, + "sort_aiter": sort_aiter, + "gemm1fly_aiter": gemm1fly_aiter, + "allfly": allfly, + } + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-M", "--M-list", default="4,8,16,32,64,128") + parser.add_argument("--warmup", type=int, default=b.DEFAULT_WARMUP) + parser.add_argument("--iters", type=int, default=b.DEFAULT_EAGER_ITERS) + parser.add_argument("--graph-iters", type=int, default=b.DEFAULT_GRAPH_ITERS) + parser.add_argument("--measure", type=int, default=b.DEFAULT_GRAPH_MEASURE) + parser.add_argument( + "--graph-warmup-replays", + type=int, + default=b.DEFAULT_GRAPH_WARMUP_REPLAYS, + ) + parser.add_argument("--repeat", type=int, default=1) + parser.add_argument("--eager", action="store_true") + parser.add_argument("--no-check", action="store_true") + args = parser.parse_args() + + if args.repeat <= 0: + raise ValueError("--repeat must be positive") + + shape = b.KIMI + device = b.torch.device("cuda") + ms = [int(item) for item in args.M_list.split(",") if item.strip()] + + mode = ( + f"eager warmup={args.warmup} iters={args.iters}" + if args.eager + else ( + f"graph warmup={args.warmup} graph_iters={args.graph_iters} " + f"measure={args.measure} graph_warmup_replays={args.graph_warmup_replays}" + ) + ) + print(f"GPU: {b.torch.cuda.get_device_name(0)}") + print(f"Timing: {mode} repeat={args.repeat}") + print( + f"Shape: NE={shape.NE} H={shape.H} INTER={shape.INTER} TOPK={shape.TOPK}" + ) + print("Preparing weights...", flush=True) + weights = b.build_weights(shape, device) + + header = ( + "M,aiter_us,sort_aiter_us,gemm1fly_aiter_us,allfly_us," + "sort_delta_us,gemm1_delta_us,gemm2_delta_us," + "cos_sort,cos_gemm1,cos_all,max_abs_all" + ) + print(header) + + for m in ms: + hidden, topk_ids, topk_weight = b.build_inputs(shape, m, device) + runners = _make_runners( + shape, m, hidden, topk_ids, topk_weight, weights, device + ) + + cos = {"sort_aiter": float("nan"), "gemm1fly_aiter": float("nan"), "allfly": float("nan")} + max_abs_all = float("nan") + if not args.no_check: + ref = runners["aiter"]().float() + b.torch.cuda.synchronize() + for name in ("sort_aiter", "gemm1fly_aiter", "allfly"): + out = runners[name]().float() + b.torch.cuda.synchronize() + if not b.torch.isfinite(out).all().item(): + raise RuntimeError(f"{name} M={m} produced non-finite output") + cos[name] = b.cosine(ref, out) + if name == "allfly": + max_abs_all = (ref - out).abs().max().item() + + timings = {} + for name in RUNNER_ORDER: + timings[name], samples = _time_fn(runners[name], args) + print( + f"sample M={m} {name}={timings[name]:.3f} us{_fmt_samples(samples)}", + flush=True, + ) + + sort_delta = timings["sort_aiter"] - timings["aiter"] + gemm1_delta = timings["gemm1fly_aiter"] - timings["sort_aiter"] + gemm2_delta = timings["allfly"] - timings["gemm1fly_aiter"] + print( + f"{m},{timings['aiter']:.3f},{timings['sort_aiter']:.3f}," + f"{timings['gemm1fly_aiter']:.3f},{timings['allfly']:.3f}," + f"{sort_delta:.3f},{gemm1_delta:.3f},{gemm2_delta:.3f}," + f"{cos['sort_aiter']:.9f},{cos['gemm1fly_aiter']:.9f}," + f"{cos['allfly']:.9f},{max_abs_all:.6f}", + flush=True, + ) + + +if __name__ == "__main__": + main() diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index e8f413774..d6823a32e 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2156,3 +2156,42 @@ This run compares aiter's `mxfp4_moe` CSV path against the original untagged | 32 | 145.8 us | 160.7 us | 1.10x | 0.9868 | 0.9548 | 0.9520 | | 64 | 200.3 us | 209.7 us | 1.05x | 0.9874 | 0.9555 | 0.9529 | | 128 | 251.4 us | 262.8 us | 1.05x | 0.9875 | 0.9562 | 0.9536 | + +## Small-M BM16 Stage Split + +`bench_small_bm16.py` was added to make the BM16 stage split reproducible. It +compares: + +- `aiter`: aiter `mxfp4_moe` CSV path. +- `sort_aiter`: FlyDSL sort/zero-init plus aiter GEMM1/GEMM2. +- `gemm1fly_aiter`: FlyDSL sort/GEMM1 plus aiter GEMM2. +- `allfly`: FlyDSL sort/GEMM1/GEMM2. + +Default command: + +```text +/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 +``` + +Default graph timing was: + +```text +warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 repeat=1 +``` + +Results: + +| M | aiter | sort_aiter | gemm1fly_aiter | allfly | sort delta | GEMM1 delta | GEMM2 delta | cos all | max abs all | +| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| 4 | 39.351 us | 42.560 us | 42.446 us | 42.535 us | +3.210 us | -0.114 us | +0.089 us | 0.999996305 | 0.031250 | +| 8 | 59.011 us | 59.411 us | 60.372 us | 61.925 us | +0.400 us | +0.962 us | +1.553 us | 0.999998152 | 0.015625 | +| 16 | 96.219 us | 97.519 us | 100.646 us | 102.193 us | +1.300 us | +3.128 us | +1.547 us | 0.999998629 | 0.015625 | +| 32 | 145.850 us | 147.566 us | 150.351 us | 153.022 us | +1.717 us | +2.785 us | +2.671 us | 0.999999046 | 0.015625 | +| 64 | 200.427 us | 202.655 us | 207.603 us | 210.420 us | +2.228 us | +4.948 us | +2.816 us | 0.999998689 | 0.031250 | +| 128 | 251.346 us | 254.723 us | 260.665 us | 264.844 us | +3.377 us | +5.942 us | +4.179 us | 0.999998510 | 0.031250 | + +Interpretation: after the BM16 GEMM1 v4 alignment, the remaining small-M gap is +not one uniform issue. M=4 is almost entirely sort/prologue overhead. M=64 and +M=128 are dominated by GEMM1, with GEMM2 as the second largest term. The next +kernel-level optimization should therefore start from GEMM1 for M=64/128, while +keeping sort/prologue in mind for the very small M=4 case. From 4809143f740927dd02ec162cb8ea6c76a1c75186 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 19:12:47 +0000 Subject: [PATCH 032/118] Document Kimi BM16 profiling follow-ups --- docs/kimi_fp4_moe_16384_opt_notes.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index d6823a32e..4ebd1cdf5 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2195,3 +2195,26 @@ not one uniform issue. M=4 is almost entirely sort/prologue overhead. M=64 and M=128 are dominated by GEMM1, with GEMM2 as the second largest term. The next kernel-level optimization should therefore start from GEMM1 for M=64/128, while keeping sort/prologue in mind for the very small M=4 case. + +Profiler sanity check for M=64 (`warmup=20`, `graph_iters=20`, `replays=5`) +confirmed the stage split is real kernel time, not extra graph kernels: + +| runner | sort | GEMM1 | GEMM2 | total | +| --- | ---: | ---: | ---: | ---: | +| `aiter` | 5.391 us | 135.481 us | 66.707 us | 207.579 us | +| `sort_aiter` | 7.324 us | 135.804 us | 66.822 us | 209.950 us | +| `gemm1fly_aiter` | 7.275 us | 142.643 us | 66.625 us | 216.543 us | +| `allfly` | 7.233 us | 142.682 us | 69.813 us | 219.727 us | + +Rejected follow-ups: + +- GEMM2 barrier relaxation: replacing the pre-compute + `rocdl.s_waitcnt(0); gpu.barrier()` with `_barrier(lgkmcnt=0)` was not + correct. M=8/16 cosine dropped to about `0.80`, so the current GEMM2 path + still needs a stronger VMEM/LDS ordering point. +- GEMM1 preload v5: interleaving the initial two K-tile preload as + half-quant/B-load/half-quant/B-load was correct (`min_cos=0.999997199`) but + did not improve performance. Short graph profiler changed M=64 GEMM1 only + from about `142.643 us` to `142.564 us`, and long graph timing made the + M=64 GEMM1 stage delta worse (`+6.861 us`). The saved code stays at GEMM1 + v4. From 50d80b0a7ad2d650d6b914dd24152269de66d257 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 19:55:49 +0000 Subject: [PATCH 033/118] Align Kimi BM16 GEMM1 epilogue --- docs/kimi_fp4_moe_16384_opt_notes.md | 42 +++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 55 ++++++++++++++++++++++------ 2 files changed, 85 insertions(+), 12 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 4ebd1cdf5..6c22a02e3 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2218,3 +2218,45 @@ Rejected follow-ups: from about `142.643 us` to `142.564 us`, and long graph timing made the M=64 GEMM1 stage delta worse (`+6.861 us`). The saved code stays at GEMM1 v4. + +## Small-M BM16 GEMM1 v7 Epilogue Cleanup + +Change: + +- Match aiter BM16 scale epilogue and write only the low scale byte. The + adjacent byte is padding for BM16 and is not read by GEMM2. +- Replace the epilogue f32 amax `shuffle_xor` reductions with DPP controls + `0xB1` and `0x4E`, matching aiter's `apply_cshuffle_quant_epilog`. + +Correctness sweep against aiter mxfp4: + +```text +M=4 cos=0.999997199 max_abs=0.031250 +M=8 cos=0.999997497 max_abs=0.031250 +M=16 cos=0.999998033 max_abs=0.015625 +M=32 cos=0.999997973 max_abs=0.031250 +M=64 cos=0.999998271 max_abs=0.031250 +M=128 cos=0.999999046 max_abs=0.031250 +min_cos=0.999997199 +``` + +Static ISA comparison: + +| kernel | `s_waitcnt` | `buffer_store_byte` | `ds_swizzle_b32` | `v_mov_b32_dpp` | +| --- | ---: | ---: | ---: | ---: | +| FlyDSL GEMM1 v4 | 152 | 2 | 2 | 0 | +| FlyDSL GEMM1 v7 | 150 | 1 | 0 | 2 | + +Short graph profiler (`warmup=20`, `graph_iters=20`, `replays=5`) shows the +GEMM1 kernel body moving in the right direction: + +| M | aiter GEMM1 | FlyDSL v7 GEMM1 | delta | +| ---: | ---: | ---: | ---: | +| 64 | 135.123 us | 141.395 us | +6.272 us | +| 128 | 172.911 us | 170.789 us | -2.122 us | + +The M=128 profiler sample is noisy on the aiter side, but the static diff is +strictly closer to aiter and correctness is unchanged. A long graph sample +with `--no-check` was noisy (`M=64` sort/GEMM stages all inflated together), so +the retained evidence for this small cleanup is correctness plus direct kernel +profiler/ISA alignment. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 68c3c60bd..cca19019a 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -554,7 +554,7 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v4" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v7" @flyc.kernel(name=module_name) def gemm1_inline( @@ -997,6 +997,46 @@ def compute_tile_prefetch_b(acc_in, b_tile, a_scale, b_scale, a_slot: int, next_ def _fmax_num(a, b): return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b)).result) + def _fmax_dpp_xor1(src): + src_i32 = src.bitcast(i32) + peer_i32 = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.update.dpp.i32", + [ + _raw(src_i32), + _raw(src_i32), + arith.constant(0xB1, type=i32), + arith.constant(0xF, type=i32), + arith.constant(0xF, type=i32), + arith.constant(True, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + ) + return _fmax_num(src, peer_i32.bitcast(f32)) + + def _fmax_dpp_xor2(src): + src_i32 = src.bitcast(i32) + peer_i32 = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.update.dpp.i32", + [ + _raw(src_i32), + _raw(src_i32), + arith.constant(0x4E, type=i32), + arith.constant(0xF, type=i32), + arith.constant(0xF, type=i32), + arith.constant(True, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + ) + return _fmax_num(src, peer_i32.bitcast(f32)) + def _silu_mul(g, u): t = g * neg_log2e emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) @@ -1109,10 +1149,8 @@ def _then_body(): abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) local_max = _fmax_num(local_max, abs_v) - peer1 = local_max.shuffle_xor(c1_i32, c64_i32) - local_max = _fmax_num(local_max, peer1) - peer2 = local_max.shuffle_xor(c2_i32, c64_i32) - local_max = _fmax_num(local_max, peer2) + local_max = _fmax_dpp_xor1(local_max) + local_max = _fmax_dpp_xor2(local_max) amax_i32 = local_max.bitcast(i32) quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 @@ -1170,13 +1208,6 @@ def _then_body(): cache_modifier=4, offset_is_bytes=True, ) - buffer_ops.buffer_store( - arith.TruncIOp(i8, c0_i32).result, - out_scale_rsrc, - byte_off + c1_i32, - cache_modifier=4, - offset_is_bytes=True, - ) scf.YieldOp([]) if_valid = scf.IfOp(do_gemm) From 35b98491f6960a6baeb3b90ad3eeafa413ea3b49 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 20:02:21 +0000 Subject: [PATCH 034/118] Align Kimi BM16 GEMM2 A LDS load --- docs/kimi_fp4_moe_16384_opt_notes.md | 45 +++++++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 50 +++++++++++++--------------- 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 6c22a02e3..29c7fc3d7 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2260,3 +2260,48 @@ strictly closer to aiter and correctness is unchanged. A long graph sample with `--no-check` was noisy (`M=64` sort/GEMM stages all inflated together), so the retained evidence for this small cleanup is correctness plus direct kernel profiler/ISA alignment. + +## Small-M BM16 GEMM2 v2 LDS Load Alignment + +Change: + +- Replace GEMM2's A path from `buffer_load_dwordx4` into VGPR followed by + `ds_write*` with `raw_ptr_buffer_load_lds`, matching aiter's direct + global-to-LDS load for the two K tiles. +- Keep the stronger pre-compute `s_waitcnt(0); s_barrier` ordering. The earlier + `lgkmcnt=0` relaxation was not correct. + +Correctness sweep against aiter mxfp4: + +```text +M=4 cos=0.999997437 max_abs=0.031250 +M=8 cos=0.999998689 max_abs=0.015625 +M=16 cos=0.999999166 max_abs=0.015625 +M=32 cos=0.999998748 max_abs=0.031250 +M=64 cos=0.999998808 max_abs=0.023438 +M=128 cos=0.999999225 max_abs=0.031250 +min_cos=0.999997437 +``` + +Static ISA comparison: + +| kernel | `s_waitcnt` | `buffer_load ... lds` | `ds_write_b128` | `ds_write_b32` | +| --- | ---: | ---: | ---: | ---: | +| aiter GEMM2 | 34 | 2 | 0 | 0 | +| FlyDSL GEMM2 v0 | 19 | 0 | 1 | 4 | +| FlyDSL GEMM2 v2 | 17 | 2 | 0 | 0 | + +Short graph profiler (`warmup=20`, `graph_iters=20`, `replays=5`) for the +kernel body: + +| M | aiter GEMM2 | FlyDSL v2 GEMM2 | delta | +| ---: | ---: | ---: | ---: | +| 64 | 67.528 us | 69.296 us | +1.768 us | +| 128 | 84.206 us | 88.799 us | +4.593 us | + +Interpretation: v2 removes the obvious extra LDS writes and makes the static +A-load sequence closer to aiter. The measured M=64 gap is slightly smaller +than the earlier `~3 us` snapshot, while M=128 still has a meaningful gap. The +remaining GEMM2 difference is now more likely in the atomic epilogue form +(`buffer_atomic_pk_add_bf16` vs aiter's `global_atomic_pk_add_bf16`) and/or the +exact wait scheduling around the epilogue, rather than the A-load staging. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index cca19019a..46e62a369 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -1355,7 +1355,7 @@ def compile_kimi_mxfp4_gemm2_atomic_bm16(): lds_offset = allocator._align(allocator.ptr, 16) allocator.ptr = lds_offset + max(lds_a_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v0" + module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v2" @flyc.kernel(name=module_name) def gemm2_atomic( @@ -1408,7 +1408,6 @@ def gemm2_atomic( base_ptr = allocator.get_base() lds_a_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(lds_a_bytes,)).get() - lds_a_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(lds_a_bytes // 4,)).get() lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() shape_lds = fx.make_shape(tile_m, tile_k // 2) @@ -1442,39 +1441,36 @@ def gemm2_atomic( def load_a_to_lds(slot: int, kt: int): row_off = lane_id // arith.constant(8, index=True) lane_mod8 = lane_id % arith.constant(8, index=True) - lds_row = wave_id * arith.constant(8, index=True) + row_off + lds_row_base = wave_id * arith.constant(8, index=True) + lds_row = lds_row_base + row_off actual_row = m_row + lds_row + col_sw = swizzle_xor16( + lds_row, + lane_mod8 * arith.constant(16, index=True), + k_blocks16, + ) global_off = ( actual_row * arith.constant(k_half, index=True) + arith.constant(kt * (tile_k // 2), index=True) - + lane_mod8 * arith.constant(16, index=True) - ) - a16 = _buffer_load_vec( - buffer_ops, - vector, - a_q_rsrc, - global_off, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, + + col_sw ) - a_i32x4 = vector.bitcast(T.vec(4, i32), a16) - col_sw = swizzle_xor16(lds_row, lane_mod8 * arith.constant(16, index=True), k_blocks16) byte_idx = ( arith.constant(slot * single_a_bytes, index=True) - + crd2idx([lds_row, col_sw], layout_lds) + + crd2idx([lds_row_base, arith.index(0)], layout_lds) + ) + lds_addr = memref.extract_aligned_pointer_as_index(lds_a_i8) + byte_idx + lds_addr_i64 = arith.index_cast(i64, lds_addr) + lds_addr_i64 = rocdl.readfirstlane(i64, lds_addr_i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_addr_i64) + rocdl.raw_ptr_buffer_load_lds( + a_q_rsrc, + lds_ptr, + arith.constant(16, type=i32), + arith.index_cast(i32, global_off), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), ) - word_idx = byte_idx // arith.constant(4, index=True) - for wi in range_constexpr(4): - word = vector.extract(a_i32x4, static_position=[wi], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, i32), [word]), - lds_a_i32, - [word_idx + arith.constant(wi, index=True)], - alignment=4, - ) def guarded_load_a_to_lds(slot: int, kt: int): if_wave = scf.IfOp(arith.cmpi(CmpIPredicate.ult, wave_i32, c2_i32)) From 3f925bbad5893f0211ba84e57c44a9ecdcb7c442 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 21:52:22 +0000 Subject: [PATCH 035/118] Tune Kimi BM16 profiling and atomics --- bench_small_bm16.py | 4 +- docs/kimi_fp4_moe_16384_opt_notes.md | 93 ++++++++ kimi_fp4_moe_small_bm16.py | 65 ++++-- profile_small_bm16.py | 310 +++++++++++++++++++++++++++ 4 files changed, 454 insertions(+), 18 deletions(-) create mode 100644 profile_small_bm16.py diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 08380f457..a8bcd723d 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,6 +16,8 @@ "allfly", ) +DEFAULT_REPEAT = 5 + def _time_fn(fn, args): samples = [] @@ -101,7 +103,7 @@ def main(): type=int, default=b.DEFAULT_GRAPH_WARMUP_REPLAYS, ) - parser.add_argument("--repeat", type=int, default=1) + parser.add_argument("--repeat", type=int, default=DEFAULT_REPEAT) parser.add_argument("--eager", action="store_true") parser.add_argument("--no-check", action="store_true") args = parser.parse_args() diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 29c7fc3d7..a85767634 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2305,3 +2305,96 @@ than the earlier `~3 us` snapshot, while M=128 still has a meaningful gap. The remaining GEMM2 difference is now more likely in the atomic epilogue form (`buffer_atomic_pk_add_bf16` vs aiter's `global_atomic_pk_add_bf16`) and/or the exact wait scheduling around the epilogue, rather than the A-load staging. + +## Small-M BM16 Stable Bench / Profiler Defaults + +`bench_small_bm16.py` now defaults to `repeat=5` on top of the long graph +timing inherited from `bench.py`: + +```text +warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 repeat=5 +``` + +This is intentionally slow. A repeat-3 run before the default was raised showed +why repeated captures are needed: most samples are tight, but individual graph +captures can still produce outliers. + +```text +/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 +``` + +| M | aiter | sort_aiter | gemm1fly_aiter | allfly | sort delta | GEMM1 delta | GEMM2 delta | cos all | +| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| 4 | 39.250 us | 40.235 us | 41.192 us | 42.650 us | +0.985 us | +0.957 us | +1.459 us | 0.999996483 | +| 8 | 58.433 us | 59.186 us | 59.749 us | 61.833 us | +0.753 us | +0.563 us | +2.083 us | 0.999998450 | +| 16 | 97.599 us | 97.425 us | 99.425 us | 100.636 us | -0.174 us | +2.000 us | +1.210 us | 0.999998927 | +| 32 | 146.151 us | 147.739 us | 150.295 us | 152.101 us | +1.588 us | +2.556 us | +1.806 us | 0.999998868 | +| 64 | 200.347 us | 204.580 us | 210.103 us | 210.362 us | +4.234 us | +5.522 us | +0.259 us | 0.999998212 | +| 128 | 251.843 us | 254.975 us | 261.167 us | 265.062 us | +3.132 us | +6.192 us | +3.895 us | 0.999999166 | + +The long graph bench is the end-to-end timing source, but per-stage deltas are +still sensitive to adjacent runner noise. `profile_small_bm16.py` was added to +profile the graph replay directly as three kernel bodies per logical iteration: + +```text +/opt/venv/bin/python profile_small_bm16.py -M 64,128 +``` + +The profiler default is deliberately shorter than the bench default +(`warmup=20 graph_iters=20 replays=5 repeat=5`). Longer profiler windows caused +ROCProfiler event drops for `M=128`; the shorter window keeps the event sequence +complete while still averaging 100 logical iterations per sample. + +## Small-M BM16 Sort v2 and GEMM2 v3 + +Sort changes: + +- `flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v2` +- Count phase now matches aiter's `int4` route-id load path. +- Place phase carries `token_id/topk_id` through the loop, avoiding per-route + division/modulo and matching aiter's `place_tokens` update pattern. + +GEMM2 change: + +- `flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v3` +- Replace `raw_ptr_buffer_atomic_fadd` with LLVM `atomicrmw fadd` on the global + pointer, which lowers to `global_atomic_pk_add_bf16`. +- ISA check: + +```text +v2: buffer_atomic_pk_add_bf16 +v3: global_atomic_pk_add_bf16 +aiter: global_atomic_pk_add_bf16 +``` + +Correctness sweep: + +```text +M=4 cos=0.999997497 max_abs=0.031250 +M=8 cos=0.999997735 max_abs=0.031250 +M=16 cos=0.999998033 max_abs=0.023438 +M=32 cos=0.999998331 max_abs=0.031250 +M=64 cos=0.999998808 max_abs=0.015625 +M=128 cos=0.999999166 max_abs=0.031250 +min_cos=0.999997497 +``` + +Latest graph-profiler median over 5 samples: + +| M | stage | aiter | allfly | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 4.945 us | 7.064 us | +2.118 us | +| 64 | GEMM1 | 134.625 us | 135.204 us | +0.579 us | +| 64 | GEMM2 | 66.341 us | 67.899 us | +1.558 us | +| 64 | total | 205.865 us | 210.209 us | +4.344 us | +| 128 | sort_zero_init | 6.339 us | 8.491 us | +2.152 us | +| 128 | GEMM1 | 164.029 us | 169.704 us | +5.674 us | +| 128 | GEMM2 | 81.698 us | 86.086 us | +4.388 us | +| 128 | total | 252.123 us | 264.297 us | +12.173 us | + +Interpretation: v2/v3 are correct and statically closer to aiter. The sort +changes only give small profiler movement, so the remaining sort gap is probably +not just scalar route counting or div/mod. The global-atomic GEMM2 form matches +aiter ISA, but the measured GEMM2 gap remains meaningful, especially at `M=128`. +The next work should look at GEMM1/GEMM2 resource scheduling and exact wait/DS +traffic rather than only the atomic opcode form. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 46e62a369..08e2b2610 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -42,6 +42,7 @@ from kimi_fp4_moe_16384_opt import ( _extract_global_ptr, _global_load_i32, + _global_load_i32_vec, _global_load_f32, _ptr_buffer_resource, _global_store_f32, @@ -202,7 +203,7 @@ def compile_kimi_mxfp4_sort_zero_init_bm16(): allocator.ptr = lds_scratch_offset + 16 * 4 @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v0", + name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v2", known_block_size=[threads, 1, 1], ) def sort_zero_init( @@ -272,12 +273,22 @@ def sort_zero_init( m_idx = ArithValue(i32_m).index_cast(T.index) total_pairs_idx = m_idx * arith.constant(TOPK, index=True) - count_loop = scf.ForOp(tx, total_pairs_idx, c_threads_idx) + # Supported BM16 M buckets are multiples of 4, so TOPK routes are + # 4-aligned. Match aiter's int4 count path instead of issuing one + # scalar global load per route. + count_loop = scf.ForOp( + tx * arith.constant(4, index=True), + total_pairs_idx, + c_threads_idx * arith.constant(4, index=True), + ) with ir.InsertionPoint(count_loop.body): idx = count_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = _global_load_i32(topk_ptr, idx_i32) - _lds_atomic_add_i32(count, eid, c1_i32) + ids = _global_load_i32_vec(topk_ptr, idx, 4) + for lane in range_constexpr(4): + eid = ArithValue( + vector.extract(ids, static_position=[lane], dynamic_position=[]) + ) + _lds_atomic_add_i32(count, eid, c1_i32) scf.YieldOp([]) gpu.barrier() @@ -330,24 +341,36 @@ def sort_zero_init( scf.YieldOp([]) gpu.barrier() - place_loop = scf.ForOp(tx, total_pairs_idx, c_threads_idx) + token_id_init = tx_i32 // c_topk + topk_id_init = tx_i32 % c_topk + place_loop = scf.ForOp( + tx, + total_pairs_idx, + c_threads_idx, + [arith._to_raw(token_id_init), arith._to_raw(topk_id_init)], + ) with ir.InsertionPoint(place_loop.body): idx = place_loop.induction_variable + token_id = ArithValue(place_loop.inner_iter_args[0]) + topk_id = ArithValue(place_loop.inner_iter_args[1]) idx_i32 = arith.index_cast(i32, idx) eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) eid_idx = eid.index_cast(T.index) pos = _lds_atomic_add_i32(counter, eid, c1_i32) start = ArithValue(memref.load(cumsum, [eid_idx])) sp = start + pos - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk packed_id = (token_id & c_token_mask) | (topk_id << c_topk_shift) route_w = _global_load_f32(weight_ptr, idx_i32) _global_store_i32(sorted_ptr, sp, packed_id) _global_store_i32(mindices_ptr, sp, token_id & c_token_mask) _global_store_f32(sorted_weight_ptr, sp, route_w) _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) + next_token_id = token_id + arith.constant(threads // TOPK, type=i32) + next_topk_id = topk_id + arith.constant(threads % TOPK, type=i32) + carry = arith.cmpi(CmpIPredicate.sge, next_topk_id, c_topk) + next_topk_id = arith.select(carry, next_topk_id - c_topk, next_topk_id) + next_token_id = arith.select(carry, next_token_id + c1_i32, next_token_id) + scf.YieldOp([arith._to_raw(next_token_id), arith._to_raw(next_topk_id)]) gpu.barrier() pad_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) @@ -1355,7 +1378,7 @@ def compile_kimi_mxfp4_gemm2_atomic_bm16(): lds_offset = allocator._align(allocator.ptr, 16) allocator.ptr = lds_offset + max(lds_a_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v2" + module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v3" @flyc.kernel(name=module_name) def gemm2_atomic( @@ -1384,7 +1407,7 @@ def gemm2_atomic( a_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, a_scale_nbytes) b_q_rsrc = _ptr_buffer_resource(arg_w, b_q_nbytes) b_scale_rsrc = _ptr_buffer_resource(arg_w_scale, b_scale_nbytes) - out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes) + out_ptr = _extract_global_ptr(arg_out) expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) sorted_token_ptr = _extract_global_ptr(arg_sorted_token_ids) @@ -1688,12 +1711,20 @@ def _then_body(): + arith.constant(s_idx * 64, type=i32) ) byte_off = elem_off * c2_i32 - rocdl.raw_ptr_buffer_atomic_fadd( - frag, - out_rsrc, - byte_off, - zero_i32, - zero_i32, + byte_off_i64 = arith.ExtSIOp(i64, arith._to_raw(byte_off)).result + atomic_ptr = buffer_ops.get_element_ptr( + out_ptr, + byte_offset=byte_off_i64, + elem_type=T.i8, + ) + frag_v = frag.ir_value() if hasattr(frag, "ir_value") else frag + llvm.AtomicRMWOp( + llvm.AtomicBinOp.fadd, + atomic_ptr, + frag_v, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, ) scf.YieldOp([]) diff --git a/profile_small_bm16.py b/profile_small_bm16.py new file mode 100644 index 000000000..39ffacfda --- /dev/null +++ b/profile_small_bm16.py @@ -0,0 +1,310 @@ +import argparse +import statistics +from pathlib import Path + +import bench_small_bm16 as small +import bench as b +from torch.profiler import ProfilerActivity, profile + + +STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") + + +def _is_cuda_event(evt) -> bool: + device_type = str(getattr(evt, "device_type", "")) + device_time = float(getattr(evt, "self_device_time_total", 0.0) or 0.0) + return device_time > 0.0 and "CUDA" in device_type.upper() + + +def _event_name(evt) -> str: + return getattr(evt, "name", None) or getattr(evt, "key", "") + + +def _capture_graph(fn, *, warmup: int, graph_iters: int): + side = b.torch.cuda.Stream() + side.wait_stream(b.torch.cuda.current_stream()) + with b.torch.cuda.stream(side): + for _ in range(warmup): + fn() + b.torch.cuda.current_stream().wait_stream(side) + b.torch.cuda.synchronize() + + graph = b.torch.cuda.CUDAGraph() + with b.torch.cuda.graph(graph): + for _ in range(graph_iters): + fn() + + graph.replay() + b.torch.cuda.synchronize() + return graph + + +def _profile_runner_graph( + fn, + *, + warmup: int, + graph_iters: int, + replays: int, + trace_path: Path | None, +): + graph = _capture_graph(fn, warmup=warmup, graph_iters=graph_iters) + + with profile( + activities=[ProfilerActivity.CUDA], + record_shapes=False, + acc_events=True, + ) as prof: + for _ in range(replays): + graph.replay() + b.torch.cuda.synchronize() + + if trace_path is not None: + trace_path.parent.mkdir(parents=True, exist_ok=True) + prof.export_chrome_trace(str(trace_path)) + + return [ + (_event_name(evt), float(evt.self_device_time_total)) + for evt in prof.events() + if _is_cuda_event(evt) + ] + + +def _ordered_rows(events, logical_iters: int): + if not events or logical_iters <= 0 or len(events) % logical_iters != 0: + return None + + per_iter = len(events) // logical_iters + chunks = [ + events[i * per_iter : (i + 1) * per_iter] + for i in range(logical_iters) + ] + total_us = sum(us for _, us in events) / logical_iters + rows = [] + for idx in range(per_iter): + names = [chunk[idx][0] for chunk in chunks] + times = [chunk[idx][1] for chunk in chunks] + kernel = ( + names[0] + if all(name == names[0] for name in names) + else "" + ) + rows.append( + { + "idx": idx, + "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", + "avg_us": sum(times) / len(times), + "kernel": kernel, + } + ) + return {"total_us": total_us, "kernel_calls_per_iter": per_iter, "rows": rows} + + +def _collect_reports( + m: int, + name: str, + fn, + *, + warmup: int, + graph_iters: int, + replays: int, + repeat: int, + max_retries: int, + expected_kernels: int | None, + trace_dir: Path | None, +): + logical_iters = graph_iters * replays + reports = [] + attempts = 0 + while len(reports) < repeat and attempts < repeat + max_retries: + attempts += 1 + trace_path = None + if trace_dir is not None: + trace_path = ( + trace_dir + / f"profile_small_bm16_M{m}_{name}_sample{len(reports) + 1}.json.gz" + ) + events = _profile_runner_graph( + fn, + warmup=warmup, + graph_iters=graph_iters, + replays=replays, + trace_path=trace_path, + ) + report = _ordered_rows(events, logical_iters) + if report is None: + print( + f"M={m} {name} sample attempt {attempts}: dropped " + f"(device_kernel_events={len(events)})", + flush=True, + ) + continue + if ( + expected_kernels is not None + and report["kernel_calls_per_iter"] != expected_kernels + ): + print( + f"M={m} {name} sample attempt {attempts}: dropped " + f"(kernels/iter={report['kernel_calls_per_iter']}, expected={expected_kernels})", + flush=True, + ) + continue + reports.append(report) + print( + f"M={m} {name} sample {len(reports)}/{repeat}: " + f"device_total_us_per_iter={report['total_us']:.3f}, " + f"kernels/iter={report['kernel_calls_per_iter']}", + flush=True, + ) + if len(reports) < repeat: + raise RuntimeError( + f"M={m} {name}: only collected {len(reports)} valid profiler " + f"samples after {attempts} attempts" + ) + return reports + + +def _median(values) -> float: + return float(statistics.median(values)) + + +def _summarize_reports(m: int, name: str, reports): + per_iter = reports[0]["kernel_calls_per_iter"] + total_us = _median([report["total_us"] for report in reports]) + rows = [] + for idx in range(per_iter): + values = [report["rows"][idx]["avg_us"] for report in reports] + kernels = [report["rows"][idx]["kernel"] for report in reports] + kernel = ( + kernels[0] + if all(item == kernels[0] for item in kernels) + else "" + ) + rows.append( + { + "idx": idx, + "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", + "avg_us": _median(values), + "min_us": min(values), + "max_us": max(values), + "kernel": kernel, + } + ) + + print() + print(f"== M={m} {name} median over {len(reports)} profiler samples ==") + print(f"device_total_us_per_iter={total_us:.3f}") + print(f"device_kernel_calls_per_iter={per_iter}") + print(f"{'idx':>3} {'stage':<14} {'median_us':>10} {'range_us':>17} kernel") + for row in rows: + range_text = f"{row['min_us']:.3f}..{row['max_us']:.3f}" + print( + f"{row['idx']:3d} {row['stage']:<14} {row['avg_us']:10.3f} " + f"{range_text:>17} {row['kernel']}" + ) + return {"m": m, "name": name, "total_us": total_us, "rows": rows} + + +def _print_diff(base, candidate): + if len(base["rows"]) != len(candidate["rows"]): + print( + f"M={candidate['m']} {candidate['name']}: " + "kernel count differs; diff skipped" + ) + return + print() + print(f"== M={candidate['m']} kernel diff: {candidate['name']} - {base['name']} ==") + print( + f"{'stage':<14} {'base_us':>10} {'cand_us':>10} " + f"{'diff_us':>10} {'diff_pct':>9}" + ) + for base_row, cand_row in zip(base["rows"], candidate["rows"]): + diff = cand_row["avg_us"] - base_row["avg_us"] + pct = 100.0 * diff / base_row["avg_us"] if base_row["avg_us"] else 0.0 + print( + f"{base_row['stage']:<14} {base_row['avg_us']:10.3f} " + f"{cand_row['avg_us']:10.3f} {diff:10.3f} {pct:8.1f}%" + ) + total_diff = candidate["total_us"] - base["total_us"] + total_pct = 100.0 * total_diff / base["total_us"] if base["total_us"] else 0.0 + print( + f"{'total':<14} {base['total_us']:10.3f} " + f"{candidate['total_us']:10.3f} {total_diff:10.3f} {total_pct:8.1f}%" + ) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-M", "--M-list", default="64,128") + parser.add_argument( + "--runners", + default="aiter,sort_aiter,gemm1fly_aiter,allfly", + help=f"comma-separated subset of: {','.join(small.RUNNER_ORDER)}", + ) + parser.add_argument("--warmup", type=int, default=20) + parser.add_argument("--graph-iters", type=int, default=20) + parser.add_argument("--replays", type=int, default=5) + parser.add_argument("--repeat", type=int, default=5) + parser.add_argument("--max-retries", type=int, default=80) + parser.add_argument("--expected-kernels", type=int, default=3) + parser.add_argument("--trace-dir", default=None) + args = parser.parse_args() + + if args.graph_iters <= 0 or args.replays <= 0 or args.repeat <= 0: + raise ValueError("--graph-iters, --replays, and --repeat must be positive") + if args.max_retries < 0: + raise ValueError("--max-retries must be non-negative") + + shape = b.KIMI + device = b.torch.device("cuda") + ms = [int(item) for item in args.M_list.split(",") if item.strip()] + requested = [item.strip() for item in args.runners.split(",") if item.strip()] + unknown = [item for item in requested if item not in small.RUNNER_ORDER] + if unknown: + raise ValueError(f"unknown runners: {', '.join(unknown)}") + trace_dir = Path(args.trace_dir) if args.trace_dir else None + expected_kernels = args.expected_kernels or None + + print(f"GPU: {b.torch.cuda.get_device_name(0)}") + print(f"Shape: NE={shape.NE} H={shape.H} INTER={shape.INTER} TOPK={shape.TOPK}") + print( + f"mode=graph warmup={args.warmup} graph_iters={args.graph_iters} " + f"replays={args.replays} logical_iters={args.graph_iters * args.replays} " + f"repeat={args.repeat}" + ) + print("Preparing weights...", flush=True) + weights = b.build_weights(shape, device) + + for m in ms: + hidden, topk_ids, topk_weight = b.build_inputs(shape, m, device) + runners = small._make_runners( + shape, + m, + hidden, + topk_ids, + topk_weight, + weights, + device, + ) + summaries = [] + for name in requested: + reports = _collect_reports( + m, + name, + runners[name], + warmup=args.warmup, + graph_iters=args.graph_iters, + replays=args.replays, + repeat=args.repeat, + max_retries=args.max_retries, + expected_kernels=expected_kernels, + trace_dir=trace_dir, + ) + summaries.append(_summarize_reports(m, name, reports)) + if summaries: + base = summaries[0] + for candidate in summaries[1:]: + _print_diff(base, candidate) + + +if __name__ == "__main__": + main() From 233a9b1a8544fd9e50adc2725cb8da1f2471818f Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 22:08:25 +0000 Subject: [PATCH 036/118] Stabilize BM16 graph profiling defaults --- bench.py | 17 ++--- bench_small_bm16.py | 20 ++++-- docs/kimi_fp4_moe_16384_opt_notes.md | 95 ++++++++++++++++++++++++++++ profile_small_bm16.py | 15 +++-- 4 files changed, 127 insertions(+), 20 deletions(-) diff --git a/bench.py b/bench.py index 11963ee17..4c0832413 100644 --- a/bench.py +++ b/bench.py @@ -26,14 +26,15 @@ class Shape: KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) -# Small-M MoE paths are tens of microseconds, so keep the default benchmark -# deliberately long: amortize event/replay overhead and report a median across -# many full-graph replays. Measurement time is less important than stability. -DEFAULT_WARMUP = 200 -DEFAULT_EAGER_ITERS = 5000 -DEFAULT_GRAPH_ITERS = 5000 -DEFAULT_GRAPH_MEASURE = 101 -DEFAULT_GRAPH_WARMUP_REPLAYS = 10 +# Accuracy-first benchmark defaults. Small-M MoE paths are tens of +# microseconds, so keep the graph window and replay sample count large enough +# to amortize event/replay overhead. Override these down only for quick smoke +# tests or very large-M sweeps. +DEFAULT_WARMUP = 500 +DEFAULT_EAGER_ITERS = 10000 +DEFAULT_GRAPH_ITERS = 10000 +DEFAULT_GRAPH_MEASURE = 201 +DEFAULT_GRAPH_WARMUP_REPLAYS = 20 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index a8bcd723d..2069aa727 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,7 +16,12 @@ "allfly", ) -DEFAULT_REPEAT = 5 +DEFAULT_SMALL_WARMUP = 1000 +DEFAULT_SMALL_EAGER_ITERS = 20000 +DEFAULT_SMALL_GRAPH_ITERS = 10000 +DEFAULT_SMALL_GRAPH_MEASURE = 201 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 30 +DEFAULT_REPEAT = 9 def _time_fn(fn, args): @@ -94,14 +99,14 @@ def allfly(): def main(): parser = argparse.ArgumentParser() parser.add_argument("-M", "--M-list", default="4,8,16,32,64,128") - parser.add_argument("--warmup", type=int, default=b.DEFAULT_WARMUP) - parser.add_argument("--iters", type=int, default=b.DEFAULT_EAGER_ITERS) - parser.add_argument("--graph-iters", type=int, default=b.DEFAULT_GRAPH_ITERS) - parser.add_argument("--measure", type=int, default=b.DEFAULT_GRAPH_MEASURE) + parser.add_argument("--warmup", type=int, default=DEFAULT_SMALL_WARMUP) + parser.add_argument("--iters", type=int, default=DEFAULT_SMALL_EAGER_ITERS) + parser.add_argument("--graph-iters", type=int, default=DEFAULT_SMALL_GRAPH_ITERS) + parser.add_argument("--measure", type=int, default=DEFAULT_SMALL_GRAPH_MEASURE) parser.add_argument( "--graph-warmup-replays", type=int, - default=b.DEFAULT_GRAPH_WARMUP_REPLAYS, + default=DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS, ) parser.add_argument("--repeat", type=int, default=DEFAULT_REPEAT) parser.add_argument("--eager", action="store_true") @@ -120,7 +125,8 @@ def main(): if args.eager else ( f"graph warmup={args.warmup} graph_iters={args.graph_iters} " - f"measure={args.measure} graph_warmup_replays={args.graph_warmup_replays}" + f"measure={args.measure} graph_warmup_replays={args.graph_warmup_replays} " + f"measured_calls_per_sample={args.graph_iters * args.measure}" ) ) print(f"GPU: {b.torch.cuda.get_device_name(0)}") diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index a85767634..c29ebf738 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2398,3 +2398,98 @@ not just scalar route counting or div/mod. The global-atomic GEMM2 form matches aiter ISA, but the measured GEMM2 gap remains meaningful, especially at `M=128`. The next work should look at GEMM1/GEMM2 resource scheduling and exact wait/DS traffic rather than only the atomic opcode form. + +## Accuracy-First BM16 Measurement Defaults + +The small-M BM16 timing scripts now default to longer graph measurements because +the kernels are short and launch/event overhead can otherwise move the conclusion: + +```text +bench.py shared defaults: + warmup=500 + eager_iters=10000 + graph_iters=10000 + measure=201 + graph_warmup_replays=20 + +bench_small_bm16.py defaults: + warmup=1000 + eager_iters=20000 + graph_iters=10000 + measure=201 + graph_warmup_replays=30 + repeat=9 + +profile_small_bm16.py defaults: + warmup=100 + graph_iters=64 + replays=16 + logical_iters_per_sample=1024 + repeat=9 + max_retries=200 +``` + +Use the default commands for final comparison: + +```text +/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 +/opt/venv/bin/python profile_small_bm16.py -M 64,128 +``` + +For smoke checks only, override these values explicitly with small numbers. + +## BM16 GEMM2 v4 Packed-Multiply Trial + +Tried replacing GEMM2 v3's epilogue route-weight multiply from two scalar +`v_mul_f32` instructions per bf16 pair to one inline-asm `v_pk_mul_f32`. + +Correctness against aiter remained within the accepted cosine band: + +```text +M=4 cos=0.999997199 max_abs=0.031250 +M=8 cos=0.999997437 max_abs=0.031250 +M=16 cos=0.999997318 max_abs=0.015625 +M=32 cos=0.999998748 max_abs=0.031250 +M=64 cos=0.999998152 max_abs=0.031250 +M=128 cos=0.999999046 max_abs=0.023438 +min_cos=0.999997199 +``` + +ISA moved closer to aiter: + +```text +v3: v_pk_mul_f32=0, v_mul_f32=16, s_waitcnt=17, VGPR=98, SGPR=34, spills=0 +v4: v_pk_mul_f32=8, v_mul_f32=0, s_waitcnt=19, VGPR=98, SGPR=34, spills=0 +``` + +Graph-profiler medians with the longer default profiler window: + +| M | stage | aiter | allfly v4 | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 4.907 us | 7.026 us | +2.119 us | +| 64 | GEMM1 | 130.719 us | 135.476 us | +4.757 us | +| 64 | GEMM2 | 65.340 us | 67.746 us | +2.405 us | +| 64 | total | 200.713 us | 210.226 us | +9.513 us | +| 128 | sort_zero_init | 6.248 us | 8.420 us | +2.172 us | +| 128 | GEMM1 | 163.551 us | 169.731 us | +6.180 us | +| 128 | GEMM2 | 81.690 us | 86.114 us | +4.423 us | +| 128 | total | 251.468 us | 264.259 us | +12.791 us | + +Conclusion: v4 is correct and statically closer, but does not produce a +stable runtime win over v3. The two extra `s_waitcnt` instructions appear to +erase the scalar-multiply reduction. Reverted to GEMM2 v3 as the current stable +performance baseline. + +Current v3 baseline with the longer profiler defaults (`warmup=100`, +`graph_iters=64`, `replays=16`, `repeat=9`): + +| M | stage | aiter | allfly v3 | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 4.953 us | 7.057 us | +2.103 us | +| 64 | GEMM1 | 135.529 us | 136.310 us | +0.781 us | +| 64 | GEMM2 | 65.772 us | 68.188 us | +2.417 us | +| 64 | total | 207.244 us | 211.560 us | +4.316 us | +| 128 | sort_zero_init | 6.273 us | 8.423 us | +2.150 us | +| 128 | GEMM1 | 164.476 us | 170.508 us | +6.032 us | +| 128 | GEMM2 | 82.186 us | 86.617 us | +4.431 us | +| 128 | total | 252.823 us | 265.521 us | +12.698 us | diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 39ffacfda..12922f5bf 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,6 +8,11 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") +DEFAULT_PROFILE_WARMUP = 100 +DEFAULT_PROFILE_GRAPH_ITERS = 64 +DEFAULT_PROFILE_REPLAYS = 16 +DEFAULT_PROFILE_REPEAT = 9 +DEFAULT_PROFILE_MAX_RETRIES = 200 def _is_cuda_event(evt) -> bool: @@ -240,11 +245,11 @@ def main(): default="aiter,sort_aiter,gemm1fly_aiter,allfly", help=f"comma-separated subset of: {','.join(small.RUNNER_ORDER)}", ) - parser.add_argument("--warmup", type=int, default=20) - parser.add_argument("--graph-iters", type=int, default=20) - parser.add_argument("--replays", type=int, default=5) - parser.add_argument("--repeat", type=int, default=5) - parser.add_argument("--max-retries", type=int, default=80) + parser.add_argument("--warmup", type=int, default=DEFAULT_PROFILE_WARMUP) + parser.add_argument("--graph-iters", type=int, default=DEFAULT_PROFILE_GRAPH_ITERS) + parser.add_argument("--replays", type=int, default=DEFAULT_PROFILE_REPLAYS) + parser.add_argument("--repeat", type=int, default=DEFAULT_PROFILE_REPEAT) + parser.add_argument("--max-retries", type=int, default=DEFAULT_PROFILE_MAX_RETRIES) parser.add_argument("--expected-kernels", type=int, default=3) parser.add_argument("--trace-dir", default=None) args = parser.parse_args() From c61b4a9ecebc492ecd9d45c4d314cb805c14ee27 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 22:15:34 +0000 Subject: [PATCH 037/118] Document BM16 sort DPP scan trials --- docs/kimi_fp4_moe_16384_opt_notes.md | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index c29ebf738..d247f7add 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2493,3 +2493,44 @@ Current v3 baseline with the longer profiler defaults (`warmup=100`, | 128 | GEMM1 | 164.476 us | 170.508 us | +6.032 us | | 128 | GEMM2 | 82.186 us | 86.617 us | +4.431 us | | 128 | total | 252.823 us | 265.521 us | +12.698 us | + +## BM16 Sort DPP Scan Trials + +The FlyDSL sort v2 cumsum used DPP row shifts plus two `ds_bpermute` steps for +the 16/32-lane carry. Aiter's `dpp_inclusive_scan_wave` uses pure DPP for the +whole wave: + +```text +row_shr 1/2/4/8, then update_dpp 0x142 row_mask=0xA, 0x143 row_mask=0xC +``` + +Two FlyDSL variants were tested: + +- Sort v3: exact aiter-style wave scan and wave-total scan. Static ISA removed + `ds_bpermute` and reduced `s_waitcnt` from 22 to 15, but added one extra + `s_barrier`. +- Sort v4: pure-DPP wave scan while keeping v2's single-barrier cross-wave LDS + accumulation. + +Both variants remained correct: + +```text +v3 min_cos=0.999997258 +v4 min_cos=0.999997020 +``` + +Profiler medians: + +| M | variant | sort | total | result | +| ---: | --- | ---: | ---: | --- | +| 64 | v2 baseline | 7.057 us | 211.560 us | baseline | +| 64 | v3 exact wave_totals | 6.869 us | 211.030 us | small sort win | +| 64 | v4 DPP + old cross-wave | 6.954 us | 213.828 us | noisy total regression | +| 128 | v2 baseline | 8.423 us | 265.521 us | baseline | +| 128 | v3 exact wave_totals | 8.917 us | 266.945 us | regression | +| 128 | v4 DPP + old cross-wave | 8.552 us | 267.231 us | regression | + +Conclusion: reducing `s_waitcnt` alone did not improve the stable small-M sort +path. The extra barrier in v3 is harmful at M=128, and v4 did not beat the v2 +baseline. Keep sort v2 for now; the remaining sort gap likely needs ATT/Pmc +analysis rather than scan-shape tweaks. From 16ca792e206c132329fe549afee12f7541fc2b1f Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 22:30:38 +0000 Subject: [PATCH 038/118] Increase BM16 graph measurement stability --- bench_small_bm16.py | 15 +++++----- docs/kimi_fp4_moe_16384_opt_notes.md | 33 +++++++++++--------- profile_small_bm16.py | 45 ++++++++++++++++++---------- 3 files changed, 56 insertions(+), 37 deletions(-) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 2069aa727..28b9b1b12 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,12 +16,12 @@ "allfly", ) -DEFAULT_SMALL_WARMUP = 1000 -DEFAULT_SMALL_EAGER_ITERS = 20000 -DEFAULT_SMALL_GRAPH_ITERS = 10000 -DEFAULT_SMALL_GRAPH_MEASURE = 201 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 30 -DEFAULT_REPEAT = 9 +DEFAULT_SMALL_WARMUP = 2000 +DEFAULT_SMALL_EAGER_ITERS = 50000 +DEFAULT_SMALL_GRAPH_ITERS = 20000 +DEFAULT_SMALL_GRAPH_MEASURE = 301 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 80 +DEFAULT_REPEAT = 11 def _time_fn(fn, args): @@ -126,7 +126,8 @@ def main(): else ( f"graph warmup={args.warmup} graph_iters={args.graph_iters} " f"measure={args.measure} graph_warmup_replays={args.graph_warmup_replays} " - f"measured_calls_per_sample={args.graph_iters * args.measure}" + f"measured_calls_per_sample={args.graph_iters * args.measure} " + f"measured_calls_per_runner={args.graph_iters * args.measure * args.repeat}" ) ) print(f"GPU: {b.torch.cuda.get_device_name(0)}") diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index d247f7add..428b57d49 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2413,20 +2413,20 @@ bench.py shared defaults: graph_warmup_replays=20 bench_small_bm16.py defaults: - warmup=1000 - eager_iters=20000 - graph_iters=10000 - measure=201 - graph_warmup_replays=30 - repeat=9 + warmup=2000 + eager_iters=50000 + graph_iters=20000 + measure=301 + graph_warmup_replays=80 + repeat=11 profile_small_bm16.py defaults: - warmup=100 - graph_iters=64 - replays=16 - logical_iters_per_sample=1024 - repeat=9 - max_retries=200 + warmup=300 + graph_iters=128 + replays=4 + logical_iters_per_sample=512 + repeat=41 + max_retries=500 ``` Use the default commands for final comparison: @@ -2437,6 +2437,11 @@ Use the default commands for final comparison: ``` For smoke checks only, override these values explicitly with small numbers. +The defaults are intentionally slow: for BM16 the end-to-end bench measures +`20000 * 301` graph calls per sample. The profiler uses `128 * 4` logical graph +iterations per sample and `repeat=41`; larger per-sample profiler windows were +observed to drop CUDA/HIP kernel events in `torch.profiler`, so profiler +stability is improved by more samples rather than unbounded events per sample. ## BM16 GEMM2 v4 Packed-Multiply Trial @@ -2480,8 +2485,8 @@ stable runtime win over v3. The two extra `s_waitcnt` instructions appear to erase the scalar-multiply reduction. Reverted to GEMM2 v3 as the current stable performance baseline. -Current v3 baseline with the longer profiler defaults (`warmup=100`, -`graph_iters=64`, `replays=16`, `repeat=9`): +Previous v3 baseline collected before the accuracy-first profiler defaults were +raised (`warmup=100`, `graph_iters=64`, `replays=16`, `repeat=9`): | M | stage | aiter | allfly v3 | delta | | ---: | --- | ---: | ---: | ---: | diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 12922f5bf..ca61bfa50 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,11 +8,11 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -DEFAULT_PROFILE_WARMUP = 100 -DEFAULT_PROFILE_GRAPH_ITERS = 64 -DEFAULT_PROFILE_REPLAYS = 16 -DEFAULT_PROFILE_REPEAT = 9 -DEFAULT_PROFILE_MAX_RETRIES = 200 +DEFAULT_PROFILE_WARMUP = 300 +DEFAULT_PROFILE_GRAPH_ITERS = 128 +DEFAULT_PROFILE_REPLAYS = 4 +DEFAULT_PROFILE_REPEAT = 41 +DEFAULT_PROFILE_MAX_RETRIES = 500 def _is_cuda_event(evt) -> bool: @@ -120,6 +120,7 @@ def _collect_reports( logical_iters = graph_iters * replays reports = [] attempts = 0 + dropped = 0 while len(reports) < repeat and attempts < repeat + max_retries: attempts += 1 trace_path = None @@ -137,21 +138,26 @@ def _collect_reports( ) report = _ordered_rows(events, logical_iters) if report is None: - print( - f"M={m} {name} sample attempt {attempts}: dropped " - f"(device_kernel_events={len(events)})", - flush=True, - ) + dropped += 1 + if dropped <= 3 or dropped % 25 == 0: + print( + f"M={m} {name}: dropped profiler sample {dropped} " + f"(attempt={attempts}, device_kernel_events={len(events)})", + flush=True, + ) continue if ( expected_kernels is not None and report["kernel_calls_per_iter"] != expected_kernels ): - print( - f"M={m} {name} sample attempt {attempts}: dropped " - f"(kernels/iter={report['kernel_calls_per_iter']}, expected={expected_kernels})", - flush=True, - ) + dropped += 1 + if dropped <= 3 or dropped % 25 == 0: + print( + f"M={m} {name}: dropped profiler sample {dropped} " + f"(attempt={attempts}, kernels/iter={report['kernel_calls_per_iter']}, " + f"expected={expected_kernels})", + flush=True, + ) continue reports.append(report) print( @@ -165,6 +171,12 @@ def _collect_reports( f"M={m} {name}: only collected {len(reports)} valid profiler " f"samples after {attempts} attempts" ) + if dropped: + print( + f"M={m} {name}: accepted {len(reports)} samples after {attempts} " + f"attempts; dropped {dropped} incomplete profiler samples", + flush=True, + ) return reports @@ -274,7 +286,8 @@ def main(): print( f"mode=graph warmup={args.warmup} graph_iters={args.graph_iters} " f"replays={args.replays} logical_iters={args.graph_iters * args.replays} " - f"repeat={args.repeat}" + f"repeat={args.repeat} " + f"logical_iters_per_runner={args.graph_iters * args.replays * args.repeat}" ) print("Preparing weights...", flush=True) weights = b.build_weights(shape, device) From e2fb3dd95ae363c9e4a3a75ed883b73f2e082154 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 22:48:23 +0000 Subject: [PATCH 039/118] Stabilize BM16 measurements and GEMM1 epilogue --- bench.py | 63 +++++++++----- bench_small_bm16.py | 18 ++-- docs/kimi_fp4_moe_16384_opt_notes.md | 123 +++++++++++++++++++++++---- kimi_fp4_moe_small_bm16.py | 7 +- profile_small_bm16.py | 10 +-- 5 files changed, 170 insertions(+), 51 deletions(-) diff --git a/bench.py b/bench.py index 4c0832413..7981084e5 100644 --- a/bench.py +++ b/bench.py @@ -1,4 +1,5 @@ import argparse +import statistics import time from dataclasses import dataclass import os @@ -30,11 +31,12 @@ class Shape: # microseconds, so keep the graph window and replay sample count large enough # to amortize event/replay overhead. Override these down only for quick smoke # tests or very large-M sweeps. -DEFAULT_WARMUP = 500 -DEFAULT_EAGER_ITERS = 10000 -DEFAULT_GRAPH_ITERS = 10000 -DEFAULT_GRAPH_MEASURE = 201 -DEFAULT_GRAPH_WARMUP_REPLAYS = 20 +DEFAULT_WARMUP = 2000 +DEFAULT_EAGER_ITERS = 50000 +DEFAULT_GRAPH_ITERS = 20000 +DEFAULT_GRAPH_MEASURE = 301 +DEFAULT_GRAPH_WARMUP_REPLAYS = 80 +DEFAULT_REPEAT = 5 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) @@ -273,35 +275,56 @@ def main(): ap.add_argument("--graph-warmup-replays", type=int, default=DEFAULT_GRAPH_WARMUP_REPLAYS, help="full-graph replays before CUDA-event measurement") + ap.add_argument("--repeat", type=int, default=DEFAULT_REPEAT, + help="independent timing samples; median is reported") ap.add_argument("--ref-max-M", type=int, default=16385, help="run torch_moe ground-truth ref for M<=this (slow on large " "M since torch_moe loops over experts in python).") args = ap.parse_args() + if args.repeat <= 0: + raise ValueError("--repeat must be positive") device = torch.device("cuda") shape = KIMI Ms = [int(x) for x in args.M_list.split(",")] def time_fn(fn): - if args.cudagraph: - return bench_cudagraph( - fn, - warmup=args.warmup, - iters=args.graph_iters, - measure=args.measure, - graph_warmup_replays=args.graph_warmup_replays, - ) - return bench(fn, warmup=args.warmup, iters=args.iters) + samples = [] + for _ in range(args.repeat): + if args.cudagraph: + samples.append( + bench_cudagraph( + fn, + warmup=args.warmup, + iters=args.graph_iters, + measure=args.measure, + graph_warmup_replays=args.graph_warmup_replays, + ) + ) + else: + samples.append(bench(fn, warmup=args.warmup, iters=args.iters)) + return float(statistics.median(samples)), samples + + def sample_text(samples): + if len(samples) <= 1: + return "" + body = ",".join(f"{sample:.1f}" for sample in samples) + return f" samples_us={body} range_us={min(samples):.1f}..{max(samples):.1f}" timing_mode = ( f"cudagraph replay ({args.graph_iters}/graph, " f"warmup={args.warmup}, measure={args.measure}, " - f"graph_warmup_replays={args.graph_warmup_replays})" + f"graph_warmup_replays={args.graph_warmup_replays}, " + f"measured_calls_per_sample={args.graph_iters * args.measure}, " + f"measured_calls_per_backend={args.graph_iters * args.measure * args.repeat})" if args.cudagraph - else f"eager perf_counter (warmup={args.warmup}, iters={args.iters})" + else ( + f"eager perf_counter (warmup={args.warmup}, iters={args.iters}, " + f"measured_calls_per_backend={args.iters * args.repeat})" + ) ) print(f"GPU: {torch.cuda.get_device_name(0)}") - print(f"Timing: {timing_mode}") + print(f"Timing: {timing_mode} repeat={args.repeat}") print(f"Shape Kimi-K2.5 TP=4: NE={shape.NE} H={shape.H} " f"INTER={shape.INTER} TOPK={shape.TOPK}") print("Preparing weights (once)...", flush=True) @@ -360,14 +383,16 @@ def time_fn(fn): fly_ref_cos = (cosine(out.float(), ref_out) if finite and ref_out is not None else float("nan")) print(f"bench flydsl, M={M} mx⋅fly={fly_mx_cos:.4f} fly⋅ref={fly_ref_cos:.4f}") - fly_us = time_fn(f_fn) + fly_us, fly_samples = time_fn(f_fn) + print(f"flydsl M={M} median_us={fly_us:.1f}{sample_text(fly_samples)}") fly_ok = True except Exception as e: print(f" [flydsl M={M}] ERROR: {type(e).__name__}: {e}", flush=True) try: print(f"bench mxfp4, M={M} bm={mx_bm} mx⋅ref={mx_ref_cos:.4f}") - mx_us = time_fn(mx_fn) + mx_us, mx_samples = time_fn(mx_fn) + print(f"mxfp4 M={M} median_us={mx_us:.1f}{sample_text(mx_samples)}") except Exception as e: print(f"{M:>6} | mxfp4 timing ERROR: {type(e).__name__}: {e} — skipping") continue diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 28b9b1b12..475e99f0b 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,12 +16,12 @@ "allfly", ) -DEFAULT_SMALL_WARMUP = 2000 -DEFAULT_SMALL_EAGER_ITERS = 50000 -DEFAULT_SMALL_GRAPH_ITERS = 20000 -DEFAULT_SMALL_GRAPH_MEASURE = 301 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 80 -DEFAULT_REPEAT = 11 +DEFAULT_SMALL_WARMUP = 5000 +DEFAULT_SMALL_EAGER_ITERS = 100000 +DEFAULT_SMALL_GRAPH_ITERS = 32768 +DEFAULT_SMALL_GRAPH_MEASURE = 501 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 160 +DEFAULT_REPEAT = 21 def _time_fn(fn, args): @@ -46,7 +46,11 @@ def _fmt_samples(samples): if len(samples) <= 1: return "" body = ",".join(f"{sample:.3f}" for sample in samples) - return f" samples={body}" + return ( + f" samples={body}" + f" range_us={min(samples):.3f}..{max(samples):.3f}" + f" stdev_us={statistics.stdev(samples):.3f}" + ) def _make_runners(shape, m, hidden, topk_ids, topk_weight, weights, device): diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 428b57d49..3a9825f1b 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2406,27 +2406,28 @@ the kernels are short and launch/event overhead can otherwise move the conclusio ```text bench.py shared defaults: - warmup=500 - eager_iters=10000 - graph_iters=10000 - measure=201 - graph_warmup_replays=20 - -bench_small_bm16.py defaults: warmup=2000 eager_iters=50000 graph_iters=20000 measure=301 graph_warmup_replays=80 - repeat=11 + repeat=5 + +bench_small_bm16.py defaults: + warmup=5000 + eager_iters=100000 + graph_iters=32768 + measure=501 + graph_warmup_replays=160 + repeat=21 profile_small_bm16.py defaults: - warmup=300 - graph_iters=128 - replays=4 - logical_iters_per_sample=512 - repeat=41 - max_retries=500 + warmup=1000 + graph_iters=512 + replays=8 + logical_iters_per_sample=4096 + repeat=61 + max_retries=1000 ``` Use the default commands for final comparison: @@ -2438,10 +2439,15 @@ Use the default commands for final comparison: For smoke checks only, override these values explicitly with small numbers. The defaults are intentionally slow: for BM16 the end-to-end bench measures -`20000 * 301` graph calls per sample. The profiler uses `128 * 4` logical graph -iterations per sample and `repeat=41`; larger per-sample profiler windows were -observed to drop CUDA/HIP kernel events in `torch.profiler`, so profiler -stability is improved by more samples rather than unbounded events per sample. +`32768 * 501` graph calls per sample and reports 21 independent samples. The +profiler uses `512 * 8` logical graph iterations per sample and `repeat=61`. +This keeps the profiler sample window bounded enough to avoid the worst event +drop behavior, while still giving many more graph-replay kernel observations for +small kernels. + +`bench.py` now also has a `--repeat` loop and prints the per-backend timing +samples. This makes the root sweep usable for final conclusions without relying +on a single CUDA-event median. ## BM16 GEMM2 v4 Packed-Multiply Trial @@ -2539,3 +2545,84 @@ Conclusion: reducing `s_waitcnt` alone did not improve the stable small-M sort path. The extra barrier in v3 is harmful at M=128, and v4 did not beat the v2 baseline. Keep sort v2 for now; the remaining sort gap likely needs ATT/Pmc analysis rather than scan-shape tweaks. + +## Small-M BM16 GEMM2 ATT Waitcnt Trial + +Analyzed the existing FlyDSL GEMM2 v3 ATT trace with +`.claude/skills/kernel-trace-analysis/scripts/hotspot_analyzer.py`. The trace is +dominated by VMEM waits rather than MFMA issue: + +```text +VMEM-wait ~5.01M stall cycles, 50.0% +VMEM-load ~3.75M stall cycles, 37.4% +barrier ~0.47M stall cycles, 4.7% +LDS/SMEM-wait ~0.31M stall cycles, 3.1% +MFMA/FMA ~0.08M stall cycles, 0.8% +``` + +Largest source-level hotspots: + +| rank | source | dominant issue | +| ---: | --- | --- | +| 1 | GEMM2 epilogue sorted-token wait (`line ~1672`) | `s_waitcnt vmcnt(0)` | +| 2 | B tile loads (`mfma_preshuffle_pipeline.py:83`) | `buffer_load_dwordx4` | +| 3 | GEMM2 precompute wait (`line ~1637`) | full `s_waitcnt` before barrier | +| 4 | GEMM2 epilogue weight/LDS wait (`line ~1704`) | `s_waitcnt vmcnt(0) lgkmcnt(0)` | + +Two partial-wait experiments were tried and rejected: + +- v5/v6: replace the precompute full `s_waitcnt(0); s_barrier` with partial + waits around `vmcnt(23/22)` and `vmcnt(20/19)`. Both produced finite outputs + but poor cosine, so the waits were not strong enough for the current FlyDSL + instruction ordering. +- v7: add aiter-style per-MFMA descending `vmcnt` waits while keeping the current + FlyDSL compute loop shape. This also failed correctness. The aiter schedule + interleaves LDS reads, barriers, and MFMA in a different order; the wait + counts cannot be transplanted without matching that order. + +Keep GEMM2 v3 for now. A correct GEMM2 waitcnt optimization needs a full +schedule rewrite to mirror aiter's LDS-read/MFMA sequence, not only local +wait-count edits. + +## Small-M BM16 GEMM1 v8 Epilogue Amax Cleanup + +Changed GEMM1 requant epilogue to match aiter's local amax pattern: initialize +`local_max` from `fabs(result[0])` and reduce only results 1..7, instead of +starting at zero and doing eight `fmax` operations. This is a +semantics-preserving cleanup of the epilogue dependency chain. + +Correctness against aiter remains in the accepted band: + +```text +M=4 cos=0.999996305 max_abs=0.015625 +M=8 cos=0.999998391 max_abs=0.015625 +M=16 cos=0.999998331 max_abs=0.031250 +M=32 cos=0.999998212 max_abs=0.031250 +M=64 cos=0.999998927 max_abs=0.023438 +M=128 cos=0.999998927 max_abs=0.031250 +min_cos=0.999996305 +``` + +Graph-profiler check (`warmup=300`, `graph_iters=128`, `replays=4`, +`repeat=5`) showed a small positive movement: + +| M | stage | aiter | allfly v8 | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 4.899 us | 7.091 us | +2.191 us | +| 64 | GEMM1 | 130.791 us | 135.658 us | +4.868 us | +| 64 | GEMM2 | 65.285 us | 67.807 us | +2.521 us | +| 64 | total | 200.889 us | 210.606 us | +9.717 us | +| 128 | sort_zero_init | 6.275 us | 8.453 us | +2.178 us | +| 128 | GEMM1 | 163.757 us | 169.965 us | +6.208 us | +| 128 | GEMM2 | 81.784 us | 86.257 us | +4.473 us | +| 128 | total | 251.823 us | 264.641 us | +12.818 us | + +An allfly-only repeat-21 check had noisy M=64 outliers but stable medians: + +| M | sort | GEMM1 v8 | GEMM2 | total | +| ---: | ---: | ---: | ---: | ---: | +| 64 | 7.229 us | 135.824 us | 67.880 us | 210.958 us | +| 128 | 8.652 us | 170.064 us | 86.302 us | 265.016 us | + +The improvement is small, but the code is cleaner and statically closer to the +aiter epilogue, so keep GEMM1 v8. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 08e2b2610..ba1ba4f19 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -577,7 +577,7 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v7" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v8" @flyc.kernel(name=module_name) def gemm1_inline( @@ -1170,7 +1170,10 @@ def _then_body(): res = _silu_mul(gate_v, up_v) result_vals.append(res) abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) + if const_expr(e == 0): + local_max = abs_v + else: + local_max = _fmax_num(local_max, abs_v) local_max = _fmax_dpp_xor1(local_max) local_max = _fmax_dpp_xor2(local_max) diff --git a/profile_small_bm16.py b/profile_small_bm16.py index ca61bfa50..86a7a6971 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,11 +8,11 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -DEFAULT_PROFILE_WARMUP = 300 -DEFAULT_PROFILE_GRAPH_ITERS = 128 -DEFAULT_PROFILE_REPLAYS = 4 -DEFAULT_PROFILE_REPEAT = 41 -DEFAULT_PROFILE_MAX_RETRIES = 500 +DEFAULT_PROFILE_WARMUP = 1000 +DEFAULT_PROFILE_GRAPH_ITERS = 512 +DEFAULT_PROFILE_REPLAYS = 8 +DEFAULT_PROFILE_REPEAT = 61 +DEFAULT_PROFILE_MAX_RETRIES = 1000 def _is_cuda_event(evt) -> bool: From 1d2afab8e54f3f1f3ee3ed34e483415c50c00c70 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 23:04:16 +0000 Subject: [PATCH 040/118] Use bounded BM16 graph profiler window --- docs/kimi_fp4_moe_16384_opt_notes.md | 70 ++++++++++++++++++++++++---- profile_small_bm16.py | 8 ++-- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 3a9825f1b..441cdc006 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2423,11 +2423,11 @@ bench_small_bm16.py defaults: profile_small_bm16.py defaults: warmup=1000 - graph_iters=512 - replays=8 - logical_iters_per_sample=4096 - repeat=61 - max_retries=1000 + graph_iters=64 + replays=2 + logical_iters_per_sample=128 + repeat=101 + max_retries=1500 ``` Use the default commands for final comparison: @@ -2440,15 +2440,22 @@ Use the default commands for final comparison: For smoke checks only, override these values explicitly with small numbers. The defaults are intentionally slow: for BM16 the end-to-end bench measures `32768 * 501` graph calls per sample and reports 21 independent samples. The -profiler uses `512 * 8` logical graph iterations per sample and `repeat=61`. -This keeps the profiler sample window bounded enough to avoid the worst event -drop behavior, while still giving many more graph-replay kernel observations for +profiler uses `64 * 2` logical graph iterations per sample and `repeat=101`. +This keeps the profiler sample window in the previously stable event-capture +range, while still increasing the total number of graph-replay observations for small kernels. `bench.py` now also has a `--repeat` loop and prints the per-backend timing samples. This makes the root sweep usable for final conclusions without relying on a single CUDA-event median. +Two larger `profile_small_bm16.py` windows were rejected for default use: +`graph_iters=512, replays=8` repeatedly captured incomplete CUDA event streams +(`~10.8k` kernel events instead of the expected `12.3k` for M=64 aiter), and +`graph_iters=128, replays=4` again had near-zero acceptance in this environment. +`graph_iters=64, replays=2` accepted complete 3-kernel/iteration samples +reliably in the spot check, while `64,4` already showed substantial drops. + ## BM16 GEMM2 v4 Packed-Multiply Trial Tried replacing GEMM2 v3's epilogue route-weight multiply from two scalar @@ -2626,3 +2633,50 @@ An allfly-only repeat-21 check had noisy M=64 outliers but stable medians: The improvement is small, but the code is cleaner and statically closer to the aiter epilogue, so keep GEMM1 v8. + +## Small-M BM16 Stable Profile Window and Rejected Follow-ups + +The default `profile_small_bm16.py` window was adjusted after testing larger +graph-replay samples. `graph_iters=512, replays=8` and then +`graph_iters=128, replays=4` repeatedly produced incomplete torch-profiler CUDA +event streams for M=64 aiter. The retained default is a bounded window with +more independent samples: + +```text +warmup=1000 +graph_iters=64 +replays=2 +repeat=101 +max_retries=1500 +``` + +With a development repeat of 21, the current v8/v3 all-FlyDSL baseline remains: + +| M | stage | aiter | allfly | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 4.912 us | 7.044 us | +2.132 us | +| 64 | GEMM1 v8 | 130.852 us | 135.523 us | +4.672 us | +| 64 | GEMM2 v3 | 65.364 us | 67.740 us | +2.376 us | +| 64 | total | 200.929 us | 210.284 us | +9.355 us | +| 128 | sort_zero_init | 6.291 us | 8.473 us | +2.183 us | +| 128 | GEMM1 v8 | 163.787 us | 169.849 us | +6.062 us | +| 128 | GEMM2 v3 | 81.691 us | 86.111 us | +4.420 us | +| 128 | total | 251.759 us | 264.474 us | +12.715 us | + +Rejected follow-ups: + +- GEMM1 early expert-load guard: moving the `sorted_expert_ids` load behind the + `cumsum`/block-valid check was correct but did not improve performance. M=64 + GEMM1 measured `135.695 us`; M=128 measured `170.001 us`, both slightly worse + than v8. +- GEMM2 LDS-value preload epilogue: reading all four bf16-pair LDS values before + issuing atomics was correct but did not improve performance. M=64 GEMM2 + measured `67.868 us`; M=128 measured `86.163 us`, effectively equal or worse + than v3. +- GEMM1 1D-grid remap: changing from `(num_n_blocks, m_blocks)` grid to aiter's + one-dimensional `pid -> (m_block,n_block)` mapping was correct but slower. + M=64 GEMM1 measured `136.435 us`; M=128 measured `170.354 us`. + +Keep GEMM1 v8 and GEMM2 v3 as the stable BM16 kernel baselines. The next +useful GEMM1 work likely needs deeper schedule/resource changes rather than +small launch or epilogue reshaping. diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 86a7a6971..21b62361b 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -9,10 +9,10 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") DEFAULT_PROFILE_WARMUP = 1000 -DEFAULT_PROFILE_GRAPH_ITERS = 512 -DEFAULT_PROFILE_REPLAYS = 8 -DEFAULT_PROFILE_REPEAT = 61 -DEFAULT_PROFILE_MAX_RETRIES = 1000 +DEFAULT_PROFILE_GRAPH_ITERS = 64 +DEFAULT_PROFILE_REPLAYS = 2 +DEFAULT_PROFILE_REPEAT = 101 +DEFAULT_PROFILE_MAX_RETRIES = 1500 def _is_cuda_event(evt) -> bool: From 3834bc3110dc40a2b21ddcf850569840e71ee94b Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 23:11:54 +0000 Subject: [PATCH 041/118] Increase graph benchmark sampling --- bench.py | 26 +++++++++++-------- bench_small_bm16.py | 12 ++++----- docs/kimi_fp4_moe_16384_opt_notes.md | 39 ++++++++++++++++------------ profile_small_bm16.py | 8 +++--- 4 files changed, 48 insertions(+), 37 deletions(-) diff --git a/bench.py b/bench.py index 7981084e5..9bdfb09b1 100644 --- a/bench.py +++ b/bench.py @@ -27,16 +27,16 @@ class Shape: KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) -# Accuracy-first benchmark defaults. Small-M MoE paths are tens of -# microseconds, so keep the graph window and replay sample count large enough -# to amortize event/replay overhead. Override these down only for quick smoke -# tests or very large-M sweeps. -DEFAULT_WARMUP = 2000 -DEFAULT_EAGER_ITERS = 50000 -DEFAULT_GRAPH_ITERS = 20000 -DEFAULT_GRAPH_MEASURE = 301 -DEFAULT_GRAPH_WARMUP_REPLAYS = 80 -DEFAULT_REPEAT = 5 +# Accuracy-first benchmark defaults. Small-M MoE paths are short enough that +# CUDA-event and graph-replay noise can move the conclusion, so default to many +# captured calls, replay measurements, and independent graph captures. Override +# these down only for quick smoke tests or exploratory large-M sweeps. +DEFAULT_WARMUP = 5000 +DEFAULT_EAGER_ITERS = 100000 +DEFAULT_GRAPH_ITERS = 32768 +DEFAULT_GRAPH_MEASURE = 701 +DEFAULT_GRAPH_WARMUP_REPLAYS = 160 +DEFAULT_REPEAT = 11 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) @@ -308,7 +308,11 @@ def sample_text(samples): if len(samples) <= 1: return "" body = ",".join(f"{sample:.1f}" for sample in samples) - return f" samples_us={body} range_us={min(samples):.1f}..{max(samples):.1f}" + return ( + f" samples_us={body}" + f" range_us={min(samples):.1f}..{max(samples):.1f}" + f" stdev_us={statistics.stdev(samples):.1f}" + ) timing_mode = ( f"cudagraph replay ({args.graph_iters}/graph, " diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 475e99f0b..253983d0d 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,12 +16,12 @@ "allfly", ) -DEFAULT_SMALL_WARMUP = 5000 -DEFAULT_SMALL_EAGER_ITERS = 100000 -DEFAULT_SMALL_GRAPH_ITERS = 32768 -DEFAULT_SMALL_GRAPH_MEASURE = 501 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 160 -DEFAULT_REPEAT = 21 +DEFAULT_SMALL_WARMUP = 10000 +DEFAULT_SMALL_EAGER_ITERS = 200000 +DEFAULT_SMALL_GRAPH_ITERS = 49152 +DEFAULT_SMALL_GRAPH_MEASURE = 701 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 240 +DEFAULT_REPEAT = 31 def _time_fn(fn, args): diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 441cdc006..c5528c3c8 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2406,28 +2406,28 @@ the kernels are short and launch/event overhead can otherwise move the conclusio ```text bench.py shared defaults: - warmup=2000 - eager_iters=50000 - graph_iters=20000 - measure=301 - graph_warmup_replays=80 - repeat=5 - -bench_small_bm16.py defaults: warmup=5000 eager_iters=100000 graph_iters=32768 - measure=501 + measure=701 graph_warmup_replays=160 - repeat=21 + repeat=11 + +bench_small_bm16.py defaults: + warmup=10000 + eager_iters=200000 + graph_iters=49152 + measure=701 + graph_warmup_replays=240 + repeat=31 profile_small_bm16.py defaults: - warmup=1000 + warmup=2000 graph_iters=64 replays=2 logical_iters_per_sample=128 - repeat=101 - max_retries=1500 + repeat=201 + max_retries=4000 ``` Use the default commands for final comparison: @@ -2439,11 +2439,11 @@ Use the default commands for final comparison: For smoke checks only, override these values explicitly with small numbers. The defaults are intentionally slow: for BM16 the end-to-end bench measures -`32768 * 501` graph calls per sample and reports 21 independent samples. The -profiler uses `64 * 2` logical graph iterations per sample and `repeat=101`. +`49152 * 701` graph calls per sample and reports 31 independent graph captures. +The profiler uses `64 * 2` logical graph iterations per sample and `repeat=201`. This keeps the profiler sample window in the previously stable event-capture -range, while still increasing the total number of graph-replay observations for -small kernels. +range, while increasing the total number of graph-replay observations for small +kernels. `bench.py` now also has a `--repeat` loop and prints the per-backend timing samples. This makes the root sweep usable for final conclusions without relying @@ -2650,6 +2650,11 @@ repeat=101 max_retries=1500 ``` +The retained window was later kept at `graph_iters=64, replays=2`, but the +default was raised to `warmup=2000`, `repeat=201`, and `max_retries=4000` so +the small-kernel profiler conclusions use more accepted graph samples without +reintroducing incomplete event streams from a larger single profiler window. + With a development repeat of 21, the current v8/v3 all-FlyDSL baseline remains: | M | stage | aiter | allfly | delta | diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 21b62361b..8cae40e40 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,11 +8,13 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -DEFAULT_PROFILE_WARMUP = 1000 +# Keep the profiler graph window bounded: larger single profiler windows have +# dropped CUDA kernel events on this stack. Use many accepted samples instead. +DEFAULT_PROFILE_WARMUP = 2000 DEFAULT_PROFILE_GRAPH_ITERS = 64 DEFAULT_PROFILE_REPLAYS = 2 -DEFAULT_PROFILE_REPEAT = 101 -DEFAULT_PROFILE_MAX_RETRIES = 1500 +DEFAULT_PROFILE_REPEAT = 201 +DEFAULT_PROFILE_MAX_RETRIES = 4000 def _is_cuda_event(evt) -> bool: From 7d790e71612cb78f5051953e114ed07849ebcbd2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 23:28:22 +0000 Subject: [PATCH 042/118] Hoist BM16 GEMM1 A LDS reads --- docs/kimi_fp4_moe_16384_opt_notes.md | 53 ++++++++++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 19 ++++++---- 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index c5528c3c8..38f77ff87 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2685,3 +2685,56 @@ Rejected follow-ups: Keep GEMM1 v8 and GEMM2 v3 as the stable BM16 kernel baselines. The next useful GEMM1 work likely needs deeper schedule/resource changes rather than small launch or epilogue reshaping. + +## BM16 GEMM1 v9 A-Read Hoist + +Moved the main-loop A LDS reads for the BM16 inline-quant GEMM1 out of +`compute_tile_prefetch_b()` and into the loop body immediately after the LDS +barrier, before the inline hidden-state quant loads. This matches the aiter +ordering more closely: barrier, A ds-read, A-scale ds-read, hidden load/quant, +then MFMA cluster. + +Correctness against aiter remained within the accepted cosine band: + +```text +M=4 cos=0.999997437 max_abs=0.015625 +M=8 cos=0.999998808 max_abs=0.015625 +M=16 cos=0.999998629 max_abs=0.015625 +M=32 cos=0.999998689 max_abs=0.023438 +M=64 cos=0.999998569 max_abs=0.031250 +M=128 cos=0.999999046 max_abs=0.031250 +``` + +Static GEMM1 ISA counts moved in the intended direction: + +```text + aiter FlyDSL v8 FlyDSL v9 +s_waitcnt 126 150 126 +v_mfma 224 224 224 +buffer_load 336 336 336 +DS read 88 88 88 +DS write 92 92 92 +s_barrier 30 30 30 +s_setprio 208 208 208 +``` + +Long graph-profiler check using the current default profiler settings +(`warmup=2000`, `graph_iters=64`, `replays=2`, `repeat=201`) measured: + +| M | stage | aiter | allfly v9 | delta | +| ---: | --- | ---: | ---: | ---: | +| 64 | sort_zero_init | 5.157 us | 7.272 us | +2.115 us | +| 64 | GEMM1 v9 | 130.773 us | 135.489 us | +4.716 us | +| 64 | GEMM2 v3 | 65.227 us | 67.720 us | +2.493 us | +| 64 | total | 201.152 us | 210.503 us | +9.352 us | +| 128 | sort_zero_init | 6.627 us | 8.662 us | +2.035 us | +| 128 | GEMM1 v9 | 163.527 us | 169.310 us | +5.784 us | +| 128 | GEMM2 v3 | 81.570 us | 85.976 us | +4.405 us | +| 128 | total | 251.730 us | 263.970 us | +12.240 us | + +Conclusion: v9 is retained. It removes the static extra waitcnts and gives a +small, stable M=128 GEMM1 improvement, but the remaining GEMM1 gap is not simply +static waitcnt count. The next target is the residual hot-loop wait placement +and dataflow: FlyDSL still has an early `s_waitcnt vmcnt(2)` between the first +pair of MFMA instructions in the first cluster, while aiter waits differently +before entering that pair. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index ba1ba4f19..2844524b2 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -577,7 +577,7 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v8" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v9" @flyc.kernel(name=module_name) def gemm1_inline( @@ -938,6 +938,14 @@ def pack_i64x4_to_i32x8(x0, x1, x2, x3): cbsz = 4 blgp = 4 + def load_a128_tile(a_slot: int): + a128_vals = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 64, index=True) + a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) + a128_vals.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) + return a128_vals + def compute_tile(acc_in, b_tile, a_scale, b_scale, a_slot: int): acc_list = list(acc_in) a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) @@ -970,15 +978,11 @@ def compute_tile(acc_in, b_tile, a_scale, b_scale, a_slot: int): ) return acc_list - def compute_tile_prefetch_b(acc_in, b_tile, a_scale, b_scale, a_slot: int, next_k_tile: int): + def compute_tile_prefetch_b(acc_in, b_tile, a128_vals, a_scale, b_scale, next_k_tile: int): acc_list = list(acc_in) a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) - a128_vals = [] next_b_tile = [] for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 64, index=True) - a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) - a128_vals.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) next_b_tile.append(([], [])) for ni in range_constexpr(num_acc_n // 2): @@ -1082,6 +1086,7 @@ def _then_body(): next_k_tile = offset + k_stages write_slot = next_k_tile % a_stages _barrier(lgkmcnt=0) + a128_vals = load_a128_tile(read_slot) a_scale = load_a_scale_tile(offset) h4_0 = inline_quant_load_half(next_k_tile, 0) h4_1 = inline_quant_load_half(next_k_tile, 1) @@ -1089,9 +1094,9 @@ def _then_body(): acc, next_b_tile = compute_tile_prefetch_b( acc, b_stages[slot_b], + a128_vals, a_scale, b_scale_stages[slot_b], - read_slot, next_k_tile, ) b_scale_stages[slot_b] = load_b_scale_tile(next_k_tile) From 2cd67f04243e0b46f07ff8f4d86a54b51ea39502 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 23:30:07 +0000 Subject: [PATCH 043/118] Document rejected BM16 GEMM1 wait trial --- docs/kimi_fp4_moe_16384_opt_notes.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 38f77ff87..0bf7bc1df 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2738,3 +2738,10 @@ static waitcnt count. The next target is the residual hot-loop wait placement and dataflow: FlyDSL still has an early `s_waitcnt vmcnt(2)` between the first pair of MFMA instructions in the first cluster, while aiter waits differently before entering that pair. + +Rejected follow-up: + +- v10 inserted an explicit `rocdl.s_waitcnt(2)` at each MFMA cluster entry to + pull the pair-internal VMEM wait forward. Static ISA moved the wait before the + two MFMA instructions, but total `s_waitcnt` increased from 126 to 151, so it + was not retained. From fd2df0a608af0ab2b5276a7cda6b330c7b555944 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 9 Jun 2026 23:37:50 +0000 Subject: [PATCH 044/118] Increase benchmark sampling defaults --- bench.py | 12 ++++++------ bench_flydsl_16384.py | 21 +++++++++++++++++---- bench_small_bm16.py | 15 +++++++++------ profile_flydsl_16384.py | 20 +++++++++++++++----- 4 files changed, 47 insertions(+), 21 deletions(-) diff --git a/bench.py b/bench.py index 9bdfb09b1..43d751cca 100644 --- a/bench.py +++ b/bench.py @@ -31,12 +31,12 @@ class Shape: # CUDA-event and graph-replay noise can move the conclusion, so default to many # captured calls, replay measurements, and independent graph captures. Override # these down only for quick smoke tests or exploratory large-M sweeps. -DEFAULT_WARMUP = 5000 -DEFAULT_EAGER_ITERS = 100000 -DEFAULT_GRAPH_ITERS = 32768 -DEFAULT_GRAPH_MEASURE = 701 -DEFAULT_GRAPH_WARMUP_REPLAYS = 160 -DEFAULT_REPEAT = 11 +DEFAULT_WARMUP = 10000 +DEFAULT_EAGER_ITERS = 200000 +DEFAULT_GRAPH_ITERS = 49152 +DEFAULT_GRAPH_MEASURE = 1001 +DEFAULT_GRAPH_WARMUP_REPLAYS = 240 +DEFAULT_REPEAT = 21 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index d3a73199c..fc4facf77 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -45,6 +45,14 @@ M = TOKEN +# The 16k-M pipeline is much longer than the small BM16 path, but the previous +# defaults were smoke-test sized. Keep the graph large enough to amortize event +# noise while avoiding an unbounded multi-hour default run. +DEFAULT_WARMUP = 200 +DEFAULT_GRAPH_ITERS = 256 +DEFAULT_GRAPH_MEASURE = 101 +DEFAULT_REPEAT = 9 + @dataclass(frozen=True) class KimiShape: @@ -251,10 +259,10 @@ def max_abs(a, b): def main(): parser = argparse.ArgumentParser() - parser.add_argument("--warmup", type=int, default=20) - parser.add_argument("--graph-iters", type=int, default=40) - parser.add_argument("--measure", type=int, default=40) - parser.add_argument("--repeat", type=int, default=3) + parser.add_argument("--warmup", type=int, default=DEFAULT_WARMUP) + parser.add_argument("--graph-iters", type=int, default=DEFAULT_GRAPH_ITERS) + parser.add_argument("--measure", type=int, default=DEFAULT_GRAPH_MEASURE) + parser.add_argument("--repeat", type=int, default=DEFAULT_REPEAT) parser.add_argument( "--runners", default=None, @@ -274,6 +282,11 @@ def main(): print(f"stage2={STAGE2_KERNEL}") print(f"mxfp4_stage1={MXFP4_STAGE1_KERNEL}") print(f"mxfp4_stage2={MXFP4_STAGE2_KERNEL}") + print( + f"Timing: graph warmup={args.warmup} graph_iters={args.graph_iters} " + f"measure={args.measure} repeat={args.repeat} " + f"measured_calls_per_runner={args.graph_iters * args.measure * args.repeat}" + ) weights = build_weights(SHAPE, device) hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 253983d0d..075074d35 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,12 +16,15 @@ "allfly", ) -DEFAULT_SMALL_WARMUP = 10000 -DEFAULT_SMALL_EAGER_ITERS = 200000 -DEFAULT_SMALL_GRAPH_ITERS = 49152 -DEFAULT_SMALL_GRAPH_MEASURE = 701 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 240 -DEFAULT_REPEAT = 31 +# Accuracy-first defaults for the tiny BM16 path. These kernels are short, so +# use a large captured graph and many replay measurements by default; override +# downward only for smoke tests. +DEFAULT_SMALL_WARMUP = 20000 +DEFAULT_SMALL_EAGER_ITERS = 500000 +DEFAULT_SMALL_GRAPH_ITERS = 65536 +DEFAULT_SMALL_GRAPH_MEASURE = 1001 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 320 +DEFAULT_REPEAT = 41 def _time_fn(fn, args): diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index 4043f19ae..940cd8299 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -26,6 +26,16 @@ ) +# Profiler windows need to be longer than smoke tests for stable per-kernel +# averages, especially in graph mode where the interesting unit is one logical +# pipeline iteration inside the captured graph. +DEFAULT_PROFILE_WARMUP = 100 +DEFAULT_PROFILE_ITERS = 8 +DEFAULT_PROFILE_GRAPH_ITERS = 64 +DEFAULT_PROFILE_REPEAT = 21 +DEFAULT_PROFILE_MAX_RETRIES = 400 + + def _is_cuda_event(evt) -> bool: device_type = str(getattr(evt, "device_type", "")) device_time = float(getattr(evt, "self_device_time_total", 0.0) or 0.0) @@ -362,29 +372,29 @@ def main(): default="graph", help="profile CUDA/HIP graph replay by default; use eager for normal launch profiling", ) - parser.add_argument("--warmup", type=int, default=20) + parser.add_argument("--warmup", type=int, default=DEFAULT_PROFILE_WARMUP) parser.add_argument( "--iters", type=int, - default=5, + default=DEFAULT_PROFILE_ITERS, help="eager iterations, or graph replay count in graph mode", ) parser.add_argument( "--graph-iters", type=int, - default=20, + default=DEFAULT_PROFILE_GRAPH_ITERS, help="pipeline iterations captured inside each graph replay", ) parser.add_argument( "--repeat", type=int, - default=5, + default=DEFAULT_PROFILE_REPEAT, help="valid profiler samples to collect per runner", ) parser.add_argument( "--max-retries", type=int, - default=40, + default=DEFAULT_PROFILE_MAX_RETRIES, help="extra profiler attempts allowed when event sequences are incomplete", ) parser.add_argument( From 318e6a755b33fb39334a296ff9cf44b52569f5a0 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 00:07:26 +0000 Subject: [PATCH 045/118] Document rejected BM16 scheduling trials --- docs/kimi_fp4_moe_16384_opt_notes.md | 88 ++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 0bf7bc1df..829d1ea56 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2745,3 +2745,91 @@ Rejected follow-up: pull the pair-internal VMEM wait forward. Static ISA moved the wait before the two MFMA instructions, but total `s_waitcnt` increased from 126 to 151, so it was not retained. + +## BM16 GEMM2 v8 J-Major MFMA Trial + +Tried changing the FlyDSL BM16 GEMM2 compute order to mirror aiter's local +`issue_a_ds_read()` / `issue_mfma_cluster()` shape more closely. The trial +preloaded both A LDS packs for a K-stage first, then iterated by output J so +each J consumed the two K half-tiles back-to-back: + +```text +old v3: for k in [0,1]: ds_read A[k]; for J in [0..3]: mfma(J,k) +trial: ds_read A[0]; ds_read A[1]; for J in [0..3]: mfma(J,0); mfma(J,1) +``` + +Correctness was within the accepted cosine band: + +```text +M=4 cos=0.999997795 max_abs=0.015625 +M=8 cos=0.999998868 max_abs=0.015625 +M=16 cos=0.999998808 max_abs=0.015625 +M=32 cos=0.999997795 max_abs=0.031250 +M=64 cos=0.999998808 max_abs=0.031250 +M=128 cos=0.999998569 max_abs=0.031250 +min_cos=0.999997795 +``` + +However, the graph-mode profiler did not show a runtime win. With +`profile_small_bm16.py -M 64 --runners aiter,gemm1fly_aiter,allfly` and the +current long profiler defaults, the M=64 allfly trial measured: + +| stage | aiter | allfly v8 trial | delta | +| --- | ---: | ---: | ---: | +| sort_zero_init | 6.632 us | 7.267 us | +0.635 us | +| GEMM1 v9 | 130.987 us | 135.174 us | +4.187 us | +| GEMM2 v8 trial | 65.428 us | 67.808 us | +2.380 us | +| total | 203.381 us | 210.253 us | +6.872 us | + +This is effectively equal to the retained GEMM2 v3 baseline +(`~67.7 us` on M=64), so the j-major compute order was reverted. The next +GEMM2 work still needs to address the full VMEM wait/barrier schedule rather +than only the local MFMA loop order. + +## BM16 GEMM1 v11 Tail J-Major Trial + +Tried applying the same J-major idea only to GEMM1's final two drain/tail +K-tiles: preload both A LDS packs with `load_a128_tile()`, then iterate by +output J and issue the two K-half MFMA instructions back-to-back. This matched +the aiter source shape more closely for the tail path while leaving the main +pipeline unchanged. + +Correctness stayed in the accepted band: + +```text +M=4 cos=0.999997139 max_abs=0.015625 +M=8 cos=0.999998391 max_abs=0.015625 +M=16 cos=0.999998689 max_abs=0.023438 +M=32 cos=0.999998629 max_abs=0.015625 +M=64 cos=0.999998689 max_abs=0.031250 +M=128 cos=0.999998927 max_abs=0.031250 +min_cos=0.999997139 +``` + +Graph-mode profiler checks with `repeat=101` measured: + +| M | aiter GEMM1 | FlyDSL trial GEMM1 | delta | +| ---: | ---: | ---: | ---: | +| 64 | 130.333 us | 135.311 us | +4.977 us | +| 128 | 163.324 us | 169.223 us | +5.899 us | + +The trial did not give a meaningful runtime win versus the retained v9 numbers. +The static ISA diff between v9 and the trial contained only the kernel symbol +rename; instruction counts, VGPR/SGPR usage, waits, MFMA count, and barriers +were identical: + +```text + aiter FlyDSL v9 FlyDSL trial +s_waitcnt 126 126 126 +v_mfma 224 224 224 +ds_read 94 88 88 +ds_write 92 92 92 +s_barrier 30 30 30 +s_setprio 208 208 208 +VGPR 139 140 140 +SGPR 41 34 34 +spills 0 0 0 +``` + +Because the compiler already emitted the same ISA for the retained v9 schedule, +the source-only tail reorder was reverted. From 9f2af5502011ed3b07a2b429195ad0fe3b148c71 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 00:54:14 +0000 Subject: [PATCH 046/118] Tune benchmark sampling for BM16 profiling --- bench.py | 10 ++--- bench_flydsl_16384.py | 6 +-- bench_small_bm16.py | 14 +++--- docs/kimi_fp4_moe_16384_opt_notes.md | 65 ++++++++++++++++++---------- profile_flydsl_16384.py | 10 ++--- profile_small_bm16.py | 16 ++++--- 6 files changed, 71 insertions(+), 50 deletions(-) diff --git a/bench.py b/bench.py index 43d751cca..b60cdb55b 100644 --- a/bench.py +++ b/bench.py @@ -31,12 +31,12 @@ class Shape: # CUDA-event and graph-replay noise can move the conclusion, so default to many # captured calls, replay measurements, and independent graph captures. Override # these down only for quick smoke tests or exploratory large-M sweeps. -DEFAULT_WARMUP = 10000 +DEFAULT_WARMUP = 5000 DEFAULT_EAGER_ITERS = 200000 -DEFAULT_GRAPH_ITERS = 49152 -DEFAULT_GRAPH_MEASURE = 1001 -DEFAULT_GRAPH_WARMUP_REPLAYS = 240 -DEFAULT_REPEAT = 21 +DEFAULT_GRAPH_ITERS = 512 +DEFAULT_GRAPH_MEASURE = 101 +DEFAULT_GRAPH_WARMUP_REPLAYS = 20 +DEFAULT_REPEAT = 15 # mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). # (M_max, block_m, g1_suffix, g2_suffix) diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index fc4facf77..b0b9c1187 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -48,10 +48,10 @@ # The 16k-M pipeline is much longer than the small BM16 path, but the previous # defaults were smoke-test sized. Keep the graph large enough to amortize event # noise while avoiding an unbounded multi-hour default run. -DEFAULT_WARMUP = 200 -DEFAULT_GRAPH_ITERS = 256 +DEFAULT_WARMUP = 500 +DEFAULT_GRAPH_ITERS = 512 DEFAULT_GRAPH_MEASURE = 101 -DEFAULT_REPEAT = 9 +DEFAULT_REPEAT = 11 @dataclass(frozen=True) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 075074d35..339d70af2 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -16,15 +16,15 @@ "allfly", ) -# Accuracy-first defaults for the tiny BM16 path. These kernels are short, so -# use a large captured graph and many replay measurements by default; override -# downward only for smoke tests. +# Accuracy-first defaults for the tiny BM16 path. Capture enough calls per graph +# to amortize event/replay noise, but keep the default run finite for iterative +# kernel work. Override downward only for smoke tests. DEFAULT_SMALL_WARMUP = 20000 DEFAULT_SMALL_EAGER_ITERS = 500000 -DEFAULT_SMALL_GRAPH_ITERS = 65536 -DEFAULT_SMALL_GRAPH_MEASURE = 1001 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 320 -DEFAULT_REPEAT = 41 +DEFAULT_SMALL_GRAPH_ITERS = 2048 +DEFAULT_SMALL_GRAPH_MEASURE = 101 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 20 +DEFAULT_REPEAT = 21 def _time_fn(fn, args): diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 829d1ea56..6a6127aac 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2407,27 +2407,27 @@ the kernels are short and launch/event overhead can otherwise move the conclusio ```text bench.py shared defaults: warmup=5000 - eager_iters=100000 - graph_iters=32768 - measure=701 - graph_warmup_replays=160 - repeat=11 + eager_iters=200000 + graph_iters=512 + measure=101 + graph_warmup_replays=20 + repeat=15 bench_small_bm16.py defaults: - warmup=10000 - eager_iters=200000 - graph_iters=49152 - measure=701 - graph_warmup_replays=240 - repeat=31 + warmup=20000 + eager_iters=500000 + graph_iters=2048 + measure=101 + graph_warmup_replays=20 + repeat=21 profile_small_bm16.py defaults: - warmup=2000 - graph_iters=64 - replays=2 - logical_iters_per_sample=128 - repeat=201 - max_retries=4000 + warmup=3000 + graph_iters=128 + replays=4 + logical_iters_per_sample=512 + repeat=101 + max_retries=2000 ``` Use the default commands for final comparison: @@ -2438,12 +2438,11 @@ Use the default commands for final comparison: ``` For smoke checks only, override these values explicitly with small numbers. -The defaults are intentionally slow: for BM16 the end-to-end bench measures -`49152 * 701` graph calls per sample and reports 31 independent graph captures. -The profiler uses `64 * 2` logical graph iterations per sample and `repeat=201`. -This keeps the profiler sample window in the previously stable event-capture -range, while increasing the total number of graph-replay observations for small -kernels. +The defaults are intentionally slower than smoke tests: for BM16 the end-to-end +bench measures `2048 * 101` graph calls per sample and reports 21 independent +graph captures. The profiler uses `128 * 4` logical graph iterations per +sample and `repeat=101`. This is large enough to stabilize small-kernel +medians while still finishing during iterative kernel work. `bench.py` now also has a `--repeat` loop and prints the per-backend timing samples. This makes the root sweep usable for final conclusions without relying @@ -2833,3 +2832,23 @@ spills 0 0 0 Because the compiler already emitted the same ISA for the retained v9 schedule, the source-only tail reorder was reverted. + +## BM16 Sort v5 Normal Zero-Store Trial + +Tried changing the BM16 fused sort/zero-init kernel from non-temporal int4 +stores back to normal int4 stores for the bf16 atomic output zero-fill. This +was motivated by the aiter C++ source using plain `out_v[i] = zero` in +`zero_init_bf16_out_impl`. + +The graph-mode profiler did not show a win. With +`profile_small_bm16.py -M 64,128 --runners aiter,sort_aiter` after increasing +the default profiler graph window to 128 captured calls and 4 graph replays per +sample, the no-NT v5 sort measured: + +| M | aiter sort | FlyDSL sort v5 | sort delta | total delta | +| ---: | ---: | ---: | ---: | ---: | +| 64 | 5.068 us | 7.270 us | +2.202 us | +2.175 us | +| 128 | 6.602 us | 8.742 us | +2.140 us | +2.889 us | + +The normal store variant did not improve the retained v2 behavior, so v5 was +reverted to the v2 kernel name and non-temporal zero-fill store. diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py index 940cd8299..f1695513c 100644 --- a/profile_flydsl_16384.py +++ b/profile_flydsl_16384.py @@ -29,11 +29,11 @@ # Profiler windows need to be longer than smoke tests for stable per-kernel # averages, especially in graph mode where the interesting unit is one logical # pipeline iteration inside the captured graph. -DEFAULT_PROFILE_WARMUP = 100 -DEFAULT_PROFILE_ITERS = 8 -DEFAULT_PROFILE_GRAPH_ITERS = 64 -DEFAULT_PROFILE_REPEAT = 21 -DEFAULT_PROFILE_MAX_RETRIES = 400 +DEFAULT_PROFILE_WARMUP = 300 +DEFAULT_PROFILE_ITERS = 12 +DEFAULT_PROFILE_GRAPH_ITERS = 128 +DEFAULT_PROFILE_REPEAT = 31 +DEFAULT_PROFILE_MAX_RETRIES = 800 def _is_cuda_event(evt) -> bool: diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 8cae40e40..5266043b0 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,13 +8,15 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -# Keep the profiler graph window bounded: larger single profiler windows have -# dropped CUDA kernel events on this stack. Use many accepted samples instead. -DEFAULT_PROFILE_WARMUP = 2000 -DEFAULT_PROFILE_GRAPH_ITERS = 64 -DEFAULT_PROFILE_REPLAYS = 2 -DEFAULT_PROFILE_REPEAT = 201 -DEFAULT_PROFILE_MAX_RETRIES = 4000 +# Keep the profiler graph window bounded: very large single profiler windows can +# drop CUDA kernel events on this stack. For BM16, make each accepted sample +# larger than a smoke test while relying on repeated accepted samples for the +# median. +DEFAULT_PROFILE_WARMUP = 3000 +DEFAULT_PROFILE_GRAPH_ITERS = 128 +DEFAULT_PROFILE_REPLAYS = 4 +DEFAULT_PROFILE_REPEAT = 101 +DEFAULT_PROFILE_MAX_RETRIES = 2000 def _is_cuda_event(evt) -> bool: From 7e18f441727c4553b33dbb80b020b1c91c82c6bd Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 01:10:50 +0000 Subject: [PATCH 047/118] Document rejected BM16 sort prefix trial --- docs/kimi_fp4_moe_16384_opt_notes.md | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 6a6127aac..f250d3d38 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2852,3 +2852,34 @@ sample, the no-NT v5 sort measured: The normal store variant did not improve the retained v2 behavior, so v5 was reverted to the v2 kernel name and non-temporal zero-fill store. + +## BM16 Sort v6 Seven-Wave Cross-Prefix Trial + +Tried reducing the retained v2 cross-wave LDS prefix loop from all 16 CTA waves +to only the `ceil(385 / 64) = 7` waves that can contain valid expert rows. This +kept the v2 DPP plus `ds_bpermute` wave-local scan shape and did not add the +extra wave-total scan barrier from the rejected v3 trial. + +Correctness stayed in the accepted cosine band: + +```text +M=4 cos=0.999997497 max_abs=0.015625 +M=8 cos=0.999997973 max_abs=0.023438 +M=16 cos=0.999997675 max_abs=0.023438 +M=32 cos=0.999998569 max_abs=0.015625 +M=64 cos=0.999998808 max_abs=0.031250 +M=128 cos=0.999998927 max_abs=0.023438 +min_cos=0.999997497 +``` + +The graph profiler did not show a runtime win. On an otherwise idle GPU 3, +`profile_small_bm16.py -M 64 --runners aiter,sort_aiter` measured: + +| stage | aiter | FlyDSL sort v6 path | delta | +| --- | ---: | ---: | ---: | +| sort_zero_init | 4.970 us | 7.451 us | +2.481 us | +| total | 201.295 us | 207.391 us | +6.096 us | + +The v6 sort median was worse than the retained v2/v5 measurements, so it was +reverted. The remaining sort gap is not fixed by simply trimming unused +cross-wave LDS reads. From 3b7bbaf88630644c8aef801b2d83cc0362d0ce82 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 01:14:57 +0000 Subject: [PATCH 048/118] Document rejected BM16 GEMM2 split barrier trial --- docs/kimi_fp4_moe_16384_opt_notes.md | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index f250d3d38..ee5a5cbcb 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2883,3 +2883,33 @@ The graph profiler did not show a runtime win. On an otherwise idle GPU 3, The v6 sort median was worse than the retained v2/v5 measurements, so it was reverted. The remaining sort gap is not fixed by simply trimming unused cross-wave LDS reads. + +## BM16 GEMM2 v9 Split-Barrier Trial + +Tried replacing the retained GEMM2 v3 precompute `s_waitcnt(0); s_barrier()` +with aiter-style split barriers around the two A LDS slots: + +```text +wait vmcnt(23); barrier; compute slot 0 +wait vmcnt(22); barrier; compute slot 1 +``` + +This matched the high-level atomic BM16 source shape more closely than the +earlier partial-wait-only attempts, but it was still not correct without +aiter's full per-MFMA descending VMEM waits and exact instruction schedule. + +Correctness failed the accepted cosine band: + +```text +M=4 cos=0.993439555 max_abs=3.984375 +M=8 cos=0.993382812 max_abs=5.243408 +M=16 cos=0.999997556 max_abs=0.054688 +M=32 cos=0.994739234 max_abs=6.148438 +M=64 cos=0.998132169 max_abs=5.007812 +M=128 cos=0.997795224 max_abs=5.382812 +min_cos=0.993382812 +``` + +The trial was reverted. This reinforces the prior ATT conclusion: GEMM2 wait +optimization has to transplant the full aiter schedule, including the +per-MFMA `vmcnt` ladder, rather than only splitting the coarse barrier. From 6b31b0747030f1cc81d78525b5f1394e980b4a61 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 01:28:31 +0000 Subject: [PATCH 049/118] Document rejected BM16 GEMM2 schedule barrier trial --- docs/kimi_fp4_moe_16384_opt_notes.md | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index ee5a5cbcb..36878a7f5 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2913,3 +2913,37 @@ min_cos=0.993382812 The trial was reverted. This reinforces the prior ATT conclusion: GEMM2 wait optimization has to transplant the full aiter schedule, including the per-MFMA `vmcnt` ladder, rather than only splitting the coarse barrier. + +## BM16 GEMM2 v10 A-Load Schedule Barrier Trial + +Tried adding `rocdl.sched_barrier(0)` immediately after the two GEMM2 A +direct-to-LDS loads, matching the source-level aiter atomic BM16 sequence before +issuing scale and B loads. This does not relax the retained full +`s_waitcnt(0); s_barrier()` correctness fence; it only nudges compiler +scheduling. + +Correctness stayed in the accepted cosine band: + +```text +M=4 cos=0.999996245 max_abs=0.031250 +M=8 cos=0.999998748 max_abs=0.031250 +M=16 cos=0.999998868 max_abs=0.015625 +M=32 cos=0.999998331 max_abs=0.015625 +M=64 cos=0.999999106 max_abs=0.031250 +M=128 cos=0.999999225 max_abs=0.031250 +min_cos=0.999996245 +``` + +M=64 graph-profiler comparison with +`profile_small_bm16.py -M 64,128 --runners gemm1fly_aiter,allfly` was enough to +reject it: + +| stage | gemm1fly_aiter | allfly v10 | delta | +| --- | ---: | ---: | ---: | +| sort_zero_init | 7.085 us | 7.079 us | -0.006 us | +| GEMM1 | 135.224 us | 135.091 us | -0.133 us | +| GEMM2 | 64.880 us | 67.731 us | +2.852 us | +| total | 207.179 us | 209.894 us | +2.715 us | + +The GEMM2 time is effectively unchanged from retained v3 (`~67.72 us`), so the +schedule barrier was reverted. From 157b8999e6f080ed611256734da64c91708965bd Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 02:28:21 +0000 Subject: [PATCH 050/118] Align BM16 GEMM2 scale loads --- docs/kimi_fp4_moe_16384_opt_notes.md | 57 +++++++++++++++ kimi_fp4_moe_small_bm16.py | 4 +- profile_small_bm16.py | 103 +++++++++++++++++++++++++-- 3 files changed, 155 insertions(+), 9 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 36878a7f5..72d0de5d5 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -2947,3 +2947,60 @@ reject it: The GEMM2 time is effectively unchanged from retained v3 (`~67.72 us`), so the schedule barrier was reverted. + +## BM16 GEMM2 v11 B-Scale Cache Modifier + +Changed the retained BM16 GEMM2 B-scale scalar load from non-temporal +`cache_modifier=2` to normal cached `cache_modifier=0`: + +```text +flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v11 +``` + +This matches the aiter GEMM2 ISA shape more closely for the scale path: aiter's +B-scale `buffer_load_dword` does not carry the non-temporal modifier. Correctness +remained within the accepted cosine band for `M=4,8,16,32,64,128` +(`min_cos=0.9999963045120239`). + +The profiler was also updated with a `by-kernel` aggregation mode. Ordered graph +event slicing requires every captured replay event to be present; on this ROCm +stack torch profiler can drop some CUDA events in large replay windows. The +`by-kernel` mode still profiles graph replay, but aggregates each kernel name's +captured per-call average, making the default long window usable for `M=128`. + +Default `profile_small_bm16.py` settings after the update: + +```text +warmup=3000 +graph_iters=128 +replays=4 +repeat=101 +logical_iters_per_runner=51712 +aggregation=by-kernel +``` + +Graph-profiler comparisons against pure aiter: + +| M | stage | aiter | allfly v11 | delta | +| ---: | --- | ---: | ---: | ---: | +| 4 | sort_zero_init | 4.289 us | 4.140 us | -0.149 us | +| 4 | GEMM1 v9 | 24.504 us | 25.984 us | +1.480 us | +| 4 | GEMM2 v11 | 10.949 us | 12.351 us | +1.402 us | +| 4 | total | 39.720 us | 42.469 us | +2.749 us | +| 16 | sort_zero_init | 4.530 us | 4.604 us | +0.075 us | +| 16 | GEMM1 v9 | 60.845 us | 63.897 us | +3.052 us | +| 16 | GEMM2 v11 | 30.970 us | 30.967 us | -0.003 us | +| 16 | total | 96.359 us | 99.477 us | +3.118 us | +| 64 | sort_zero_init | 4.956 us | 7.213 us | +2.257 us | +| 64 | GEMM1 v9 | 130.204 us | 135.310 us | +5.106 us | +| 64 | GEMM2 v11 | 65.075 us | 65.078 us | +0.003 us | +| 64 | total | 200.233 us | 207.638 us | +7.405 us | +| 128 | sort_zero_init | 8.422 us | 8.430 us | +0.007 us | +| 128 | GEMM1 v9 | 169.249 us | 169.200 us | -0.049 us | +| 128 | GEMM2 v11 | 82.199 us | 82.440 us | +0.241 us | +| 128 | total | 259.858 us | 260.048 us | +0.189 us | + +Conclusion: keep GEMM2 v11. It effectively closes the retained GEMM2 gap for +`M=16,64` and keeps `M=128` within `+0.241 us` on GEMM2. The remaining BM16 +work should start with `M=64` GEMM1, then the `M=64` sort gap. `M=4` still has +a GEMM2 fixed-cost gap, but it is no longer the main throughput bucket. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 2844524b2..58521acf2 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -1386,7 +1386,7 @@ def compile_kimi_mxfp4_gemm2_atomic_bm16(): lds_offset = allocator._align(allocator.ptr, 16) allocator.ptr = lds_offset + max(lds_a_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v3" + module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v11" @flyc.kernel(name=module_name) def gemm2_atomic( @@ -1595,7 +1595,7 @@ def load_b_scale_kt(kt: int): + arith.constant(kt * k_bs_stride_k0_dw, index=True) + lane_word ) - s = buffer_ops.buffer_load(b_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=2) + s = buffer_ops.buffer_load(b_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) vals.append(vector.from_elements(T.vec(1, i32), [s])) return vals diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 5266043b0..0e0ce2194 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -17,6 +17,7 @@ DEFAULT_PROFILE_REPLAYS = 4 DEFAULT_PROFILE_REPEAT = 101 DEFAULT_PROFILE_MAX_RETRIES = 2000 +DEFAULT_PROFILE_AGGREGATION = "by-kernel" def _is_cuda_event(evt) -> bool: @@ -103,9 +104,67 @@ def _ordered_rows(events, logical_iters: int): "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", "avg_us": sum(times) / len(times), "kernel": kernel, + "event_count": len(times), } ) - return {"total_us": total_us, "kernel_calls_per_iter": per_iter, "rows": rows} + return { + "total_us": total_us, + "kernel_calls_per_iter": per_iter, + "rows": rows, + "aggregation": "ordered", + } + + +def _stage_rank(kernel: str, first_seen: int) -> tuple[int, int]: + lower = kernel.lower() + if "sort" in lower or "zero_init" in lower: + return 0, first_seen + if "gemm1" in lower or "mxfp4_moe_g1" in lower or "_g1_" in lower: + return 1, first_seen + if "gemm2" in lower or "mxfp4_moe_g2" in lower or "_g2_" in lower: + return 2, first_seen + return len(STAGE_NAMES) + first_seen, first_seen + + +def _by_kernel_rows(events, expected_kernels: int | None): + if not events: + return None + + buckets = {} + for first_seen, (name, us) in enumerate(events): + if name not in buckets: + buckets[name] = {"first_seen": first_seen, "times": []} + buckets[name]["times"].append(us) + + if expected_kernels is not None and len(buckets) != expected_kernels: + return None + + ordered = sorted( + buckets.items(), + key=lambda item: _stage_rank(item[0], item[1]["first_seen"]), + ) + rows = [] + total_us = 0.0 + for idx, (kernel, bucket) in enumerate(ordered): + times = bucket["times"] + avg_us = sum(times) / len(times) + total_us += avg_us + rows.append( + { + "idx": idx, + "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", + "avg_us": avg_us, + "kernel": kernel, + "event_count": len(times), + } + ) + + return { + "total_us": total_us, + "kernel_calls_per_iter": len(rows), + "rows": rows, + "aggregation": "by-kernel", + } def _collect_reports( @@ -120,6 +179,7 @@ def _collect_reports( max_retries: int, expected_kernels: int | None, trace_dir: Path | None, + aggregation: str, ): logical_iters = graph_iters * replays reports = [] @@ -140,7 +200,12 @@ def _collect_reports( replays=replays, trace_path=trace_path, ) - report = _ordered_rows(events, logical_iters) + if aggregation == "ordered": + report = _ordered_rows(events, logical_iters) + elif aggregation == "by-kernel": + report = _by_kernel_rows(events, expected_kernels) + else: + raise ValueError(f"unknown aggregation mode: {aggregation}") if report is None: dropped += 1 if dropped <= 3 or dropped % 25 == 0: @@ -167,7 +232,8 @@ def _collect_reports( print( f"M={m} {name} sample {len(reports)}/{repeat}: " f"device_total_us_per_iter={report['total_us']:.3f}, " - f"kernels/iter={report['kernel_calls_per_iter']}", + f"kernels/iter={report['kernel_calls_per_iter']}, " + f"aggregation={report['aggregation']}", flush=True, ) if len(reports) < repeat: @@ -190,11 +256,13 @@ def _median(values) -> float: def _summarize_reports(m: int, name: str, reports): per_iter = reports[0]["kernel_calls_per_iter"] + aggregation = reports[0].get("aggregation", "ordered") total_us = _median([report["total_us"] for report in reports]) rows = [] for idx in range(per_iter): values = [report["rows"][idx]["avg_us"] for report in reports] kernels = [report["rows"][idx]["kernel"] for report in reports] + event_counts = [report["rows"][idx].get("event_count", 0) for report in reports] kernel = ( kernels[0] if all(item == kernels[0] for item in kernels) @@ -208,19 +276,28 @@ def _summarize_reports(m: int, name: str, reports): "min_us": min(values), "max_us": max(values), "kernel": kernel, + "min_events": min(event_counts), + "max_events": max(event_counts), } ) print() - print(f"== M={m} {name} median over {len(reports)} profiler samples ==") + print( + f"== M={m} {name} median over {len(reports)} profiler samples " + f"({aggregation}) ==" + ) print(f"device_total_us_per_iter={total_us:.3f}") print(f"device_kernel_calls_per_iter={per_iter}") - print(f"{'idx':>3} {'stage':<14} {'median_us':>10} {'range_us':>17} kernel") + print( + f"{'idx':>3} {'stage':<14} {'median_us':>10} " + f"{'range_us':>17} {'events':>13} kernel" + ) for row in rows: range_text = f"{row['min_us']:.3f}..{row['max_us']:.3f}" + events_text = f"{row['min_events']}..{row['max_events']}" print( f"{row['idx']:3d} {row['stage']:<14} {row['avg_us']:10.3f} " - f"{range_text:>17} {row['kernel']}" + f"{range_text:>17} {events_text:>13} {row['kernel']}" ) return {"m": m, "name": name, "total_us": total_us, "rows": rows} @@ -267,6 +344,16 @@ def main(): parser.add_argument("--repeat", type=int, default=DEFAULT_PROFILE_REPEAT) parser.add_argument("--max-retries", type=int, default=DEFAULT_PROFILE_MAX_RETRIES) parser.add_argument("--expected-kernels", type=int, default=3) + parser.add_argument( + "--aggregation", + choices=("ordered", "by-kernel"), + default=DEFAULT_PROFILE_AGGREGATION, + help=( + "ordered requires a complete event sequence for every graph replay; " + "by-kernel estimates per-iteration time from each kernel's captured " + "per-call average and is more robust when torch profiler drops events" + ), + ) parser.add_argument("--trace-dir", default=None) args = parser.parse_args() @@ -291,7 +378,8 @@ def main(): f"mode=graph warmup={args.warmup} graph_iters={args.graph_iters} " f"replays={args.replays} logical_iters={args.graph_iters * args.replays} " f"repeat={args.repeat} " - f"logical_iters_per_runner={args.graph_iters * args.replays * args.repeat}" + f"logical_iters_per_runner={args.graph_iters * args.replays * args.repeat} " + f"aggregation={args.aggregation}" ) print("Preparing weights...", flush=True) weights = b.build_weights(shape, device) @@ -320,6 +408,7 @@ def main(): max_retries=args.max_retries, expected_kernels=expected_kernels, trace_dir=trace_dir, + aggregation=args.aggregation, ) summaries.append(_summarize_reports(m, name, reports)) if summaries: From 96684634401ce14db97bafdfcf67b1c1b8314f84 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 02:39:55 +0000 Subject: [PATCH 051/118] Align BM16 GEMM1 scale loads --- docs/kimi_fp4_moe_16384_opt_notes.md | 39 ++++++++++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 4 +-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 72d0de5d5..874d861df 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -3004,3 +3004,42 @@ Conclusion: keep GEMM2 v11. It effectively closes the retained GEMM2 gap for `M=16,64` and keeps `M=128` within `+0.241 us` on GEMM2. The remaining BM16 work should start with `M=64` GEMM1, then the `M=64` sort gap. `M=4` still has a GEMM2 fixed-cost gap, but it is no longer the main throughput bucket. + +## BM16 GEMM1 v12 B-Scale Cache Modifier + +Changed the retained BM16 GEMM1 B-scale scalar load from non-temporal +`cache_modifier=2` to normal cached `cache_modifier=0`: + +```text +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v12 +``` + +This mirrors the successful GEMM2 v11 change and matches aiter's B-scale load +shape more closely: the B data loads remain non-temporal, but the scale dword +loads use the normal cached path. + +Short correctness smoke for `M=64` stayed in the accepted cosine band: + +```text +cos_sort=0.999998689 +cos_gemm1=0.999998927 +cos_all=0.999998927 +max_abs_all=0.031250 +``` + +Default graph-profiler comparison: + +```text +/opt/venv/bin/python profile_small_bm16.py -M 64 --runners sort_aiter,gemm1fly_aiter +``` + +| runner | sort_zero_init | GEMM1 | GEMM2 | total | +| --- | ---: | ---: | ---: | ---: | +| `sort_aiter` | 7.171 us | 131.178 us | 65.568 us | 203.946 us | +| `gemm1fly_aiter` | 7.131 us | 131.829 us | 65.520 us | 204.557 us | +| delta | -0.040 us | +0.651 us | -0.048 us | +0.611 us | + +Conclusion: keep v12. The previous retained M=64 GEMM1 gap was about +`+5.106 us`; v12 reduces the isolated GEMM1 gap to about `+0.651 us` in the +graph-profiler run. The remaining M=64 work is now small enough that further +GEMM1 changes should be validated with the full default profile window. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 58521acf2..d193219a2 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -577,7 +577,7 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v9" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v12" @flyc.kernel(name=module_name) def gemm1_inline( @@ -736,7 +736,7 @@ def load_b_scale_tile(k_tile: int): + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + lane_word ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=2) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) return b_scale_tile From e7a0d983ad454a3552c83b23dc9739cd019256db Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 02:57:59 +0000 Subject: [PATCH 052/118] Declare BM16 GEMM1 block size --- docs/kimi_fp4_moe_16384_opt_notes.md | 51 ++++++++++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 4 +-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 874d861df..0140bd400 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -3043,3 +3043,54 @@ Conclusion: keep v12. The previous retained M=64 GEMM1 gap was about `+5.106 us`; v12 reduces the isolated GEMM1 gap to about `+0.651 us` in the graph-profiler run. The remaining M=64 work is now small enough that further GEMM1 changes should be validated with the full default profile window. + +## BM16 GEMM1 v13 Known Block Size + +Added an explicit FlyDSL kernel block-size declaration to the retained BM16 +GEMM1: + +```python +@flyc.kernel(name=module_name, known_block_size=[256, 1, 1]) +``` + +The retained kernel name is now: + +```text +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v13_knownblock +``` + +This is a codegen metadata change only; the GEMM schedule and math are +unchanged. The goal is to make the backend's flat workgroup-size knowledge +match the actual launch more explicitly. + +Default graph-profiler comparison for `M=64`: + +```text +/opt/venv/bin/python profile_small_bm16.py -M 64 --runners sort_aiter,gemm1fly_aiter +``` + +| runner | sort_zero_init | GEMM1 | GEMM2 | total | +| --- | ---: | ---: | ---: | ---: | +| `sort_aiter` | 7.112 us | 130.750 us | 65.342 us | 203.199 us | +| `gemm1fly_aiter` | 7.110 us | 130.943 us | 65.335 us | 203.389 us | +| delta | -0.002 us | +0.193 us | -0.007 us | +0.189 us | + +Smoke correctness with `M=4,16,64` stayed within the accepted cosine band: + +```text +M=4 cos_all=0.999995410 max_abs_all=0.031250 +M=16 cos_all=0.999998987 max_abs_all=0.015625 +M=64 cos_all=0.999998987 max_abs_all=0.031250 +``` + +Rejected related trials: + +- `v13_scalar_scale`: kept A-scale/B-scale as raw scalar SSA values instead of + wrapping them in `vec<1xi32>`. It was correct but measured M=64 GEMM1 at + `+0.764 us` versus aiter, worse than retained v12/v13. +- `v13_noexpguard`: removed the explicit `expert_i32 < EXPERTS` guard. It was + correct on the tested data but measured M=64 GEMM1 at `+0.669 us`, and the + safety tradeoff was not worth keeping. + +Conclusion: keep v13 known-block. It reduces the retained M=64 GEMM1 gap from +about `+0.651 us` to about `+0.193 us` in the default graph-profiler window. diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index d193219a2..b4cda5931 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -577,9 +577,9 @@ def compile_kimi_mxfp4_gemm1_inline_bm16(): lds_scale_offset = lds_offset + lds_x_bytes allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v12" + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v13_knownblock" - @flyc.kernel(name=module_name) + @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) def gemm1_inline( arg_inter_sorted_quant: fx.Pointer, arg_inter_sorted_scale: fx.Pointer, From 53f352576f81789aaade884f269952054ad057c6 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 06:16:20 +0000 Subject: [PATCH 053/118] zz --- bench_small_bm16.py | 68 ++++++++++----------------------------------- 1 file changed, 15 insertions(+), 53 deletions(-) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 339d70af2..6bb4a6dd7 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -4,27 +4,23 @@ import bench as b from kimi_fp4_moe_small_bm16 import ( run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl, - run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2, - run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm, ) RUNNER_ORDER = ( "aiter", - "sort_aiter", - "gemm1fly_aiter", "allfly", ) # Accuracy-first defaults for the tiny BM16 path. Capture enough calls per graph # to amortize event/replay noise, but keep the default run finite for iterative # kernel work. Override downward only for smoke tests. -DEFAULT_SMALL_WARMUP = 20000 +DEFAULT_SMALL_WARMUP = 1000 DEFAULT_SMALL_EAGER_ITERS = 500000 -DEFAULT_SMALL_GRAPH_ITERS = 2048 +DEFAULT_SMALL_GRAPH_ITERS = 1024 DEFAULT_SMALL_GRAPH_MEASURE = 101 DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 20 -DEFAULT_REPEAT = 21 +DEFAULT_REPEAT = 1 def _time_fn(fn, args): @@ -33,6 +29,7 @@ def _time_fn(fn, args): if args.eager: samples.append(b.bench(fn, warmup=args.warmup, iters=args.iters)) else: + print(f"{args.warmup} {args.graph_iters} {args.measure} {args.graph_warmup_replays}") samples.append( b.bench_cudagraph( fn, @@ -62,28 +59,6 @@ def _make_runners(shape, m, hidden, topk_ids, topk_weight, weights, device): shape, m, hidden, topk_ids, topk_weight, w, device ) - def sort_aiter(): - return run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm( - hidden, - w["w1"], - w["w2"], - topk_weight, - topk_ids, - w1_scale=w["w1_scale"], - w2_scale=w["w2_scale"], - ) - - def gemm1fly_aiter(): - return run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2( - hidden, - w["w1"], - w["w2"], - topk_weight, - topk_ids, - w1_scale=w["w1_scale"], - w2_scale=w["w2_scale"], - ) - def allfly(): return run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl( hidden, @@ -97,8 +72,6 @@ def allfly(): return { "aiter": aiter_fn, - "sort_aiter": sort_aiter, - "gemm1fly_aiter": gemm1fly_aiter, "allfly": allfly, } @@ -145,11 +118,7 @@ def main(): print("Preparing weights...", flush=True) weights = b.build_weights(shape, device) - header = ( - "M,aiter_us,sort_aiter_us,gemm1fly_aiter_us,allfly_us," - "sort_delta_us,gemm1_delta_us,gemm2_delta_us," - "cos_sort,cos_gemm1,cos_all,max_abs_all" - ) + header = "M,aiter_us,allfly_us,allfly_delta_us,cos_all,max_abs_all" print(header) for m in ms: @@ -158,19 +127,17 @@ def main(): shape, m, hidden, topk_ids, topk_weight, weights, device ) - cos = {"sort_aiter": float("nan"), "gemm1fly_aiter": float("nan"), "allfly": float("nan")} + cos_all = float("nan") max_abs_all = float("nan") if not args.no_check: ref = runners["aiter"]().float() b.torch.cuda.synchronize() - for name in ("sort_aiter", "gemm1fly_aiter", "allfly"): - out = runners[name]().float() - b.torch.cuda.synchronize() - if not b.torch.isfinite(out).all().item(): - raise RuntimeError(f"{name} M={m} produced non-finite output") - cos[name] = b.cosine(ref, out) - if name == "allfly": - max_abs_all = (ref - out).abs().max().item() + out = runners["allfly"]().float() + b.torch.cuda.synchronize() + if not b.torch.isfinite(out).all().item(): + raise RuntimeError(f"allfly M={m} produced non-finite output") + cos_all = b.cosine(ref, out) + max_abs_all = (ref - out).abs().max().item() timings = {} for name in RUNNER_ORDER: @@ -180,15 +147,10 @@ def main(): flush=True, ) - sort_delta = timings["sort_aiter"] - timings["aiter"] - gemm1_delta = timings["gemm1fly_aiter"] - timings["sort_aiter"] - gemm2_delta = timings["allfly"] - timings["gemm1fly_aiter"] + allfly_delta = timings["allfly"] - timings["aiter"] print( - f"{m},{timings['aiter']:.3f},{timings['sort_aiter']:.3f}," - f"{timings['gemm1fly_aiter']:.3f},{timings['allfly']:.3f}," - f"{sort_delta:.3f},{gemm1_delta:.3f},{gemm2_delta:.3f}," - f"{cos['sort_aiter']:.9f},{cos['gemm1fly_aiter']:.9f}," - f"{cos['allfly']:.9f},{max_abs_all:.6f}", + f"{m},{timings['aiter']:.3f},{timings['allfly']:.3f}," + f"{allfly_delta:.3f},{cos_all:.9f},{max_abs_all:.6f}", flush=True, ) From ea30a49903d5c9833eb2fa9c59459a970d1c0d3b Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 06:27:11 +0000 Subject: [PATCH 054/118] zz --- bench_small_bm16.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bench_small_bm16.py b/bench_small_bm16.py index 6bb4a6dd7..7733e9843 100644 --- a/bench_small_bm16.py +++ b/bench_small_bm16.py @@ -17,9 +17,9 @@ # kernel work. Override downward only for smoke tests. DEFAULT_SMALL_WARMUP = 1000 DEFAULT_SMALL_EAGER_ITERS = 500000 -DEFAULT_SMALL_GRAPH_ITERS = 1024 +DEFAULT_SMALL_GRAPH_ITERS = 512 DEFAULT_SMALL_GRAPH_MEASURE = 101 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 20 +DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 10 DEFAULT_REPEAT = 1 From 0dc34ca52e46c2cf5da19a2ad126faba288d6b94 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 07:47:31 +0000 Subject: [PATCH 055/118] slower but not mlir --- kimi_fp4_moe_small_bm16.py | 34 ++++++++++--------- profile_small_bm16.py | 67 ++++++++++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 32 deletions(-) diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index b4cda5931..9bea7f699 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -203,7 +203,7 @@ def compile_kimi_mxfp4_sort_zero_init_bm16(): allocator.ptr = lds_scratch_offset + 16 * 4 @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v2", + name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v4_ifelse", known_block_size=[threads, 1, 1], ) def sort_zero_init( @@ -259,9 +259,10 @@ def sort_zero_init( is_sort_cta = arith.cmpi(CmpIPredicate.eq, bx_i32, c0_i32) - # CTA0 does the single-CTA sort. All CTAs also participate in zero-init - # below, matching aiter's sort_quant_kernel_impl prologue=0 path. - sort_if = scf.IfOp(is_sort_cta) + # CTA0 does the single-CTA sort. The remaining CTAs zero the atomic + # output buffer so the sort CTA does not contend with the streaming + # int4 stores. + sort_if = scf.IfOp(is_sort_cta, has_else=True) with ir.InsertionPoint(sort_if.then_block): zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) if_zero = scf.IfOp(zero_valid) @@ -399,16 +400,19 @@ def sort_zero_init( scf.YieldOp([]) # Full-grid zero-init: int4 stores over M * H * sizeof(bf16). - zero_vec = vector.from_elements(vec4_i32, [c0_i32, c0_i32, c0_i32, c0_i32]) - m_idx = ArithValue(i32_m).index_cast(T.index) - total_vecs = m_idx * arith.constant((MODEL_DIM * 2) // 16, index=True) - gtid = bx * arith.constant(threads, index=True) + tx - step = arith.constant(INLINE_ZERO_CTAS * threads, index=True) - zero_loop = scf.ForOp(gtid, total_vecs, step) - with ir.InsertionPoint(zero_loop.body): - vi = zero_loop.induction_variable - elem_i32 = vi * arith.constant(4, index=True) - _global_store_vec4_i32(output_ptr, elem_i32, zero_vec, nontemporal=True) + with ir.InsertionPoint(sort_if.else_block): + zero_vec = vector.from_elements(vec4_i32, [c0_i32, c0_i32, c0_i32, c0_i32]) + m_idx = ArithValue(i32_m).index_cast(T.index) + total_vecs = m_idx * arith.constant((MODEL_DIM * 2) // 16, index=True) + zero_bx = bx - arith.index(1) + gtid = zero_bx * arith.constant(threads, index=True) + tx + step = arith.constant(INLINE_ZERO_CTAS * threads, index=True) + zero_loop = scf.ForOp(gtid, total_vecs, step) + with ir.InsertionPoint(zero_loop.body): + vi = zero_loop.induction_variable + elem_i32 = vi * arith.constant(4, index=True) + _global_store_vec4_i32(output_ptr, elem_i32, zero_vec, nontemporal=True) + scf.YieldOp([]) scf.YieldOp([]) @flyc.jit @@ -443,7 +447,7 @@ def launch_sort_zero_init( atomic_output, m, ).launch( - grid=(INLINE_ZERO_CTAS, 1, 1), + grid=(INLINE_ZERO_CTAS + 1, 1, 1), block=(threads, 1, 1), stream=stream, ) diff --git a/profile_small_bm16.py b/profile_small_bm16.py index 0e0ce2194..064d47512 100644 --- a/profile_small_bm16.py +++ b/profile_small_bm16.py @@ -8,16 +8,35 @@ STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -# Keep the profiler graph window bounded: very large single profiler windows can -# drop CUDA kernel events on this stack. For BM16, make each accepted sample -# larger than a smoke test while relying on repeated accepted samples for the -# median. -DEFAULT_PROFILE_WARMUP = 3000 -DEFAULT_PROFILE_GRAPH_ITERS = 128 -DEFAULT_PROFILE_REPLAYS = 4 -DEFAULT_PROFILE_REPEAT = 101 -DEFAULT_PROFILE_MAX_RETRIES = 2000 -DEFAULT_PROFILE_AGGREGATION = "by-kernel" +# Default to a fast iteration preset. The final preset keeps the old long-run +# settings for handoff numbers. +PROFILE_PRESETS = { + "smoke": { + "warmup": 100, + "graph_iters": 32, + "replays": 1, + "repeat": 5, + "max_retries": 100, + "aggregation": "by-kernel", + }, + "quick": { + "warmup": 500, + "graph_iters": 64, + "replays": 2, + "repeat": 21, + "max_retries": 400, + "aggregation": "by-kernel", + }, + "final": { + "warmup": 3000, + "graph_iters": 128, + "replays": 4, + "repeat": 101, + "max_retries": 2000, + "aggregation": "by-kernel", + }, +} +DEFAULT_PROFILE_PRESET = "quick" def _is_cuda_event(evt) -> bool: @@ -338,16 +357,25 @@ def main(): default="aiter,sort_aiter,gemm1fly_aiter,allfly", help=f"comma-separated subset of: {','.join(small.RUNNER_ORDER)}", ) - parser.add_argument("--warmup", type=int, default=DEFAULT_PROFILE_WARMUP) - parser.add_argument("--graph-iters", type=int, default=DEFAULT_PROFILE_GRAPH_ITERS) - parser.add_argument("--replays", type=int, default=DEFAULT_PROFILE_REPLAYS) - parser.add_argument("--repeat", type=int, default=DEFAULT_PROFILE_REPEAT) - parser.add_argument("--max-retries", type=int, default=DEFAULT_PROFILE_MAX_RETRIES) + parser.add_argument( + "--preset", + choices=tuple(PROFILE_PRESETS), + default=DEFAULT_PROFILE_PRESET, + help=( + "profiling budget: smoke is a quick sanity check, quick is the " + "default iteration mode, final uses long handoff settings" + ), + ) + parser.add_argument("--warmup", type=int, default=None) + parser.add_argument("--graph-iters", type=int, default=None) + parser.add_argument("--replays", type=int, default=None) + parser.add_argument("--repeat", type=int, default=None) + parser.add_argument("--max-retries", type=int, default=None) parser.add_argument("--expected-kernels", type=int, default=3) parser.add_argument( "--aggregation", choices=("ordered", "by-kernel"), - default=DEFAULT_PROFILE_AGGREGATION, + default=None, help=( "ordered requires a complete event sequence for every graph replay; " "by-kernel estimates per-iteration time from each kernel's captured " @@ -357,6 +385,11 @@ def main(): parser.add_argument("--trace-dir", default=None) args = parser.parse_args() + preset = PROFILE_PRESETS[args.preset] + for key, value in preset.items(): + if getattr(args, key) is None: + setattr(args, key, value) + if args.graph_iters <= 0 or args.replays <= 0 or args.repeat <= 0: raise ValueError("--graph-iters, --replays, and --repeat must be positive") if args.max_retries < 0: @@ -375,7 +408,7 @@ def main(): print(f"GPU: {b.torch.cuda.get_device_name(0)}") print(f"Shape: NE={shape.NE} H={shape.H} INTER={shape.INTER} TOPK={shape.TOPK}") print( - f"mode=graph warmup={args.warmup} graph_iters={args.graph_iters} " + f"mode=graph preset={args.preset} warmup={args.warmup} graph_iters={args.graph_iters} " f"replays={args.replays} logical_iters={args.graph_iters * args.replays} " f"repeat={args.repeat} " f"logical_iters_per_runner={args.graph_iters * args.replays * args.repeat} " From 322b80f6d96e75667278f38d17510195aa218f31 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 10 Jun 2026 08:50:48 +0000 Subject: [PATCH 056/118] slower but not mlir --- kimi_fp4_moe_small_bm16.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 9bea7f699..6afd05a9d 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -203,7 +203,7 @@ def compile_kimi_mxfp4_sort_zero_init_bm16(): allocator.ptr = lds_scratch_offset + 16 * 4 @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v4_ifelse", + name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v7_scan_pycmp", known_block_size=[threads, 1, 1], ) def sort_zero_init( @@ -264,11 +264,8 @@ def sort_zero_init( # int4 stores. sort_if = scf.IfOp(is_sort_cta, has_else=True) with ir.InsertionPoint(sort_if.then_block): - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(if_zero.then_block): + if tx < c_experts_idx: memref.store(c0_i32, count, [tx]) - scf.YieldOp([]) gpu.barrier() m_idx = ArithValue(i32_m).index_cast(T.index) @@ -295,7 +292,7 @@ def sort_zero_init( lane_i32 = tx_i32 % arith.constant(64, type=i32) wave_i32 = tx_i32 // arith.constant(64, type=i32) - scan_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + scan_valid = tx < c_experts_idx cnt = ArithValue( arith.select(scan_valid, memref.load(count, [tx]), arith._to_raw(c0_i32)) ) @@ -2051,3 +2048,6 @@ def run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm( inter_sorted_shuffled_scale, ) return sort.atomic_output + +if __name__ == "__main__": + compile_kimi_mxfp4_sort_zero_init_bm16() From 1a0f8a4e6bbfd4a1683fd80d0f7642150515a141 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 11 Jun 2026 06:48:42 +0000 Subject: [PATCH 057/118] zz --- bench_flydsl_16384.py | 126 + bm_128_moe.py | 142 ++ docs/kimi_fp4_moe_16384_opt_notes.md | 193 ++ kimi_fp4_moe_16384_opt.py | 2 +- kimi_fp4_moe_16384_opt_bm128_bn512.py | 2750 ++++++++++++++++++++ kimi_fp4_moe_16384_opt_bm128_bn512_all.py | 2777 ++++++++++++++++++++ kimi_fp4_moe_16384_opt_bm128_storemask.py | 2726 ++++++++++++++++++++ kimi_fp4_moe_16384_opt_bm128p64.py | 2787 +++++++++++++++++++++ kimi_fp4_moe_16384_opt_bm96.py | 2760 ++++++++++++++++++++ kimi_fp4_moe_small_bm16.py | 2 +- 10 files changed, 14263 insertions(+), 2 deletions(-) create mode 100644 bm_128_moe.py create mode 100644 kimi_fp4_moe_16384_opt_bm128_bn512.py create mode 100644 kimi_fp4_moe_16384_opt_bm128_bn512_all.py create mode 100644 kimi_fp4_moe_16384_opt_bm128_storemask.py create mode 100644 kimi_fp4_moe_16384_opt_bm128p64.py create mode 100644 kimi_fp4_moe_16384_opt_bm96.py diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index b0b9c1187..fc729606e 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -41,6 +41,21 @@ MXFP4_STAGE2_KERNEL, run_kimi_fp4_mxfp4_moe_16384_all_flydsl, ) +from kimi_fp4_moe_16384_opt_bm96 import ( # noqa: E402 + run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm96, +) +from kimi_fp4_moe_16384_opt_bm128p64 import ( # noqa: E402 + run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128p64, +) +from kimi_fp4_moe_16384_opt_bm128_storemask import ( # noqa: E402 + run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_storemask, +) +from kimi_fp4_moe_16384_opt_bm128_bn512 import ( # noqa: E402 + run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512, +) +from kimi_fp4_moe_16384_opt_bm128_bn512_all import ( # noqa: E402 + run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512_all, +) M = TOKEN @@ -187,6 +202,66 @@ def run_local_mxfp4_all_flydsl(hidden, topk_ids, topk_weight, weights): ) +def run_local_mxfp4_all_flydsl_bm96(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm96( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_all_flydsl_bm128p64(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128p64( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_all_flydsl_bm128_storemask(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_storemask( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_all_flydsl_bm128_bn512(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + +def run_local_mxfp4_all_flydsl_bm128_bn512_all(hidden, topk_ids, topk_weight, weights): + return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512_all( + hidden, + weights["w1"], + w2=weights["w2"], + topk_ids=topk_ids, + topk_weight=topk_weight, + w1_scale=weights["w1_scale"], + w2_scale=weights["w2_scale"], + ) + + def make_runners(hidden, topk_ids, topk_weight, weights): return { "aiter_moe": lambda: run_aiter_moe( @@ -213,6 +288,36 @@ def make_runners(hidden, topk_ids, topk_weight, weights): topk_weight, weights["mxfp4"], ), + "local_mxfp4_all_flydsl_bm96": lambda: run_local_mxfp4_all_flydsl_bm96( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_mxfp4_all_flydsl_bm128p64": lambda: run_local_mxfp4_all_flydsl_bm128p64( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_mxfp4_all_flydsl_bm128_storemask": lambda: run_local_mxfp4_all_flydsl_bm128_storemask( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_mxfp4_all_flydsl_bm128_bn512": lambda: run_local_mxfp4_all_flydsl_bm128_bn512( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), + "local_mxfp4_all_flydsl_bm128_bn512_all": lambda: run_local_mxfp4_all_flydsl_bm128_bn512_all( + hidden, + topk_ids, + topk_weight, + weights["mxfp4"], + ), } @@ -311,6 +416,27 @@ def main(): ("aiter_mxfp4_vs_aiter", "aiter_mxfp4_moe", "aiter_moe"), ("local_vs_aiter", "local_kimi_fp4", "aiter_moe"), ("local_mxfp4_all_flydsl_vs_aiter_mxfp4", "local_mxfp4_all_flydsl", "aiter_mxfp4_moe"), + ("local_mxfp4_all_flydsl_bm96_vs_aiter_mxfp4", "local_mxfp4_all_flydsl_bm96", "aiter_mxfp4_moe"), + ( + "local_mxfp4_all_flydsl_bm128p64_vs_aiter_mxfp4", + "local_mxfp4_all_flydsl_bm128p64", + "aiter_mxfp4_moe", + ), + ( + "local_mxfp4_all_flydsl_bm128_storemask_vs_aiter_mxfp4", + "local_mxfp4_all_flydsl_bm128_storemask", + "aiter_mxfp4_moe", + ), + ( + "local_mxfp4_all_flydsl_bm128_bn512_vs_aiter_mxfp4", + "local_mxfp4_all_flydsl_bm128_bn512", + "aiter_mxfp4_moe", + ), + ( + "local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4", + "local_mxfp4_all_flydsl_bm128_bn512_all", + "aiter_mxfp4_moe", + ), ] for name, lhs_name, rhs_name in check_specs: if lhs_name not in outputs or rhs_name not in outputs: diff --git a/bm_128_moe.py b/bm_128_moe.py new file mode 100644 index 000000000..1ded109cc --- /dev/null +++ b/bm_128_moe.py @@ -0,0 +1,142 @@ + +import torch +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl.expr.typing import T +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + +TOKEN = 16384 +BLOCK_M = 128 +TOPK = 9 +EXPERTS = 385 +def div_up(a: int, b: int) -> int: + return (a + b - 1) // b + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) # TODO(是否要这个?) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes) + +def _elem_offset_to_i64(elem_offset): + + + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4 + ).result + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor): + assert topk_ids.shape == (TOKEN, TOPK) == topk_weight.shape + max_sorted = div_up(TOKEN * TOPK, BLOCK_M) + EXPERTS + blocks = max_sorted // BLOCK_M + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 # 前面的 int * experts个吧.. 这个不需要align么? + + total_pairs = TOKEN * TOPK + topk_nbytes = total_pairs * 4 + sort_ctas = 16 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 # TODO(是否开多了?为啥不和TOPK相关)? + threads = 1024 + + @flyc.kernel( + name = "sort kernel", + know_block_size = [BLOCK_M, 1, 1] + ) + def sort_count(arg_topk_ids: fx.Pointer, + arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_idx.x + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + if tx < arith.constant(EXPERTS, index=True): + memref.store(arith.constant(0, type=i32), local_count, [tx]) + # local_count[tx] = 0 + gpu.barrier() + per_cta = div_up(total_pairs, sort_ctas) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + for it in range_constexpr(div_up(per_cta, threads)): + idx = c_start + tx + arith.constant(it * threads, index=True) + if idx <= end: + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, 1) + + + + diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md index 0140bd400..5bee391a2 100644 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ b/docs/kimi_fp4_moe_16384_opt_notes.md @@ -3094,3 +3094,196 @@ Rejected related trials: Conclusion: keep v13 known-block. It reduces the retained M=64 GEMM1 gap from about `+0.651 us` to about `+0.193 us` in the default graph-profiler window. + +## BM96 GEMM1 v2 64+32 LDS Staging Trial + +Tried replacing the retained BM96/BN512 GEMM1 accumulator epilogue staging from +three 32-row LDS stages to two stages of 64 rows then 32 rows: + +```text +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM96_BN512_v2_seg64p32 +``` + +Correctness remained in the accepted approximate band for the full all-FlyDSL +path: + +```text +cos=0.972634 max_abs=7.007812 +``` + +Graph event timing: + +| runner | median | +| --- | ---: | +| `aiter_mxfp4_moe` | 1846.5 us | +| `local_mxfp4_all_flydsl_bm96` | 1907.0 us | + +Graph profiler median by kernel: + +| stage | aiter | BM96 v2 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.2 us | 6.7 us | +0.5 us | +| sort_cumsum | 10.2 us | 10.9 us | +0.7 us | +| sort_place_pad | 31.6 us | 32.6 us | +0.9 us | +| quant | 58.4 us | 59.2 us | +0.8 us | +| sort_scales | 55.4 us | 53.1 us | -2.3 us | +| GEMM1 | 691.0 us | 741.2 us | +50.2 us | +| GEMM2 | 859.5 us | 871.0 us | +11.5 us | +| scatter_reduce | 133.8 us | 130.1 us | -3.7 us | +| total | 1846.2 us | 1905.7 us | +59.5 us | + +Conclusion: reject v2. Reducing the number of accumulator staging phases did +not move GEMM1 relative to the retained 32-row segmented version (`~740.5 us` in +prior graph-profiler runs), while doubling the epilogue LDS footprint from 64 KiB +to 128 KiB. The active BM96 file is kept on the cleaner three-stage +`v1_mseg32_spillcheck` variant. + +Post-revert graph event smoke with the active `v1_mseg32_spillcheck` file: + +```text +aiter_mxfp4_moe_us=1844.1 +local_mxfp4_all_flydsl_bm96_us=1897.1 +cos=0.972026 max_abs=7.292969 +``` + +## BM128 GEMM2 BN512 Trial + +Added an isolated BM128/BN512 GEMM2 experiment: + +```text +kimi_fp4_moe_16384_opt_bm128_bn512.py +flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog +``` + +The GEMM1 path is unchanged from the retained BM128 kernel. GEMM2 changes: + +- `tile_m = 128`, `tile_n = 512`, `tile_k = 256` +- persistent CTA grid stays at 256 CTAs +- output epilogue uses 32-row segmented LDS staging so the f32 LDS tile is + `32 * 512 * 4 = 65536 B` instead of the impossible full + `128 * 512 * 4 = 262144 B` +- padding-row store mask from the BM128/storemask trial is preserved +- accumulator hint is raised to `amdgpu-agpr-alloc = 256,256` + +Resource metadata from `resource_inspect/bm128_bn512_gemm2_dump`: + +| kernel | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| BM128/BN256 storemask | 133120 B | 52 | 364 | 128 | 0 | 0 | 0 B | +| BM128/BN512 segmented | 67584 B | 56 | 440 | 256 | 0 | 0 | 0 B | + +So the user's hunch was right on spill: the BN512 variant compiles without +SGPR/VGPR spills and has no private segment. It does, however, push AGPR usage +to 256 and VGPR usage to 440. + +Medium graph-event comparison: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512 \ + --warmup 100 --graph-iters 128 --measure 31 --repeat 3 +``` + +| runner | samples | median | +| --- | --- | ---: | +| `aiter_mxfp4_moe` | 1836.3, 1845.3, 1845.0 us | 1845.0 us | +| `local_mxfp4_all_flydsl_bm128_storemask` | 1896.2, 1895.0, 1899.3 us | 1896.2 us | +| `local_mxfp4_all_flydsl_bm128_bn512` | 1923.5, 1920.0, 1920.1 us | 1920.1 us | + +Graph profiler with one captured logical iteration per replay: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512 \ + --mode graph --warmup 50 --iters 20 --graph-iters 1 --repeat 5 \ + --max-retries 20 --expected-kernels 8 --top 12 +``` + +| stage | BM128/storemask | BM128/BN512 | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.5 us | 6.5 us | -0.0 us | +| sort_cumsum | 9.8 us | 9.7 us | -0.2 us | +| sort_place_pad | 32.2 us | 32.1 us | -0.2 us | +| quant | 54.3 us | 54.5 us | +0.2 us | +| sort_scales | 55.6 us | 55.3 us | -0.2 us | +| GEMM1 | 694.6 us | 695.7 us | +1.2 us | +| GEMM2 | 930.3 us | 952.2 us | +22.0 us | +| scatter_reduce | 129.6 us | 129.8 us | +0.2 us | +| total | 1914.5 us | 1938.1 us | +23.6 us | + +Conclusion: reject BM128/BN512 for now. It halves the N-block count but the +larger accumulator footprint and segmented epilogue make GEMM2 about `+22 us` +slower than the retained BM128/BN256 storemask path. + +## BM128 GEMM1+GEMM2 BN512 Trial + +Tried changing GEMM1 as well, in a separate experiment file: + +```text +kimi_fp4_moe_16384_opt_bm128_bn512_all.py +flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_BN512_v0_mseg32 +flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog +``` + +GEMM1 changes: + +- `tile_m = 128`, `tile_n = 512`, `tile_k = 256` +- output epilogue uses 32-row segmented LDS staging copied from the BM96/BN512 + path, so the accumulator staging buffer is `32 * 512 * 4 = 65536 B` +- launch grid becomes `(2, 1534, 1)`, i.e. the same `3068` CTAs as the BM128 + BN256 GEMM1 path `(4, 1534, 1)` + +Correctness is close enough for the relaxed criterion: + +```text +local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4_cos=0.999806 +local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4_max_abs=2.000000 +``` + +Medium graph-event comparison: + +```text +/opt/venv/bin/python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512,local_mxfp4_all_flydsl_bm128_bn512_all \ + --warmup 100 --graph-iters 128 --measure 31 --repeat 3 +``` + +| runner | samples | median | +| --- | --- | ---: | +| `aiter_mxfp4_moe` | 1850.8, 1840.6, 1851.5 us | 1850.8 us | +| `local_mxfp4_all_flydsl_bm128_storemask` | 1896.0, 1898.1, 1896.4 us | 1896.4 us | +| `local_mxfp4_all_flydsl_bm128_bn512` | 1917.7, 1918.6, 1923.7 us | 1918.6 us | +| `local_mxfp4_all_flydsl_bm128_bn512_all` | 2066.2, 2066.9, 2067.5 us | 2066.9 us | + +Resource metadata: + +| GEMM1 kernel | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| BM128/BN256 v36 | 131072 B | 38 | 300 | 128 | 0 | 0 | 0 B | +| BM128/BN512 mseg32 | 65536 B | 44 | 512 | 256 | 0 | 56 | 180 B | + +Graph profiler with one captured logical iteration per replay: + +```text +/opt/venv/bin/python profile_flydsl_16384.py \ + --runners local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512_all \ + --mode graph --warmup 50 --iters 20 --graph-iters 1 --repeat 3 \ + --max-retries 20 --expected-kernels 8 --top 12 +``` + +| stage | BM128/storemask | BM128/BN512 all | delta | +| --- | ---: | ---: | ---: | +| sort_count | 6.7 us | 6.5 us | -0.2 us | +| sort_cumsum | 9.8 us | 9.5 us | -0.3 us | +| sort_place_pad | 32.1 us | 31.9 us | -0.2 us | +| quant | 55.1 us | 54.5 us | -0.5 us | +| sort_scales | 55.6 us | 54.0 us | -1.6 us | +| GEMM1 | 694.0 us | 851.2 us | +157.3 us | +| GEMM2 | 935.9 us | 943.1 us | +7.3 us | +| scatter_reduce | 129.6 us | 129.3 us | -0.2 us | +| total | 1917.8 us | 2078.9 us | +161.0 us | + +Conclusion: reject BM128/BN512 for GEMM1. It halves the N grid count but doubles +the accumulator pressure (`AGPR=256`) and spills VGPRs, so GEMM1 regresses by +about `+157 us`. Keep the retained BM128/BN256 storemask path as the best +BM128 baseline. diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py index 3adb7175d..3a2beae5d 100644 --- a/kimi_fp4_moe_16384_opt.py +++ b/kimi_fp4_moe_16384_opt.py @@ -1959,7 +1959,7 @@ def compile_kimi_mxfp4_sort_16384(): cumsum_nbytes = 4 reverse_nbytes = total_pairs * 4 masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 + block_offsets_nbytes = EXPERTS * sort_ctas* 4 real_counts_nbytes = EXPERTS * 4 gpu_arch = get_hip_arch() diff --git a/kimi_fp4_moe_16384_opt_bm128_bn512.py b/kimi_fp4_moe_16384_opt_bm128_bn512.py new file mode 100644 index 000000000..eff13f331 --- /dev/null +++ b/kimi_fp4_moe_16384_opt_bm128_bn512.py @@ -0,0 +1,2750 @@ +"""BM128/BN512 experiment that skips GEMM2 padding-row output stores.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 128 +MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" +MXFP4_STAGE2_KERNEL = ( + "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a correctness-first BM128 port of aiter's selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" + + @flyc.kernel(name=module_name) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + for mi in range_constexpr(m_repeat): + row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(32, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(128, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + scales_per_mr = [] + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for mr in range_constexpr(m_repeat): + row_local = arith.constant(mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp + up_col = gate_col + arith.constant(128, index=True) + gate_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_local) + byte_pos = ( + by * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + ku = by >> arith.constant(1, index=True) + ikxdl = by % arith.constant(2, index=True) + for sub in range_constexpr(tile_m // 32): + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[sub * 2] + hi = scales_per_mr[sub * 2 + 1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 512 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_m = 32 + acc_segment_m_repeat = acc_segment_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = acc_segment_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # BN512 doubles the per-thread accumulator footprint versus BN256: + # (128 / 16) * (512 / 4 / 16) * 4 = 256 f32 accumulator lanes. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "256,256"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + m_indices_nbytes = max_sorted * 4 + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def precompute_row(*, row_local, row): + row_i32 = arith.index_cast(i32, row) + token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) + row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) + return None, row_valid + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( + col_i32 >> arith.constant(5, type=i32) + ) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + for seg_m in range_constexpr(tile_m // acc_segment_m): + seg_m_repeat_base = seg_m * acc_segment_m_repeat + bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) + + def write_segment_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + mi_full = seg_m_repeat_base + mi + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi_full * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=acc_segment_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=acc_segment_m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m_seg, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_segment_row_to_lds, + precompute_row=precompute_row, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + m_indices: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + m_indices, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = (total + c_bm_minus_1) & c_bm_mask + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start >> arith.constant(7, type=i32) + b1 = end >> arith.constant(7, type=i32) + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) diff --git a/kimi_fp4_moe_16384_opt_bm128_bn512_all.py b/kimi_fp4_moe_16384_opt_bm128_bn512_all.py new file mode 100644 index 000000000..df4e4e2b6 --- /dev/null +++ b/kimi_fp4_moe_16384_opt_bm128_bn512_all.py @@ -0,0 +1,2777 @@ +"""BM128/BN512 experiment that skips GEMM2 padding-row output stores.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 128 +MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" +MXFP4_STAGE2_KERNEL = ( + "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a correctness-first BM128 port of aiter's selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 512 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_m = 32 + acc_segment_m_repeat = acc_segment_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = acc_segment_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_BN512_v0_mseg32" + + @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for seg_m in range_constexpr(tile_m // acc_segment_m): + seg_m_repeat_base = seg_m * acc_segment_m_repeat + + for mi_seg in range_constexpr(acc_segment_m_repeat): + mi = seg_m_repeat_base + mi_seg + row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(n_per_wave // 2, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(tile_n // 2, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + for n_half in range_constexpr(tile_n // 256): + scales_per_mr = [] + for mr_pair in range_constexpr(2): + global_mr = seg_m_repeat_base + mr_pair + row_local = arith.constant(mr_pair * 16, index=True) + m_lane + row_global = arith.constant(global_mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = ( + arith.constant(n_half * 128, index=True) + + wave_grp * arith.constant(32, index=True) + + col_in_grp + ) + up_col = gate_col + arith.constant(tile_n // 2, index=True) + gate_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + gate_col], + ), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + up_col], + ), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_global) + byte_pos = ( + by * arith.constant(tile_n // 4, index=True) + + arith.constant(n_half * 64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) + ku = by_scale >> arith.constant(1, index=True) + ikxdl = by_scale % arith.constant(2, index=True) + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(seg_m, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[0] + hi = scales_per_mr[1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast( + i32, + dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), + ) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + gpu.barrier() + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 512 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_m = 32 + acc_segment_m_repeat = acc_segment_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = acc_segment_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # BN512 doubles the per-thread accumulator footprint versus BN256: + # (128 / 16) * (512 / 4 / 16) * 4 = 256 f32 accumulator lanes. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "256,256"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + m_indices_nbytes = max_sorted * 4 + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def precompute_row(*, row_local, row): + row_i32 = arith.index_cast(i32, row) + token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) + row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) + return None, row_valid + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( + col_i32 >> arith.constant(5, type=i32) + ) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + for seg_m in range_constexpr(tile_m // acc_segment_m): + seg_m_repeat_base = seg_m * acc_segment_m_repeat + bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) + + def write_segment_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + mi_full = seg_m_repeat_base + mi + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi_full * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=acc_segment_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=acc_segment_m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m_seg, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_segment_row_to_lds, + precompute_row=precompute_row, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + m_indices: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + m_indices, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = (total + c_bm_minus_1) & c_bm_mask + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start >> arith.constant(7, type=i32) + b1 = end >> arith.constant(7, type=i32) + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) diff --git a/kimi_fp4_moe_16384_opt_bm128_storemask.py b/kimi_fp4_moe_16384_opt_bm128_storemask.py new file mode 100644 index 000000000..ef3dcbe70 --- /dev/null +++ b/kimi_fp4_moe_16384_opt_bm128_storemask.py @@ -0,0 +1,2726 @@ +"""BM128 experiment that skips GEMM2 padding-row output stores.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 128 +MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" +MXFP4_STAGE2_KERNEL = ( + "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a correctness-first BM128 port of aiter's selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" + + @flyc.kernel(name=module_name) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + for mi in range_constexpr(m_repeat): + row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(32, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(128, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + scales_per_mr = [] + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for mr in range_constexpr(m_repeat): + row_local = arith.constant(mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp + up_col = gate_col + arith.constant(128, index=True) + gate_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_local) + byte_pos = ( + by * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + ku = by >> arith.constant(1, index=True) + ikxdl = by % arith.constant(2, index=True) + for sub in range_constexpr(tile_m // 32): + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[sub * 2] + hi = scales_per_mr[sub * 2 + 1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA + # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve + # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + m_indices_nbytes = max_sorted * 4 + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v10_skip_pad_epilog" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def precompute_row(*, row_local, row): + row_i32 = arith.index_cast(i32, row) + token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) + row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) + return None, row_valid + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( + col_i32 >> arith.constant(5, type=i32) + ) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=tile_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_row_to_lds, + precompute_row=precompute_row, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + m_indices: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + m_indices, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = (total + c_bm_minus_1) & c_bm_mask + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start >> arith.constant(7, type=i32) + b1 = end >> arith.constant(7, type=i32) + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) diff --git a/kimi_fp4_moe_16384_opt_bm128p64.py b/kimi_fp4_moe_16384_opt_bm128p64.py new file mode 100644 index 000000000..b8417a9ee --- /dev/null +++ b/kimi_fp4_moe_16384_opt_bm128p64.py @@ -0,0 +1,2787 @@ +"""BM128+64/BN256 experiment for the fixed-shape FlyDSL mxfp4 MoE path.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 192 +MXFP4_STAGE1_KERNEL = "flydsl_experiment_mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128P64_BN256" +MXFP4_STAGE2_KERNEL = ( + "flydsl_experiment_mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128P64_BN256_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a BM128+64/BN256 experiment based on the BM128 aiter-selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_ms = (128, 64) + acc_segment_m_starts = (0, 128) + acc_segment_m_repeats = tuple(seg_m // 16 for seg_m in acc_segment_ms) + acc_segment_m_start_repeats = tuple(seg_start // 16 for seg_start in acc_segment_m_starts) + max_acc_segment_m = max(acc_segment_ms) + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = max_acc_segment_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128P64_BN256_v0_seg128p64" + + @flyc.kernel(name=module_name) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(max_acc_segment_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for seg_i in range_constexpr(len(acc_segment_ms)): + seg_repeat = acc_segment_m_repeats[seg_i] + seg_repeat_base = acc_segment_m_start_repeats[seg_i] + seg_chunk32_base = acc_segment_m_starts[seg_i] // 32 + + for mi_seg in range_constexpr(seg_repeat): + mi = seg_repeat_base + mi_seg + row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(n_per_wave // 2, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(tile_n // 2, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + for chunk32 in range_constexpr(seg_repeat // 2): + for n_half in range_constexpr(tile_n // 256): + scales_per_mr = [] + for mr_pair in range_constexpr(2): + mr_seg = chunk32 * 2 + mr_pair + global_mr = seg_repeat_base + mr_seg + row_local = arith.constant(mr_seg * 16, index=True) + m_lane + row_global = arith.constant(global_mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = ( + arith.constant(n_half * 128, index=True) + + wave_grp * arith.constant(32, index=True) + + col_in_grp + ) + up_col = gate_col + arith.constant(tile_n // 2, index=True) + gate_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + gate_col], + ), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + up_col], + ), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_global) + byte_pos = ( + by * arith.constant(tile_n // 4, index=True) + + arith.constant(n_half * 64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) + ku = by_scale >> arith.constant(1, index=True) + ikxdl = by_scale % arith.constant(2, index=True) + chunk = ( + bx * arith.constant(tile_m // 32, index=True) + + arith.constant(seg_chunk32_base + chunk32, index=True) + ) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[0] + hi = scales_per_mr[1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast( + i32, + dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), + ) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + gpu.barrier() + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_ms = (128, 64) + acc_segment_m_starts = (0, 128) + acc_segment_m_repeats = tuple(seg_m // 16 for seg_m in acc_segment_ms) + acc_segment_m_start_repeats = tuple(seg_start // 16 for seg_start in acc_segment_m_starts) + max_acc_segment_m = max(acc_segment_ms) + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = max_acc_segment_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # Keep the BM192/BN256 accumulator tile in AGPRs. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "192,192"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128P64_BN256_v0_seg128p64" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(max_acc_segment_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + + def _load_sub(sub): + scale_idx = ( + (chunk_base + sub) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = arith.constant(slot, index=True) * scale_slot_dw + sub * scale_sub_dw + lane_word + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + for sub_base in range_constexpr(0, tile_m // 32, num_waves): + sub = arith.constant(sub_base, index=True) + wave_id + if const_expr(sub_base + num_waves <= tile_m // 32): + _load_sub(sub) + else: + valid_sub = arith.cmpi( + CmpIPredicate.ult, + wave_id, + arith.constant(tile_m // 32 - sub_base, index=True), + ) + _if_sub = scf.IfOp(valid_sub) + with ir.InsertionPoint(_if_sub.then_block): + _load_sub(sub) + scf.YieldOp([]) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + for seg_i in range_constexpr(len(acc_segment_ms)): + seg_m = acc_segment_ms[seg_i] + seg_m_repeat = acc_segment_m_repeats[seg_i] + seg_m_repeat_base = acc_segment_m_start_repeats[seg_i] + bx_m_seg = bx_m + arith.constant(acc_segment_m_starts[seg_i], index=True) + + def write_segment_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + mi_full = seg_m_repeat_base + mi + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi_full * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=seg_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=seg_m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m_seg, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_segment_row_to_lds, + precompute_row=None, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 // arith.constant(tile_m, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128P64_v0", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128P64_v0", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_block_m = arith.constant(block_m, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = ((total + c_bm_minus_1) // c_block_m) * c_block_m + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start // c_block_m + b1 = end // c_block_m + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128P64_v0", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128P64_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128P64_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) // arith.constant(block_m, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) diff --git a/kimi_fp4_moe_16384_opt_bm96.py b/kimi_fp4_moe_16384_opt_bm96.py new file mode 100644 index 000000000..239140a78 --- /dev/null +++ b/kimi_fp4_moe_16384_opt_bm96.py @@ -0,0 +1,2760 @@ +"""BM96/BN512 experiment for the fixed-shape FlyDSL mxfp4 MoE path.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 96 +MXFP4_STAGE1_KERNEL = "flydsl_experiment_mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM96_BN512" +MXFP4_STAGE2_KERNEL = ( + "flydsl_experiment_mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM96_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a BM96/BN512 experiment based on the BM128 aiter-selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 512 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_m = 32 + acc_segment_m_repeat = acc_segment_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = acc_segment_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM96_BN512_v3_knownblock" + + @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for seg_m in range_constexpr(tile_m // acc_segment_m): + seg_m_repeat_base = seg_m * acc_segment_m_repeat + + for mi_seg in range_constexpr(acc_segment_m_repeat): + mi = seg_m_repeat_base + mi_seg + row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(n_per_wave // 2, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(tile_n // 2, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + for n_half in range_constexpr(tile_n // 256): + scales_per_mr = [] + for mr_pair in range_constexpr(2): + global_mr = seg_m_repeat_base + mr_pair + row_local = arith.constant(mr_pair * 16, index=True) + m_lane + row_global = arith.constant(global_mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = ( + arith.constant(n_half * 128, index=True) + + wave_grp * arith.constant(32, index=True) + + col_in_grp + ) + up_col = gate_col + arith.constant(tile_n // 2, index=True) + gate_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + gate_col], + ), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + up_col], + ), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_global) + byte_pos = ( + by * arith.constant(tile_n // 4, index=True) + + arith.constant(n_half * 64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) + ku = by_scale >> arith.constant(1, index=True) + ikxdl = by_scale % arith.constant(2, index=True) + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(seg_m, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[0] + hi = scales_per_mr[1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast( + i32, + dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), + ) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + gpu.barrier() + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 512 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + acc_segment_m = 32 + acc_segment_m_repeat = acc_segment_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = acc_segment_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # Keep the BN512 accumulator tile in AGPRs. BM96/BN512 has + # (96/16)*(512/64/16)*4 = 192 f32 accumulator lanes. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "192,192"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM96_BN512_v0_spillcheck" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + for seg_m in range_constexpr(tile_m // acc_segment_m): + seg_m_repeat_base = seg_m * acc_segment_m_repeat + bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) + + def write_segment_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + mi_full = seg_m_repeat_base + mi + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi_full * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=acc_segment_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=acc_segment_m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m_seg, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_segment_row_to_lds, + precompute_row=None, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 // arith.constant(tile_m, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas * 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM96_v0_spillcheck", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM96_v0_spillcheck", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_block_m = arith.constant(block_m, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = ((total + c_bm_minus_1) // c_block_m) * c_block_m + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start // c_block_m + b1 = end // c_block_m + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM96_v0_spillcheck", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM96_v0_spillcheck", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM96_v0_spillcheck", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) // arith.constant(block_m, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py index 6afd05a9d..5cc43b2c9 100644 --- a/kimi_fp4_moe_small_bm16.py +++ b/kimi_fp4_moe_small_bm16.py @@ -203,7 +203,7 @@ def compile_kimi_mxfp4_sort_zero_init_bm16(): allocator.ptr = lds_scratch_offset + 16 * 4 @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v7_scan_pycmp", + name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v9_cnt_select", known_block_size=[threads, 1, 1], ) def sort_zero_init( From 0b3bd156acdbcae2a9c06de78b782eb0118716d9 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 11 Jun 2026 06:50:21 +0000 Subject: [PATCH 058/118] zz --- kimi_fp4_moe_16384_opt_simplify.py | 2709 ++++++++++++++++++++++++++++ 1 file changed, 2709 insertions(+) create mode 100644 kimi_fp4_moe_16384_opt_simplify.py diff --git a/kimi_fp4_moe_16384_opt_simplify.py b/kimi_fp4_moe_16384_opt_simplify.py new file mode 100644 index 000000000..3a2beae5d --- /dev/null +++ b/kimi_fp4_moe_16384_opt_simplify.py @@ -0,0 +1,2709 @@ +"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" +from __future__ import annotations + +import functools +from dataclasses import dataclass + +import torch + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir import ir +from flydsl._mlir.dialects import llvm, memref, scf +from flydsl._mlir.dialects.arith import CmpIPredicate +from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma +from flydsl.compiler.kernel_function import CompilationContext +from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector +from flydsl.expr.arith import ArithValue +from flydsl.expr.typing import T +from flydsl.runtime.device import get_rocm_arch as get_hip_arch +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from kernels.layout_utils import ( + _div_pow2, + crd2idx, + idx2crd, + get as layout_get, +) +from kernels.mfma_epilogues import c_shuffle_epilog +from kernels.mfma_preshuffle_pipeline import ( + _buffer_load_vec, + swizzle_xor16, + tile_chunk_coord_i32, +) + +from kimi_fp4_moe_16384 import ( + EXPERTS, + INTER_DIM, + MODEL_DIM, + TOKEN, + TOPK, + _ptr_view_safe, + _run_compiled, +) + + +MXFP4_BLOCK_M = 128 +MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" +MXFP4_STAGE2_KERNEL = ( + "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" +) +MXFP4_SCATTER_THREADS = 128 +MXFP4_SCATTER_COLS_PER_THREAD = 8 + + +@dataclass +class Mxfp4SortBuffers: + sorted_token_ids: torch.Tensor + sorted_expert_ids: torch.Tensor + cumsum_tensor: torch.Tensor + reverse_sorted: torch.Tensor + sorted_weights: torch.Tensor + masked_m: torch.Tensor + m_indices: torch.Tensor + max_sorted: int + block_m: int + + +def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: + if t.element_size() == 1 and t.dtype != torch.uint8: + return t.view(torch.uint8) + return t + + +def _ptr_buffer_resource(ptr, num_records_bytes: int): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return buffer_ops.create_buffer_resource_from_addr( + addr_i64, + num_records_bytes=num_records_bytes, + ) + + +def _extract_global_ptr(ptr): + addr = fx.ptrtoint(ptr) + addr_i64 = arith.index_cast(T.i64, addr) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) + + +def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): + if isinstance(elem_offset, int): + elem_offset = arith.constant(elem_offset, type=T.i32) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) + else: + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + elem_offset_i64 = ArithValue(elem_offset_raw) + else: + elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result + + +def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + return llvm.LoadOp( + T.vec(width, T.i32), + ptr, + alignment=4, + nontemporal=nontemporal, + ).result + + +def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) + + +def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + raw_value = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) + + +def _elem_offset_to_i64(elem_offset): + if isinstance(elem_offset, int): + return arith.constant(elem_offset, type=T.i64) + elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset + if isinstance(elem_offset_raw.type, ir.IndexType): + return arith.index_cast(T.i64, elem_offset_raw) + int_type = ir.IntegerType(elem_offset_raw.type) + if int_type.width == 64: + return ArithValue(elem_offset_raw) + return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) + + +def _global_atomic_add_i32(global_ptr, elem_offset, value): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) + ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="agent", + alignment=4, + ).result + + +def _lds_i32_ptr(lds_memref, elem_offset): + elem_offset_i64 = _elem_offset_to_i64(elem_offset) + byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) + base_idx = memref.extract_aligned_pointer_as_index(lds_memref) + ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) + return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) + + +def _lds_atomic_add_i32(lds_memref, elem_offset, value): + ptr = _lds_i32_ptr(lds_memref, elem_offset) + val = value.ir_value() if hasattr(value, "ir_value") else value + return llvm.AtomicRMWOp( + llvm.AtomicBinOp.add, + ptr, + val, + llvm.AtomicOrdering.monotonic, + syncscope="workgroup", + alignment=4, + ).result + + +def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + out_i32 = llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + return out_i32.bitcast(T.f32) + + +def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): + src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) + if offset == 1: + dpp_ctrl = 0xB1 + elif offset == 2: + dpp_ctrl = 0x4E + else: + raise ValueError(f"unsupported DPP xor offset: {offset}") + return llvm.call_intrinsic( + T.i32, + "llvm.amdgcn.update.dpp.i32", + [ + src_i32, + src_i32, + arith.constant(dpp_ctrl, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(0xF, type=T.i32), + arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), + ], + [], + [], + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_scatter_reduce_q_16384(): + """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. + + This mirrors aiter's + ``scatter_reduce_mxfp4_kernel``: + each thread decodes one 8-column MXFP4 group for one token and reduces the + nine routed slots into bf16 output. + """ + + cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD + grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block + qcols_i32 = MODEL_DIM // 2 // 4 + scols_i32 = MODEL_DIM // 32 // 4 + out_i32_stride = MODEL_DIM // 2 + module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" + + @flyc.kernel(name=module_name) + def scatter_reduce_q( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_out: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + + q_ptr = _extract_global_ptr(arg_flat_out_q) + scale_ptr = _extract_global_ptr(arg_flat_out_scale) + out_ptr = _extract_global_ptr(arg_out) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + token_idx = gpu.block_id("y") + + col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx + col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) + col_base_i32 = arith.index_cast(i32, col_base) + token_i32 = arith.index_cast(i32, token_idx) + + c1_i32 = arith.constant(1, type=i32) + c3_i32 = arith.constant(3, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c_topk_i32 = arith.constant(TOPK, type=i32) + c_qcols_i32 = arith.constant(qcols_i32, type=i32) + c_scols_i32 = arith.constant(scols_i32, type=i32) + c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) + + vec2_f32 = T.vec(2, f32) + c0_f32 = arith.constant(0.0, type=f32) + c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) + + def _fma_v2_f32(a, b, c): + return ArithValue( + _math_fma( + arith._to_raw(a), + arith._to_raw(b), + arith._to_raw(c), + ) + ) + + acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] + blk = col_base_i32 >> arith.constant(5, type=i32) + scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) + q_col_word = col_base_i32 >> c3_i32 + + reverse_base = token_i32 * c_topk_i32 + route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) + + def accumulate_route(sorted_pos, route_w): + scale_idx = sorted_pos * c_scols_i32 + scale_word_col + scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) + scale_shift = (blk & c3_i32) << c3_i32 + e8 = (scale_word >> scale_shift) & c255_i32 + scale = (e8 << c23_i32).bitcast(f32) + + q_idx = sorted_pos * c_qcols_i32 + q_col_word + packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) + route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) + for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + decoded_pair = ( + llvm.call_intrinsic( + T.vec(2, f32), + "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", + [packed, scale, arith.constant(pair, type=i32)], + [], + [], + ) + ) + acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) + + route_pos = [] + route_weights = [] + for i in range_constexpr(8): + sorted_pos = ArithValue( + vector.extract( + route_ids_0_7, + static_position=[i], + dynamic_position=[], + ) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + sorted_pos = ArithValue( + _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) + ) + route_pos.append(sorted_pos) + route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) + + for i in range_constexpr(TOPK): + accumulate_route(route_pos[i], route_weights[i]) + + packed_words = [] + for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): + acc_pair = acc_pairs[k] + acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) + acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) + out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) + out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) + _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) + + @flyc.jit + def launch_scatter_reduce_q( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + out: fx.Pointer, + stream: fx.Stream, + ): + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + pass + scatter_reduce_q( + flat_out_q, + flat_out_scale, + reverse_sorted, + sorted_weights, + out, + ).launch( + grid=(grid_x, TOKEN, 1), + block=(MXFP4_SCATTER_THREADS, 1, 1), + stream=stream, + ) + + return launch_scatter_reduce_q + + +def kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q: torch.Tensor, + flat_out_scale: torch.Tensor, + reverse_sorted: torch.Tensor, + sorted_weights: torch.Tensor, + out: torch.Tensor | None = None, +) -> torch.Tensor: + """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" + if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): + raise ValueError( + f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" + ) + if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): + raise ValueError( + "expected flat_out_scale second dim " + f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" + ) + if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): + raise ValueError( + f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" + ) + if out is None: + out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(out.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) + return out + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm1_16384(): + """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. + + Contract matched here: + + ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus + ``inter_sorted_shuffled_scale``. + + This is a correctness-first BM128 port of aiter's selected + ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, + SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 + does not change the end-to-end kernel count. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = (2 * INTER_DIM) // tile_n + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = tile_k // 128 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + num_k_tiles = MODEL_DIM // tile_k + + a_elem_vec_pack = 2 + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride + _x_slots_bytes = 2 * _single_x_bytes + _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 + _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") + lds_offset = allocator._align(allocator.ptr, 16) + lds_scale_offset = lds_offset + _x_slots_bytes + allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) + + x_nbytes = TOKEN * (MODEL_DIM // 2) + x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 + w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) + w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) + expert_nbytes = num_m_blocks * 4 + m_indices_nbytes = max_sorted * 4 + numids_nbytes = 4 + out_q_nbytes = max_sorted * (INTER_DIM // 2) + out_scale_nbytes = max_sorted * 64 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s + _b_c_k_s = MODEL_DIM // _scale_pack_k + _b_c_k0_s = _b_c_k_s // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 + + k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 + k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw + + # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. + k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 + + module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" + + @flyc.kernel(name=module_name) + def gemm1( + arg_inter_sorted_quant: fx.Pointer, + arg_inter_sorted_scale: fx.Pointer, + arg_a_quant: fx.Pointer, + arg_w: fx.Pointer, + arg_a_scale_sorted: fx.Pointer, + arg_w_scale: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_m_indices: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i32 = T.vec(4, i32) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + expert_ptr = _extract_global_ptr(arg_expert_ids) + m_indices_ptr = _extract_global_ptr(arg_m_indices) + numids_ptr = _extract_global_ptr(arg_num_valid_ids) + + tx = gpu.thread_id("x") + by = gpu.block_id("x") + bx = gpu.block_id("y") + bx_m = bx * arith.constant(tile_m, index=True) + bx_m_i32 = arith.index_cast(i32, bx_m) + + num_valid_i32 = _global_load_i32(numids_ptr, 0) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) + + expert_i32 = _global_load_i32(expert_ptr, bx) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) + do_gemm = arith.andi(blk_valid, exp_valid) + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() + lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() + lds_x_slots = [lds_x0, lds_x1] + lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + by_n = by * arith.constant(tile_n, index=True) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) + + x_row_base_div4 = [] + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + sorted_row_i = bx_m + row_local + actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) + row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) + # aiter lets invalid padded rows read one-past the A buffer; MUBUF + # OOB returns zero, which keeps padded inter rows zero. + row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) + row_idx = arith.index_cast(ir.IndexType.get(), row_safe) + x_row_base_div4.append(row_idx * c_k_div4) + + def load_b_packs_k64(k_tile: int, ku: int, ni: int): + k0 = arith.constant(k_tile * k_unroll + ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(k_tile: int): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(k_tile, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + def make_empty_b_tile(): + b_packs0 = [] + b_packs1 = [] + for _ku in range_constexpr(k_unroll): + b_packs0.append([None] * num_acc_n) + b_packs1.append([None] * num_acc_n) + return b_packs0, b_packs1 + + def finish_b_tile(b_packs0, b_packs1): + b_tile = [] + for ku in range_constexpr(k_unroll): + b_tile.append((b_packs0[ku], b_packs1[ku])) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + + def load_a_scale_tile(k_tile: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + scale_idx = ( + arith.constant(mi * k_as_per_chunk_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = vector.extract( + vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), + static_position=[0], + dynamic_position=[], + ) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + def pack_i64x2_to_i32x4(x0, x1): + v2 = vector.from_elements(vec2_i64, [x0, x1]) + return vector.bitcast(vec4_i32, v2) + + def _raw(v): + return v.ir_value() if hasattr(v, "ir_value") else v + + def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, 0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], + asm, + "=a,v,v,v,v", + has_side_effects=True, + ) + + def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): + alo = op_sel_a & 1 + ahi = (op_sel_a >> 1) & 1 + blo = op_sel_b & 1 + bhi = (op_sel_b >> 1) & 1 + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 " + "$0, $1, $2, $0, $3, $4 " + f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" + ) + return llvm.inline_asm( + vec4_f32, + [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + k_idx * _scale_pack_m + imxdl, + a_scale_val, + k_idx * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): + acc_list = list(acc_in) + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + return acc_list + + def compute_tile_jmajor_prefetch_a_b( + acc_in, + lds_x_tile, + b_tile_in, + a_scale, + b_scale, + next_a_tile: int, + next_a_slot: int, + next_b_tile: int, + init_zero: bool = False, + ): + acc_list = list(acc_in) + next_b_packs0, next_b_packs1 = make_empty_b_tile() + a_pairs_v4 = [] + for k_idx in range_constexpr(k_unroll): + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi_idx in range_constexpr(m_repeat): + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) + a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) + + dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) + + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + acc_idx = mi_idx * num_acc_n + ni_idx + for k_idx in range_constexpr(k_unroll): + b_packs0, b_packs1 = b_tile_in[k_idx] + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + op_sel_a = k_idx * _scale_pack_m + imxdl + op_sel_b = k_idx * _scale_pack_n + inxdl + b128_v4 = pack_i64x2_to_i32x4(b0, b1) + a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] + if const_expr(init_zero and k_idx == 0): + acc_list[acc_idx] = mfma_scale_agpr_init( + a128_v4, + b128_v4, + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + else: + acc_list[acc_idx] = mfma_scale_agpr_accum( + a128_v4, + b128_v4, + acc_list[acc_idx], + op_sel_a, + a_scale_val, + op_sel_b, + b_scale_val, + ) + + rocdl.sched_barrier(0) + for k_idx in range_constexpr(k_unroll): + nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) + next_b_packs0[k_idx][ni_idx] = nb0 + next_b_packs1[k_idx][ni_idx] = nb1 + rocdl.sched_barrier(0) + + b_scale_next = load_b_scale_tile(next_b_tile) + return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next + + _dma_bytes = 16 + _wave_size = 64 + + def dma_x_tile_to_lds(k_tile: int, lds_x_tile): + c4_idx = arith.index(4) + base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_x_tile) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def dma_a_scales_to_lds(): + c4_idx = arith.index(4) + c16_idx = arith.index(16) + scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) + chunk_base = bx_m / arith.constant(32, index=True) + lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) + tx_bytes16 = tx * c16_idx + tx_bytes4 = tx * c4_idx + for sub in range_constexpr(tile_m // 32): + sub_idx = arith.constant(sub, index=True) + global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes + lds_sub_base = sub_idx * scale_chunk_bytes + + lds_addr = ( + lds_scale_base + + lds_sub_base + + wave_id * arith.constant(1024, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr, + arith.constant(16, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + for tail in range_constexpr(3): + byte_off = arith.constant(4096 + tail * 1024, index=True) + lds_addr_tail = ( + lds_scale_base + + lds_sub_base + + byte_off + + wave_id * arith.constant(256, index=True) + ) + lds_ptr_tail_i64 = rocdl.readfirstlane( + i64, + arith.index_cast(i64, lds_addr_tail), + ) + lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) + global_offset_tail = arith.index_cast( + i32, + global_sub_base + byte_off + tx_bytes4, + ) + rocdl.raw_ptr_buffer_load_lds( + sx_rsrc, + lds_ptr_tail, + arith.constant(4, type=i32), + global_offset_tail, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + dma_a_scales_to_lds() + rocdl.s_waitcnt(0) + gpu.barrier() + + dma_x_tile_to_lds(0, lds_x_slots[0]) + dma_x_tile_to_lds(1, lds_x_slots[1]) + b_tiles = [load_b_tile(0), load_b_tile(1)] + b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] + # Leave both initial B/B-scale tiles outstanding if possible; A0 + # and A1 must be resident in LDS before the first two compute tiles. + rocdl.s_waitcnt(20) + gpu.barrier() + a_scale = load_a_scale_tile(0) + + for k_tile in range_constexpr(num_k_tiles): + curr_slot = k_tile % 2 + curr_b_slot = k_tile % 2 + next_slot = k_tile % 2 + if const_expr(k_tile + 2 < num_k_tiles): + acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + k_tile + 2, + next_slot, + k_tile + 2, + init_zero=(k_tile == 0), + ) + else: + acc = compute_tile_jmajor( + acc, + lds_x_slots[curr_slot], + b_tiles[curr_b_slot], + a_scale, + b_scales[curr_b_slot], + init_zero=(k_tile == 0), + ) + + if const_expr(k_tile + 1 < num_k_tiles): + # A and B are both two-ahead. When a future tile was + # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads + # outstanding; the next iteration consumes the older tile. + if const_expr(k_tile + 2 < num_k_tiles): + rocdl.s_waitcnt(14) + else: + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale = load_a_scale_tile(k_tile + 1) + if const_expr(k_tile + 2 < num_k_tiles): + b_tiles[curr_b_slot] = b_tile_next + b_scales[curr_b_slot] = b_scale_next + + gpu.barrier() + + c0_f32 = arith.constant(0.0, type=f32) + c1_f32 = arith.constant(1.0, type=f32) + c025_f32 = arith.constant(0.25, type=f32) + neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c4_i32 = arith.constant(4, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + fm_fast = arith.FastMathFlags.fast + + def _fmax_num(a, b): + return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) + + for mi in range_constexpr(m_repeat): + row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) + for j in range_constexpr(num_acc_n): + j_local = j // 2 + col_local = ( + wave_id * arith.constant(32, index=True) + + arith.constant(j_local * 16, index=True) + + lane_mod_16 + ) + if const_expr(j % 2 == 1): + col_local = col_local + arith.constant(128, index=True) + for v_i in range_constexpr(4): + row = row_base + arith.constant(v_i, index=True) + val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + vector.store( + vector.from_elements(T.vec(1, f32), [val]), + lds_acc, + [row * arith.constant(tile_n, index=True) + col_local], + alignment=4, + ) + + gpu.barrier() + + m_lane = tx / arith.constant(16, index=True) + n_lane = tx % arith.constant(16, index=True) + wave_grp = n_lane / arith.constant(4, index=True) + kk = n_lane % arith.constant(4, index=True) + scales_per_mr = [] + + def _silu_mul(g, u): + t = g * neg_log2e + emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) + den = c1_f32 + emu + sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) + return g * sig * u + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + for mr in range_constexpr(m_repeat): + row_local = arith.constant(mr * 16, index=True) + m_lane + result_vals = [] + local_max = c0_f32 + for e in range_constexpr(8): + col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) + gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp + up_col = gate_col + arith.constant(128, index=True) + gate_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), + static_position=[0], + dynamic_position=[], + ) + up_v = vector.extract( + vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), + static_position=[0], + dynamic_position=[], + ) + res = _silu_mul(gate_v, up_v) + result_vals.append(res) + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) + local_max = _fmax_num(local_max, abs_v) + + peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) + local_max = _fmax_num(local_max, peer1) + peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) + local_max = _fmax_num(local_max, peer2) + + amax_i32 = local_max.bitcast(i32) + quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 + sb_raw = quant_scale.bitcast(i32) >> c23_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) + scales_per_mr.append(e8m0) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + result_vals[2 * pair], + result_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, bx_m + row_local) + byte_pos = ( + by * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + kk * arith.constant(4, index=True) + ) + byte_pos_i32 = arith.index_cast(i32, byte_pos) + q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) + buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) + with ir.InsertionPoint(_if_scale.then_block): + ku = by >> arith.constant(1, index=True) + ikxdl = by % arith.constant(2, index=True) + for sub in range_constexpr(tile_m // 32): + chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) + dword_off = ( + chunk * arith.constant(k_out_as_per_chunk_dw, index=True) + + ku * arith.constant(64, index=True) + + wave_grp * arith.constant(16, index=True) + + m_lane + ) + lo = scales_per_mr[sub * 2] + hi = scales_per_mr[sub * 2 + 1] + pair_i32 = lo | (hi << c8_i32) + pair_i16 = arith.TruncIOp(T.i16, pair_i32).result + byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) + buffer_ops.buffer_store( + pair_i16, + out_scale_rsrc, + byte_off, + cache_modifier=4, + offset_is_bytes=True, + ) + scf.YieldOp([]) + + _if_valid = scf.IfOp(do_gemm) + with ir.InsertionPoint(_if_valid.then_block): + _then_body() + scf.YieldOp([]) + + @flyc.jit + def launch_gemm1( + inter_sorted_quant: fx.Pointer, + inter_sorted_scale: fx.Pointer, + a_quant: fx.Pointer, + w: fx.Pointer, + a_scale_sorted: fx.Pointer, + w_scale: fx.Pointer, + expert_ids: fx.Pointer, + m_indices: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm1( + inter_sorted_quant, + inter_sorted_scale, + a_quant, + w, + a_scale_sorted, + w_scale, + expert_ids, + m_indices, + num_valid_ids, + ).launch( + grid=(num_n_blocks, num_m_blocks, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + return launch_gemm1 + + +def kimi_mxfp4_gemm1_16384( + a_quant: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, + w1: torch.Tensor, + w1_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + m_indices: torch.Tensor, + cumsum_tensor: torch.Tensor, + inter_sorted_quant: torch.Tensor | None = None, + inter_sorted_shuffled_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" + device = a_quant.device + max_sorted = mxfp4_max_sorted_16384() + if inter_sorted_quant is None: + inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) + if inter_sorted_shuffled_scale is None: + inter_scale_cols = INTER_DIM // 32 + inter_scale_bytes = max_sorted * (1024 // 64) * 4 + inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols + inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 + inter_sorted_shuffled_scale = torch.empty( + (inter_scale_rows, inter_scale_cols), + device=device, + dtype=torch.uint8, + ) + + args = ( + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w1).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) + return inter_sorted_quant, inter_sorted_shuffled_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): + """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. + + This is the first direct FlyDSL port of aiter's Kimi-only + fixed mxfp4 GEMM2 path. It keeps the public shape fixed: + + - A: sorted fp4, ``[max_sorted, 512 / 2]`` + - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` + - C: packed fp4 plus e8m0 block scales, sorted-row-major + + The current version uses the same 1D persistent CTA grid shape as aiter's + nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL + generated and use VGPR accumulators. + """ + + tile_m = MXFP4_BLOCK_M + tile_n = 256 + tile_k = 256 + total_threads = 256 + max_sorted = mxfp4_max_sorted_16384() + num_m_blocks = max_sorted // tile_m + num_n_blocks = MODEL_DIM // tile_n + persistent_ctas = 256 + + _scale_pack_m = 2 + _scale_pack_n = 2 + _scale_pack_k = 2 + pack_M = 2 + pack_N = 2 + pack_K = 2 + m_repeat = tile_m // 16 + num_waves = 4 + n_per_wave = tile_n // num_waves + num_acc_n = n_per_wave // 16 + k_unroll = 2 + m_repeat_packed = m_repeat // pack_M + num_acc_n_packed = num_acc_n // pack_N + + a_elem_bytes = 1 + b_elem_bytes = 1 + a_elem_vec_pack = 2 + tile_k_bytes = tile_k * a_elem_bytes + _eff_lds_stride = tile_k // a_elem_vec_pack + _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack + _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes + _input_elems = _single_x_bytes + _lds_acc_bytes = tile_m * tile_n * 4 + _lds_x_bytes = 2 * _single_x_bytes + _lds_scale_bytes = 2 * (tile_m // 32) * 256 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") + lds_x0_offset = allocator._align(allocator.ptr, 16) + lds_x1_offset = lds_x0_offset + _single_x_bytes + # Overlay the later f32 epilogue tile with the earlier A staging area. + allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) + lds_scale_offset = allocator._align(allocator.ptr, 16) + allocator.ptr = lds_scale_offset + _lds_scale_bytes + + q_nbytes = max_sorted * (MODEL_DIM // 2) + out_scale_nbytes = max_sorted * (MODEL_DIM // 32) + x_nbytes = max_sorted * (INTER_DIM // 2) + x_scale_nbytes = max_sorted * (1024 // 64) * 4 + w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) + w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) + expert_nbytes = num_m_blocks * 4 + numids_nbytes = 4 + + _b_kpack_bytes_s = 16 + _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes + _b_c_k_s = INTER_DIM // _scale_pack_k + _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 + _b_stride_nlane = _b_kpack_elems_s + _b_stride_klane = 16 * _b_stride_nlane + _b_stride_k0 = 4 * _b_stride_klane + _b_stride_n0 = _b_c_k0_s * _b_stride_k0 + _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 + + # aiter scale-layout constants for K=512, N=7168, BM=128. + k_as_per_chunk_dw = 128 + k_bs_stride_k0_dw = 64 + k_bs_stride_n0_dw = 128 + k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw + + # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA + # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve + # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. + gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} + gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} + + module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax" + + @flyc.kernel(name=module_name) + def gemm2_mxfp4out( + arg_flat_out_q: fx.Pointer, + arg_flat_out_scale: fx.Pointer, + arg_x: fx.Pointer, + arg_w: fx.Pointer, + arg_scale_x: fx.Pointer, + arg_scale_w: fx.Pointer, + arg_expert_ids: fx.Pointer, + arg_num_valid_ids: fx.Pointer, + ): + i32 = T.i32 + i64 = T.i64 + f32 = T.f32 + vec4_f32 = T.vec(4, f32) + vec2_i64 = T.vec(2, i64) + vec4_i64 = T.vec(4, i64) + vec8_i32 = T.vec(8, i32) + vec16_x = T.vec(16, T.f8) + + q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) + w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + + tx = gpu.thread_id("x") + pid = gpu.block_id("x") + + num_valid_i32 = buffer_ops.buffer_load( + numids_rsrc, + arith.constant(0, index=True), + vec_width=1, + dtype=i32, + ) + num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + + base_ptr = allocator.get_base() + lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() + lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() + lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() + lds_scale_i32 = SmemPtr( + base_ptr, + lds_scale_offset, + T.i32, + shape=(_lds_scale_bytes // 4,), + ).get() + + shape_lds = fx.make_shape(tile_m, _eff_lds_stride) + stride_lds = fx.make_stride(_eff_lds_stride, 1) + layout_lds = fx.make_layout(shape_lds, stride_lds) + k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) + layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) + coord_wl = idx2crd(tx, layout_tx_wave_lane) + wave_id = layout_get(coord_wl, 0) + lane_id = layout_get(coord_wl, 1) + coord_l16 = idx2crd(lane_id, layout_lane16) + lane_div_16 = layout_get(coord_l16, 0) + lane_mod_16 = layout_get(coord_l16, 1) + row_a_lds = lane_mod_16 + col_offset_base = lane_div_16 * arith.constant(16, index=True) + n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + + bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads + x_load_bytes = 16 + num_x_loads = bytes_per_thread_x // x_load_bytes + chunk_i32 = x_load_bytes // 4 + tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) + layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) + c_chunk_i32 = arith.constant(chunk_i32, index=True) + tx_i32_base = tx * c_chunk_i32 + c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + + x_col_local_i32 = [] + x_row_local = [] + for i in range_constexpr(num_x_loads): + row_local, col_local_i32 = tile_chunk_coord_i32( + arith, + tx_i32_base=tx_i32_base, + i=i, + total_threads=total_threads, + layout_tile_div4=layout_x_tile_div4, + chunk_i32=chunk_i32, + ) + x_row_local.append(row_local) + x_col_local_i32.append(col_local_i32) + + def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): + col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) + idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) + loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) + a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + return ( + vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + ) + + def pack_i64x4_to_i32x8(x0, x1, x2, x3): + v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) + return vector.bitcast(vec8_i32, v4) + + c0_i64 = arith.constant(0, type=i64) + cbsz = 4 + blgp = 4 + + def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): + acc_list = list(acc_in) + for k_idx in range_constexpr(k_unroll): + ikxdl = k_idx + b_packs0, b_packs1 = b_tile_in[k_idx] + col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) + for mi in range_constexpr(m_repeat_packed): + a_scale_i32 = a_scale[mi] + a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + for ni in range_constexpr(num_acc_n_packed): + b_scale_i32 = b_scale[ni] + b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + for imxdl in range_constexpr(pack_M): + mi_idx = mi * pack_M + imxdl + curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) + a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) + a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) + for inxdl in range_constexpr(pack_N): + ni_idx = ni * pack_N + inxdl + b0 = b_packs0[ni_idx] + b1 = b_packs1[ni_idx] + b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) + acc_idx = mi_idx * num_acc_n + ni_idx + acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( + vec4_f32, + [ + a128, + b128, + acc_list[acc_idx], + cbsz, + blgp, + ikxdl * _scale_pack_m + imxdl, + a_scale_val, + ikxdl * _scale_pack_n + inxdl, + b_scale_val, + ], + ) + return acc_list + + _dma_bytes = 16 + _wave_size = 64 + + def run_one(work_i32): + bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) + by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) + bx = arith.index_cast(ir.IndexType.get(), bx_i32) + by = arith.index_cast(ir.IndexType.get(), by_i32) + bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) + bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) + by_n = by * arith.constant(tile_n, index=True) + + expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) + expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) + expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) + + n_intra_list = [None] * num_acc_n + n_blk_list = [None] * num_acc_n + for ni in range_constexpr(num_acc_n): + c_offset = arith.constant(ni * 16, index=True) + global_n = by_n + n_tile_base + c_offset + lane_mod_16 + n_blk_list[ni] = _div_pow2(global_n, 16) + n_intra_list[ni] = global_n % arith.constant(16, index=True) + + x_row_base_div4 = [] + for i in range_constexpr(num_x_loads): + x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) + + def load_b_packs_k64(base_k_packed, ku: int, ni: int): + k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) + idx_pack = ( + expert_b_base + + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + + k0 * arith.constant(_b_stride_k0, index=True) + + lane_div_16 * arith.constant(_b_stride_klane, index=True) + + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) + ) + b16 = _buffer_load_vec( + buffer_ops, + vector, + w_rsrc, + idx_pack, + elem_type=T.i8, + vec_elems=16, + elem_bytes=1, + offset_in_bytes=True, + cache_modifier=0, + ) + b_i64x2 = vector.bitcast(vec2_i64, b16) + return ( + vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), + vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + ) + + def load_b_tile(base_k_packed): + b_tile = [] + for ku in range_constexpr(k_unroll): + packs0 = [] + packs1 = [] + for ni in range_constexpr(num_acc_n): + b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) + packs0.append(b0) + packs1.append(b1) + b_tile.append((packs0, packs1)) + return b_tile + + lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 + scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) + scale_sub_dw = arith.constant(256 // 4, index=True) + + def stage_a_scale_tile(scale_k_tile: int, slot: int): + chunk_base = bx_m // arith.constant(32, index=True) + scale_idx = ( + (chunk_base + wave_id) + * arith.constant(k_as_per_chunk_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + wave_id * scale_sub_dw + + lane_word + ) + vector.store( + vector.from_elements(T.vec(1, i32), [s]), + lds_scale_i32, + [lds_idx], + alignment=4, + ) + + def load_a_scale_tile(slot: int): + a_scale_tile = [] + for mi in range_constexpr(m_repeat_packed): + lds_idx = ( + arith.constant(slot, index=True) * scale_slot_dw + + arith.constant(mi, index=True) * scale_sub_dw + + lane_word + ) + s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) + s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return a_scale_tile + + def load_b_scale_tile(scale_k_tile: int): + b_scale_tile = [] + mni_base = by * arith.constant(tile_n // 16 // 2, index=True) + mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) + for ni in range_constexpr(num_acc_n_packed): + scale_idx = ( + expert_idx * arith.constant(k_bs_per_expert_dw, index=True) + + (mni_base + arith.constant(ni, index=True)) + * arith.constant(k_bs_stride_n0_dw, index=True) + + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) + + lane_word + ) + s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) + b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) + return b_scale_tile + + def dma_x_tile_to_lds(base_k, lds_buffer): + c4_idx = arith.index(4) + base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) + lds_ptr_i64 = None + for i in range_constexpr(num_x_loads): + row_local_i = x_row_local[i] + col_local_i32_i = x_col_local_i32[i] + col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) + row_k_dw = x_row_base_div4[i] + base_k_div4 + global_byte_idx = row_k_dw * c4_idx + col_local_sw + global_offset = arith.index_cast(i32, global_byte_idx) + if const_expr(i == 0): + lds_addr = ( + memref.extract_aligned_pointer_as_index(lds_buffer) + + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) + ) + lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) + else: + lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) + lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) + rocdl.raw_ptr_buffer_load_lds( + x_rsrc, + lds_ptr, + arith.constant(_dma_bytes, type=i32), + global_offset, + arith.constant(0, type=i32), + arith.constant(0, type=i32), + arith.constant(0, type=i32), + ) + + def _then_body(): + gpu.barrier() + rocdl.sched_barrier(0) + stage_a_scale_tile(0, 0) + stage_a_scale_tile(1, 1) + dma_x_tile_to_lds(arith.index(0), lds_x0) + dma_x_tile_to_lds(arith.index(tile_k), lds_x1) + b_tile0 = load_b_tile(arith.index(0)) + b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) + b_scale0 = load_b_scale_tile(0) + b_scale1 = load_b_scale_tile(1) + rocdl.s_waitcnt(0) + gpu.barrier() + a_scale0 = load_a_scale_tile(0) + a_scale1 = load_a_scale_tile(1) + + acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) + acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) + acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) + + c0_f32 = arith.constant(0.0, type=f32) + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c2_i32 = arith.constant(2, type=i32) + c3_i32 = arith.constant(3, type=i32) + c8_i32 = arith.constant(8, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c0x200000_i32 = arith.constant(0x200000, type=i32) + + def write_row_to_lds( + *, + mi: int, + ii: int, + row_in_tile, + row, + row_base_lds, + col_base_local, + num_acc_n: int, + lds_out, + ): + for ni in range_constexpr(num_acc_n): + col_local = col_base_local + arith.constant(ni * 16, index=True) + acc_idx = mi * num_acc_n + ni + v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v1 = vector.from_elements(T.vec(1, f32), [v]) + vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): + frag_vals = [] + for i in range_constexpr(8): + frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + + local_max = c0_f32 + for i in range_constexpr(8): + abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) + local_max = arith.maximumf(local_max, abs_v) + + # Match aiter: reduce bf16-truncated amax across a 4-lane quad. + amax_bf16 = local_max.bitcast(i32) >> c16_i32 + peer1 = _dpp_xor_i32(amax_bf16, 1) + amax_bf16 = _max_u32(amax_bf16, peer1) + peer2 = _dpp_xor_i32(amax_bf16, 2) + amax_bf16 = _max_u32(amax_bf16, peer2) + + f32bits = amax_bf16 << c16_i32 + bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + frag_vals[2 * pair], + frag_vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + row_i32 = arith.index_cast(i32, row) + col_i32 = arith.index_cast(i32, col_g0) + q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) + buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) + + lane_in_scale = (col_i32 >> c3_i32) & c3_i32 + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) + e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result + buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) + scf.YieldOp([]) + + c_shuffle_epilog( + arith=arith, + vector=vector, + gpu=gpu, + scf=scf, + range_constexpr=range_constexpr, + tile_m=tile_m, + tile_n=tile_n, + e_vec=8, + cshuffle_nlane=32, + block_size=total_threads, + m_repeat=m_repeat, + num_acc_n=num_acc_n, + tx=tx, + lane_div_16=lane_div_16, + lane_mod_16=lane_mod_16, + bx_m=bx_m, + by_n=by_n, + n_tile_base=n_tile_base, + lds_out=lds_out, + frag_elem_type=ir.F32Type.get(), + write_row_to_lds=write_row_to_lds, + precompute_row=None, + store_pair=store_pair, + ) + + _then_body() + + total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) + total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) + for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): + run_one(work) + + @flyc.jit + def launch_gemm2_mxfp4out( + flat_out_q: fx.Pointer, + flat_out_scale: fx.Pointer, + x: fx.Pointer, + w: fx.Pointer, + scale_x: fx.Pointer, + scale_w: fx.Pointer, + expert_ids: fx.Pointer, + num_valid_ids: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + gemm2_mxfp4out( + flat_out_q, + flat_out_scale, + x, + w, + scale_x, + scale_w, + expert_ids, + num_valid_ids, + value_attrs=gemm2_agpr_value_attrs, + ).launch( + grid=(persistent_ctas, 1, 1), + block=(total_threads, 1, 1), + stream=stream, + ) + + launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options + + return launch_gemm2_mxfp4out + + +def kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant: torch.Tensor, + inter_sorted_shuffled_scale: torch.Tensor, + w2: torch.Tensor, + w2_scale: torch.Tensor, + sorted_expert_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + flat_out_q: torch.Tensor | None = None, + flat_out_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" + max_sorted = inter_sorted_quant.shape[0] + if max_sorted != mxfp4_max_sorted_16384(): + raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") + if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): + raise ValueError( + "expected inter_sorted_quant shape " + f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" + ) + device = inter_sorted_quant.device + if flat_out_q is None: + flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) + if flat_out_scale is None: + flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) + + args = ( + _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), + _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(w2).view(-1)), + _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), + _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) + return flat_out_q, flat_out_scale + + +def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: + active = min(EXPERTS, TOKEN * TOPK) + cumsum_max = TOKEN * TOPK + active * (block_m - 1) + return ((cumsum_max + block_m - 1) // block_m) * block_m + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. + + This mirrors the aiter prologue=1 path: + sort_count -> sort_cumsum -> sort_place_pad. + """ + + sort_ctas = 16 + threads = 1024 + block_m = MXFP4_BLOCK_M + max_sorted = mxfp4_max_sorted_16384(block_m) + max_blocks = max_sorted // block_m + total_pairs = TOKEN * TOPK + per_cta = (total_pairs + sort_ctas - 1) // sort_ctas + experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + + topk_nbytes = total_pairs * 4 + weight_nbytes = total_pairs * 4 + sorted_nbytes = max_sorted * 4 + expert_nbytes = max_blocks * 4 + cumsum_nbytes = 4 + reverse_nbytes = total_pairs * 4 + masked_nbytes = EXPERTS * 4 + block_offsets_nbytes = EXPERTS * sort_ctas* 4 + real_counts_nbytes = EXPERTS * 4 + + gpu_arch = get_hip_arch() + allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") + lds_count_offset = allocator._align(allocator.ptr, 16) + lds_padded_offset = lds_count_offset + EXPERTS * 4 + lds_starts_offset = lds_padded_offset + EXPERTS * 4 + allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", + known_block_size=[threads, 1, 1], + ) + def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + base_ptr = allocator.get_base() + local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_experts_idx = arith.constant(EXPERTS, index=True) + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + + zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_zero = scf.IfOp(zero_valid) + with ir.InsertionPoint(_if_zero.then_block): + memref.store(c0_i32, local_count, [tx]) + scf.YieldOp([]) + gpu.barrier() + + for it in range_constexpr((per_cta + threads - 1) // threads): + idx = c_start + tx + arith.constant(it * threads, index=True) + valid = arith.cmpi(CmpIPredicate.ult, idx, end) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) + scf.YieldOp([]) + gpu.barrier() + + write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) + _if_write = scf.IfOp(write_valid) + with ir.InsertionPoint(_if_write.then_block): + cnt = memref.load(local_count, [tx]) + off = tx_i32 * c_sort_ctas + bx_i32 + buffer_ops.buffer_store(cnt, offsets_rsrc, off) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", + known_block_size=[threads, 1, 1], + ) + def sort_cumsum( + arg_block_offsets: fx.Pointer, + arg_masked_m: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_expert_ids: fx.Pointer, + ): + i32 = T.i32 + tx = gpu.thread_id("x") + tx_i32 = arith.index_cast(i32, tx) + + offsets_ptr = _extract_global_ptr(arg_block_offsets) + masked_ptr = _extract_global_ptr(arg_masked_m) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) + base_ptr = allocator.get_base() + total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_bm_minus_1 = arith.constant(block_m - 1, type=i32) + c_bm_mask = arith.constant(~(block_m - 1), type=i32) + + e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_sum = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_sum.then_block): + total = c0_i32 + e_offsets_base = tx_i32 * c_sort_ctas + for c_group in range_constexpr(sort_ctas // 4): + cnts = _global_load_i32_vec( + offsets_ptr, + e_offsets_base + arith.constant(c_group * 4, type=i32), + 4, + ) + for c_lane in range_constexpr(4): + cnt = ArithValue( + vector.extract( + cnts, + static_position=[c_lane], + dynamic_position=[], + ) + ) + total = total + cnt + padded = (total + c_bm_minus_1) & c_bm_mask + memref.store(total, total_count, [tx]) + memref.store(padded, padded_count, [tx]) + _global_store_i32(real_ptr, tx_i32, total) + _global_store_i32(masked_ptr, tx_i32, padded) + scf.YieldOp([]) + gpu.barrier() + + _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_t0.then_block): + scan = scf.ForOp( + arith.index(0), + arith.index(EXPERTS), + arith.index(1), + [arith._to_raw(c0_i32)], + ) + with ir.InsertionPoint(scan.body): + e = scan.induction_variable + acc_iter = ArithValue(scan.inner_iter_args[0]) + padded = ArithValue(memref.load(padded_count, [e])) + memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + next_acc = acc_iter + padded + scf.YieldOp([arith._to_raw(next_acc)]) + + acc = ArithValue(scan.results[0]) + memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + _global_store_i32(cumsum_ptr, c0_i32, acc) + scf.YieldOp([]) + gpu.barrier() + + _if_update = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_update.then_block): + acc = memref.load(expert_starts, [tx]) + for c in range_constexpr(sort_ctas): + off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) + cnt = ArithValue(_global_load_i32(offsets_ptr, off)) + _global_store_i32(offsets_ptr, off, acc) + acc = acc + cnt + + start = memref.load(expert_starts, [tx]) + end = memref.load(expert_starts, [tx + arith.index(1)]) + b0 = start >> arith.constant(7, type=i32) + b1 = end >> arith.constant(7, type=i32) + for b in range( + ArithValue(b0).index_cast(T.index), + ArithValue(b1).index_cast(T.index), + arith.index(1), + ): + _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) + scf.YieldOp([]) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", + known_block_size=[threads, 1, 1], + ) + def sort_place_pad( + arg_topk_ids: fx.Pointer, + arg_topk_weight: fx.Pointer, + arg_block_offsets: fx.Pointer, + arg_real_counts: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_reverse_sorted: fx.Pointer, + arg_sorted_weights: fx.Pointer, + arg_m_indices: fx.Pointer, + ): + i32 = T.i32 + f32 = T.f32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + topk_ptr = _extract_global_ptr(arg_topk_ids) + topk_weight_ptr = _extract_global_ptr(arg_topk_weight) + offsets_ptr = _extract_global_ptr(arg_block_offsets) + real_ptr = _extract_global_ptr(arg_real_counts) + cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) + sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) + reverse_ptr = _extract_global_ptr(arg_reverse_sorted) + weights_ptr = _extract_global_ptr(arg_sorted_weights) + mindices_ptr = _extract_global_ptr(arg_m_indices) + base_ptr = allocator.get_base() + local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + + c0_i32 = arith.constant(0, type=i32) + c1_i32 = arith.constant(1, type=i32) + c_topk = arith.constant(TOPK, type=i32) + c_sort_ctas = arith.constant(sort_ctas, type=i32) + c_threads_i32 = arith.constant(threads, type=i32) + c_threads_idx = arith.constant(threads, index=True) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_topk_shift = arith.constant(24, type=i32) + c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) + c0_f32 = arith.constant(0.0, type=f32) + + init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) + _if_init = scf.IfOp(init_valid) + with ir.InsertionPoint(_if_init.then_block): + e_i32 = tx_i32 + off = e_i32 * c_sort_ctas + bx_i32 + local = _global_load_i32(offsets_ptr, off) + start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) + memref.store(local, local_offsets, [tx]) + memref.store(start, row_starts, [tx]) + scf.YieldOp([]) + + _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) + with ir.InsertionPoint(_if_last_start.then_block): + last = _global_load_i32(cumsum_ptr, c0_i32) + memref.store(last, row_starts, [arith.index(EXPERTS)]) + scf.YieldOp([]) + gpu.barrier() + + c_start = bx * arith.constant(per_cta, index=True) + c_end = c_start + arith.constant(per_cta, index=True) + c_total = arith.constant(total_pairs, index=True) + end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) + place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) + with ir.InsertionPoint(place_loop.body): + idx = place_loop.induction_variable + idx_i32 = arith.index_cast(i32, idx) + eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) + sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) + token_id = idx_i32 // c_topk + topk_id = idx_i32 % c_topk + packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) + w = _global_load_f32(topk_weight_ptr, idx_i32) + _global_store_i32(sorted_ptr, sp, packed_id) + _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) + _global_store_f32(weights_ptr, sp, w) + _global_store_i32(reverse_ptr, idx_i32, sp) + scf.YieldOp([]) + + gpu.barrier() + + # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. + pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) + _if_pad_lane = scf.IfOp(pad_lane_valid) + with ir.InsertionPoint(_if_pad_lane.then_block): + for ee in range_constexpr(experts_per_cta): + e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) + e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) + _if_e = scf.IfOp(e_valid) + with ir.InsertionPoint(_if_e.then_block): + e_i32 = arith.index_cast(i32, e) + start = memref.load(row_starts, [e]) + real = ArithValue(_global_load_i32(real_ptr, e_i32)) + padded_end = memref.load(row_starts, [e + arith.index(1)]) + real_end = start + real + j0 = ArithValue(real_end + tx_i32).index_cast(T.index) + j1 = ArithValue(padded_end).index_cast(T.index) + for j in range(j0, j1, c_threads_idx): + j_i32 = arith.index_cast(i32, j) + _global_store_i32(sorted_ptr, j_i32, c_pad) + _global_store_i32(mindices_ptr, j_i32, c_pad) + _global_store_f32(weights_ptr, j_i32, c0_f32) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_sort( + topk_ids: fx.Pointer, + topk_weight: fx.Pointer, + sorted_token_ids: fx.Pointer, + sorted_expert_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + reverse_sorted: fx.Pointer, + sorted_weights: fx.Pointer, + masked_m: fx.Pointer, + m_indices: fx.Pointer, + block_offsets: fx.Pointer, + real_counts: fx.Pointer, + stream: fx.Stream, + ): + allocator.finalized = False + ctx = CompilationContext.get_current() + with ir.InsertionPoint(ctx.gpu_module_body): + allocator.finalize() + sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, + ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) + sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, + ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort + + +def kimi_mxfp4_sort_16384( + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + *, + block_m: int = MXFP4_BLOCK_M, +) -> Mxfp4SortBuffers: + """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" + if tuple(topk_ids.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" + ) + if tuple(topk_weight.shape) != (TOKEN, TOPK): + raise ValueError( + f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" + ) + + device = topk_ids.device + max_sorted = mxfp4_max_sorted_16384(block_m) + sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) + sorted_expert_ids = torch.empty( + (max_sorted // block_m,), + device=device, + dtype=torch.int32, + ) + cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) + reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) + sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) + masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) + + if block_m != MXFP4_BLOCK_M: + raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") + block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) + real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) + args = ( + _ptr_view_safe(topk_ids.view(-1)), + _ptr_view_safe(topk_weight.view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(sorted_expert_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(reverse_sorted.view(-1)), + _ptr_view_safe(sorted_weights.view(-1)), + _ptr_view_safe(masked_m.view(-1)), + _ptr_view_safe(m_indices.view(-1)), + _ptr_view_safe(block_offsets.view(-1)), + _ptr_view_safe(real_counts.view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_16384(), args) + return Mxfp4SortBuffers( + sorted_token_ids=sorted_token_ids, + sorted_expert_ids=sorted_expert_ids, + cumsum_tensor=cumsum_tensor, + reverse_sorted=reverse_sorted, + sorted_weights=sorted_weights, + masked_m=masked_m, + m_indices=m_indices, + max_sorted=max_sorted, + block_m=block_m, + ) + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_quant_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" + + n_ctas = 512 + threads = 1024 + warp_size = 64 + lanes_per_block = 4 + blocks_per_wave = warp_size // lanes_per_block + waves_per_cta = threads // warp_size + blocks_per_cta = blocks_per_wave * waves_per_cta + blocks_per_hidden = MODEL_DIM // 32 + total_blocks = TOKEN * blocks_per_hidden + n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta + batch_per_cta = (n_batches + n_ctas - 1) // n_ctas + + hidden_nbytes = TOKEN * MODEL_DIM * 2 + quant_nbytes = TOKEN * (MODEL_DIM // 2) + scale_nbytes = TOKEN * (MODEL_DIM // 32) + + @flyc.kernel( + name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + i8 = T.i8 + i32 = T.i32 + f32 = T.f32 + vec4_i32 = T.vec(4, i32) + + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + tx_i32 = arith.index_cast(i32, tx) + bx_i32 = arith.index_cast(i32, bx) + + hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + + wave_id = tx_i32 // arith.constant(warp_size, type=i32) + lane = tx_i32 % arith.constant(warp_size, type=i32) + block_in_wave = lane // arith.constant(lanes_per_block, type=i32) + lane_in_block = lane % arith.constant(lanes_per_block, type=i32) + + c0_i32 = arith.constant(0, type=i32) + c2_i32 = arith.constant(2, type=i32) + c4_i32 = arith.constant(4, type=i32) + c7fff_i32 = arith.constant(0x7FFF, type=i32) + cffff_i32 = arith.constant(0xFFFF, type=i32) + chi_mask_i32 = arith.constant(-65536, type=i32) + c16_i32 = arith.constant(16, type=i32) + c23_i32 = arith.constant(23, type=i32) + c255_i32 = arith.constant(255, type=i32) + c254_i32 = arith.constant(254, type=i32) + c64_i32 = arith.constant(64, type=i32) + + def _max_u32(a, b): + return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) + + wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) + wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) + wi_end_i32 = arith.select( + arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), + wi_stop_i32, + arith.constant(n_batches, type=i32), + ) + for wi in range( + ArithValue(wi_start_i32).index_cast(T.index), + ArithValue(wi_end_i32).index_cast(T.index), + arith.index(1), + ): + wi_i32 = arith.index_cast(i32, wi) + my_block_i32 = ( + wi_i32 * arith.constant(blocks_per_cta, type=i32) + + wave_id * arith.constant(blocks_per_wave, type=i32) + + block_in_wave + ) + valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) + _if = scf.IfOp(valid) + with ir.InsertionPoint(_if.then_block): + kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) + h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) + words = [ + ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + for j in range(4) + ] + + local_amax = c0_i32 + vals = [] + for j in range_constexpr(4): + w = words[j] + lo_abs = (w & cffff_i32) & c7fff_i32 + hi_abs = (w >> c16_i32) & c7fff_i32 + local_amax = _max_u32(local_amax, lo_abs) + local_amax = _max_u32(local_amax, hi_abs) + vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) + vals.append((w & chi_mask_i32).bitcast(f32)) + + peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) + local_amax = _max_u32(local_amax, peer1) + peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) + local_amax = _max_u32(local_amax, peer2) + + f32bits = local_amax << c16_i32 + bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 + e8m0 = bexp - c2_i32 + e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) + e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) + quant_scale = (e8m0 << c23_i32).bitcast(f32) + + packed = c0_i32 + for pair in range_constexpr(4): + packed = ArithValue( + llvm.call_intrinsic( + i32, + "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", + [ + packed, + vals[2 * pair], + vals[2 * pair + 1], + quant_scale, + arith.constant(pair, type=i32), + ], + [], + [], + ) + ) + + b_off = lane_in_block * c4_i32 + q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) + buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) + + _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) + with ir.InsertionPoint(_if_scale.then_block): + e8m0_i8 = arith.TruncIOp(i8, e8m0).result + buffer_ops.buffer_store( + e8m0_i8, + scale_rsrc, + my_block_i32, + offset_is_bytes=True, + ) + scf.YieldOp([]) + scf.YieldOp([]) + + @flyc.jit + def launch_quant( + hidden: fx.Pointer, + a_quant: fx.Pointer, + a_scale: fx.Pointer, + stream: fx.Stream, + ): + quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_quant + + +def kimi_mxfp4_quant_16384( + hidden_states: torch.Tensor, + a_quant: torch.Tensor | None = None, + a_scale: torch.Tensor | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" + if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): + raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") + device = hidden_states.device + if a_quant is None: + a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) + if a_scale is None: + a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) + args = ( + _ptr_view_safe(hidden_states.view(-1)), + _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_quant_16384(), args) + return a_quant, a_scale + + +@functools.lru_cache(maxsize=1) +def compile_kimi_mxfp4_sort_scales_16384(): + """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" + + n_ctas = 512 + threads = 1024 + block_m = MXFP4_BLOCK_M + bk = 256 + max_sorted = mxfp4_max_sorted_16384(block_m) + n_chunks = max_sorted // block_m + a_scale_cols = MODEL_DIM // 32 + mn_pack = 2 + k_pack = bk // 128 + c_m1 = block_m // (16 * mn_pack) + c_k1 = (MODEL_DIM // 32) // (4 * k_pack) + k_lane = 4 + n_lane = 16 + dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane + total_work = n_chunks * dwords_per_chunk + total_threads = n_ctas * threads + + scale_nbytes = TOKEN * a_scale_cols + sorted_nbytes = max_sorted * 4 + cumsum_nbytes = 4 + out_nbytes = max_sorted * a_scale_cols * 2 + + @flyc.kernel( + name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", + known_block_size=[threads, 1, 1], + ) + def sort_scales( + arg_a_scale: fx.Pointer, + arg_sorted_token_ids: fx.Pointer, + arg_cumsum_tensor: fx.Pointer, + arg_a_scale_sorted_shuffled: fx.Pointer, + ): + i8 = T.i8 + i32 = T.i32 + tx = gpu.thread_id("x") + bx = gpu.block_id("x") + + scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + + c0_i32 = arith.constant(0, type=i32) + c8_i32 = arith.constant(8, type=i32) + c_mask_token = arith.constant(0x00FFFFFF, type=i32) + c_token = arith.constant(TOKEN, type=i32) + + actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) + actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) + global_tid = bx * arith.constant(threads, index=True) + tx + + for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): + work_i32 = arith.index_cast(i32, work) + buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) + + r0 = work_i32 + n_lane_v = r0 % arith.constant(n_lane, type=i32) + r1 = r0 // arith.constant(n_lane, type=i32) + k_lane_v = r1 % arith.constant(k_lane, type=i32) + r2 = r1 >> arith.constant(2, type=i32) + ku = r2 % arith.constant(c_k1, type=i32) + r3 = r2 // arith.constant(c_k1, type=i32) + mi = r3 % arith.constant(c_m1, type=i32) + chunk = r3 // arith.constant(c_m1, type=i32) + + valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) + _if = scf.IfOp(valid_chunk) + with ir.InsertionPoint(_if.then_block): + tok_ids = [] + for im_a in range_constexpr(mn_pack): + sorted_row = ( + chunk * arith.constant(block_m, type=i32) + + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) + * arith.constant(16, type=i32) + + n_lane_v + ) + row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) + sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) + tid = sti & c_mask_token + tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) + tok_ids.append(tid) + + packed = c0_i32 + for ikxdl in range_constexpr(k_pack): + for im_a in range_constexpr(mn_pack): + k_idx = ( + ku * arith.constant(k_pack * 4, type=i32) + + arith.constant(ikxdl * 4, type=i32) + + k_lane_v + ) + scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx + b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) + b_i32 = ArithValue(b).extui(i32) + packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) + + buffer_ops.buffer_store(packed, out_rsrc, work_i32) + scf.YieldOp([]) + + @flyc.jit + def launch_sort_scales( + a_scale: fx.Pointer, + sorted_token_ids: fx.Pointer, + cumsum_tensor: fx.Pointer, + a_scale_sorted_shuffled: fx.Pointer, + stream: fx.Stream, + ): + sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, + ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) + + return launch_sort_scales + + +def kimi_mxfp4_sort_scales_16384( + a_scale: torch.Tensor, + sorted_token_ids: torch.Tensor, + cumsum_tensor: torch.Tensor, + a_scale_sorted_shuffled: torch.Tensor, +) -> torch.Tensor: + """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" + args = ( + _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + _ptr_view_safe(sorted_token_ids.view(-1)), + _ptr_view_safe(cumsum_tensor.view(-1)), + _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + torch.cuda.current_stream(), + ) + _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) + return a_scale_sorted_shuffled + + +def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_ids: torch.Tensor, + topk_weight: torch.Tensor, + w1_scale: torch.Tensor, + w2_scale: torch.Tensor, +) -> torch.Tensor: + """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" + device = hidden_states.device + w1_u8 = _as_u8_storage(w1) + w2_u8 = _as_u8_storage(w2) + sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) + + a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) + + padded_rows = ((sort.max_sorted + 31) // 32) * 32 + a_scale_sorted_shuffled = torch.empty( + (padded_rows * (MODEL_DIM // 32) * 2,), + device=device, + dtype=torch.uint8, + ) + kimi_mxfp4_sort_scales_16384( + a_scale, + sort.sorted_token_ids, + sort.cumsum_tensor, + a_scale_sorted_shuffled, + ) + + inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( + a_quant=a_quant, + a_scale_sorted_shuffled=a_scale_sorted_shuffled, + w1=w1_u8, + w1_scale=w1_scale, + sorted_expert_ids=sort.sorted_expert_ids, + m_indices=sort.m_indices, + cumsum_tensor=sort.cumsum_tensor, + ) + + flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( + inter_sorted_quant=inter_sorted_quant, + inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, + w2=w2_u8, + w2_scale=w2_scale, + sorted_expert_ids=sort.sorted_expert_ids, + cumsum_tensor=sort.cumsum_tensor, + ) + + return kimi_mxfp4_scatter_reduce_q_16384( + flat_out_q=flat_out_q, + flat_out_scale=flat_out_scale, + reverse_sorted=sort.reverse_sorted, + sorted_weights=sort.sorted_weights, + ) From a7971ae7009404fd0feb67134d4f588386d57696 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 15 Jun 2026 06:56:29 +0000 Subject: [PATCH 059/118] slower but not mlir --- bench_flydsl_16384.py | 2 +- fast_run.sh | 6 + kernels/mfma_preshuffle_pipeline.py | 10 +- kimi_fp4_moe_16384_opt_simplify.py | 547 +++++++++++++--------------- 4 files changed, 272 insertions(+), 293 deletions(-) create mode 100644 fast_run.sh diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py index fc729606e..8c119525e 100644 --- a/bench_flydsl_16384.py +++ b/bench_flydsl_16384.py @@ -36,7 +36,7 @@ TOPK, run_kimi_fp4_flydsl_moe_16384, ) -from kimi_fp4_moe_16384_opt import ( # noqa: E402 +from kimi_fp4_moe_16384_opt_simplify import ( # noqa: E402 MXFP4_STAGE1_KERNEL, MXFP4_STAGE2_KERNEL, run_kimi_fp4_mxfp4_moe_16384_all_flydsl, diff --git a/fast_run.sh b/fast_run.sh new file mode 100644 index 000000000..a4b6fd8fb --- /dev/null +++ b/fast_run.sh @@ -0,0 +1,6 @@ +python bench_flydsl_16384.py \ + --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ + --warmup 1 \ + --graph-iters 1 \ + --measure 1 \ + --repeat 1 \ No newline at end of file diff --git a/kernels/mfma_preshuffle_pipeline.py b/kernels/mfma_preshuffle_pipeline.py index 118ba6703..29e7a1667 100644 --- a/kernels/mfma_preshuffle_pipeline.py +++ b/kernels/mfma_preshuffle_pipeline.py @@ -705,19 +705,19 @@ def xcd_remap_bx_by( if xcd_swizzle <= 0: return bx, by - _c1 = fx.arith.constant(1, index=True) - _c_tm = fx.arith.constant(tile_m, index=True) - _gx = fx.arith.constant(N // tile_n, index=True) + _c1 = fx.Index() + _c_tm = fx.Index(tile_m) + _gx = fx.Index(N // tile_n) _gy = (c_m + _c_tm - _c1) / _c_tm _linear_id = bx * _gx + by _num_wgs = _gx * _gy - _c_xcds = fx.arith.constant(num_xcds, index=True) + _c_xcds = fx.Index(num_xcds) _wgs_per_xcd = _num_wgs / _c_xcds _wgid = (_linear_id % _c_xcds) * _wgs_per_xcd + (_linear_id / _c_xcds) - _c_wgm = fx.arith.constant(xcd_swizzle, index=True) + _c_wgm = fx.Index(xcd_swizzle) _num_wgid_in_group = _c_wgm * _gx _group_id = _wgid / _num_wgid_in_group _first_pid_m = _group_id * _c_wgm diff --git a/kimi_fp4_moe_16384_opt_simplify.py b/kimi_fp4_moe_16384_opt_simplify.py index 3a2beae5d..0d9ee8595 100644 --- a/kimi_fp4_moe_16384_opt_simplify.py +++ b/kimi_fp4_moe_16384_opt_simplify.py @@ -15,9 +15,9 @@ from flydsl.compiler.kernel_function import CompilationContext from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T +from flydsl.expr.typing import T, Vector as Vec from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr +from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr, get_index_value, get_op_result_or_value from kernels.layout_utils import ( _div_pow2, crd2idx, @@ -37,7 +37,6 @@ MODEL_DIM, TOKEN, TOPK, - _ptr_view_safe, _run_compiled, ) @@ -70,17 +69,16 @@ def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: return t -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, +def _tensor_buffer_resource(tensor, num_records_bytes: int): + return buffer_ops.create_buffer_resource( + tensor, + max_size=False, num_records_bytes=num_records_bytes, ) -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) +def _extract_global_ptr(tensor): + addr = buffer_ops.extract_base_index(tensor) addr_i64 = arith.index_cast(T.i64, addr) return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) @@ -102,12 +100,25 @@ def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result +def smem_store(smem_ptr_or_view, idxs, value): + if not isinstance(idxs, (list, tuple)): + idxs = [idxs] + if isinstance(smem_ptr_or_view, SmemPtr): + return smem_ptr_or_view.store(value, idxs) + return memref.store( + get_op_result_or_value(value), + get_op_result_or_value(smem_ptr_or_view), + [get_index_value(i) for i in idxs], + ) + def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): elem_offset_i64 = _elem_offset_to_i64(elem_offset) byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result +def div_up(a, b): + return (a + b - 1) // b def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): elem_offset_i64 = _elem_offset_to_i64(elem_offset) @@ -261,11 +272,11 @@ def compile_kimi_mxfp4_scatter_reduce_q_16384(): @flyc.kernel(name=module_name) def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, + arg_flat_out_q: fx.Tensor, + arg_flat_out_scale: fx.Tensor, + arg_reverse_sorted: fx.Tensor, + arg_sorted_weights: fx.Tensor, + arg_out: fx.Tensor, ): i32 = T.i32 f32 = T.f32 @@ -340,13 +351,7 @@ def accumulate_route(sorted_pos, route_w): route_pos = [] route_weights = [] for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) + sorted_pos = ArithValue(Vec(route_ids_0_7)[i]) route_pos.append(sorted_pos) route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) @@ -362,8 +367,8 @@ def accumulate_route(sorted_pos, route_w): packed_words = [] for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) + acc_lo = Vec(acc_pair)[0] + acc_hi = Vec(acc_pair)[1] packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) @@ -371,11 +376,11 @@ def accumulate_route(sorted_pos, route_w): @flyc.jit def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, + flat_out_q: fx.Tensor, + flat_out_scale: fx.Tensor, + reverse_sorted: fx.Tensor, + sorted_weights: fx.Tensor, + out: fx.Tensor, stream: fx.Stream, ): ctx = CompilationContext.get_current() @@ -421,11 +426,11 @@ def kimi_mxfp4_scatter_reduce_q_16384( out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), + _as_u8_storage(flat_out_q).view(-1), + _as_u8_storage(flat_out_scale).view(-1), + reverse_sorted.view(-1), + sorted_weights.view(-1), + out.view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) @@ -517,15 +522,15 @@ def compile_kimi_mxfp4_gemm1_16384(): @flyc.kernel(name=module_name) def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, + arg_inter_sorted_quant: fx.Tensor, + arg_inter_sorted_scale: fx.Tensor, + arg_a_quant: fx.Tensor, + arg_w: fx.Tensor, + arg_a_scale_sorted: fx.Tensor, + arg_w_scale: fx.Tensor, + arg_expert_ids: fx.Tensor, + arg_m_indices: fx.Tensor, + arg_num_valid_ids: fx.Tensor, ): i32 = T.i32 i64 = T.i64 @@ -537,12 +542,12 @@ def gemm1( vec8_i32 = T.vec(8, i32) vec16_x = T.vec(16, T.f8) - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) + out_q_rsrc = _tensor_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) + out_scale_rsrc = _tensor_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) + x_rsrc = _tensor_buffer_resource(arg_a_quant, x_nbytes) + w_rsrc = _tensor_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _tensor_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) + sw_rsrc = _tensor_buffer_resource(arg_w_scale, w_scale_nbytes) expert_ptr = _extract_global_ptr(arg_expert_ids) m_indices_ptr = _extract_global_ptr(arg_m_indices) numids_ptr = _extract_global_ptr(arg_num_valid_ids) @@ -654,10 +659,10 @@ def load_b_packs_k64(k_tile: int, ku: int, ni: int): offset_in_bytes=True, cache_modifier=0, ) - b_i64x2 = vector.bitcast(vec2_i64, b16) + b_i64x2 = Vec(b16).bitcast(fx.Int64) return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + b_i64x2[0], + b_i64x2[1], ) def load_b_tile(k_tile: int): @@ -696,11 +701,7 @@ def load_a_scale_tile(k_tile: int): + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) + lane_word ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) + s = Vec(vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]))[0] a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) return a_scale_tile @@ -724,19 +725,19 @@ def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + a_i64x2 = Vec(loaded_a16).bitcast(fx.Int64) return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + a_i64x2[0], + a_i64x2[1], ) def pack_i64x4_to_i32x8(x0, x1, x2, x3): v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) + return Vec(v4).bitcast(fx.Int32) def pack_i64x2_to_i32x4(x0, x1): v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) + return Vec(v2).bitcast(fx.Int32) def _raw(v): return v.ir_value() if hasattr(v, "ir_value") else v @@ -788,10 +789,10 @@ def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) for mi in range_constexpr(m_repeat_packed): a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + a_scale_val = Vec(a_scale_i32)[0] for ni in range_constexpr(num_acc_n_packed): b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + b_scale_val = Vec(b_scale_i32)[0] for imxdl in range_constexpr(pack_M): mi_idx = mi * pack_M + imxdl curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) @@ -831,12 +832,12 @@ def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_ze for ni in range_constexpr(num_acc_n_packed): b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + b_scale_val = Vec(b_scale_i32)[0] for inxdl in range_constexpr(pack_N): ni_idx = ni * pack_N + inxdl for mi in range_constexpr(m_repeat_packed): a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + a_scale_val = Vec(a_scale_i32)[0] for imxdl in range_constexpr(pack_M): mi_idx = mi * pack_M + imxdl acc_idx = mi_idx * num_acc_n + ni_idx @@ -894,12 +895,12 @@ def compute_tile_jmajor_prefetch_a_b( for ni in range_constexpr(num_acc_n_packed): b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + b_scale_val = Vec(b_scale_i32)[0] for inxdl in range_constexpr(pack_N): ni_idx = ni * pack_N + inxdl for mi in range_constexpr(m_repeat_packed): a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + a_scale_val = Vec(a_scale_i32)[0] for imxdl in range_constexpr(pack_M): mi_idx = mi * pack_M + imxdl acc_idx = mi_idx * num_acc_n + ni_idx @@ -1093,7 +1094,7 @@ def _then_body(): c0_f32 = arith.constant(0.0, type=f32) c1_f32 = arith.constant(1.0, type=f32) c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) + c0_i32 = arith.constant(0, type=i32) c1_i32 = arith.constant(1, type=i32) c2_i32 = arith.constant(2, type=i32) @@ -1122,7 +1123,7 @@ def _fmax_num(a, b): col_local = col_local + arith.constant(128, index=True) for v_i in range_constexpr(4): row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) + val = Vec(acc[mi * num_acc_n + j])[v_i] vector.store( vector.from_elements(T.vec(1, f32), [val]), lds_acc, @@ -1139,11 +1140,11 @@ def _fmax_num(a, b): scales_per_mr = [] def _silu_mul(g, u): - t = g * neg_log2e + t = ArithValue(g) * fx.Float32(-1.4426950408889634) emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) den = c1_f32 + emu sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u + return ArithValue(g) * sig * ArithValue(u) def _max_u32(a, b): return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) @@ -1156,16 +1157,20 @@ def _max_u32(a, b): col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp up_col = gate_col + arith.constant(128, index=True) - gate_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), - static_position=[0], - dynamic_position=[], - ) + gate_v = Vec( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + gate_col], + ) + )[0] + up_v = Vec( + vector.load_op( + T.vec(1, f32), + lds_acc, + [row_local * arith.constant(tile_n, index=True) + up_col], + ) + )[0] res = _silu_mul(gate_v, up_v) result_vals.append(res) abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) @@ -1243,15 +1248,15 @@ def _max_u32(a, b): @flyc.jit def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, + inter_sorted_quant: fx.Tensor, + inter_sorted_scale: fx.Tensor, + a_quant: fx.Tensor, + w: fx.Tensor, + a_scale_sorted: fx.Tensor, + w_scale: fx.Tensor, + expert_ids: fx.Tensor, + m_indices: fx.Tensor, + num_valid_ids: fx.Tensor, stream: fx.Stream, ): allocator.finalized = False @@ -1305,15 +1310,15 @@ def kimi_mxfp4_gemm1_16384( ) args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), + _as_u8_storage(inter_sorted_quant).view(-1), + _as_u8_storage(inter_sorted_shuffled_scale).view(-1), + _as_u8_storage(a_quant).view(-1), + _as_u8_storage(w1).view(-1), + _as_u8_storage(a_scale_sorted_shuffled).view(-1), + _as_u8_storage(w1_scale).view(-1), + sorted_expert_ids.view(-1), + m_indices.view(-1), + cumsum_tensor.view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) @@ -1415,14 +1420,14 @@ def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): @flyc.kernel(name=module_name) def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, + arg_flat_out_q: fx.Tensor, + arg_flat_out_scale: fx.Tensor, + arg_x: fx.Tensor, + arg_w: fx.Tensor, + arg_scale_x: fx.Tensor, + arg_scale_w: fx.Tensor, + arg_expert_ids: fx.Tensor, + arg_num_valid_ids: fx.Tensor, ): i32 = T.i32 i64 = T.i64 @@ -1433,25 +1438,25 @@ def gemm2_mxfp4out( vec8_i32 = T.vec(8, i32) vec16_x = T.vec(16, T.f8) - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) + q_rsrc = _tensor_buffer_resource(arg_flat_out_q, q_nbytes) + out_scale_rsrc = _tensor_buffer_resource(arg_flat_out_scale, out_scale_nbytes) + x_rsrc = _tensor_buffer_resource(arg_x, x_nbytes) + w_rsrc = _tensor_buffer_resource(arg_w, w_nbytes) + sx_rsrc = _tensor_buffer_resource(arg_scale_x, x_scale_nbytes) + sw_rsrc = _tensor_buffer_resource(arg_scale_w, w_scale_nbytes) + expert_rsrc = _tensor_buffer_resource(arg_expert_ids, expert_nbytes) + numids_rsrc = _tensor_buffer_resource(arg_num_valid_ids, numids_nbytes) tx = gpu.thread_id("x") pid = gpu.block_id("x") num_valid_i32 = buffer_ops.buffer_load( numids_rsrc, - arith.constant(0, index=True), + fx.Index(0), vec_width=1, dtype=i32, ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res + num_valid_i32 = rocdl.ReadfirstlaneOp(T.i32, num_valid_i32).res base_ptr = allocator.get_base() lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() @@ -1467,7 +1472,7 @@ def gemm2_mxfp4out( shape_lds = fx.make_shape(tile_m, _eff_lds_stride) stride_lds = fx.make_stride(_eff_lds_stride, 1) layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) + k_blocks16 = fx.Index(_eff_tile_k_bytes // 16) layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) coord_wl = idx2crd(tx, layout_tx_wave_lane) @@ -1477,8 +1482,8 @@ def gemm2_mxfp4out( lane_div_16 = layout_get(coord_l16, 0) lane_mod_16 = layout_get(coord_l16, 1) row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) + col_offset_base = lane_div_16 * fx.Index(16) + n_tile_base = wave_id * fx.Index(n_per_wave) bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads x_load_bytes = 16 @@ -1486,9 +1491,9 @@ def gemm2_mxfp4out( chunk_i32 = x_load_bytes // 4 tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) + c_chunk_i32 = fx.Index(chunk_i32) tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) + c_k_div4 = fx.Index((INTER_DIM // a_elem_vec_pack) // 4) x_col_local_i32 = [] x_row_local = [] @@ -1508,15 +1513,15 @@ def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) + a_i64x2 = Vec(loaded_a16).bitcast(fx.Int64) return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), + a_i64x2[0], + a_i64x2[1], ) def pack_i64x4_to_i32x8(x0, x1, x2, x3): v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) + return Vec(v4).bitcast(fx.Int32) c0_i64 = arith.constant(0, type=i64) cbsz = 4 @@ -1530,10 +1535,10 @@ def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) for mi in range_constexpr(m_repeat_packed): a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) + a_scale_val = Vec(a_scale_i32)[0] for ni in range_constexpr(num_acc_n_packed): b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) + b_scale_val = Vec(b_scale_i32)[0] for imxdl in range_constexpr(pack_M): mi_idx = mi * pack_M + imxdl curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) @@ -1609,10 +1614,10 @@ def load_b_packs_k64(base_k_packed, ku: int, ni: int): offset_in_bytes=True, cache_modifier=0, ) - b_i64x2 = vector.bitcast(vec2_i64, b16) + b_i64x2 = Vec(b16).bitcast(fx.Int64) return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), + b_i64x2[0], + b_i64x2[1], ) def load_b_tile(base_k_packed): @@ -1661,7 +1666,7 @@ def load_a_scale_tile(slot: int): + lane_word ) s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) + s = Vec(s_vec)[0] a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) return a_scale_tile @@ -1757,7 +1762,7 @@ def write_row_to_lds( for ni in range_constexpr(num_acc_n): col_local = col_base_local + arith.constant(ni * 16, index=True) acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) + v = Vec(acc[acc_idx])[ii] v1 = vector.from_elements(T.vec(1, f32), [v]) vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) @@ -1767,7 +1772,7 @@ def _max_u32(a, b): def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): frag_vals = [] for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) + frag_vals.append(ArithValue(Vec(frag)[i])) local_max = c0_f32 for i in range_constexpr(8): @@ -1854,14 +1859,14 @@ def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): @flyc.jit def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, + flat_out_q: fx.Tensor, + flat_out_scale: fx.Tensor, + x: fx.Tensor, + w: fx.Tensor, + scale_x: fx.Tensor, + scale_w: fx.Tensor, + expert_ids: fx.Tensor, + num_valid_ids: fx.Tensor, stream: fx.Stream, ): allocator.finalized = False @@ -1915,14 +1920,14 @@ def kimi_mxfp4_gemm2_mxfp4out_16384( flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), + _as_u8_storage(flat_out_q).view(-1), + _as_u8_storage(flat_out_scale).view(-1), + _as_u8_storage(inter_sorted_quant).view(-1), + _as_u8_storage(w2).view(-1), + _as_u8_storage(inter_sorted_shuffled_scale).view(-1), + _as_u8_storage(w2_scale).view(-1), + sorted_expert_ids.view(-1), + cumsum_tensor.view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) @@ -1951,6 +1956,8 @@ def compile_kimi_mxfp4_sort_16384(): total_pairs = TOKEN * TOPK per_cta = (total_pairs + sort_ctas - 1) // sort_ctas experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas + if total_pairs % sort_ctas != 0 or per_cta % threads != 0: + raise ValueError("sort_count assumes routed pairs divide exactly across CTAs and threads") topk_nbytes = total_pairs * 4 weight_nbytes = total_pairs * 4 @@ -1973,63 +1980,48 @@ def compile_kimi_mxfp4_sort_16384(): name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", known_block_size=[threads, 1, 1], ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): + def sort_count(arg_topk_ids: fx.Tensor, arg_block_offsets: fx.Tensor): i32 = T.i32 tx = gpu.thread_id("x") bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) + tx_i32 = fx.Int32(tx) + bx_i32 = fx.Int32(bx) - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) + topk_rsrc = _tensor_buffer_resource(arg_topk_ids, topk_nbytes) + offsets_rsrc = _tensor_buffer_resource(arg_block_offsets, block_offsets_nbytes) base_ptr = allocator.get_base() local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() c0_i32 = arith.constant(0, type=i32) c1_i32 = arith.constant(1, type=i32) c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) + if tx < fx.Index(EXPERTS): + smem_store(local_count, tx, c0_i32) gpu.barrier() - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) + for it in range_constexpr(div_up(per_cta,threads)): + idx = c_start + tx + fx.Index(it * threads) + eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) + _lds_atomic_add_i32(local_count, eid, c1_i32) gpu.barrier() - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): + if tx < fx.Index(EXPERTS): cnt = memref.load(local_count, [tx]) off = tx_i32 * c_sort_ctas + bx_i32 buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) @flyc.kernel( name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", known_block_size=[threads, 1, 1], ) def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, + arg_block_offsets: fx.Tensor, + arg_masked_m: fx.Tensor, + arg_real_counts: fx.Tensor, + arg_cumsum_tensor: fx.Tensor, + arg_sorted_expert_ids: fx.Tensor, ): i32 = T.i32 tx = gpu.thread_id("x") @@ -2041,18 +2033,17 @@ def sort_cumsum( cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() + s_total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() + s_padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() + s_expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) + c0_i32 = fx.Int32(0) + c_sort_ctas = fx.Int32(sort_ctas) + c_bm_minus_1 = fx.Int32(block_m - 1) + c_bm_mask = fx.Int32(~(block_m - 1)) + e_valid = tx < fx.Index(EXPERTS) - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): + if e_valid: total = c0_i32 e_offsets_base = tx_i32 * c_sort_ctas for c_group in range_constexpr(sort_ctas // 4): @@ -2062,55 +2053,38 @@ def sort_cumsum( 4, ) for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) + cnt = ArithValue(Vec(cnts)[c_lane]) total = total + cnt padded = (total + c_bm_minus_1) & c_bm_mask - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) + smem_store(s_total_count, tx, total) + smem_store(s_padded_count, tx, padded) _global_store_i32(real_ptr, tx_i32, total) _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) gpu.barrier() - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) + if tx == fx.Index(0): + for e, state in range(fx.Index(0), fx.Index(EXPERTS), fx.Index(1), init=[c0_i32]): + acc_iter = ArithValue(state[0]) + padded = ArithValue(memref.load(s_padded_count, [e])) + smem_store(s_expert_starts, e, acc_iter) next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) + results = yield [next_acc] - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) + acc = ArithValue(results) + smem_store(s_expert_starts, fx.Index(EXPERTS), acc) _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) gpu.barrier() - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) + if e_valid: + acc = memref.load(s_expert_starts, [tx]) for c in range_constexpr(sort_ctas): off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) cnt = ArithValue(_global_load_i32(offsets_ptr, off)) _global_store_i32(offsets_ptr, off, acc) acc = acc + cnt - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) + start = memref.load(s_expert_starts, [tx]) + end = memref.load(s_expert_starts, [tx + arith.index(1)]) b0 = start >> arith.constant(7, type=i32) b1 = end >> arith.constant(7, type=i32) for b in range( @@ -2119,22 +2093,21 @@ def sort_cumsum( arith.index(1), ): _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) @flyc.kernel( name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", known_block_size=[threads, 1, 1], ) def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, + arg_topk_ids: fx.Tensor, + arg_topk_weight: fx.Tensor, + arg_block_offsets: fx.Tensor, + arg_real_counts: fx.Tensor, + arg_cumsum_tensor: fx.Tensor, + arg_sorted_token_ids: fx.Tensor, + arg_reverse_sorted: fx.Tensor, + arg_sorted_weights: fx.Tensor, + arg_m_indices: fx.Tensor, ): i32 = T.i32 f32 = T.f32 @@ -2174,14 +2147,14 @@ def sort_place_pad( off = e_i32 * c_sort_ctas + bx_i32 local = _global_load_i32(offsets_ptr, off) start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) + smem_store(local_offsets, tx, local) + smem_store(row_starts, tx, start) scf.YieldOp([]) _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) with ir.InsertionPoint(_if_last_start.then_block): last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) + smem_store(row_starts, arith.index(EXPERTS), last) scf.YieldOp([]) gpu.barrier() @@ -2233,17 +2206,17 @@ def sort_place_pad( @flyc.jit def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, + topk_ids: fx.Tensor, + topk_weight: fx.Tensor, + sorted_token_ids: fx.Tensor, + sorted_expert_ids: fx.Tensor, + cumsum_tensor: fx.Tensor, + reverse_sorted: fx.Tensor, + sorted_weights: fx.Tensor, + masked_m: fx.Tensor, + m_indices: fx.Tensor, + block_offsets: fx.Tensor, + real_counts: fx.Tensor, stream: fx.Stream, ): allocator.finalized = False @@ -2308,17 +2281,17 @@ def kimi_mxfp4_sort_16384( block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), + topk_ids.view(-1), + topk_weight.view(-1), + sorted_token_ids.view(-1), + sorted_expert_ids.view(-1), + cumsum_tensor.view(-1), + reverse_sorted.view(-1), + sorted_weights.view(-1), + masked_m.view(-1), + m_indices.view(-1), + block_offsets.view(-1), + real_counts.view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_sort_16384(), args) @@ -2359,7 +2332,7 @@ def compile_kimi_mxfp4_quant_16384(): name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", known_block_size=[threads, 1, 1], ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): + def quant(arg_hidden: fx.Tensor, arg_a_quant: fx.Tensor, arg_a_scale: fx.Tensor): i8 = T.i8 i32 = T.i32 f32 = T.f32 @@ -2370,9 +2343,9 @@ def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Point tx_i32 = arith.index_cast(i32, tx) bx_i32 = arith.index_cast(i32, bx) - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) + hidden_rsrc = _tensor_buffer_resource(arg_hidden, hidden_nbytes) + quant_rsrc = _tensor_buffer_resource(arg_a_quant, quant_nbytes) + scale_rsrc = _tensor_buffer_resource(arg_a_scale, scale_nbytes) wave_id = tx_i32 // arith.constant(warp_size, type=i32) lane = tx_i32 % arith.constant(warp_size, type=i32) @@ -2418,7 +2391,7 @@ def _max_u32(a, b): kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) + ArithValue(Vec(h4)[j]) for j in range(4) ] @@ -2481,9 +2454,9 @@ def _max_u32(a, b): @flyc.jit def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, + hidden: fx.Tensor, + a_quant: fx.Tensor, + a_scale: fx.Tensor, stream: fx.Stream, ): quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) @@ -2505,9 +2478,9 @@ def kimi_mxfp4_quant_16384( if a_scale is None: a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), + hidden_states.view(-1), + _as_u8_storage(a_quant).view(-1), + _as_u8_storage(a_scale).view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_quant_16384(), args) @@ -2545,20 +2518,20 @@ def compile_kimi_mxfp4_sort_scales_16384(): known_block_size=[threads, 1, 1], ) def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, + arg_a_scale: fx.Tensor, + arg_sorted_token_ids: fx.Tensor, + arg_cumsum_tensor: fx.Tensor, + arg_a_scale_sorted_shuffled: fx.Tensor, ): i8 = T.i8 i32 = T.i32 tx = gpu.thread_id("x") bx = gpu.block_id("x") - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) + scale_rsrc = _tensor_buffer_resource(arg_a_scale, scale_nbytes) + sorted_rsrc = _tensor_buffer_resource(arg_sorted_token_ids, sorted_nbytes) + cumsum_rsrc = _tensor_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) + out_rsrc = _tensor_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) c0_i32 = arith.constant(0, type=i32) c8_i32 = arith.constant(8, type=i32) @@ -2618,10 +2591,10 @@ def sort_scales( @flyc.jit def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, + a_scale: fx.Tensor, + sorted_token_ids: fx.Tensor, + cumsum_tensor: fx.Tensor, + a_scale_sorted_shuffled: fx.Tensor, stream: fx.Stream, ): sort_scales( @@ -2642,10 +2615,10 @@ def kimi_mxfp4_sort_scales_16384( ) -> torch.Tensor: """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), + _as_u8_storage(a_scale).view(-1), + sorted_token_ids.view(-1), + cumsum_tensor.view(-1), + _as_u8_storage(a_scale_sorted_shuffled).view(-1), torch.cuda.current_stream(), ) _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) From ed9380409e87b374f0cb29104ee866be34ac33c2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 16 Jun 2026 09:17:14 +0000 Subject: [PATCH 060/118] Optimize hgemm tail prefetch scheduling --- kernels/hgemm_splitk.py | 459 +++++++++++++----- .../hgemm_tail_prefetch_loop_schedule.txt | 379 +++++++++++++++ 2 files changed, 714 insertions(+), 124 deletions(-) create mode 100644 resource_inspect/hgemm_tail_prefetch_loop_schedule.txt diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 87ec2ff4d..f778fed92 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -37,6 +37,10 @@ def __init__(self, dtype: str): def __call__(self, a_frag, b_frag, c_frag): pass + def init(self, a_frag, b_frag): + zero = arith.constant_vector(0.0, T.vec(self.WMMA_C_FRAG_VALUES, T.f32)) + return self(a_frag, b_frag, zero) + class WmmaHalf_m16n16k16(WmmaHalfBase): WMMA_M = 16 @@ -70,17 +74,50 @@ class WmmaHalf_m16n16k32(WmmaHalfBase): WMMA_B_FRAG_VALUES = 8 WMMA_C_FRAG_VALUES = 4 - def __init__(self, dtype: str): + def __init__(self, dtype: str, use_agpr_inline: bool = False): self.dtype = dtype + self.use_agpr_inline = use_agpr_inline def __call__(self, a_frag, b_frag, c_frag): res_ty = T.vec(self.WMMA_C_FRAG_VALUES, T.f32) - operands = [a_frag, b_frag, c_frag, 0, 0, 0] if self.dtype == "bf16": + if self.use_agpr_inline: + a_i32x4 = vector.bitcast(T.i32x4, a_frag) + b_i32x4 = vector.bitcast(T.i32x4, b_frag) + return llvm.inline_asm( + res_ty, + [ + arith._to_raw(a_i32x4), + arith._to_raw(b_i32x4), + arith._to_raw(c_frag), + ], + "v_mfma_f32_16x16x32_bf16 $0, $1, $2, $0", + "=a,v,v,0", + has_side_effects=True, + ) + operands = [a_frag, b_frag, c_frag, 0, 0, 0] return rocdl.mfma_f32_16x16x32_bf16(res_ty, operands) else: + operands = [a_frag, b_frag, c_frag, 0, 0, 0] return rocdl.mfma_f32_16x16x32_f16(res_ty, operands) + def init(self, a_frag, b_frag): + res_ty = T.vec(self.WMMA_C_FRAG_VALUES, T.f32) + if self.dtype == "bf16" and self.use_agpr_inline: + a_i32x4 = vector.bitcast(T.i32x4, a_frag) + b_i32x4 = vector.bitcast(T.i32x4, b_frag) + return llvm.inline_asm( + res_ty, + [ + arith._to_raw(a_i32x4), + arith._to_raw(b_i32x4), + ], + "v_mfma_f32_16x16x32_bf16 $0, $1, $2, 0", + "=a,v,v", + has_side_effects=True, + ) + return super().init(a_frag, b_frag) + class OnlineScheduler: def __init__(self, total_signals: int, init_count: int = 0): @@ -136,7 +173,7 @@ def compile_hgemm_kernel( MFMA_PER_WARP_K = 2 ASYNC_COPY = True else: - WMMA_IMPL = WmmaHalf_m16n16k32(dtype) + WMMA_IMPL = WmmaHalf_m16n16k32(dtype, use_agpr_inline=(GPU_ARCH == "gfx950" and dtype == "bf16")) DMA_BYTES = 16 MFMA_PER_WARP_K = 1 ASYNC_COPY = True @@ -276,6 +313,7 @@ def swizzle_for_cache_reuse(pid): ldmatrix_b_k_vec_idx = w_tid // WMMA_N * WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K warp_k_slice_base = wid_k * K_SLICE C_FRAGS_LEN = WARP_M_STEPS * WARP_N_STEPS + B_INITIAL_READS_CONST = 4 if WARP_N_STEPS > 4 else WARP_N_STEPS c_frags = [acc_init] * C_FRAGS_LEN def __barrier(vmcnt=0, use_s_barrier=True): @@ -431,67 +469,65 @@ def buffer_load_lds_inline(rsrc, lds_ptr, global_offset): raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") llvm.InlineAsmOp(None, [lds_ptr, global_offset, rsrc], asm, "s,v,s", has_side_effects=True) + def get_async_lds_ptr(lds_tensor, lds_stage, i): + lds_offset = lds_tensor.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES + lds_base = memref.extract_aligned_pointer_as_index(lds_tensor.memptr) + lds_offset + lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) + return buffer_ops.get_element_ptr( + lds_ptr_base, + warp_offset, + static_byte_offset=i * BLOCK_THREADS * DMA_BYTES, + ) + + def ldg_sts_a_async_one(k_offset, lds_stage, i): + global_tid = BLOCK_THREADS * i + tid + m_local_idx = global_tid // LDG_A_X_THREADS_AS + k_local_idx = global_tid % LDG_A_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, k_blocks16) + row_idx = m_offset + fx.Index(m_local_idx) + safe_row_idx = arith.select( + arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(m)), + row_idx, + fx.Index(0), + ) + col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) + global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES + global_offset = arith.index_cast(T.i32, global_offset) + lds_ptr = get_async_lds_ptr(as_, lds_stage, i) + buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) + def ldg_sts_a_async(k_offset, lds_stage): for i in range_constexpr(LDG_REG_A_COUNT_AS): - global_tid = BLOCK_THREADS * i + tid - m_local_idx = global_tid // LDG_A_X_THREADS_AS - k_local_idx = global_tid % LDG_A_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, k_blocks16) - row_idx = m_offset + fx.Index(m_local_idx) - safe_row_idx = arith.select( - arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(m)), - row_idx, - fx.Index(0), - ) - col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) - # get offset - global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES - global_offset = arith.index_cast(T.i32, global_offset) - # get lds ptr - if const_expr(i == 0): - lds_offset = as_.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES - lds_base = memref.extract_aligned_pointer_as_index(as_.memptr) + lds_offset - lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) - lds_ptr = buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) - else: - lds_ptr = buffer_ops.get_element_ptr( - lds_ptr, - static_byte_offset=BLOCK_THREADS * DMA_BYTES, - ) - # dma copy - buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) + ldg_sts_a_async_one(k_offset, lds_stage, i) + + def ldg_sts_b_async_one(k_offset, lds_stage, i): + global_tid = BLOCK_THREADS * i + tid + n_local_idx = global_tid // LDG_B_X_THREADS_AS + k_local_idx = global_tid % LDG_B_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, k_blocks16) + row_idx = n_offset + fx.Index(n_local_idx) + safe_row_idx = arith.select( + arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(n)), + row_idx, + fx.Index(0), + ) + col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) + global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES + global_offset = arith.index_cast(T.i32, global_offset) + lds_ptr = get_async_lds_ptr(bs_, lds_stage, i) + buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) def ldg_sts_b_async(k_offset, lds_stage): for i in range_constexpr(LDG_REG_B_COUNT_AS): - global_tid = BLOCK_THREADS * i + tid - n_local_idx = global_tid // LDG_B_X_THREADS_AS - k_local_idx = global_tid % LDG_B_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, k_blocks16) - row_idx = n_offset + fx.Index(n_local_idx) - safe_row_idx = arith.select( - arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(n)), - row_idx, - fx.Index(0), - ) - col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) - # get offset - global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES - global_offset = arith.index_cast(T.i32, global_offset) - # get lds ptr - if const_expr(i == 0): - lds_offset = bs_.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES - lds_base = memref.extract_aligned_pointer_as_index(bs_.memptr) + lds_offset - lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) - lds_ptr = buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) - else: - lds_ptr = buffer_ops.get_element_ptr( - lds_ptr, - static_byte_offset=BLOCK_THREADS * DMA_BYTES, - ) - # dma copy - buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) + ldg_sts_b_async_one(k_offset, lds_stage, i) + + def ldg_sts_async_one(k_offset, lds_stage, i): + if const_expr(i < LDG_REG_B_COUNT_AS): + ldg_sts_b_async_one(k_offset, lds_stage, i) + else: + ldg_sts_a_async_one(k_offset, lds_stage, i - LDG_REG_B_COUNT_AS) def ldg_matrix_b(k_offset): vecs = [] @@ -505,58 +541,171 @@ def ldg_matrix_b(k_offset): vecs.append(vec) return vecs - def ldmatrix_compute_tile_streaming(lds_stage, c_frags, initial_b_frags=None): + def spread_counts(numer: int, denom: int): + out = [] + prev = 0 + for i in range_constexpr(denom): + cur = ((i + 1) * numer + denom - 1) // denom + out.append(cur - prev) + prev = cur + return out + + def load_a_frag_from(lds_stage, warp_atom_k_idx, ii): + s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) + warp_atom_m_idx = warp_m_idx + ii * WARP_ATOM_M + row = warp_atom_m_idx + ldmatrix_a_m_idx + col_in_bytes = (warp_atom_k_idx + ldmatrix_a_k_vec_idx) * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) + return as_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K) + + def load_b_frag_from(lds_stage, warp_atom_k_idx, jj): + s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) + warp_atom_n_idx = warp_n_idx + jj * WARP_ATOM_N + row = warp_atom_n_idx + ldmatrix_b_n_idx + col_in_bytes = (warp_atom_k_idx + ldmatrix_b_k_vec_idx) * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) + return bs_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K) + + def load_initial_frags_from(lds_stage): + b_frags = [] + for jj in range_constexpr(B_INITIAL_READS_CONST): + b_frags.append(load_b_frag_from(lds_stage, warp_k_slice_base, jj)) + a_frag = load_a_frag_from(lds_stage, warp_k_slice_base, 0) + return a_frag, b_frags + + def ldmatrix_compute_tile_streaming( + lds_stage, + c_frags, + initial_b_frags=None, + prefetched_initial_a_frag=None, + prefetched_initial_b_frags=None, + prefetch_k_offset=None, + prefetch_lds_stage=0, + init_zero=False, + ): s = fx.Index(lds_stage) c_frags_new = [cx for cx in c_frags] + async_load_idx = 0 + row_group = 0 + ldg_total = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS + # Finish the next-tile VMEM earlier so the loop-top vmcnt wait has + # more MFMA distance to hide global-to-LDS latency. + prefetch_rows = (ldg_total + 1) // 2 + if const_expr(prefetch_rows > WARP_K_STEPS * WARP_M_STEPS): + prefetch_rows = WARP_K_STEPS * WARP_M_STEPS + prefetch_split_1 = WARP_N_STEPS // 2 + a_prefetch_jj = 1 if const_expr(WARP_N_STEPS > 1) else 0 + b_initial_reads = B_INITIAL_READS_CONST + + def load_a_frag(warp_atom_k_idx, ii): + return load_a_frag_from(s, warp_atom_k_idx, ii) + + def load_b_frag(warp_atom_k_idx, jj): + return load_b_frag_from(s, warp_atom_k_idx, jj) + + def do_mfma(ii, jj, a_frag, b_frag): + if const_expr(MFMA_PER_WARP_K == 2): + # split a + a_i64x2 = vector.bitcast(T.i64x2, a_frag) + a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) + a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) + a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) + a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) + # split b + b_i64x2 = vector.bitcast(T.i64x2, b_frag) + b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) + b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) + b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) + b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) + c_idx = ii * WARP_N_STEPS + jj + acc_in = c_frags_new[c_idx] + acc_mid = WMMA_IMPL(a_v0, b_v0, acc_in) + c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) + elif const_expr(MFMA_PER_WARP_K == 1): + c_idx = ii * WARP_N_STEPS + jj + c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) + else: + raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") + + next_k_a_frag = None + next_k_b_frags = [None] * WARP_N_STEPS + next_k_prefetch_ii = WARP_M_STEPS - 2 if const_expr(WARP_M_STEPS > 1) else 0 + next_k_prefetch_a_jj = b_initial_reads if const_expr(b_initial_reads < WARP_N_STEPS) else WARP_N_STEPS - 1 + for kk in range_constexpr(WARP_K_STEPS): warp_atom_k_idx = warp_k_slice_base + kk * WARP_ATOM_K - if const_expr(initial_b_frags is None): + if const_expr(initial_b_frags is None and kk == 0 and prefetched_initial_b_frags is not None): + b_frags = [0] * WARP_N_STEPS + for jj in range_constexpr(b_initial_reads): + b_frags[jj] = prefetched_initial_b_frags[jj] + elif const_expr(initial_b_frags is None and kk > 0): b_frags = [0] * WARP_N_STEPS - for ii in range_constexpr(WARP_N_STEPS): - warp_atom_n_idx = warp_n_idx + ii * WARP_ATOM_N - row = warp_atom_n_idx + ldmatrix_b_n_idx - col_in_bytes = (warp_atom_k_idx + ldmatrix_b_k_vec_idx) * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) - vec = bs_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K) - b_frags[ii] = vec + for jj in range_constexpr(b_initial_reads): + b_frags[jj] = next_k_b_frags[jj] + elif const_expr(initial_b_frags is None): + b_frags = [0] * WARP_N_STEPS + for jj in range_constexpr(b_initial_reads): + b_frags[jj] = load_b_frag(warp_atom_k_idx, jj) else: b_frags = [initial_b_frags[i] for i in range_constexpr(kk * WARP_N_STEPS, (kk + 1) * WARP_N_STEPS)] - a_frags = [0] * WARP_M_STEPS - for ii in range_constexpr(WARP_M_STEPS): - warp_atom_m_idx = warp_m_idx + ii * WARP_ATOM_M - row = warp_atom_m_idx + ldmatrix_a_m_idx - col_in_bytes = (warp_atom_k_idx + ldmatrix_a_k_vec_idx) * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) - vec = as_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K) - a_frags[ii] = vec + if const_expr(initial_b_frags is None and kk == 0 and prefetched_initial_a_frag is not None): + a_frag = prefetched_initial_a_frag + elif const_expr(initial_b_frags is None and kk > 0): + a_frag = next_k_a_frag + else: + a_frag = load_a_frag(warp_atom_k_idx, 0) + next_k_a_frag = None + next_k_b_frags = [None] * WARP_N_STEPS rocdl.sched_barrier(0) for ii in range_constexpr(WARP_M_STEPS): - a_frag = a_frags[ii] + a_frag_next = a_frag for jj in range_constexpr(WARP_N_STEPS): b_frag = b_frags[jj] - if const_expr(MFMA_PER_WARP_K == 2): - # split a - a_i64x2 = vector.bitcast(T.i64x2, a_frag) - a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) - a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) - a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) - a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) - # split b - b_i64x2 = vector.bitcast(T.i64x2, b_frag) - b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) - b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) - b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) - b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) - # wmma - c_idx = ii * WARP_N_STEPS + jj - acc_in = c_frags_new[c_idx] - acc_mid = WMMA_IMPL(a_v0, b_v0, acc_in) - c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) - elif const_expr(MFMA_PER_WARP_K == 1): - c_idx = ii * WARP_N_STEPS + jj - c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) + if const_expr(init_zero and kk == 0): + c_frags_new[ii * WARP_N_STEPS + jj] = WMMA_IMPL.init(a_frag, b_frag) else: - raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") + do_mfma(ii, jj, a_frag, b_frag) + if const_expr( + initial_b_frags is None + and ii == 0 + and jj + b_initial_reads < WARP_N_STEPS + ): + b_frags[jj + b_initial_reads] = load_b_frag(warp_atom_k_idx, jj + b_initial_reads) + if const_expr(ii + 1 < WARP_M_STEPS and jj == a_prefetch_jj): + a_frag_next = load_a_frag(warp_atom_k_idx, ii + 1) + if const_expr( + initial_b_frags is None + and kk + 1 < WARP_K_STEPS + and ii == next_k_prefetch_ii + and jj == 0 + ): + next_k_b_frags = [None] * WARP_N_STEPS + if const_expr( + initial_b_frags is None + and kk + 1 < WARP_K_STEPS + and ii == next_k_prefetch_ii + and jj < b_initial_reads + ): + next_k_warp_atom_k_idx = warp_k_slice_base + (kk + 1) * WARP_ATOM_K + next_k_b_frags[jj] = load_b_frag(next_k_warp_atom_k_idx, jj) + if const_expr( + initial_b_frags is None + and kk + 1 < WARP_K_STEPS + and ii == next_k_prefetch_ii + and jj == next_k_prefetch_a_jj + ): + next_k_warp_atom_k_idx = warp_k_slice_base + (kk + 1) * WARP_ATOM_K + next_k_a_frag = load_a_frag(next_k_warp_atom_k_idx, 0) + if const_expr( + prefetch_k_offset is not None + and row_group < prefetch_rows + and async_load_idx < ldg_total + and (jj == 0 or jj == prefetch_split_1) + ): + ldg_sts_async_one(prefetch_k_offset, prefetch_lds_stage, async_load_idx) + async_load_idx += 1 + a_frag = a_frag_next + row_group += 1 return c_frags_new warp_offset = get_dma_copy_warp_offset() @@ -571,41 +720,103 @@ def ldmatrix_compute_tile_streaming(lds_stage, c_frags, initial_b_frags=None): ldg_sts_a_async(ks_begin + s * BLOCK_K, s) rocdl.sched_barrier(0) - def hot_loop_scheduler(): - # ================ Ordered ================ - for i in range_constexpr(LDG_REG_B_COUNT_AS): - rocdl.sched_vmem(1) # ldg_sts_b_async next - for i in range_constexpr(LDG_REG_A_COUNT_AS): - rocdl.sched_vmem(1) # ldg_sts_a_async next + def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): + LDG_TOTAL = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS + MFMA_PER_ROW = WARP_N_STEPS * MFMA_PER_WARP_K + PREFETCH_ROWS = (LDG_TOTAL + 1) // 2 + if const_expr(PREFETCH_ROWS > WARP_K_STEPS * WARP_M_STEPS): + PREFETCH_ROWS = WARP_K_STEPS * WARP_M_STEPS + PREFETCH_SPLIT_1 = WARP_N_STEPS // 2 + A_PREFETCH_JJ = 1 if const_expr(WARP_N_STEPS > 1) else 0 + B_INITIAL_READS = 4 if const_expr(WARP_N_STEPS > 4) else WARP_N_STEPS + NEXT_K_PREFETCH_II = WARP_M_STEPS - 2 if const_expr(WARP_M_STEPS > 1) else 0 + NEXT_K_PREFETCH_A_JJ = B_INITIAL_READS if const_expr(B_INITIAL_READS < WARP_N_STEPS) else WARP_N_STEPS - 1 + row_group = 0 for ki in range_constexpr(WARP_K_STEPS): - for i in range_constexpr(WARP_N_STEPS): - rocdl.sched_dsrd(1) # lds_matrix_b current + if const_expr(ki == 0 and not prefetched_initial): + for i in range_constexpr(B_INITIAL_READS): + rocdl.sched_dsrd(1) # lds_matrix_b current + rocdl.sched_dsrd(1) # first lds_matrix_a current for i in range_constexpr(WARP_M_STEPS): - rocdl.sched_dsrd(1) # lds_matrix_a current - for i in range_constexpr(WARP_M_STEPS): - rocdl.sched_mfma(WARP_N_STEPS) - # ================ Reordered ================ + for j in range_constexpr(WARP_N_STEPS): + rocdl.sched_mfma(MFMA_PER_WARP_K) + if const_expr(i == 0 and j + B_INITIAL_READS < WARP_N_STEPS): + rocdl.sched_dsrd(1) # next lds_matrix_b current + if const_expr(i + 1 < WARP_M_STEPS and j == A_PREFETCH_JJ): + rocdl.sched_dsrd(1) # next lds_matrix_a current + if const_expr(ki + 1 < WARP_K_STEPS and i == NEXT_K_PREFETCH_II and j < B_INITIAL_READS): + rocdl.sched_dsrd(1) # first lds_matrix_b next k-slice + if const_expr(ki + 1 < WARP_K_STEPS and i == NEXT_K_PREFETCH_II and j == NEXT_K_PREFETCH_A_JJ): + rocdl.sched_dsrd(1) # first lds_matrix_a next k-slice + if const_expr( + row_group < PREFETCH_ROWS + and (j == 0 or j == PREFETCH_SPLIT_1) + ): + rocdl.sched_vmem(1) + row_group += 1 rocdl.sched_barrier(0) - - init_state = [ks_begin, arith.constant(0, index=True)] + c_frags - for bki, state in range(0, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): + if const_expr(tail_prefetch_initial): + for i in range_constexpr(B_INITIAL_READS): + rocdl.sched_dsrd(1) # first lds_matrix_b next BLOCK_K tile + rocdl.sched_dsrd(1) # first lds_matrix_a next BLOCK_K tile + + __barrier((STAGES - 2) * LDG_WAIT_COUNT) + c_frags = ldmatrix_compute_tile_streaming( + arith.constant(0, index=True), + c_frags, + prefetch_k_offset=ks_begin + BLOCK_K, + prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), + init_zero=True, + ) + hot_loop_scheduler(tail_prefetch_initial=True) + next_stage_init = arith.constant(1 % STAGES, index=True) + __barrier((STAGES - 2) * LDG_WAIT_COUNT) + prefetched_tile_a_frag, prefetched_tile_b_frags = load_initial_frags_from(next_stage_init) + + init_state = ( + [ks_begin + fx.Int32(BLOCK_K), next_stage_init] + + c_frags + + [prefetched_tile_a_frag] + + prefetched_tile_b_frags + ) + for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): k_offset = state[0] current_stage = fx.Index(state[1]) - c_frags = state[2:] + c_frags = state[2 : 2 + C_FRAGS_LEN] + prefetched_tile_a_frag = state[2 + C_FRAGS_LEN] + prefetched_tile_b_frags = state[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] next_stage = (current_stage + 1) % STAGES write_stage = (current_stage + STAGES - 1) % STAGES - __barrier((STAGES - 2) * LDG_WAIT_COUNT) - ldg_sts_b_async(k_offset + (STAGES - 1) * BLOCK_K, write_stage) - ldg_sts_a_async(k_offset + (STAGES - 1) * BLOCK_K, write_stage) - c_frags_new = ldmatrix_compute_tile_streaming(current_stage, c_frags) + prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K + c_frags_new = ldmatrix_compute_tile_streaming( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + prefetch_k_offset=prefetch_k_offset, + prefetch_lds_stage=write_stage, + ) k_offset_next = k_offset + fx.Int32(BLOCK_K) - hot_loop_scheduler() - results = yield [k_offset_next, next_stage] + c_frags_new + hot_loop_scheduler(prefetched_initial=True, tail_prefetch_initial=True) + __barrier((STAGES - 2) * LDG_WAIT_COUNT) + prefetched_tile_a_frag_next, prefetched_tile_b_frags_next = load_initial_frags_from(next_stage) + results = ( + yield [k_offset_next, next_stage] + + c_frags_new + + [prefetched_tile_a_frag_next] + + prefetched_tile_b_frags_next + ) current_stage = fx.Index(results[1]) - c_frags = results[2:] + c_frags = results[2 : 2 + C_FRAGS_LEN] + prefetched_tile_a_frag = results[2 + C_FRAGS_LEN] + prefetched_tile_b_frags = results[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] for s in range_constexpr(0, STAGES - 1): - __barrier((STAGES - 2 - s) * LDG_WAIT_COUNT) - c_frags = ldmatrix_compute_tile_streaming(current_stage, c_frags) + c_frags = ldmatrix_compute_tile_streaming( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + ) current_stage = (current_stage + 1) % STAGES else: diff --git a/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt b/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt new file mode 100644 index 000000000..71cb9277c --- /dev/null +++ b/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt @@ -0,0 +1,379 @@ +Current kernel: hgemm_splitk.py, B_TO_LDS steady-state hot loop +Variant: tail-prefetch initial B4, measured best ~= 2491.6 cycles/tile + +Viewpoint +--------- +This is wave0 only, one BLOCK_K=64 tile, steady state. +The real ISA also contains address arithmetic, s_waitcnt lgkmcnt, loop branch, +and scheduler moves. This file only lists the intended dataflow/order for: + + - ds_read_* : LDS -> VGPR fragment + - buffer_load_* : global -> LDS async copy, one 16B/thread chunk + - mfma : one 16x16x32 bf16 MFMA + - barrier : s_waitcnt vmcnt(0) + s_barrier + +Tile notation +------------- +wave0 mapping in this W2x2x1 CTA: + + wid = 0 + wid_mn = 0 + wid_k = 0 + warp_m_idx = 0 + warp_n_idx = 0 + warp_k_slice_base = 0 + +So wave0 computes the top-left 128x128 region of the 256x256 CTA tile: + + C[i,j] : 16x16 accumulator fragment, i=0..7, j=0..7 + C[i,j] covers CTA-local rows 16*i : 16*i+15 + cols 16*j : 16*j+15 + +Current BLOCK_K tile is split into two k-slices: + + A0[i] = A current tile, rows 16*i : 16*i+15, k = 0:32 + B0[j] = B current tile, cols 16*j : 16*j+15, k = 0:32 + + A1[i] = A current tile, rows 16*i : 16*i+15, k = 32:64 + B1[j] = B current tile, cols 16*j : 16*j+15, k = 32:64 + +Next BLOCK_K tile: + + A2[i] = A next tile, rows 16*i : 16*i+15, k = next + 0:32 + B2[j] = B next tile, cols 16*j : 16*j+15, k = next + 0:32 + + A2_chunk[0..7], B2_chunk[0..7] are CTA-wide global->LDS chunks. + They are issued by every thread in the CTA. Collectively they fill the full + next tile in LDS, not just wave0's 128x128 output region. + + +Steady-State Loop Boundary +-------------------------- +At the end of the previous tile, we already did: + + barrier # wait all buffer_load A0/B0 into current LDS stage + ds_read B0[0] + ds_read B0[1] + ds_read B0[2] + ds_read B0[3] + ds_read A0[0] + yield loop state containing A0[0], B0[0..3] + +So the current steady-state loop starts with: + + live: A0[0], B0[0], B0[1], B0[2], B0[3] + no loop-head ds_read for these five fragments + + +Current Tile, k-slice 0: A0/B0 +------------------------------ + +kk0, i=0: + j=0: mfma C[0,0] += A0[0] * B0[0] + ds_read B0[4] + buffer_load B2_chunk[0] + + j=1: mfma C[0,1] += A0[0] * B0[1] + ds_read B0[5] + ds_read A0[1] + + j=2: mfma C[0,2] += A0[0] * B0[2] + ds_read B0[6] + + j=3: mfma C[0,3] += A0[0] * B0[3] + ds_read B0[7] + + j=4: mfma C[0,4] += A0[0] * B0[4] + buffer_load B2_chunk[1] + + j=5: mfma C[0,5] += A0[0] * B0[5] + j=6: mfma C[0,6] += A0[0] * B0[6] + j=7: mfma C[0,7] += A0[0] * B0[7] + + +kk0, i=1: + j=0: mfma C[1,0] += A0[1] * B0[0] + buffer_load B2_chunk[2] + + j=1: mfma C[1,1] += A0[1] * B0[1] + ds_read A0[2] + + j=2: mfma C[1,2] += A0[1] * B0[2] + j=3: mfma C[1,3] += A0[1] * B0[3] + j=4: mfma C[1,4] += A0[1] * B0[4] + buffer_load B2_chunk[3] + j=5: mfma C[1,5] += A0[1] * B0[5] + j=6: mfma C[1,6] += A0[1] * B0[6] + j=7: mfma C[1,7] += A0[1] * B0[7] + + +kk0, i=2: + j=0: mfma C[2,0] += A0[2] * B0[0] + buffer_load B2_chunk[4] + + j=1: mfma C[2,1] += A0[2] * B0[1] + ds_read A0[3] + + j=2: mfma C[2,2] += A0[2] * B0[2] + j=3: mfma C[2,3] += A0[2] * B0[3] + j=4: mfma C[2,4] += A0[2] * B0[4] + buffer_load B2_chunk[5] + j=5: mfma C[2,5] += A0[2] * B0[5] + j=6: mfma C[2,6] += A0[2] * B0[6] + j=7: mfma C[2,7] += A0[2] * B0[7] + + +kk0, i=3: + j=0: mfma C[3,0] += A0[3] * B0[0] + buffer_load B2_chunk[6] + + j=1: mfma C[3,1] += A0[3] * B0[1] + ds_read A0[4] + + j=2: mfma C[3,2] += A0[3] * B0[2] + j=3: mfma C[3,3] += A0[3] * B0[3] + j=4: mfma C[3,4] += A0[3] * B0[4] + buffer_load B2_chunk[7] + j=5: mfma C[3,5] += A0[3] * B0[5] + j=6: mfma C[3,6] += A0[3] * B0[6] + j=7: mfma C[3,7] += A0[3] * B0[7] + + +kk0, i=4: + j=0: mfma C[4,0] += A0[4] * B0[0] + buffer_load A2_chunk[0] + + j=1: mfma C[4,1] += A0[4] * B0[1] + ds_read A0[5] + + j=2: mfma C[4,2] += A0[4] * B0[2] + j=3: mfma C[4,3] += A0[4] * B0[3] + j=4: mfma C[4,4] += A0[4] * B0[4] + buffer_load A2_chunk[1] + j=5: mfma C[4,5] += A0[4] * B0[5] + j=6: mfma C[4,6] += A0[4] * B0[6] + j=7: mfma C[4,7] += A0[4] * B0[7] + + +kk0, i=5: + j=0: mfma C[5,0] += A0[5] * B0[0] + buffer_load A2_chunk[2] + + j=1: mfma C[5,1] += A0[5] * B0[1] + ds_read A0[6] + + j=2: mfma C[5,2] += A0[5] * B0[2] + j=3: mfma C[5,3] += A0[5] * B0[3] + j=4: mfma C[5,4] += A0[5] * B0[4] + buffer_load A2_chunk[3] + j=5: mfma C[5,5] += A0[5] * B0[5] + j=6: mfma C[5,6] += A0[5] * B0[6] + j=7: mfma C[5,7] += A0[5] * B0[7] + + +kk0, i=6: + j=0: mfma C[6,0] += A0[6] * B0[0] + ds_read B1[0] + buffer_load A2_chunk[4] + + j=1: mfma C[6,1] += A0[6] * B0[1] + ds_read A0[7] + ds_read B1[1] + + j=2: mfma C[6,2] += A0[6] * B0[2] + ds_read B1[2] + + j=3: mfma C[6,3] += A0[6] * B0[3] + ds_read B1[3] + + j=4: mfma C[6,4] += A0[6] * B0[4] + ds_read A1[0] + buffer_load A2_chunk[5] + + j=5: mfma C[6,5] += A0[6] * B0[5] + j=6: mfma C[6,6] += A0[6] * B0[6] + j=7: mfma C[6,7] += A0[6] * B0[7] + + +kk0, i=7: + j=0: mfma C[7,0] += A0[7] * B0[0] + buffer_load A2_chunk[6] + + j=1: mfma C[7,1] += A0[7] * B0[1] + j=2: mfma C[7,2] += A0[7] * B0[2] + j=3: mfma C[7,3] += A0[7] * B0[3] + j=4: mfma C[7,4] += A0[7] * B0[4] + buffer_load A2_chunk[7] + j=5: mfma C[7,5] += A0[7] * B0[5] + j=6: mfma C[7,6] += A0[7] * B0[6] + j=7: mfma C[7,7] += A0[7] * B0[7] + + +By the end of kk0: + + live for kk1 start: A1[0], B1[0], B1[1], B1[2], B1[3] + all global->LDS copies for A2/B2 have been issued: + B2_chunk[0..7], A2_chunk[0..7] + + +Current Tile, k-slice 1: A1/B1 +------------------------------ + +kk1, i=0: + j=0: mfma C[0,0] += A1[0] * B1[0] + ds_read B1[4] + + j=1: mfma C[0,1] += A1[0] * B1[1] + ds_read B1[5] + ds_read A1[1] + + j=2: mfma C[0,2] += A1[0] * B1[2] + ds_read B1[6] + + j=3: mfma C[0,3] += A1[0] * B1[3] + ds_read B1[7] + + j=4: mfma C[0,4] += A1[0] * B1[4] + j=5: mfma C[0,5] += A1[0] * B1[5] + j=6: mfma C[0,6] += A1[0] * B1[6] + j=7: mfma C[0,7] += A1[0] * B1[7] + + +kk1, i=1: + j=0: mfma C[1,0] += A1[1] * B1[0] + j=1: mfma C[1,1] += A1[1] * B1[1] + ds_read A1[2] + j=2: mfma C[1,2] += A1[1] * B1[2] + j=3: mfma C[1,3] += A1[1] * B1[3] + j=4: mfma C[1,4] += A1[1] * B1[4] + j=5: mfma C[1,5] += A1[1] * B1[5] + j=6: mfma C[1,6] += A1[1] * B1[6] + j=7: mfma C[1,7] += A1[1] * B1[7] + + +kk1, i=2: + j=0: mfma C[2,0] += A1[2] * B1[0] + j=1: mfma C[2,1] += A1[2] * B1[1] + ds_read A1[3] + j=2: mfma C[2,2] += A1[2] * B1[2] + j=3: mfma C[2,3] += A1[2] * B1[3] + j=4: mfma C[2,4] += A1[2] * B1[4] + j=5: mfma C[2,5] += A1[2] * B1[5] + j=6: mfma C[2,6] += A1[2] * B1[6] + j=7: mfma C[2,7] += A1[2] * B1[7] + + +kk1, i=3: + j=0: mfma C[3,0] += A1[3] * B1[0] + j=1: mfma C[3,1] += A1[3] * B1[1] + ds_read A1[4] + j=2: mfma C[3,2] += A1[3] * B1[2] + j=3: mfma C[3,3] += A1[3] * B1[3] + j=4: mfma C[3,4] += A1[3] * B1[4] + j=5: mfma C[3,5] += A1[3] * B1[5] + j=6: mfma C[3,6] += A1[3] * B1[6] + j=7: mfma C[3,7] += A1[3] * B1[7] + + +kk1, i=4: + j=0: mfma C[4,0] += A1[4] * B1[0] + j=1: mfma C[4,1] += A1[4] * B1[1] + ds_read A1[5] + j=2: mfma C[4,2] += A1[4] * B1[2] + j=3: mfma C[4,3] += A1[4] * B1[3] + j=4: mfma C[4,4] += A1[4] * B1[4] + j=5: mfma C[4,5] += A1[4] * B1[5] + j=6: mfma C[4,6] += A1[4] * B1[6] + j=7: mfma C[4,7] += A1[4] * B1[7] + + +kk1, i=5: + j=0: mfma C[5,0] += A1[5] * B1[0] + j=1: mfma C[5,1] += A1[5] * B1[1] + ds_read A1[6] + j=2: mfma C[5,2] += A1[5] * B1[2] + j=3: mfma C[5,3] += A1[5] * B1[3] + j=4: mfma C[5,4] += A1[5] * B1[4] + j=5: mfma C[5,5] += A1[5] * B1[5] + j=6: mfma C[5,6] += A1[5] * B1[6] + j=7: mfma C[5,7] += A1[5] * B1[7] + + +kk1, i=6: + j=0: mfma C[6,0] += A1[6] * B1[0] + j=1: mfma C[6,1] += A1[6] * B1[1] + ds_read A1[7] + j=2: mfma C[6,2] += A1[6] * B1[2] + j=3: mfma C[6,3] += A1[6] * B1[3] + j=4: mfma C[6,4] += A1[6] * B1[4] + j=5: mfma C[6,5] += A1[6] * B1[5] + j=6: mfma C[6,6] += A1[6] * B1[6] + j=7: mfma C[6,7] += A1[6] * B1[7] + + +kk1, i=7: + j=0: mfma C[7,0] += A1[7] * B1[0] + j=1: mfma C[7,1] += A1[7] * B1[1] + j=2: mfma C[7,2] += A1[7] * B1[2] + j=3: mfma C[7,3] += A1[7] * B1[3] + j=4: mfma C[7,4] += A1[7] * B1[4] + j=5: mfma C[7,5] += A1[7] * B1[5] + j=6: mfma C[7,6] += A1[7] * B1[6] + j=7: mfma C[7,7] += A1[7] * B1[7] + + +Loop Tail: Prefetch Next Tile Initial Fragments +----------------------------------------------- + +After kk1 finishes: + + barrier # s_waitcnt vmcnt(0) + s_barrier + # waits B2/A2 global->LDS copies and syncs CTA + + ds_read B2[0] + ds_read B2[1] + ds_read B2[2] + ds_read B2[3] + ds_read A2[0] + + yield loop state: + k_offset_next + next_stage + C fragments + A2[0] + B2[0..3] + +Next loop consumes these as: + + A0[0] := A2[0] + B0[0..3] := B2[0..3] + + +Important Timing Notes +---------------------- + +1. The global->LDS copies for the next tile are all issued during kk0: + + kk0 i=0..3 issue B2_chunk[0..7] + kk0 i=4..7 issue A2_chunk[0..7] + + Then the whole kk1 compute runs before the tail barrier, so VMEM has a lot + of distance to finish. + +2. The loop-head LDS reads from the old version moved to the previous loop tail. + This is why the steady-state loop starts with A0[0], B0[0..3] live. + +3. There is still a tail barrier -> ds_read B2/A2 -> lgkmcnt-before-first-mfma + cost visible in ATT. Any next improvement probably needs to hide or move + this tail ds_read latency without adding another full CTA barrier in the + middle of the compute. + +4. Tested initial-fragment counts: + + B3 + A0: about 2505.0 cycles + B4 + A0: about 2491.6 cycles current best + B5 + A0: about 2495.4 cycles + B8 + A0: about 2582 cycles + + B4 seems to be the current sweet spot: enough to start the first row, but + not so much loop-carried VGPR/state that scheduling gets worse. From 3518e5bb19ab401e292d90c2e3b8b8c8f50b6d90 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 16 Jun 2026 09:25:35 +0000 Subject: [PATCH 061/118] Document wave0 hgemm first ops --- resource_inspect/hgemm_wave0_first20_ops.txt | 73 ++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 resource_inspect/hgemm_wave0_first20_ops.txt diff --git a/resource_inspect/hgemm_wave0_first20_ops.txt b/resource_inspect/hgemm_wave0_first20_ops.txt new file mode 100644 index 000000000..069a18daf --- /dev/null +++ b/resource_inspect/hgemm_wave0_first20_ops.txt @@ -0,0 +1,73 @@ +Wave0 first 20 scheduled data ops, current B4 tail-prefetch version +=================================================================== + +Scope +----- +Only wave0. + +CTA-local mapping: + + wave0 computes C[0:128, 0:128] + A ranges are CTA-local A[M, K] + B ranges are CTA-local B[N, K], because this kernel receives B as transposed/packed (N, K) + C ranges are CTA-local C[M, N] + +Current loop starts after previous loop tail already prefetched: + + live A0[0:16, 0:32] + live B0[0:16, 0:32] + live B0[16:32, 0:32] + live B0[32:48, 0:32] + live B0[48:64, 0:32] + +Notation: + + A0 = current BLOCK_K tile, K 0:32 + B0 = current BLOCK_K tile, K 0:32 + A2/B2 = next BLOCK_K tile being copied global -> LDS + buffer_load B2_chunk[0] means CTA-wide global->LDS copy chunk, not only wave0's fragment + + +First 20 Ops +------------ + +01. mfma C[0:16, 0:16] += A0[0:16, 0:32] * B0[0:16, 0:32] + +02. ds_read B0[64:80, 0:32] + +03. buffer_load B2_chunk[0] + +04. mfma C[0:16, 16:32] += A0[0:16, 0:32] * B0[16:32, 0:32] + +05. ds_read B0[80:96, 0:32] + +06. ds_read A0[16:32, 0:32] + +07. mfma C[0:16, 32:48] += A0[0:16, 0:32] * B0[32:48, 0:32] + +08. ds_read B0[96:112, 0:32] + +09. mfma C[0:16, 48:64] += A0[0:16, 0:32] * B0[48:64, 0:32] + +10. ds_read B0[112:128, 0:32] + +11. mfma C[0:16, 64:80] += A0[0:16, 0:32] * B0[64:80, 0:32] + +12. buffer_load B2_chunk[1] + +13. mfma C[0:16, 80:96] += A0[0:16, 0:32] * B0[80:96, 0:32] + +14. mfma C[0:16, 96:112] += A0[0:16, 0:32] * B0[96:112, 0:32] + +15. mfma C[0:16, 112:128] += A0[0:16, 0:32] * B0[112:128, 0:32] + +16. mfma C[16:32, 0:16] += A0[16:32, 0:32] * B0[0:16, 0:32] + +17. buffer_load B2_chunk[2] + +18. mfma C[16:32, 16:32] += A0[16:32, 0:32] * B0[16:32, 0:32] + +19. ds_read A0[32:48, 0:32] + +20. mfma C[16:32, 32:48] += A0[16:32, 0:32] * B0[32:48, 0:32] + From bf7611e4c8f13c43964e19f4a87c21de551af1ad Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 16 Jun 2026 09:39:10 +0000 Subject: [PATCH 062/118] Format wave0 hgemm ops list --- resource_inspect/hgemm_wave0_first20_ops.txt | 63 +++++++------------- 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/resource_inspect/hgemm_wave0_first20_ops.txt b/resource_inspect/hgemm_wave0_first20_ops.txt index 069a18daf..68378b548 100644 --- a/resource_inspect/hgemm_wave0_first20_ops.txt +++ b/resource_inspect/hgemm_wave0_first20_ops.txt @@ -25,49 +25,30 @@ Notation: A0 = current BLOCK_K tile, K 0:32 B0 = current BLOCK_K tile, K 0:32 A2/B2 = next BLOCK_K tile being copied global -> LDS - buffer_load B2_chunk[0] means CTA-wide global->LDS copy chunk, not only wave0's fragment + bfld means buffer_load global -> LDS. The range after bfld is the logical + shared-memory tile range written by that CTA-wide copy chunk. First 20 Ops ------------ -01. mfma C[0:16, 0:16] += A0[0:16, 0:32] * B0[0:16, 0:32] - -02. ds_read B0[64:80, 0:32] - -03. buffer_load B2_chunk[0] - -04. mfma C[0:16, 16:32] += A0[0:16, 0:32] * B0[16:32, 0:32] - -05. ds_read B0[80:96, 0:32] - -06. ds_read A0[16:32, 0:32] - -07. mfma C[0:16, 32:48] += A0[0:16, 0:32] * B0[32:48, 0:32] - -08. ds_read B0[96:112, 0:32] - -09. mfma C[0:16, 48:64] += A0[0:16, 0:32] * B0[48:64, 0:32] - -10. ds_read B0[112:128, 0:32] - -11. mfma C[0:16, 64:80] += A0[0:16, 0:32] * B0[64:80, 0:32] - -12. buffer_load B2_chunk[1] - -13. mfma C[0:16, 80:96] += A0[0:16, 0:32] * B0[80:96, 0:32] - -14. mfma C[0:16, 96:112] += A0[0:16, 0:32] * B0[96:112, 0:32] - -15. mfma C[0:16, 112:128] += A0[0:16, 0:32] * B0[112:128, 0:32] - -16. mfma C[16:32, 0:16] += A0[16:32, 0:32] * B0[0:16, 0:32] - -17. buffer_load B2_chunk[2] - -18. mfma C[16:32, 16:32] += A0[16:32, 0:32] * B0[16:32, 0:32] - -19. ds_read A0[32:48, 0:32] - -20. mfma C[16:32, 32:48] += A0[16:32, 0:32] * B0[32:48, 0:32] - +mfma C[0:16, 0:16] += A0[0:16, 0:32] * B0[0:16, 0:32] +dsrd B0[64:80, 0:32] +bfld B2[0:32, 0:64] +mfma C[0:16, 16:32] += A0[0:16, 0:32] * B0[16:32, 0:32] +dsrd B0[80:96, 0:32] +dsrd A0[16:32, 0:32] +mfma C[0:16, 32:48] += A0[0:16, 0:32] * B0[32:48, 0:32] +dsrd B0[96:112, 0:32] +mfma C[0:16, 48:64] += A0[0:16, 0:32] * B0[48:64, 0:32] +dsrd B0[112:128, 0:32] +mfma C[0:16, 64:80] += A0[0:16, 0:32] * B0[64:80, 0:32] +bfld B2[32:64, 0:64] +mfma C[0:16, 80:96] += A0[0:16, 0:32] * B0[80:96, 0:32] +mfma C[0:16, 96:112] += A0[0:16, 0:32] * B0[96:112, 0:32] +mfma C[0:16, 112:128] += A0[0:16, 0:32] * B0[112:128, 0:32] +mfma C[16:32, 0:16] += A0[16:32, 0:32] * B0[0:16, 0:32] +bfld B2[64:96, 0:64] +mfma C[16:32, 16:32] += A0[16:32, 0:32] * B0[16:32, 0:32] +dsrd A0[32:48, 0:32] +mfma C[16:32, 32:48] += A0[16:32, 0:32] * B0[32:48, 0:32] From e701d3b260df0f120dd0c4d4b08e86f3daee29f9 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 16 Jun 2026 11:14:18 +0000 Subject: [PATCH 063/118] Document full wave0 hgemm schedule --- resource_inspect/hgemm_wave0_first20_ops.txt | 52 ++--- .../hgemm_wave0_full_kernel_ops.txt | 187 ++++++++++++++++++ 2 files changed, 213 insertions(+), 26 deletions(-) create mode 100644 resource_inspect/hgemm_wave0_full_kernel_ops.txt diff --git a/resource_inspect/hgemm_wave0_first20_ops.txt b/resource_inspect/hgemm_wave0_first20_ops.txt index 68378b548..032f901d0 100644 --- a/resource_inspect/hgemm_wave0_first20_ops.txt +++ b/resource_inspect/hgemm_wave0_first20_ops.txt @@ -7,18 +7,18 @@ Only wave0. CTA-local mapping: - wave0 computes C[0:128, 0:128] + wave0 computes C0[ 0:128, 0:128] A ranges are CTA-local A[M, K] B ranges are CTA-local B[N, K], because this kernel receives B as transposed/packed (N, K) C ranges are CTA-local C[M, N] Current loop starts after previous loop tail already prefetched: - live A0[0:16, 0:32] - live B0[0:16, 0:32] - live B0[16:32, 0:32] - live B0[32:48, 0:32] - live B0[48:64, 0:32] + live A0[ 0: 16, 0: 32] + live B0[ 0: 16, 0: 32] + live B0[ 16: 32, 0: 32] + live B0[ 32: 48, 0: 32] + live B0[ 48: 64, 0: 32] Notation: @@ -32,23 +32,23 @@ Notation: First 20 Ops ------------ -mfma C[0:16, 0:16] += A0[0:16, 0:32] * B0[0:16, 0:32] -dsrd B0[64:80, 0:32] -bfld B2[0:32, 0:64] -mfma C[0:16, 16:32] += A0[0:16, 0:32] * B0[16:32, 0:32] -dsrd B0[80:96, 0:32] -dsrd A0[16:32, 0:32] -mfma C[0:16, 32:48] += A0[0:16, 0:32] * B0[32:48, 0:32] -dsrd B0[96:112, 0:32] -mfma C[0:16, 48:64] += A0[0:16, 0:32] * B0[48:64, 0:32] -dsrd B0[112:128, 0:32] -mfma C[0:16, 64:80] += A0[0:16, 0:32] * B0[64:80, 0:32] -bfld B2[32:64, 0:64] -mfma C[0:16, 80:96] += A0[0:16, 0:32] * B0[80:96, 0:32] -mfma C[0:16, 96:112] += A0[0:16, 0:32] * B0[96:112, 0:32] -mfma C[0:16, 112:128] += A0[0:16, 0:32] * B0[112:128, 0:32] -mfma C[16:32, 0:16] += A0[16:32, 0:32] * B0[0:16, 0:32] -bfld B2[64:96, 0:64] -mfma C[16:32, 16:32] += A0[16:32, 0:32] * B0[16:32, 0:32] -dsrd A0[32:48, 0:32] -mfma C[16:32, 32:48] += A0[16:32, 0:32] * B0[32:48, 0:32] +mfma C0[ 0: 16, 0: 16] += A0[ 0: 16, 0: 32] * B0[ 0: 16, 0: 32] +dsrd B0[ 64: 80, 0: 32] +bfld B2[ 0: 32, 0: 64] +mfma C0[ 0: 16, 16: 32] += A0[ 0: 16, 0: 32] * B0[ 16: 32, 0: 32] +dsrd B0[ 80: 96, 0: 32] +dsrd A0[ 16: 32, 0: 32] +mfma C0[ 0: 16, 32: 48] += A0[ 0: 16, 0: 32] * B0[ 32: 48, 0: 32] +dsrd B0[ 96:112, 0: 32] +mfma C0[ 0: 16, 48: 64] += A0[ 0: 16, 0: 32] * B0[ 48: 64, 0: 32] +dsrd B0[112:128, 0: 32] +mfma C0[ 0: 16, 64: 80] += A0[ 0: 16, 0: 32] * B0[ 64: 80, 0: 32] +bfld B2[ 32: 64, 0: 64] +mfma C0[ 0: 16, 80: 96] += A0[ 0: 16, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 0: 16, 96:112] += A0[ 0: 16, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 0: 16, 112:128] += A0[ 0: 16, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 16: 32, 0: 16] += A0[ 16: 32, 0: 32] * B0[ 0: 16, 0: 32] +bfld B2[ 64: 96, 0: 64] +mfma C0[ 16: 32, 16: 32] += A0[ 16: 32, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 32: 48, 0: 32] +mfma C0[ 16: 32, 32: 48] += A0[ 16: 32, 0: 32] * B0[ 32: 48, 0: 32] diff --git a/resource_inspect/hgemm_wave0_full_kernel_ops.txt b/resource_inspect/hgemm_wave0_full_kernel_ops.txt new file mode 100644 index 000000000..d978df487 --- /dev/null +++ b/resource_inspect/hgemm_wave0_full_kernel_ops.txt @@ -0,0 +1,187 @@ +Wave0 full steady-state BLOCK_K=64 schedule, current B4 tail-prefetch version +=========================================================================== + +This expands one steady-state tile for wave0 only. It does not repeat all 128 K tiles. +Layout: A is A[M,K], B is B[N,K], C is C[M,N]. +At loop entry, A0[ 0: 16, 0: 32] and B0[ 0: 64, 0: 32] are already live from the previous loop tail. + +Ops +--- +mfma C0[ 0: 16, 0: 16] += A0[ 0: 16, 0: 32] * B0[ 0: 16, 0: 32] +dsrd B0[ 64: 80, 0: 32] +bfld B2[ 0: 32, 0: 64] +mfma C0[ 0: 16, 16: 32] += A0[ 0: 16, 0: 32] * B0[ 16: 32, 0: 32] +dsrd B0[ 80: 96, 0: 32] +dsrd A0[ 16: 32, 0: 32] +mfma C0[ 0: 16, 32: 48] += A0[ 0: 16, 0: 32] * B0[ 32: 48, 0: 32] +dsrd B0[ 96:112, 0: 32] +mfma C0[ 0: 16, 48: 64] += A0[ 0: 16, 0: 32] * B0[ 48: 64, 0: 32] +dsrd B0[112:128, 0: 32] +mfma C0[ 0: 16, 64: 80] += A0[ 0: 16, 0: 32] * B0[ 64: 80, 0: 32] +bfld B2[ 32: 64, 0: 64] +mfma C0[ 0: 16, 80: 96] += A0[ 0: 16, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 0: 16, 96:112] += A0[ 0: 16, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 0: 16, 112:128] += A0[ 0: 16, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 16: 32, 0: 16] += A0[ 16: 32, 0: 32] * B0[ 0: 16, 0: 32] +bfld B2[ 64: 96, 0: 64] +mfma C0[ 16: 32, 16: 32] += A0[ 16: 32, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 32: 48, 0: 32] +mfma C0[ 16: 32, 32: 48] += A0[ 16: 32, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[ 16: 32, 48: 64] += A0[ 16: 32, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[ 16: 32, 64: 80] += A0[ 16: 32, 0: 32] * B0[ 64: 80, 0: 32] +bfld B2[ 96:128, 0: 64] +mfma C0[ 16: 32, 80: 96] += A0[ 16: 32, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 16: 32, 96:112] += A0[ 16: 32, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 16: 32, 112:128] += A0[ 16: 32, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 32: 48, 0: 16] += A0[ 32: 48, 0: 32] * B0[ 0: 16, 0: 32] +bfld B2[128:160, 0: 64] +mfma C0[ 32: 48, 16: 32] += A0[ 32: 48, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 48: 64, 0: 32] +mfma C0[ 32: 48, 32: 48] += A0[ 32: 48, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[ 32: 48, 48: 64] += A0[ 32: 48, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[ 32: 48, 64: 80] += A0[ 32: 48, 0: 32] * B0[ 64: 80, 0: 32] +bfld B2[160:192, 0: 64] +mfma C0[ 32: 48, 80: 96] += A0[ 32: 48, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 32: 48, 96:112] += A0[ 32: 48, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 32: 48, 112:128] += A0[ 32: 48, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 48: 64, 0: 16] += A0[ 48: 64, 0: 32] * B0[ 0: 16, 0: 32] +bfld B2[192:224, 0: 64] +mfma C0[ 48: 64, 16: 32] += A0[ 48: 64, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 64: 80, 0: 32] +mfma C0[ 48: 64, 32: 48] += A0[ 48: 64, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[ 48: 64, 48: 64] += A0[ 48: 64, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[ 48: 64, 64: 80] += A0[ 48: 64, 0: 32] * B0[ 64: 80, 0: 32] +bfld B2[224:256, 0: 64] +mfma C0[ 48: 64, 80: 96] += A0[ 48: 64, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 48: 64, 96:112] += A0[ 48: 64, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 48: 64, 112:128] += A0[ 48: 64, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 64: 80, 0: 16] += A0[ 64: 80, 0: 32] * B0[ 0: 16, 0: 32] +bfld A2[ 0: 32, 0: 64] +mfma C0[ 64: 80, 16: 32] += A0[ 64: 80, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 80: 96, 0: 32] +mfma C0[ 64: 80, 32: 48] += A0[ 64: 80, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[ 64: 80, 48: 64] += A0[ 64: 80, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[ 64: 80, 64: 80] += A0[ 64: 80, 0: 32] * B0[ 64: 80, 0: 32] +bfld A2[ 32: 64, 0: 64] +mfma C0[ 64: 80, 80: 96] += A0[ 64: 80, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 64: 80, 96:112] += A0[ 64: 80, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 64: 80, 112:128] += A0[ 64: 80, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 80: 96, 0: 16] += A0[ 80: 96, 0: 32] * B0[ 0: 16, 0: 32] +bfld A2[ 64: 96, 0: 64] +mfma C0[ 80: 96, 16: 32] += A0[ 80: 96, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[ 96:112, 0: 32] +mfma C0[ 80: 96, 32: 48] += A0[ 80: 96, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[ 80: 96, 48: 64] += A0[ 80: 96, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[ 80: 96, 64: 80] += A0[ 80: 96, 0: 32] * B0[ 64: 80, 0: 32] +bfld A2[ 96:128, 0: 64] +mfma C0[ 80: 96, 80: 96] += A0[ 80: 96, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 80: 96, 96:112] += A0[ 80: 96, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 80: 96, 112:128] += A0[ 80: 96, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 96:112, 0: 16] += A0[ 96:112, 0: 32] * B0[ 0: 16, 0: 32] +dsrd B1[ 0: 16, 32: 64] +bfld A2[128:160, 0: 64] +mfma C0[ 96:112, 16: 32] += A0[ 96:112, 0: 32] * B0[ 16: 32, 0: 32] +dsrd A0[112:128, 0: 32] +dsrd B1[ 16: 32, 32: 64] +mfma C0[ 96:112, 32: 48] += A0[ 96:112, 0: 32] * B0[ 32: 48, 0: 32] +dsrd B1[ 32: 48, 32: 64] +mfma C0[ 96:112, 48: 64] += A0[ 96:112, 0: 32] * B0[ 48: 64, 0: 32] +dsrd B1[ 48: 64, 32: 64] +mfma C0[ 96:112, 64: 80] += A0[ 96:112, 0: 32] * B0[ 64: 80, 0: 32] +dsrd A1[ 0: 16, 32: 64] +bfld A2[160:192, 0: 64] +mfma C0[ 96:112, 80: 96] += A0[ 96:112, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[ 96:112, 96:112] += A0[ 96:112, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[ 96:112, 112:128] += A0[ 96:112, 0: 32] * B0[112:128, 0: 32] +mfma C0[112:128, 0: 16] += A0[112:128, 0: 32] * B0[ 0: 16, 0: 32] +bfld A2[192:224, 0: 64] +mfma C0[112:128, 16: 32] += A0[112:128, 0: 32] * B0[ 16: 32, 0: 32] +mfma C0[112:128, 32: 48] += A0[112:128, 0: 32] * B0[ 32: 48, 0: 32] +mfma C0[112:128, 48: 64] += A0[112:128, 0: 32] * B0[ 48: 64, 0: 32] +mfma C0[112:128, 64: 80] += A0[112:128, 0: 32] * B0[ 64: 80, 0: 32] +bfld A2[224:256, 0: 64] +mfma C0[112:128, 80: 96] += A0[112:128, 0: 32] * B0[ 80: 96, 0: 32] +mfma C0[112:128, 96:112] += A0[112:128, 0: 32] * B0[ 96:112, 0: 32] +mfma C0[112:128, 112:128] += A0[112:128, 0: 32] * B0[112:128, 0: 32] +mfma C0[ 0: 16, 0: 16] += A1[ 0: 16, 32: 64] * B1[ 0: 16, 32: 64] +dsrd B1[ 64: 80, 32: 64] +mfma C0[ 0: 16, 16: 32] += A1[ 0: 16, 32: 64] * B1[ 16: 32, 32: 64] +dsrd B1[ 80: 96, 32: 64] +dsrd A1[ 16: 32, 32: 64] +mfma C0[ 0: 16, 32: 48] += A1[ 0: 16, 32: 64] * B1[ 32: 48, 32: 64] +dsrd B1[ 96:112, 32: 64] +mfma C0[ 0: 16, 48: 64] += A1[ 0: 16, 32: 64] * B1[ 48: 64, 32: 64] +dsrd B1[112:128, 32: 64] +mfma C0[ 0: 16, 64: 80] += A1[ 0: 16, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 0: 16, 80: 96] += A1[ 0: 16, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 0: 16, 96:112] += A1[ 0: 16, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 0: 16, 112:128] += A1[ 0: 16, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 16: 32, 0: 16] += A1[ 16: 32, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 16: 32, 16: 32] += A1[ 16: 32, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[ 32: 48, 32: 64] +mfma C0[ 16: 32, 32: 48] += A1[ 16: 32, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 16: 32, 48: 64] += A1[ 16: 32, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 16: 32, 64: 80] += A1[ 16: 32, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 16: 32, 80: 96] += A1[ 16: 32, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 16: 32, 96:112] += A1[ 16: 32, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 16: 32, 112:128] += A1[ 16: 32, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 32: 48, 0: 16] += A1[ 32: 48, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 32: 48, 16: 32] += A1[ 32: 48, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[ 48: 64, 32: 64] +mfma C0[ 32: 48, 32: 48] += A1[ 32: 48, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 32: 48, 48: 64] += A1[ 32: 48, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 32: 48, 64: 80] += A1[ 32: 48, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 32: 48, 80: 96] += A1[ 32: 48, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 32: 48, 96:112] += A1[ 32: 48, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 32: 48, 112:128] += A1[ 32: 48, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 48: 64, 0: 16] += A1[ 48: 64, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 48: 64, 16: 32] += A1[ 48: 64, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[ 64: 80, 32: 64] +mfma C0[ 48: 64, 32: 48] += A1[ 48: 64, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 48: 64, 48: 64] += A1[ 48: 64, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 48: 64, 64: 80] += A1[ 48: 64, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 48: 64, 80: 96] += A1[ 48: 64, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 48: 64, 96:112] += A1[ 48: 64, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 48: 64, 112:128] += A1[ 48: 64, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 64: 80, 0: 16] += A1[ 64: 80, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 64: 80, 16: 32] += A1[ 64: 80, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[ 80: 96, 32: 64] +mfma C0[ 64: 80, 32: 48] += A1[ 64: 80, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 64: 80, 48: 64] += A1[ 64: 80, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 64: 80, 64: 80] += A1[ 64: 80, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 64: 80, 80: 96] += A1[ 64: 80, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 64: 80, 96:112] += A1[ 64: 80, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 64: 80, 112:128] += A1[ 64: 80, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 80: 96, 0: 16] += A1[ 80: 96, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 80: 96, 16: 32] += A1[ 80: 96, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[ 96:112, 32: 64] +mfma C0[ 80: 96, 32: 48] += A1[ 80: 96, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 80: 96, 48: 64] += A1[ 80: 96, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 80: 96, 64: 80] += A1[ 80: 96, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 80: 96, 80: 96] += A1[ 80: 96, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 80: 96, 96:112] += A1[ 80: 96, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 80: 96, 112:128] += A1[ 80: 96, 32: 64] * B1[112:128, 32: 64] +mfma C0[ 96:112, 0: 16] += A1[ 96:112, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[ 96:112, 16: 32] += A1[ 96:112, 32: 64] * B1[ 16: 32, 32: 64] +dsrd A1[112:128, 32: 64] +mfma C0[ 96:112, 32: 48] += A1[ 96:112, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[ 96:112, 48: 64] += A1[ 96:112, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[ 96:112, 64: 80] += A1[ 96:112, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[ 96:112, 80: 96] += A1[ 96:112, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[ 96:112, 96:112] += A1[ 96:112, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[ 96:112, 112:128] += A1[ 96:112, 32: 64] * B1[112:128, 32: 64] +mfma C0[112:128, 0: 16] += A1[112:128, 32: 64] * B1[ 0: 16, 32: 64] +mfma C0[112:128, 16: 32] += A1[112:128, 32: 64] * B1[ 16: 32, 32: 64] +mfma C0[112:128, 32: 48] += A1[112:128, 32: 64] * B1[ 32: 48, 32: 64] +mfma C0[112:128, 48: 64] += A1[112:128, 32: 64] * B1[ 48: 64, 32: 64] +mfma C0[112:128, 64: 80] += A1[112:128, 32: 64] * B1[ 64: 80, 32: 64] +mfma C0[112:128, 80: 96] += A1[112:128, 32: 64] * B1[ 80: 96, 32: 64] +mfma C0[112:128, 96:112] += A1[112:128, 32: 64] * B1[ 96:112, 32: 64] +mfma C0[112:128, 112:128] += A1[112:128, 32: 64] * B1[112:128, 32: 64] +barrier vmcnt(0) + s_barrier +dsrd B2[ 0: 16, 0: 32] +dsrd B2[ 16: 32, 0: 32] +dsrd B2[ 32: 48, 0: 32] +dsrd B2[ 48: 64, 0: 32] +dsrd A2[ 0: 16, 0: 32] +yield state: C0, A2[ 0: 16, 0: 32], B2[ 0: 64, 0: 32] From 63ed364bd58bac40695d8142da1b160c4e398e6d Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 16 Jun 2026 12:29:25 +0000 Subject: [PATCH 064/118] zz --- .../hgemm_wave0_compact_schedule.txt | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 resource_inspect/hgemm_wave0_compact_schedule.txt diff --git a/resource_inspect/hgemm_wave0_compact_schedule.txt b/resource_inspect/hgemm_wave0_compact_schedule.txt new file mode 100644 index 000000000..94b550f7b --- /dev/null +++ b/resource_inspect/hgemm_wave0_compact_schedule.txt @@ -0,0 +1,190 @@ +Wave0 compact steady-state schedule +=================================== + +Block notation: + C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. + A0[i,k] and B0[j,k] are current LDS buffer fragments, k=0 means K[0:32], k=1 means K[32:64]. + A1/B1 is the other LDS buffer for the next outer-loop tile. + dsrd reads one 16x32 fragment from LDS. + bfld writes CTA-wide global->LDS chunks into the other buffer. Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. + +Ops +--- +mfma C[0,0]+=A0[0,0]*B0[0,0] +dsrd B0[4,0] +bfld B1[0:2,0:2] +mfma C[0,1]+=A0[0,0]*B0[1,0] +dsrd B0[5,0] +dsrd A0[1,0] +mfma C[0,2]+=A0[0,0]*B0[2,0] +dsrd B0[6,0] +mfma C[0,3]+=A0[0,0]*B0[3,0] +dsrd B0[7,0] +mfma C[0,4]+=A0[0,0]*B0[4,0] +bfld B1[2:4,0:2] +mfma C[0,5]+=A0[0,0]*B0[5,0] +mfma C[0,6]+=A0[0,0]*B0[6,0] +mfma C[0,7]+=A0[0,0]*B0[7,0] +mfma C[1,0]+=A0[1,0]*B0[0,0] +bfld B1[4:6,0:2] +mfma C[1,1]+=A0[1,0]*B0[1,0] +dsrd A0[2,0] +mfma C[1,2]+=A0[1,0]*B0[2,0] +mfma C[1,3]+=A0[1,0]*B0[3,0] +mfma C[1,4]+=A0[1,0]*B0[4,0] +bfld B1[6:8,0:2] +mfma C[1,5]+=A0[1,0]*B0[5,0] +mfma C[1,6]+=A0[1,0]*B0[6,0] +mfma C[1,7]+=A0[1,0]*B0[7,0] +mfma C[2,0]+=A0[2,0]*B0[0,0] +bfld B1[8:10,0:2] +mfma C[2,1]+=A0[2,0]*B0[1,0] +dsrd A0[3,0] +mfma C[2,2]+=A0[2,0]*B0[2,0] +mfma C[2,3]+=A0[2,0]*B0[3,0] +mfma C[2,4]+=A0[2,0]*B0[4,0] +bfld B1[10:12,0:2] +mfma C[2,5]+=A0[2,0]*B0[5,0] +mfma C[2,6]+=A0[2,0]*B0[6,0] +mfma C[2,7]+=A0[2,0]*B0[7,0] +mfma C[3,0]+=A0[3,0]*B0[0,0] +bfld B1[12:14,0:2] +mfma C[3,1]+=A0[3,0]*B0[1,0] +dsrd A0[4,0] +mfma C[3,2]+=A0[3,0]*B0[2,0] +mfma C[3,3]+=A0[3,0]*B0[3,0] +mfma C[3,4]+=A0[3,0]*B0[4,0] +bfld B1[14:16,0:2] +mfma C[3,5]+=A0[3,0]*B0[5,0] +mfma C[3,6]+=A0[3,0]*B0[6,0] +mfma C[3,7]+=A0[3,0]*B0[7,0] +mfma C[4,0]+=A0[4,0]*B0[0,0] +bfld A1[0:2,0:2] +mfma C[4,1]+=A0[4,0]*B0[1,0] +dsrd A0[5,0] +mfma C[4,2]+=A0[4,0]*B0[2,0] +mfma C[4,3]+=A0[4,0]*B0[3,0] +mfma C[4,4]+=A0[4,0]*B0[4,0] +bfld A1[2:4,0:2] +mfma C[4,5]+=A0[4,0]*B0[5,0] +mfma C[4,6]+=A0[4,0]*B0[6,0] +mfma C[4,7]+=A0[4,0]*B0[7,0] +mfma C[5,0]+=A0[5,0]*B0[0,0] +bfld A1[4:6,0:2] +mfma C[5,1]+=A0[5,0]*B0[1,0] +dsrd A0[6,0] +mfma C[5,2]+=A0[5,0]*B0[2,0] +mfma C[5,3]+=A0[5,0]*B0[3,0] +mfma C[5,4]+=A0[5,0]*B0[4,0] +bfld A1[6:8,0:2] +mfma C[5,5]+=A0[5,0]*B0[5,0] +mfma C[5,6]+=A0[5,0]*B0[6,0] +mfma C[5,7]+=A0[5,0]*B0[7,0] +mfma C[6,0]+=A0[6,0]*B0[0,0] +dsrd B0[0,1] +bfld A1[8:10,0:2] +mfma C[6,1]+=A0[6,0]*B0[1,0] +dsrd A0[7,0] +dsrd B0[1,1] +mfma C[6,2]+=A0[6,0]*B0[2,0] +dsrd B0[2,1] +mfma C[6,3]+=A0[6,0]*B0[3,0] +dsrd B0[3,1] +mfma C[6,4]+=A0[6,0]*B0[4,0] +dsrd A0[0,1] +bfld A1[10:12,0:2] +mfma C[6,5]+=A0[6,0]*B0[5,0] +mfma C[6,6]+=A0[6,0]*B0[6,0] +mfma C[6,7]+=A0[6,0]*B0[7,0] +mfma C[7,0]+=A0[7,0]*B0[0,0] +bfld A1[12:14,0:2] +mfma C[7,1]+=A0[7,0]*B0[1,0] +mfma C[7,2]+=A0[7,0]*B0[2,0] +mfma C[7,3]+=A0[7,0]*B0[3,0] +mfma C[7,4]+=A0[7,0]*B0[4,0] +bfld A1[14:16,0:2] +mfma C[7,5]+=A0[7,0]*B0[5,0] +mfma C[7,6]+=A0[7,0]*B0[6,0] +mfma C[7,7]+=A0[7,0]*B0[7,0] +mfma C[0,0]+=A0[0,1]*B0[0,1] +dsrd B0[4,1] +mfma C[0,1]+=A0[0,1]*B0[1,1] +dsrd B0[5,1] +dsrd A0[1,1] +mfma C[0,2]+=A0[0,1]*B0[2,1] +dsrd B0[6,1] +mfma C[0,3]+=A0[0,1]*B0[3,1] +dsrd B0[7,1] +mfma C[0,4]+=A0[0,1]*B0[4,1] +mfma C[0,5]+=A0[0,1]*B0[5,1] +mfma C[0,6]+=A0[0,1]*B0[6,1] +mfma C[0,7]+=A0[0,1]*B0[7,1] +mfma C[1,0]+=A0[1,1]*B0[0,1] +mfma C[1,1]+=A0[1,1]*B0[1,1] +dsrd A0[2,1] +mfma C[1,2]+=A0[1,1]*B0[2,1] +mfma C[1,3]+=A0[1,1]*B0[3,1] +mfma C[1,4]+=A0[1,1]*B0[4,1] +mfma C[1,5]+=A0[1,1]*B0[5,1] +mfma C[1,6]+=A0[1,1]*B0[6,1] +mfma C[1,7]+=A0[1,1]*B0[7,1] +mfma C[2,0]+=A0[2,1]*B0[0,1] +mfma C[2,1]+=A0[2,1]*B0[1,1] +dsrd A0[3,1] +mfma C[2,2]+=A0[2,1]*B0[2,1] +mfma C[2,3]+=A0[2,1]*B0[3,1] +mfma C[2,4]+=A0[2,1]*B0[4,1] +mfma C[2,5]+=A0[2,1]*B0[5,1] +mfma C[2,6]+=A0[2,1]*B0[6,1] +mfma C[2,7]+=A0[2,1]*B0[7,1] +mfma C[3,0]+=A0[3,1]*B0[0,1] +mfma C[3,1]+=A0[3,1]*B0[1,1] +dsrd A0[4,1] +mfma C[3,2]+=A0[3,1]*B0[2,1] +mfma C[3,3]+=A0[3,1]*B0[3,1] +mfma C[3,4]+=A0[3,1]*B0[4,1] +mfma C[3,5]+=A0[3,1]*B0[5,1] +mfma C[3,6]+=A0[3,1]*B0[6,1] +mfma C[3,7]+=A0[3,1]*B0[7,1] +mfma C[4,0]+=A0[4,1]*B0[0,1] +mfma C[4,1]+=A0[4,1]*B0[1,1] +dsrd A0[5,1] +mfma C[4,2]+=A0[4,1]*B0[2,1] +mfma C[4,3]+=A0[4,1]*B0[3,1] +mfma C[4,4]+=A0[4,1]*B0[4,1] +mfma C[4,5]+=A0[4,1]*B0[5,1] +mfma C[4,6]+=A0[4,1]*B0[6,1] +mfma C[4,7]+=A0[4,1]*B0[7,1] +mfma C[5,0]+=A0[5,1]*B0[0,1] +mfma C[5,1]+=A0[5,1]*B0[1,1] +dsrd A0[6,1] +mfma C[5,2]+=A0[5,1]*B0[2,1] +mfma C[5,3]+=A0[5,1]*B0[3,1] +mfma C[5,4]+=A0[5,1]*B0[4,1] +mfma C[5,5]+=A0[5,1]*B0[5,1] +mfma C[5,6]+=A0[5,1]*B0[6,1] +mfma C[5,7]+=A0[5,1]*B0[7,1] +mfma C[6,0]+=A0[6,1]*B0[0,1] +mfma C[6,1]+=A0[6,1]*B0[1,1] +dsrd A0[7,1] +mfma C[6,2]+=A0[6,1]*B0[2,1] +mfma C[6,3]+=A0[6,1]*B0[3,1] +mfma C[6,4]+=A0[6,1]*B0[4,1] +mfma C[6,5]+=A0[6,1]*B0[5,1] +mfma C[6,6]+=A0[6,1]*B0[6,1] +mfma C[6,7]+=A0[6,1]*B0[7,1] +mfma C[7,0]+=A0[7,1]*B0[0,1] +mfma C[7,1]+=A0[7,1]*B0[1,1] +mfma C[7,2]+=A0[7,1]*B0[2,1] +mfma C[7,3]+=A0[7,1]*B0[3,1] +mfma C[7,4]+=A0[7,1]*B0[4,1] +mfma C[7,5]+=A0[7,1]*B0[5,1] +mfma C[7,6]+=A0[7,1]*B0[6,1] +mfma C[7,7]+=A0[7,1]*B0[7,1] +barrier vmcnt(0)+s_barrier +dsrd B1[0,0] +dsrd B1[1,0] +dsrd B1[2,0] +dsrd B1[3,0] +dsrd A1[0,0] +yield C,A1[0,0],B1[0:4,0] From c3aeb8773f64216474ed73cb480923a8fb8e2b02 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 10:52:24 +0000 Subject: [PATCH 065/118] Add K32 register-prefetch pipeline to bf16 hgemm (+22%: 837->1025 TFLOPS) Add an RP1 (register-prefetch K1) compute path to compile_hgemm_kernel, gated by K32_REGISTER_PIPELINE + A/B_LDS_K32_BLOCKING. On gfx950 single-CTA bf16 GEMM at 8192x8192x16384 (BM256xBN256xBK64, 2 stages, 4 waves) this lifts throughput from 837 to ~1025 TFLOPS at matching accuracy (cos 0.99999). Mechanism: treat the 2 physical LDS stages as 4 K32 sub-buffers and stagger the global->LDS prefetch so a tile's K0 leads by 2 tiles and K1 by 1. The loop-tail read then targets a buffer written two tiles earlier, so the drain can be relaxed from s_waitcnt vmcnt(0) to vmcnt(LDG_WAIT_COUNT) -- keeping global-load latency overlapped with MFMA instead of stalling (~1180-cyc ATT stall removed). hot-loop drops from ~3004 to ~2190 cyc/loop. Also adds experiments/bf16_gemm_single_block.py harness and .gitignore rules for build/trace artifacts. Co-Authored-By: Claude Opus 4 (1M context) --- .gitignore | 16 ++ experiments/bf16_gemm_single_block.py | 237 ++++++++++++++++ kernels/hgemm_splitk.py | 391 +++++++++++++++++++++++--- 3 files changed, 604 insertions(+), 40 deletions(-) create mode 100644 experiments/bf16_gemm_single_block.py diff --git a/.gitignore b/.gitignore index 4a341beb1..29c9d6a27 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,19 @@ Thumbs.db # Sphinx documentation build docs/_build/ python/flydsl/_mlir + + +*.hsaco +core +core.gpu +*.mlir +*.ll +*.s +*.out +*.bc +*.o +*.s +*.bc +*.o +*.stderr +*.stdout diff --git a/experiments/bf16_gemm_single_block.py b/experiments/bf16_gemm_single_block.py new file mode 100644 index 000000000..757c924b3 --- /dev/null +++ b/experiments/bf16_gemm_single_block.py @@ -0,0 +1,237 @@ +#!/usr/bin/env python3 +"""BF16 GEMM experiment for ISA and ATT inspection. + +Logical problem: + A: (M, K) bf16, row-major + B: (K, N) bf16, row-major + C: (M, N) bf16 + +The FlyDSL HGEMM kernel consumes B in transposed row-major form +``B_T: (N, K)``. This harness keeps the user-facing shape above, then passes +``B_T`` to the kernel. The default shape is large enough to fill the GPU: + + M = 8192, N = 8192, K = 16384 + +The per-CTA tile is: + + BM = 256, BN = 256, BK = 64, stages = 2, waves = 2 x 2 x 1 = 4 +""" + +from __future__ import annotations + +import argparse +import math +import os +import re +import sys +import time +from pathlib import Path + +import torch + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +if REPO_ROOT not in sys.path: + sys.path.insert(0, REPO_ROOT) + +from flydsl.runtime.device import get_rocm_arch +from kernels.hgemm_splitk import hgemm_splitk_ + + +DEFAULT_M = 8192 +DEFAULT_N = 8192 +DEFAULT_K = 16384 + +HGEMM_KWARGS = { + "TILE_M": 256, + "TILE_N": 256, + "TILE_K": 64, + "STAGES": 2, + "SPLIT_K": 1, + "BLOCK_M_WARPS": 2, + "BLOCK_N_WARPS": 2, + "BLOCK_K_WARPS": 1, + "B_TO_LDS": True, +} + + +def _kernel_name() -> str: + # Keep in sync with kernels/hgemm_splitk.py. + async_tag = "AS1" if str(get_rocm_arch()) != "gfx942" else "AS0" + name = ( + "hgemm_bf16_256x256x64x2" + "_SPK1_W2x2x1_BLDS1_TN" + f"_{async_tag}" + ) + if HGEMM_KWARGS.get("A_LDS_K32_BLOCKING", False) or HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): + name += "_AK32" + if HGEMM_KWARGS.get("B_LDS_K32_BLOCKING", False) or HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): + name += "_BK32" + if HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): + name += "_RP1" + return name + + +def assert_no_spills() -> None: + dump_dir = os.environ.get("FLYDSL_DUMP_DIR") + if not dump_dir: + return + + root = Path(dump_dir) + if not root.exists(): + raise RuntimeError(f"FLYDSL_DUMP_DIR does not exist: {root}") + + candidates = [p for p in root.rglob("22_final_isa.s") if p.parent.name.startswith(_kernel_name())] + if not candidates: + raise RuntimeError(f"could not find final ISA for {_kernel_name()} under {root}") + + isa_path = max(candidates, key=lambda p: p.stat().st_mtime) + text = isa_path.read_text() + + checks = { + "sgpr_spill_count": re.compile(r"\.sgpr_spill_count:\s*(\d+)"), + "vgpr_spill_count": re.compile(r"\.vgpr_spill_count:\s*(\d+)"), + "private_segment_fixed_size": re.compile(r"\.private_segment_fixed_size:\s*(\d+)"), + "uses_flat_scratch": re.compile(r"uses_flat_scratch,\s*(\d+)"), + } + failures = [] + for name, pattern in checks.items(): + matches = [int(m.group(1)) for m in pattern.finditer(text)] + if matches and any(v != 0 for v in matches): + failures.append(f"{name}={matches}") + + scratch_ops = re.findall(r"\b(?:scratch_(?:load|store)|buffer_(?:load|store)[^\n]*scratch)", text) + if scratch_ops: + failures.append("scratch memory ops present") + + if failures: + detail = "; ".join(failures) + raise RuntimeError(f"kernel spill check failed for {isa_path}: {detail}") + + print(f"spill_check=ok isa={isa_path}") + + +def make_inputs(m: int, n: int, k: int, *, skip_init: bool) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + device = torch.device("cuda") + if skip_init: + a = torch.empty((m, k), device=device, dtype=torch.bfloat16) + b = torch.empty((k, n), device=device, dtype=torch.bfloat16) + else: + gen = torch.Generator(device=device) + gen.manual_seed(123) + # Small magnitude keeps bf16-output error easy to inspect. + a = (torch.rand((m, k), device=device, dtype=torch.float32, generator=gen) - 0.5).to(torch.bfloat16) * 0.125 + b = (torch.rand((k, n), device=device, dtype=torch.float32, generator=gen) - 0.5).to(torch.bfloat16) * 0.125 + c = torch.empty((m, n), device=device, dtype=torch.bfloat16) + return a, b, c + + +def run_kernel(c: torch.Tensor, a: torch.Tensor, b_t: torch.Tensor) -> None: + hgemm_splitk_( + c, + a, + b_t, + None, + HGEMM_KWARGS, + torch.cuda.current_stream(), + ) + + +def check_result(c: torch.Tensor, a: torch.Tensor, b: torch.Tensor) -> tuple[float, float]: + ref = torch.mm(a.float(), b.float()) + got = c.float() + diff = got - ref + max_abs = diff.abs().max().item() + cos = torch.nn.functional.cosine_similarity(got.flatten(), ref.flatten(), dim=0).item() + if not math.isfinite(max_abs) or not math.isfinite(cos): + raise RuntimeError(f"non-finite check result: max_abs={max_abs}, cos={cos}") + return max_abs, cos + + +def time_kernel(c: torch.Tensor, a: torch.Tensor, b_t: torch.Tensor, *, warmup: int, iters: int) -> float: + for _ in range(warmup): + run_kernel(c, a, b_t) + torch.cuda.synchronize() + + start = time.perf_counter() + for _ in range(iters): + run_kernel(c, a, b_t) + torch.cuda.synchronize() + elapsed_s = time.perf_counter() - start + return elapsed_s * 1.0e6 / max(1, iters) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--m", type=int, default=DEFAULT_M) + parser.add_argument("--n", type=int, default=DEFAULT_N) + parser.add_argument("--k", type=int, default=DEFAULT_K) + parser.add_argument("--warmup", type=int, default=3) + parser.add_argument("--iters", type=int, default=10) + parser.add_argument("--no-check", action="store_true") + parser.add_argument( + "--skip-init", + action="store_true", + help="Use torch.empty inputs. Useful for ATT so PyTorch init kernels do not clutter the trace.", + ) + parser.add_argument( + "--a-lds-k32-blocking", + action="store_true", + help="Enable the experimental K32-blocked LDS layout for A.", + ) + parser.add_argument( + "--k32-register-pipeline", + action="store_true", + help="Enable A/B K32 LDS layouts and register-prefetch the second K32 slice.", + ) + parser.add_argument( + "--b-lds-k32-blocking", + action="store_true", + help="Enable the experimental K32-blocked LDS layout for B.", + ) + args = parser.parse_args() + HGEMM_KWARGS["A_LDS_K32_BLOCKING"] = bool(args.a_lds_k32_blocking) + HGEMM_KWARGS["B_LDS_K32_BLOCKING"] = bool(args.b_lds_k32_blocking) + HGEMM_KWARGS["K32_REGISTER_PIPELINE"] = bool(args.k32_register_pipeline) + + if not torch.cuda.is_available(): + raise RuntimeError("CUDA/ROCm device is not available") + if args.iters <= 0: + raise ValueError("--iters must be positive") + if args.warmup < 0: + raise ValueError("--warmup must be non-negative") + tile_m = int(HGEMM_KWARGS["TILE_M"]) + tile_n = int(HGEMM_KWARGS["TILE_N"]) + tile_k = int(HGEMM_KWARGS["TILE_K"]) + if args.m <= 0 or args.n <= 0 or args.k <= 0: + raise ValueError("--m, --n, and --k must be positive") + if args.n % tile_n != 0: + raise ValueError(f"--n must be divisible by TILE_N={tile_n}, got {args.n}") + if args.k % tile_k != 0: + raise ValueError(f"--k must be divisible by TILE_K={tile_k}, got {args.k}") + + a, b, c = make_inputs(args.m, args.n, args.k, skip_init=args.skip_init) + b_t = b.t().contiguous() if not args.skip_init else torch.empty((args.n, args.k), device=b.device, dtype=b.dtype) + + # First call compiles and launches the fixed-shape FlyDSL kernel. + run_kernel(c, a, b_t) + torch.cuda.synchronize() + assert_no_spills() + + max_abs = float("nan") + cos = float("nan") + if not args.no_check and not args.skip_init: + max_abs, cos = check_result(c, a, b) + + us = time_kernel(c, a, b_t, warmup=args.warmup, iters=args.iters) + tflops = (2.0 * args.m * args.n * args.k) / (us * 1.0e-6) / 1.0e12 + + print(f"arch={get_rocm_arch()}") + print(f"kernel={_kernel_name()}") + print(f"shape=A({args.m},{args.k}) B({args.k},{args.n}) C({args.m},{args.n})") + print(f"tile=BM256 BN256 BK64 stages=2 waves=4 b_to_lds=1") + print(f"time_us={us:.3f} tflops={tflops:.3f}") + print(f"check_max_abs={max_abs:.6f} check_cos={cos:.9f}") + + +if __name__ == "__main__": + main() diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index f778fed92..594d776b1 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -150,6 +150,9 @@ def compile_hgemm_kernel( BLOCK_N_WARPS: int = 2, BLOCK_K_WARPS: int = 1, B_TO_LDS: bool = False, + A_LDS_K32_BLOCKING: bool = False, + B_LDS_K32_BLOCKING: bool = False, + K32_REGISTER_PIPELINE: bool = False, HAS_BIAS: bool = False, ): assert BLOCK_M_WARPS * BLOCK_N_WARPS * BLOCK_K_WARPS <= 16 @@ -243,15 +246,73 @@ def compile_hgemm_kernel( allocator.ptr += SMEM_USE_ - SMEM_USE assert SMEM_USE_ <= SMEM_CAPACITY_MAP[GPU_ARCH] LDG_ASYNC_VEC_SIZE = DMA_BYTES // DTYPE_BYTES - LDG_A_X_THREADS_AS = BLOCK_K // LDG_ASYNC_VEC_SIZE LDG_REG_A_COUNT_AS = BLOCK_MK_SIZE // LDG_ASYNC_VEC_SIZE // BLOCK_THREADS - LDG_B_X_THREADS_AS = BLOCK_K // LDG_ASYNC_VEC_SIZE LDG_REG_B_COUNT_AS = BLOCK_NK_SIZE // LDG_ASYNC_VEC_SIZE // BLOCK_THREADS LDG_WAIT_COUNT = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS assert ((STAGES - 2) * LDG_WAIT_COUNT) < 63 + # RP1: how many in-flight global loads to leave un-drained at the loop tail. + # The next-read K0 was prefetched 2 tiles earlier (lead 2), so one k-group's + # worth (LDG_WAIT_COUNT) may stay in flight without a read-before-write hazard. + RP1_TAIL_VMCNT = LDG_WAIT_COUNT + # A is consumed one K32 slice at a time. Store A in a K32-blocked LDS view + # when the shape supports it. For the gfx950 256x256x64 path this makes + # each async A chunk 64x32 instead of 32x64. + A_LDS_K_CHUNK = WARP_ATOM_K + A_LDS_K_GROUPS = BLOCK_K // A_LDS_K_CHUNK + A_LDS_X_THREADS_AS = A_LDS_K_CHUNK // LDG_ASYNC_VEC_SIZE + A_LDS_ROWS_PER_CHUNK_AS = BLOCK_THREADS // A_LDS_X_THREADS_AS + A_LDS_ROW_GROUPS = BLOCK_M // A_LDS_ROWS_PER_CHUNK_AS if A_LDS_ROWS_PER_CHUNK_AS <= BLOCK_M else 0 + A_LDS_K_BLOCKS16 = (A_LDS_K_CHUNK * DTYPE_BYTES) // 16 + A_LDS_K32_BLOCKED = ( + (A_LDS_K32_BLOCKING or K32_REGISTER_PIPELINE) + and B_TO_LDS + and ASYNC_COPY + and (A_LDS_K_CHUNK == 32) + and (A_LDS_X_THREADS_AS > 0) + and (BLOCK_THREADS % A_LDS_X_THREADS_AS == 0) + and (A_LDS_ROWS_PER_CHUNK_AS <= BLOCK_M) + and (BLOCK_M % A_LDS_ROWS_PER_CHUNK_AS == 0) + and (BLOCK_K % A_LDS_K_CHUNK == 0) + and (LDG_REG_A_COUNT_AS == A_LDS_ROW_GROUPS * A_LDS_K_GROUPS) + ) + B_LDS_K_CHUNK = WARP_ATOM_K + B_LDS_K_GROUPS = BLOCK_K // B_LDS_K_CHUNK + B_LDS_X_THREADS_AS = B_LDS_K_CHUNK // LDG_ASYNC_VEC_SIZE + B_LDS_ROWS_PER_CHUNK_AS = BLOCK_THREADS // B_LDS_X_THREADS_AS + B_LDS_ROW_GROUPS = BLOCK_N // B_LDS_ROWS_PER_CHUNK_AS if B_LDS_ROWS_PER_CHUNK_AS <= BLOCK_N else 0 + B_LDS_K_BLOCKS16 = (B_LDS_K_CHUNK * DTYPE_BYTES) // 16 + B_LDS_K32_BLOCKED = ( + (B_LDS_K32_BLOCKING or K32_REGISTER_PIPELINE) + and B_TO_LDS + and ASYNC_COPY + and (B_LDS_K_CHUNK == 32) + and (B_LDS_X_THREADS_AS > 0) + and (BLOCK_THREADS % B_LDS_X_THREADS_AS == 0) + and (B_LDS_ROWS_PER_CHUNK_AS <= BLOCK_N) + and (BLOCK_N % B_LDS_ROWS_PER_CHUNK_AS == 0) + and (BLOCK_K % B_LDS_K_CHUNK == 0) + and (LDG_REG_B_COUNT_AS == B_LDS_ROW_GROUPS * B_LDS_K_GROUPS) + ) + REGISTER_PREFETCH_K1 = ( + K32_REGISTER_PIPELINE + and A_LDS_K32_BLOCKED + and B_LDS_K32_BLOCKED + and (STAGES == 2) + and (WARP_K_STEPS == 2) + and (BLOCK_K_WARPS == 1) + ) + assert not K32_REGISTER_PIPELINE or REGISTER_PREFETCH_K1 + LDG_A_X_THREADS_AS = A_LDS_X_THREADS_AS if A_LDS_K32_BLOCKED else BLOCK_K // LDG_ASYNC_VEC_SIZE + LDG_B_X_THREADS_AS = B_LDS_X_THREADS_AS if B_LDS_K32_BLOCKED else BLOCK_K // LDG_ASYNC_VEC_SIZE KERNEL_NAME = f"hgemm_{dtype}_{BLOCK_M}x{BLOCK_N}x{BLOCK_K}x{STAGES}_SPK{SPLIT_K}_W{BLOCK_M_WARPS}x{BLOCK_N_WARPS}x{BLOCK_K_WARPS}_BLDS{int(B_TO_LDS)}_TN" KERNEL_NAME += "_AS0" if not ASYNC_COPY else "_AS1" + if A_LDS_K32_BLOCKED: + KERNEL_NAME += "_AK32" + if B_LDS_K32_BLOCKED: + KERNEL_NAME += "_BK32" + if REGISTER_PREFETCH_K1: + KERNEL_NAME += "_RP1" if HAS_BIAS: KERNEL_NAME += "_BIAS" @@ -277,9 +338,11 @@ def hgemm_kernel( base_ptr = allocator.get_base() smem_a_ptr = SmemPtr(base_ptr, smem_a_offset, dtype_, shape=(STAGES * BLOCK_M * BLOCK_K,)) as_ = STensor(smem_a_ptr, dtype_, shape=(STAGES, BLOCK_M, BLOCK_K)) + as_k32_ = STensor(smem_a_ptr, dtype_, shape=(STAGES, A_LDS_K_GROUPS, BLOCK_M, A_LDS_K_CHUNK)) if const_expr(B_TO_LDS): smem_b_ptr = SmemPtr(base_ptr, smem_b_offset, dtype_, shape=(STAGES * BLOCK_N * BLOCK_K,)) bs_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, BLOCK_N, BLOCK_K)) + bs_k32_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, B_LDS_K_GROUPS, BLOCK_N, B_LDS_K_CHUNK)) smem_c_ptr = SmemPtr(base_ptr, smem_a_offset, dtype_, shape=(BLOCK_K_WARPS * BLOCK_M * BLOCK_N,)) cs_ = STensor(smem_c_ptr, dtype_, shape=(BLOCK_K_WARPS, BLOCK_M, BLOCK_N)) if const_expr(IS_SPLIT_K): @@ -323,6 +386,13 @@ def __barrier(vmcnt=0, use_s_barrier=True): asm = f"s_waitcnt vmcnt({vmcnt})" llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) + def __barrier_lgkmcnt(use_s_barrier=True): + if const_expr(use_s_barrier): + asm = "s_waitcnt lgkmcnt(0)\n\ts_barrier" + else: + asm = "s_waitcnt lgkmcnt(0)" + llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) + def get_llvm_ptr(ptr, offset, dtype_bytes, ptr_type=ir.Type.parse("!llvm.ptr<1>")): base_ptr = fly.extract_aligned_pointer_as_index(ptr_type, ptr) base_ptr = llvm.PtrToIntOp(T.i64, base_ptr).result @@ -479,22 +549,40 @@ def get_async_lds_ptr(lds_tensor, lds_stage, i): static_byte_offset=i * BLOCK_THREADS * DMA_BYTES, ) + def get_async_lds_ptr_from_offset(lds_tensor, elem_offset): + lds_offset = elem_offset * DTYPE_BYTES + lds_base = memref.extract_aligned_pointer_as_index(lds_tensor.memptr) + lds_offset + lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) + return buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) + def ldg_sts_a_async_one(k_offset, lds_stage, i): - global_tid = BLOCK_THREADS * i + tid - m_local_idx = global_tid // LDG_A_X_THREADS_AS - k_local_idx = global_tid % LDG_A_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, k_blocks16) + if const_expr(A_LDS_K32_BLOCKED): + row_group = i % A_LDS_ROW_GROUPS + k_group = i // A_LDS_ROW_GROUPS + row_in_group = tid // A_LDS_X_THREADS_AS + k_local_idx = tid % A_LDS_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + m_local_idx = row_group * A_LDS_ROWS_PER_CHUNK_AS + row_in_group + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, fx.Int32(A_LDS_K_BLOCKS16)) + col_idx = fx.Index(k_offset + k_group * A_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES) + lds_offset = as_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * A_LDS_ROWS_PER_CHUNK_AS, 0)) + lds_ptr = get_async_lds_ptr_from_offset(as_k32_, lds_offset) + else: + global_tid = BLOCK_THREADS * i + tid + m_local_idx = global_tid // LDG_A_X_THREADS_AS + k_local_idx = global_tid % LDG_A_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, k_blocks16) + col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) + lds_ptr = get_async_lds_ptr(as_, lds_stage, i) row_idx = m_offset + fx.Index(m_local_idx) safe_row_idx = arith.select( arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(m)), row_idx, fx.Index(0), ) - col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) - lds_ptr = get_async_lds_ptr(as_, lds_stage, i) buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) def ldg_sts_a_async(k_offset, lds_stage): @@ -502,21 +590,33 @@ def ldg_sts_a_async(k_offset, lds_stage): ldg_sts_a_async_one(k_offset, lds_stage, i) def ldg_sts_b_async_one(k_offset, lds_stage, i): - global_tid = BLOCK_THREADS * i + tid - n_local_idx = global_tid // LDG_B_X_THREADS_AS - k_local_idx = global_tid % LDG_B_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, k_blocks16) + if const_expr(B_LDS_K32_BLOCKED): + row_group = i % B_LDS_ROW_GROUPS + k_group = i // B_LDS_ROW_GROUPS + row_in_group = tid // B_LDS_X_THREADS_AS + k_local_idx = tid % B_LDS_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + n_local_idx = row_group * B_LDS_ROWS_PER_CHUNK_AS + row_in_group + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, fx.Int32(B_LDS_K_BLOCKS16)) + col_idx = fx.Index(k_offset + k_group * B_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES) + lds_offset = bs_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * B_LDS_ROWS_PER_CHUNK_AS, 0)) + lds_ptr = get_async_lds_ptr_from_offset(bs_k32_, lds_offset) + else: + global_tid = BLOCK_THREADS * i + tid + n_local_idx = global_tid // LDG_B_X_THREADS_AS + k_local_idx = global_tid % LDG_B_X_THREADS_AS * LDG_ASYNC_VEC_SIZE + col_in_bytes = k_local_idx * DTYPE_BYTES + col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, k_blocks16) + col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) + lds_ptr = get_async_lds_ptr(bs_, lds_stage, i) row_idx = n_offset + fx.Index(n_local_idx) safe_row_idx = arith.select( arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(n)), row_idx, fx.Index(0), ) - col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) - lds_ptr = get_async_lds_ptr(bs_, lds_stage, i) buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) def ldg_sts_b_async(k_offset, lds_stage): @@ -529,6 +629,13 @@ def ldg_sts_async_one(k_offset, lds_stage, i): else: ldg_sts_a_async_one(k_offset, lds_stage, i - LDG_REG_B_COUNT_AS) + def ldg_sts_async_kgroup(k_offset, lds_stage, k_group): + assert B_LDS_K32_BLOCKED and A_LDS_K32_BLOCKED + for i in range_constexpr(B_LDS_ROW_GROUPS): + ldg_sts_b_async_one(k_offset, lds_stage, k_group * B_LDS_ROW_GROUPS + i) + for i in range_constexpr(A_LDS_ROW_GROUPS): + ldg_sts_a_async_one(k_offset, lds_stage, k_group * A_LDS_ROW_GROUPS + i) + def ldg_matrix_b(k_offset): vecs = [] for kk in range_constexpr(WARP_K_STEPS): @@ -554,6 +661,15 @@ def load_a_frag_from(lds_stage, warp_atom_k_idx, ii): s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) warp_atom_m_idx = warp_m_idx + ii * WARP_ATOM_M row = warp_atom_m_idx + ldmatrix_a_m_idx + if const_expr(A_LDS_K32_BLOCKED): + k_group = warp_atom_k_idx // A_LDS_K_CHUNK + k_in_group = warp_atom_k_idx % A_LDS_K_CHUNK + ldmatrix_a_k_vec_idx + col_in_bytes = k_in_group * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, fx.Int32(A_LDS_K_BLOCKS16)) + return as_k32_.vec_load( + (s, k_group, row, col_in_bytes // DTYPE_BYTES), + WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K, + ) col_in_bytes = (warp_atom_k_idx + ldmatrix_a_k_vec_idx) * DTYPE_BYTES col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) return as_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K) @@ -562,6 +678,15 @@ def load_b_frag_from(lds_stage, warp_atom_k_idx, jj): s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) warp_atom_n_idx = warp_n_idx + jj * WARP_ATOM_N row = warp_atom_n_idx + ldmatrix_b_n_idx + if const_expr(B_LDS_K32_BLOCKED): + k_group = warp_atom_k_idx // B_LDS_K_CHUNK + k_in_group = warp_atom_k_idx % B_LDS_K_CHUNK + ldmatrix_b_k_vec_idx + col_in_bytes = k_in_group * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, fx.Int32(B_LDS_K_BLOCKS16)) + return bs_k32_.vec_load( + (s, k_group, row, col_in_bytes // DTYPE_BYTES), + WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K, + ) col_in_bytes = (warp_atom_k_idx + ldmatrix_b_k_vec_idx) * DTYPE_BYTES col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) return bs_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K) @@ -708,6 +833,100 @@ def do_mfma(ii, jj, a_frag, b_frag): row_group += 1 return c_frags_new + def ldmatrix_compute_tile_register_prefetch( + lds_stage, + c_frags, + prefetched_initial_a_frag=None, + prefetched_initial_b_frags=None, + prefetch_k_offset=None, + prefetch_lds_stage=0, + init_zero=False, + k0_prefetch_k_offset=None, + k0_prefetch_lds_stage=None, + ): + # K32 sub-buffer ping-pong (see fp8-4wave-8buffer design notes): + # h1: bfld tile_{i+1} K1 -> prefetch_lds_stage (lead 1) + # h2: bfld tile_{i+2} K0 -> k0_prefetch_lds_stage = current_stage + # (lead 2; overwrites tile_i K0 which was consumed in h1). + # If k0_prefetch_* is None the K0 group is not prefetched (epilogue). + assert REGISTER_PREFETCH_K1 + s = fx.Index(lds_stage) + c_frags_new = [cx for cx in c_frags] + k0_idx = warp_k_slice_base + k1_idx = warp_k_slice_base + WARP_ATOM_K + + def load_a_frag(warp_atom_k_idx, ii): + return load_a_frag_from(s, warp_atom_k_idx, ii) + + def load_b_frag(warp_atom_k_idx, jj): + return load_b_frag_from(s, warp_atom_k_idx, jj) + + def load_a_slice(warp_atom_k_idx, initial_a=None): + out = [0] * WARP_M_STEPS + for ii in range_constexpr(WARP_M_STEPS): + if const_expr(initial_a is not None and ii == 0): + out[ii] = initial_a + else: + out[ii] = load_a_frag(warp_atom_k_idx, ii) + return out + + def load_b_slice(warp_atom_k_idx, initial_bs=None): + out = [0] * WARP_N_STEPS + for jj in range_constexpr(WARP_N_STEPS): + if const_expr(initial_bs is not None and jj < B_INITIAL_READS_CONST): + out[jj] = initial_bs[jj] + else: + out[jj] = load_b_frag(warp_atom_k_idx, jj) + return out + + def do_mfma(ii, jj, a_frag, b_frag): + if const_expr(MFMA_PER_WARP_K == 2): + a_i64x2 = vector.bitcast(T.i64x2, a_frag) + a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) + a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) + a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) + a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) + b_i64x2 = vector.bitcast(T.i64x2, b_frag) + b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) + b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) + b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) + b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) + c_idx = ii * WARP_N_STEPS + jj + acc_mid = WMMA_IMPL(a_v0, b_v0, c_frags_new[c_idx]) + c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) + elif const_expr(MFMA_PER_WARP_K == 1): + c_idx = ii * WARP_N_STEPS + jj + c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) + else: + raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") + + def compute_slice(a_frags, b_frags, zero_acc=False): + for ii in range_constexpr(WARP_M_STEPS): + for jj in range_constexpr(WARP_N_STEPS): + if const_expr(zero_acc): + c_frags_new[ii * WARP_N_STEPS + jj] = WMMA_IMPL.init(a_frags[ii], b_frags[jj]) + else: + do_mfma(ii, jj, a_frags[ii], b_frags[jj]) + + a0_frags = load_a_slice(k0_idx, prefetched_initial_a_frag) + b0_frags = load_b_slice(k0_idx, prefetched_initial_b_frags) + a1_frags = load_a_slice(k1_idx) + b1_frags = load_b_slice(k1_idx) + + # half-1: prefetch next tile's K1 (lead 1), compute this tile's K0. + if const_expr(prefetch_k_offset is not None): + ldg_sts_async_kgroup(prefetch_k_offset, prefetch_lds_stage, 1) + compute_slice(a0_frags, b0_frags, init_zero) + + __barrier_lgkmcnt() + + # half-2: prefetch the tile-after-next's K0 (lead 2) into the buffer we + # just consumed (current_stage), compute this tile's K1. + if const_expr(k0_prefetch_k_offset is not None): + ldg_sts_async_kgroup(k0_prefetch_k_offset, k0_prefetch_lds_stage, 0) + compute_slice(a1_frags, b1_frags) + return c_frags_new + warp_offset = get_dma_copy_warp_offset() if const_expr(IS_SPLIT_K): @@ -718,6 +937,11 @@ def do_mfma(ii, jj, a_frag, b_frag): for s in range_constexpr(STAGES - 1): ldg_sts_b_async(ks_begin + s * BLOCK_K, s) ldg_sts_a_async(ks_begin + s * BLOCK_K, s) + if const_expr(REGISTER_PREFETCH_K1): + # K0/K1 are prefetched on separate stage schedules: tile1's K0 is + # never produced by an earlier compute (no tile -1), so seed it here + # into stage 1. tile1's K1 is produced by tile0's compute (h1). + ldg_sts_async_kgroup(ks_begin + BLOCK_K, arith.constant(1 % STAGES, index=True), 0) rocdl.sched_barrier(0) def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): @@ -760,15 +984,59 @@ def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): rocdl.sched_dsrd(1) # first lds_matrix_b next BLOCK_K tile rocdl.sched_dsrd(1) # first lds_matrix_a next BLOCK_K tile + def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch_initial=False): + PHASE_VMEM = LDG_REG_B_COUNT_AS // 2 + LDG_REG_A_COUNT_AS // 2 + PHASE_MFMA = WARP_M_STEPS * WARP_N_STEPS + PHASE0_DSRD = WARP_M_STEPS + WARP_N_STEPS + if const_expr(prefetched_initial): + PHASE0_DSRD += (WARP_M_STEPS - 1) + (WARP_N_STEPS - B_INITIAL_READS_CONST) + else: + PHASE0_DSRD += WARP_M_STEPS + WARP_N_STEPS + + # Match the manual interleave in the compute function: region-1 + # drips PHASE0_DSRD ds_reads across its MFMAs, region-2 only has vmem. + dsrd_spread = spread_counts(PHASE0_DSRD, PHASE_MFMA) + vmem1_spread = spread_counts(PHASE_VMEM, PHASE_MFMA) + for i in range_constexpr(PHASE_MFMA): + rocdl.sched_mfma(MFMA_PER_WARP_K) + for _ in range_constexpr(dsrd_spread[i]): + rocdl.sched_dsrd(1) + for _ in range_constexpr(vmem1_spread[i]): + rocdl.sched_vmem(1) + rocdl.sched_barrier(0) + vmem2_spread = spread_counts(PHASE_VMEM, PHASE_MFMA) + for i in range_constexpr(PHASE_MFMA): + rocdl.sched_mfma(MFMA_PER_WARP_K) + for _ in range_constexpr(vmem2_spread[i]): + rocdl.sched_vmem(1) + rocdl.sched_barrier(0) + if const_expr(tail_prefetch_initial): + for i in range_constexpr(B_INITIAL_READS_CONST): + rocdl.sched_dsrd(1) + rocdl.sched_dsrd(1) + __barrier((STAGES - 2) * LDG_WAIT_COUNT) - c_frags = ldmatrix_compute_tile_streaming( - arith.constant(0, index=True), - c_frags, - prefetch_k_offset=ks_begin + BLOCK_K, - prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), - init_zero=True, - ) - hot_loop_scheduler(tail_prefetch_initial=True) + if const_expr(REGISTER_PREFETCH_K1): + # tile0 compute: h1 bfld tile1.K1 -> stage1; h2 bfld tile2.K0 -> stage0. + c_frags = ldmatrix_compute_tile_register_prefetch( + arith.constant(0, index=True), + c_frags, + prefetch_k_offset=ks_begin + BLOCK_K, + prefetch_lds_stage=arith.constant(1 % STAGES, index=True), + init_zero=True, + k0_prefetch_k_offset=ks_begin + 2 * BLOCK_K, + k0_prefetch_lds_stage=arith.constant(0, index=True), + ) + hot_loop_scheduler_register_prefetch(tail_prefetch_initial=True) + else: + c_frags = ldmatrix_compute_tile_streaming( + arith.constant(0, index=True), + c_frags, + prefetch_k_offset=ks_begin + BLOCK_K, + prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), + init_zero=True, + ) + hot_loop_scheduler(tail_prefetch_initial=True) next_stage_init = arith.constant(1 % STAGES, index=True) __barrier((STAGES - 2) * LDG_WAIT_COUNT) prefetched_tile_a_frag, prefetched_tile_b_frags = load_initial_frags_from(next_stage_init) @@ -788,17 +1056,51 @@ def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): next_stage = (current_stage + 1) % STAGES write_stage = (current_stage + STAGES - 1) % STAGES prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K - c_frags_new = ldmatrix_compute_tile_streaming( - current_stage, - c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, - prefetch_k_offset=prefetch_k_offset, - prefetch_lds_stage=write_stage, - ) + if const_expr(REGISTER_PREFETCH_K1): + # K1 of tile i+1 (lead 1) -> next_stage; K0 of tile i+2 (lead 2) + # -> current_stage (the buffer whose K0 we consumed this iter). + # The lead-2 K0 offset runs past the last tile in the final loop + # iterations; clamp it to the last valid tile so the (unused) + # prefetch reads in-bounds global memory instead of faulting. + k0_pf_offset = k_offset + fx.Int32(STAGES * BLOCK_K) + k0_pf_max = ks_begin + fx.Int32((BLOCK_K_LOOPS - 1) * BLOCK_K) + k0_pf_offset = arith.select( + arith.cmpi(arith.CmpIPredicate.slt, k0_pf_offset, k0_pf_max), + k0_pf_offset, + k0_pf_max, + ) + c_frags_new = ldmatrix_compute_tile_register_prefetch( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + prefetch_k_offset=prefetch_k_offset, + prefetch_lds_stage=next_stage, + k0_prefetch_k_offset=k0_pf_offset, + k0_prefetch_lds_stage=current_stage, + ) + else: + c_frags_new = ldmatrix_compute_tile_streaming( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + prefetch_k_offset=prefetch_k_offset, + prefetch_lds_stage=write_stage, + ) k_offset_next = k_offset + fx.Int32(BLOCK_K) - hot_loop_scheduler(prefetched_initial=True, tail_prefetch_initial=True) - __barrier((STAGES - 2) * LDG_WAIT_COUNT) + if const_expr(REGISTER_PREFETCH_K1): + hot_loop_scheduler_register_prefetch(prefetched_initial=True, tail_prefetch_initial=True) + else: + hot_loop_scheduler(prefetched_initial=True, tail_prefetch_initial=True) + if const_expr(REGISTER_PREFETCH_K1): + # The K0 we read next (next_stage K0) was prefetched 2 tiles ago + # (lead 2), so it has long landed. Keep the most recent k-group's + # bfld in flight instead of draining (vmcnt 0) so global-load + # latency overlaps with MFMA. + __barrier(RP1_TAIL_VMCNT) + else: + __barrier((STAGES - 2) * LDG_WAIT_COUNT) prefetched_tile_a_frag_next, prefetched_tile_b_frags_next = load_initial_frags_from(next_stage) results = ( yield [k_offset_next, next_stage] @@ -811,12 +1113,21 @@ def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): prefetched_tile_a_frag = results[2 + C_FRAGS_LEN] prefetched_tile_b_frags = results[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] for s in range_constexpr(0, STAGES - 1): - c_frags = ldmatrix_compute_tile_streaming( - current_stage, - c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, - ) + if const_expr(REGISTER_PREFETCH_K1): + c_frags = ldmatrix_compute_tile_register_prefetch( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + ) + rocdl.sched_barrier(0) + else: + c_frags = ldmatrix_compute_tile_streaming( + current_stage, + c_frags, + prefetched_initial_a_frag=prefetched_tile_a_frag, + prefetched_initial_b_frags=prefetched_tile_b_frags, + ) current_stage = (current_stage + 1) % STAGES else: From 6f21eb0c517dbe7df2498cf4d64bbf4ba1954126 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 11:08:18 +0000 Subject: [PATCH 066/118] Interleave RP1 ds_reads via full-K0 register carry (+3%: 1025->1051 TFLOPS) Carry the entire next-tile K0 operand group (WARP_M_STEPS a-frags + WARP_N_STEPS b-frags) through the loop instead of re-reading it at the loop tail. Each half now enters with its MFMA operands fully register-resident and issues the *next* half's ds_reads dripped one-per-MFMA into the ~12-cyc MFMA co-issue shadows. This removes the ~16-deep back-to-back ds_read wall that ATT showed at each region head (read-and-immediately-use latency exposure). bf16 single-CTA GEMM, gfx950, 8192x8192x16384: 1025 -> 1051 TFLOPS (cos 0.99999). Cumulative vs the pre-RP1 baseline: 837 -> 1051 (+25.6%). Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 220 +++++++++++++++++++++++++--------------- 1 file changed, 140 insertions(+), 80 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 594d776b1..3ae162d45 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -843,6 +843,7 @@ def ldmatrix_compute_tile_register_prefetch( init_zero=False, k0_prefetch_k_offset=None, k0_prefetch_lds_stage=None, + next_k0_read_stage=None, ): # K32 sub-buffer ping-pong (see fp8-4wave-8buffer design notes): # h1: bfld tile_{i+1} K1 -> prefetch_lds_stage (lead 1) @@ -862,6 +863,9 @@ def load_b_frag(warp_atom_k_idx, jj): return load_b_frag_from(s, warp_atom_k_idx, jj) def load_a_slice(warp_atom_k_idx, initial_a=None): + # initial_a may be a single frag (legacy) or a full list (full carry). + if const_expr(isinstance(initial_a, list)): + return list(initial_a) out = [0] * WARP_M_STEPS for ii in range_constexpr(WARP_M_STEPS): if const_expr(initial_a is not None and ii == 0): @@ -871,6 +875,9 @@ def load_a_slice(warp_atom_k_idx, initial_a=None): return out def load_b_slice(warp_atom_k_idx, initial_bs=None): + # initial_bs may be a partial list (B_INITIAL_READS) or a full list. + if const_expr(isinstance(initial_bs, list) and len(initial_bs) == WARP_N_STEPS): + return list(initial_bs) out = [0] * WARP_N_STEPS for jj in range_constexpr(WARP_N_STEPS): if const_expr(initial_bs is not None and jj < B_INITIAL_READS_CONST): @@ -900,32 +907,69 @@ def do_mfma(ii, jj, a_frag, b_frag): else: raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") - def compute_slice(a_frags, b_frags, zero_acc=False): + # Compute one K32 slice (64 MFMAs) while dripping the next slice's + # operand ds_reads into the MFMA shadows. The operands consumed here + # (a_frags/b_frags) are fully ready on entry (carried in registers from + # the previous half); the reads issued here (read_k_idx into out_a/out_b) + # are for the NEXT half and only consumed after this half's lgkmcnt(0), + # so their ~64-cyc latency hides fully under the 64 MFMAs. ds_reads are + # spread front-loaded-but-interleaved so all land before the half's + # trailing lgkmcnt(0). + def compute_slice_interleaved(a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False): + out_a = [0] * WARP_M_STEPS + out_b = [0] * WARP_N_STEPS + rstage = s if read_stage is None else fx.Index(read_stage) + reads = [] + if const_expr(read_k_idx is not None): + for ii in range_constexpr(WARP_M_STEPS): + reads.append(("a", ii)) + for jj in range_constexpr(WARP_N_STEPS): + reads.append(("b", jj)) + n_reads = len(reads) + # Distribute the reads across the MFMA grid; keep them in the first + # ~3/4 of the MFMAs so they all complete before the closing lgkmcnt. + read_at = spread_counts(n_reads, WARP_M_STEPS * WARP_N_STEPS) + cursor = 0 for ii in range_constexpr(WARP_M_STEPS): for jj in range_constexpr(WARP_N_STEPS): if const_expr(zero_acc): c_frags_new[ii * WARP_N_STEPS + jj] = WMMA_IMPL.init(a_frags[ii], b_frags[jj]) else: do_mfma(ii, jj, a_frags[ii], b_frags[jj]) - + step = ii * WARP_N_STEPS + jj + for _ in range_constexpr(read_at[step]): + kind, idx = reads[cursor] + if const_expr(kind == "a"): + out_a[idx] = load_a_frag_from(rstage, read_k_idx, idx) + else: + out_b[idx] = load_b_frag_from(rstage, read_k_idx, idx) + cursor += 1 + return out_a, out_b + + # K0 operands of this tile are fully carried in on entry (a0/b0 full + # group); load_*_slice just unpacks the carried frags (no LDS read when + # the full group is provided). a0_frags = load_a_slice(k0_idx, prefetched_initial_a_frag) b0_frags = load_b_slice(k0_idx, prefetched_initial_b_frags) - a1_frags = load_a_slice(k1_idx) - b1_frags = load_b_slice(k1_idx) - # half-1: prefetch next tile's K1 (lead 1), compute this tile's K0. + # half-1: bfld next tile's K1 (lead 1); compute K0 while reading this + # tile's K1 operands for half-2. if const_expr(prefetch_k_offset is not None): ldg_sts_async_kgroup(prefetch_k_offset, prefetch_lds_stage, 1) - compute_slice(a0_frags, b0_frags, init_zero) + a1_frags, b1_frags = compute_slice_interleaved(a0_frags, b0_frags, k1_idx, zero_acc=init_zero) __barrier_lgkmcnt() - # half-2: prefetch the tile-after-next's K0 (lead 2) into the buffer we - # just consumed (current_stage), compute this tile's K1. + # half-2: bfld the tile-after-next's K0 (lead 2) into the just-consumed + # buffer; compute K1 while reading the NEXT tile's K0 group (from + # next_k0_read_stage) to carry into the next iteration. if const_expr(k0_prefetch_k_offset is not None): ldg_sts_async_kgroup(k0_prefetch_k_offset, k0_prefetch_lds_stage, 0) - compute_slice(a1_frags, b1_frags) - return c_frags_new + next_a0, next_b0 = compute_slice_interleaved( + a1_frags, b1_frags, k0_idx if next_k0_read_stage is not None else None, + read_stage=next_k0_read_stage, + ) + return c_frags_new, next_a0, next_b0 warp_offset = get_dma_copy_warp_offset() @@ -1018,7 +1062,8 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch __barrier((STAGES - 2) * LDG_WAIT_COUNT) if const_expr(REGISTER_PREFETCH_K1): # tile0 compute: h1 bfld tile1.K1 -> stage1; h2 bfld tile2.K0 -> stage0. - c_frags = ldmatrix_compute_tile_register_prefetch( + # half-2 reads tile1's K0 (stage1) into the carry for the next iter. + c_frags, carry_a0, carry_b0 = ldmatrix_compute_tile_register_prefetch( arith.constant(0, index=True), c_frags, prefetch_k_offset=ks_begin + BLOCK_K, @@ -1026,42 +1071,28 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch init_zero=True, k0_prefetch_k_offset=ks_begin + 2 * BLOCK_K, k0_prefetch_lds_stage=arith.constant(0, index=True), + next_k0_read_stage=arith.constant(1 % STAGES, index=True), ) hot_loop_scheduler_register_prefetch(tail_prefetch_initial=True) - else: - c_frags = ldmatrix_compute_tile_streaming( - arith.constant(0, index=True), - c_frags, - prefetch_k_offset=ks_begin + BLOCK_K, - prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), - init_zero=True, + next_stage_init = arith.constant(1 % STAGES, index=True) + __barrier(RP1_TAIL_VMCNT) + + init_state = ( + [ks_begin + fx.Int32(BLOCK_K), next_stage_init] + + c_frags + + carry_a0 + + carry_b0 ) - hot_loop_scheduler(tail_prefetch_initial=True) - next_stage_init = arith.constant(1 % STAGES, index=True) - __barrier((STAGES - 2) * LDG_WAIT_COUNT) - prefetched_tile_a_frag, prefetched_tile_b_frags = load_initial_frags_from(next_stage_init) - - init_state = ( - [ks_begin + fx.Int32(BLOCK_K), next_stage_init] - + c_frags - + [prefetched_tile_a_frag] - + prefetched_tile_b_frags - ) - for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): - k_offset = state[0] - current_stage = fx.Index(state[1]) - c_frags = state[2 : 2 + C_FRAGS_LEN] - prefetched_tile_a_frag = state[2 + C_FRAGS_LEN] - prefetched_tile_b_frags = state[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] - next_stage = (current_stage + 1) % STAGES - write_stage = (current_stage + STAGES - 1) % STAGES - prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K - if const_expr(REGISTER_PREFETCH_K1): - # K1 of tile i+1 (lead 1) -> next_stage; K0 of tile i+2 (lead 2) - # -> current_stage (the buffer whose K0 we consumed this iter). - # The lead-2 K0 offset runs past the last tile in the final loop - # iterations; clamp it to the last valid tile so the (unused) - # prefetch reads in-bounds global memory instead of faulting. + for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): + k_offset = state[0] + current_stage = fx.Index(state[1]) + c_frags = state[2 : 2 + C_FRAGS_LEN] + carry_a0 = state[2 + C_FRAGS_LEN : 2 + C_FRAGS_LEN + WARP_M_STEPS] + carry_b0 = state[2 + C_FRAGS_LEN + WARP_M_STEPS : 2 + C_FRAGS_LEN + WARP_M_STEPS + WARP_N_STEPS] + next_stage = (current_stage + 1) % STAGES + prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K + # lead-2 K0 offset runs past the last tile in the final loop + # iterations; clamp it so the (unused) prefetch stays in-bounds. k0_pf_offset = k_offset + fx.Int32(STAGES * BLOCK_K) k0_pf_max = ks_begin + fx.Int32((BLOCK_K_LOOPS - 1) * BLOCK_K) k0_pf_offset = arith.select( @@ -1069,17 +1100,65 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch k0_pf_offset, k0_pf_max, ) - c_frags_new = ldmatrix_compute_tile_register_prefetch( + c_frags_new, carry_a0_next, carry_b0_next = ldmatrix_compute_tile_register_prefetch( current_stage, c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, + prefetched_initial_a_frag=carry_a0, + prefetched_initial_b_frags=carry_b0, prefetch_k_offset=prefetch_k_offset, prefetch_lds_stage=next_stage, k0_prefetch_k_offset=k0_pf_offset, k0_prefetch_lds_stage=current_stage, + next_k0_read_stage=next_stage, ) - else: + k_offset_next = k_offset + fx.Int32(BLOCK_K) + hot_loop_scheduler_register_prefetch(prefetched_initial=True, tail_prefetch_initial=True) + __barrier(RP1_TAIL_VMCNT) + results = ( + yield [k_offset_next, next_stage] + c_frags_new + carry_a0_next + carry_b0_next + ) + current_stage = fx.Index(results[1]) + c_frags = results[2 : 2 + C_FRAGS_LEN] + carry_a0 = results[2 + C_FRAGS_LEN : 2 + C_FRAGS_LEN + WARP_M_STEPS] + carry_b0 = results[2 + C_FRAGS_LEN + WARP_M_STEPS : 2 + C_FRAGS_LEN + WARP_M_STEPS + WARP_N_STEPS] + for s in range_constexpr(0, STAGES - 1): + c_frags, carry_a0, carry_b0 = ldmatrix_compute_tile_register_prefetch( + current_stage, + c_frags, + prefetched_initial_a_frag=carry_a0, + prefetched_initial_b_frags=carry_b0, + ) + rocdl.sched_barrier(0) + current_stage = (current_stage + 1) % STAGES + + if const_expr(not REGISTER_PREFETCH_K1): + c_frags = ldmatrix_compute_tile_streaming( + arith.constant(0, index=True), + c_frags, + prefetch_k_offset=ks_begin + BLOCK_K, + prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), + init_zero=True, + ) + hot_loop_scheduler(tail_prefetch_initial=True) + next_stage_init = arith.constant(1 % STAGES, index=True) + __barrier((STAGES - 2) * LDG_WAIT_COUNT) + prefetched_tile_a_frag, prefetched_tile_b_frags = load_initial_frags_from(next_stage_init) + + init_state = ( + [ks_begin + fx.Int32(BLOCK_K), next_stage_init] + + c_frags + + [prefetched_tile_a_frag] + + prefetched_tile_b_frags + ) + for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): + k_offset = state[0] + current_stage = fx.Index(state[1]) + c_frags = state[2 : 2 + C_FRAGS_LEN] + prefetched_tile_a_frag = state[2 + C_FRAGS_LEN] + prefetched_tile_b_frags = state[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] + next_stage = (current_stage + 1) % STAGES + write_stage = (current_stage + STAGES - 1) % STAGES + prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K c_frags_new = ldmatrix_compute_tile_streaming( current_stage, c_frags, @@ -1088,47 +1167,28 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch prefetch_k_offset=prefetch_k_offset, prefetch_lds_stage=write_stage, ) - k_offset_next = k_offset + fx.Int32(BLOCK_K) - if const_expr(REGISTER_PREFETCH_K1): - hot_loop_scheduler_register_prefetch(prefetched_initial=True, tail_prefetch_initial=True) - else: + k_offset_next = k_offset + fx.Int32(BLOCK_K) hot_loop_scheduler(prefetched_initial=True, tail_prefetch_initial=True) - if const_expr(REGISTER_PREFETCH_K1): - # The K0 we read next (next_stage K0) was prefetched 2 tiles ago - # (lead 2), so it has long landed. Keep the most recent k-group's - # bfld in flight instead of draining (vmcnt 0) so global-load - # latency overlaps with MFMA. - __barrier(RP1_TAIL_VMCNT) - else: __barrier((STAGES - 2) * LDG_WAIT_COUNT) - prefetched_tile_a_frag_next, prefetched_tile_b_frags_next = load_initial_frags_from(next_stage) - results = ( - yield [k_offset_next, next_stage] - + c_frags_new - + [prefetched_tile_a_frag_next] - + prefetched_tile_b_frags_next - ) - current_stage = fx.Index(results[1]) - c_frags = results[2 : 2 + C_FRAGS_LEN] - prefetched_tile_a_frag = results[2 + C_FRAGS_LEN] - prefetched_tile_b_frags = results[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] - for s in range_constexpr(0, STAGES - 1): - if const_expr(REGISTER_PREFETCH_K1): - c_frags = ldmatrix_compute_tile_register_prefetch( - current_stage, - c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, + prefetched_tile_a_frag_next, prefetched_tile_b_frags_next = load_initial_frags_from(next_stage) + results = ( + yield [k_offset_next, next_stage] + + c_frags_new + + [prefetched_tile_a_frag_next] + + prefetched_tile_b_frags_next ) - rocdl.sched_barrier(0) - else: + current_stage = fx.Index(results[1]) + c_frags = results[2 : 2 + C_FRAGS_LEN] + prefetched_tile_a_frag = results[2 + C_FRAGS_LEN] + prefetched_tile_b_frags = results[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] + for s in range_constexpr(0, STAGES - 1): c_frags = ldmatrix_compute_tile_streaming( current_stage, c_frags, prefetched_initial_a_frag=prefetched_tile_a_frag, prefetched_initial_b_frags=prefetched_tile_b_frags, ) - current_stage = (current_stage + 1) % STAGES + current_stage = (current_stage + 1) % STAGES else: From 491694202ca17aaad19c26eb22b3f8861d8af0cb Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 11:11:52 +0000 Subject: [PATCH 067/118] Interleave RP1 bfld prefetch into MFMA shadows (+6%: 1051->1113 TFLOPS) Drip the global->LDS prefetch (buffer_load_lds) one-per-MFMA into the co-issue shadows via per-load task callables, instead of bursting a whole k-group of 8 buffer_loads at each region head. Combined with the earlier ds_read interleave, ATT now shows a fully interleaved hot loop (MLrMMMMrMMMM...) with zero leading load wall. bf16 single-CTA GEMM, gfx950, 8192x8192x16384: 1051 -> 1113 TFLOPS (cos 0.99999). Cumulative vs the pre-RP1 baseline: 837 -> 1113 (+33%). Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 53 ++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 3ae162d45..dfc0153a0 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -915,7 +915,9 @@ def do_mfma(ii, jj, a_frag, b_frag): # so their ~64-cyc latency hides fully under the 64 MFMAs. ds_reads are # spread front-loaded-but-interleaved so all land before the half's # trailing lgkmcnt(0). - def compute_slice_interleaved(a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False): + def compute_slice_interleaved( + a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False, bfld_tasks=None + ): out_a = [0] * WARP_M_STEPS out_b = [0] * WARP_N_STEPS rstage = s if read_stage is None else fx.Index(read_stage) @@ -929,7 +931,13 @@ def compute_slice_interleaved(a_frags, b_frags, read_k_idx, read_stage=None, zer # Distribute the reads across the MFMA grid; keep them in the first # ~3/4 of the MFMAs so they all complete before the closing lgkmcnt. read_at = spread_counts(n_reads, WARP_M_STEPS * WARP_N_STEPS) - cursor = 0 + # bfld (global->LDS) prefetch is also dripped one-per-MFMA into the + # co-issue shadows instead of bursting at the region head. + tasks = bfld_tasks if bfld_tasks is not None else [] + n_tasks = len(tasks) + bfld_at = spread_counts(n_tasks, WARP_M_STEPS * WARP_N_STEPS) + read_cursor = 0 + bfld_cursor = 0 for ii in range_constexpr(WARP_M_STEPS): for jj in range_constexpr(WARP_N_STEPS): if const_expr(zero_acc): @@ -937,13 +945,16 @@ def compute_slice_interleaved(a_frags, b_frags, read_k_idx, read_stage=None, zer else: do_mfma(ii, jj, a_frags[ii], b_frags[jj]) step = ii * WARP_N_STEPS + jj + for _ in range_constexpr(bfld_at[step]): + tasks[bfld_cursor]() + bfld_cursor += 1 for _ in range_constexpr(read_at[step]): - kind, idx = reads[cursor] + kind, idx = reads[read_cursor] if const_expr(kind == "a"): out_a[idx] = load_a_frag_from(rstage, read_k_idx, idx) else: out_b[idx] = load_b_frag_from(rstage, read_k_idx, idx) - cursor += 1 + read_cursor += 1 return out_a, out_b # K0 operands of this tile are fully carried in on entry (a0/b0 full @@ -952,22 +963,36 @@ def compute_slice_interleaved(a_frags, b_frags, read_k_idx, read_stage=None, zer a0_frags = load_a_slice(k0_idx, prefetched_initial_a_frag) b0_frags = load_b_slice(k0_idx, prefetched_initial_b_frags) - # half-1: bfld next tile's K1 (lead 1); compute K0 while reading this - # tile's K1 operands for half-2. - if const_expr(prefetch_k_offset is not None): - ldg_sts_async_kgroup(prefetch_k_offset, prefetch_lds_stage, 1) - a1_frags, b1_frags = compute_slice_interleaved(a0_frags, b0_frags, k1_idx, zero_acc=init_zero) + def make_bfld_tasks(k_offset, lds_stage, k_group): + # One callable per buffer_load in this k-group (B rows then A rows), + # to be dripped into the MFMA loop instead of bursting up front. + tasks = [] + for i in range_constexpr(B_LDS_ROW_GROUPS): + tasks.append(lambda i=i: ldg_sts_b_async_one(k_offset, lds_stage, k_group * B_LDS_ROW_GROUPS + i)) + for i in range_constexpr(A_LDS_ROW_GROUPS): + tasks.append(lambda i=i: ldg_sts_a_async_one(k_offset, lds_stage, k_group * A_LDS_ROW_GROUPS + i)) + return tasks + + # half-1: bfld next tile's K1 (lead 1) dripped into the MFMAs; compute K0 + # while reading this tile's K1 operands for half-2. + h1_bfld = make_bfld_tasks(prefetch_k_offset, prefetch_lds_stage, 1) if prefetch_k_offset is not None else None + a1_frags, b1_frags = compute_slice_interleaved( + a0_frags, b0_frags, k1_idx, zero_acc=init_zero, bfld_tasks=h1_bfld + ) __barrier_lgkmcnt() - # half-2: bfld the tile-after-next's K0 (lead 2) into the just-consumed - # buffer; compute K1 while reading the NEXT tile's K0 group (from + # half-2: bfld the tile-after-next's K0 (lead 2) dripped into the MFMAs; + # compute K1 while reading the NEXT tile's K0 group (from # next_k0_read_stage) to carry into the next iteration. - if const_expr(k0_prefetch_k_offset is not None): - ldg_sts_async_kgroup(k0_prefetch_k_offset, k0_prefetch_lds_stage, 0) + h2_bfld = ( + make_bfld_tasks(k0_prefetch_k_offset, k0_prefetch_lds_stage, 0) + if k0_prefetch_k_offset is not None + else None + ) next_a0, next_b0 = compute_slice_interleaved( a1_frags, b1_frags, k0_idx if next_k0_read_stage is not None else None, - read_stage=next_k0_read_stage, + read_stage=next_k0_read_stage, bfld_tasks=h2_bfld, ) return c_frags_new, next_a0, next_b0 From 28825ca92988e1783d0cb372c1d2c7ccf340f5c4 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 12:34:11 +0000 Subject: [PATCH 068/118] Add bf16 hgemm RP1 final ISA snapshot (1117 TFLOPS, 8192x8192x16384) ISA dump of kernel hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1 at the current 1117 TFLOPS state (K32 sub-buffer prefetch + full-K0 carry + ds_read/bfld interleave) for offline inspection. Co-Authored-By: Claude Opus 4 (1M context) --- .../hgemm_bf16_rp1_1117tflops_final_isa.s | 3262 +++++++++++++++++ 1 file changed, 3262 insertions(+) create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s new file mode 100644 index 000000000..0ed3ece5b --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s @@ -0,0 +1,3262 @@ + .amdgcn_target "amdgcn-amd-amdhsa--gfx950" + .amdhsa_code_object_version 6 + .text + .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .p2align 8 + .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function +hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: + s_load_dword s12, s[0:1], 0x60 + s_load_dwordx2 s[4:5], s[0:1], 0x18 + s_load_dwordx2 s[8:9], s[0:1], 0x30 + s_ashr_i32 s14, s2, 31 + s_lshr_b32 s14, s14, 27 + s_add_i32 s14, s2, s14 + s_waitcnt lgkmcnt(0) + s_ashr_i32 s13, s12, 31 + s_and_b32 s5, s5, 0xffff + s_and_b32 s9, s9, 0xffff + s_ashr_i32 s18, s14, 5 + s_and_b32 s19, s14, 0xffffffe0 + s_cmp_lg_u32 s2, s19 + s_cselect_b64 s[14:15], -1, 0 + s_cmp_lt_i32 s2, 0 + s_cselect_b64 s[16:17], -1, 0 + s_and_b64 s[14:15], s[16:17], s[14:15] + v_lshrrev_b32_e32 v2, 6, v0 + s_subb_u32 s14, s18, 0 + s_lshl_b32 s20, s14, 8 + v_readfirstlane_b32 s14, v2 + v_lshrrev_b32_e32 v109, 2, v0 + s_sub_i32 s15, s2, s19 + s_lshl_b32 s21, s14, 10 + v_xor_b32_e32 v2, v109, v0 + s_lshl_b32 s2, s3, 14 + s_ashr_i32 s19, s20, 31 + s_lshl_b32 s18, s15, 8 + v_lshlrev_b32_e32 v2, 3, v2 + s_add_i32 s25, s21, 0x10000 + v_and_b32_e32 v97, 24, v2 + v_or_b32_e32 v2, s18, v109 + s_cmpk_lt_u32 s18, 0x2000 + v_lshlrev_b32_e32 v2, 14, v2 + s_cselect_b64 vcc, -1, 0 + v_or_b32_e32 v111, s2, v97 + v_cndmask_b32_e32 v98, 0, v2, vcc + s_mov_b32 s7, 0x27000 + s_mov_b32 s6, -1 + v_add_lshl_u32 v2, v111, v98, 1 + v_or_b32_e32 v4, 64, v109 + s_mov_b32 s10, s6 + s_mov_b32 s11, s7 + ;;#ASMSTART + s_mov_b32 m0, s25 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s18, v4 + v_lshlrev_b32_e32 v2, 14, v2 + v_cndmask_b32_e32 v100, 0, v2, vcc + v_add_lshl_u32 v2, v111, v100, 1 + v_or_b32_e32 v5, 0x80, v109 + s_add_i32 s24, s21, 0x11000 + ;;#ASMSTART + s_mov_b32 m0, s24 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s18, v5 + v_lshlrev_b32_e32 v2, 14, v2 + v_cndmask_b32_e32 v101, 0, v2, vcc + v_add_lshl_u32 v2, v111, v101, 1 + v_or_b32_e32 v6, 0xc0, v109 + s_add_i32 s23, s21, 0x12000 + ;;#ASMSTART + s_mov_b32 m0, s23 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s18, v6 + v_lshlrev_b32_e32 v2, 14, v2 + v_cndmask_b32_e32 v102, 0, v2, vcc + v_add_lshl_u32 v2, v111, v102, 1 + v_or_b32_e32 v7, 32, v111 + s_add_i32 s17, s21, 0x13000 + ;;#ASMSTART + s_mov_b32 m0, s17 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v7, v98, 1 + s_add_i32 s14, s21, 0x14000 + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v7, v100, 1 + s_add_i32 s14, s21, 0x15000 + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v7, v101, 1 + s_add_i32 s14, s21, 0x16000 + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v7, v102, 1 + s_add_i32 s14, s21, 0x17000 + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s20, v109 + v_mov_b32_e32 v3, s19 + v_lshlrev_b32_e32 v8, 14, v2 + v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] + s_add_i32 s16, s21, 0x1000 + s_add_i32 s15, s21, 0x2000 + v_cndmask_b32_e32 v103, 0, v8, vcc + v_add_lshl_u32 v2, v103, v111, 1 + ;;#ASMSTART + s_mov_b32 m0, s21 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s20, v4 + v_lshlrev_b32_e32 v4, 14, v2 + v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] + s_add_i32 s14, s21, 0x3000 + s_add_i32 s27, s21, 0x4000 + v_cndmask_b32_e32 v104, 0, v4, vcc + v_add_lshl_u32 v2, v104, v111, 1 + ;;#ASMSTART + s_mov_b32 m0, s16 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s20, v5 + v_lshlrev_b32_e32 v4, 14, v2 + v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] + v_and_b32_e32 v1, 0x80, v0 + v_lshlrev_b32_e32 v34, 1, v0 + v_cndmask_b32_e32 v105, 0, v4, vcc + v_add_lshl_u32 v2, v105, v111, 1 + ;;#ASMSTART + s_mov_b32 m0, s15 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, s20, v6 + v_lshlrev_b32_e32 v4, 14, v2 + v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] + v_and_b32_e32 v35, 15, v0 + v_lshrrev_b32_e32 v94, 4, v0 + v_cndmask_b32_e32 v106, 0, v4, vcc + v_add_lshl_u32 v2, v106, v111, 1 + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v103, v7, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v104, v7, 1 + s_add_i32 s27, s21, 0x5000 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v105, v7, 1 + s_add_i32 s27, s21, 0x6000 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v2, v106, v7, 1 + s_add_i32 s27, s21, 0x7000 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_or_b32_e32 v2, 64, v111 + s_add_i32 s27, s21, 0x18000 + v_add_lshl_u32 v3, v2, v98, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0x19000 + v_add_lshl_u32 v3, v2, v100, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0x1a000 + v_add_lshl_u32 v3, v2, v101, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0x1b000 + v_add_lshl_u32 v3, v2, v102, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0x8000 + v_add_lshl_u32 v3, v103, v2, 1 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0x9000 + v_add_lshl_u32 v3, v104, v2, 1 + s_mov_b32 s22, 0x10000 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0xa000 + v_add_lshl_u32 v3, v105, v2, 1 + v_add_lshl_u32 v2, v106, v2, 1 + s_movk_i32 s26, 0x80 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds + ;;#ASMEND + s_add_i32 s27, s21, 0xb000 + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_xor_b32_e32 v2, v94, v0 + v_lshlrev_b32_e32 v2, 4, v2 + v_and_b32_e32 v96, 48, v2 + v_lshlrev_b32_e32 v2, 5, v0 + v_and_b32_e32 v2, 0x11e0, v2 + v_lshlrev_b32_e32 v108, 1, v2 + v_or3_b32 v6, v1, v35, 16 + v_and_or_b32 v95, v34, s26, v35 + v_mov_b32_e32 v34, 0x10000 + v_or_b32_e32 v144, v108, v96 + v_lshlrev_b32_e32 v107, 6, v6 + v_lshl_or_b32 v99, v95, 6, v34 + ;;#ASMSTART + s_waitcnt vmcnt(0) + s_barrier + ;;#ASMEND + ds_read_b128 v[2:5], v144 + v_or_b32_e32 v145, v107, v96 + v_or_b32_e32 v146, v99, v96 + v_or_b32_e32 v90, 0x60, v111 + v_lshlrev_b32_e32 v110, 5, v6 + ds_read_b128 v[6:9], v145 + ds_read_b128 v[10:13], v145 offset:1024 + ds_read_b128 v[14:17], v145 offset:2048 + ds_read_b128 v[18:21], v145 offset:3072 + ds_read_b128 v[22:25], v145 offset:4096 + ds_read_b128 v[26:29], v145 offset:5120 + ds_read_b128 v[30:33], v145 offset:6144 + ds_read_b128 v[34:37], v146 + ds_read_b128 v[38:41], v146 offset:1024 + ds_read_b128 v[42:45], v146 offset:2048 + ds_read_b128 v[50:53], v146 offset:3072 + ds_read_b128 v[54:57], v146 offset:4096 + ds_read_b128 v[112:115], v146 offset:5120 + ds_read_b128 v[116:119], v146 offset:6144 + ds_read_b128 v[120:123], v146 offset:7168 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[2:5], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0x1c000 + v_add_lshl_u32 v46, v90, v98, 1 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v46, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[124:127], v144 offset:16384 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[2:5], v[38:41], 0 + ;;#ASMEND + s_waitcnt lgkmcnt(6) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[2:5], v[42:45], 0 + ;;#ASMEND + s_waitcnt lgkmcnt(5) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[2:5], v[50:53], 0 + ;;#ASMEND + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[2:5], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[128:131], v145 offset:16384 + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[2:5], v[112:115], 0 + ;;#ASMEND + s_waitcnt lgkmcnt(3) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[2:5], v[116:119], 0 + ;;#ASMEND + s_waitcnt lgkmcnt(2) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[2:5], v[120:123], 0 + ;;#ASMEND + v_add_lshl_u32 v2, v90, v100, 1 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[6:9], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0x1d000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[2:5], v145 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[6:9], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[6:9], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[6:9], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[6:9], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[132:135], v145 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[6:9], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[6:9], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[6:9], v[120:123], 0 + ;;#ASMEND + v_add_lshl_u32 v6, v90, v101, 1 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[10:13], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0x1e000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v90, v102, 1 + ds_read_b128 v[136:139], v145 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[10:13], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[10:13], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[10:13], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[10:13], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[46:49], v145 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[10:13], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[10:13], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[10:13], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[14:17], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0x1f000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v103, v90, 1 + ds_read_b128 v[58:61], v145 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[14:17], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[14:17], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[14:17], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[14:17], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[66:69], v145 offset:22528 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[14:17], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[14:17], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[14:17], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[18:21], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0xc000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v104, v90, 1 + ds_read_b128 v[70:73], v146 offset:16384 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[18:21], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[18:21], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[18:21], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[18:21], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[62:65], v146 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[18:21], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[18:21], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[18:21], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[22:25], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0xd000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v105, v90, 1 + ds_read_b128 v[74:77], v146 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[22:25], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[22:25], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[22:25], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[22:25], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[78:81], v146 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[22:25], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[22:25], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[22:25], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[26:29], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0xe000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v106, v90, 1 + v_or_b32_e32 v111, 0x80, v111 + ds_read_b128 v[82:85], v146 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[26:29], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[26:29], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[26:29], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[26:29], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[86:89], v146 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[26:29], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[26:29], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[26:29], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[30:33], v[34:37], 0 + ;;#ASMEND + s_add_i32 s26, s21, 0xf000 + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v111, v98, 1 + ds_read_b128 v[90:93], v146 offset:22528 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[30:33], v[38:41], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[30:33], v[42:45], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[30:33], v[50:53], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[30:33], v[54:57], 0 + ;;#ASMEND + ds_read_b128 v[140:143], v146 offset:23552 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[30:33], v[112:115], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[30:33], v[116:119], 0 + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[30:33], v[120:123], 0 + ;;#ASMEND + ;;#ASMSTART + s_waitcnt lgkmcnt(0) + s_barrier + ;;#ASMEND + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[124:127], v[70:73], a[252:255] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s25 + buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds + ;;#ASMEND + v_add_lshl_u32 v6, v111, v100, 1 + ds_read_b128 v[50:53], v144 offset:32768 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[124:127], v[62:65], a[248:251] + ;;#ASMEND + s_waitcnt lgkmcnt(6) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[124:127], v[74:77], a[244:247] + ;;#ASMEND + s_waitcnt lgkmcnt(5) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[124:127], v[78:81], a[240:243] + ;;#ASMEND + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[124:127], v[82:85], a[236:239] + ;;#ASMEND + ds_read_b128 v[42:45], v145 offset:32768 + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[124:127], v[86:89], a[232:235] + ;;#ASMEND + s_waitcnt lgkmcnt(3) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[124:127], v[90:93], a[228:231] + ;;#ASMEND + s_waitcnt lgkmcnt(2) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[124:127], v[140:143], a[224:227] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[128:131], v[70:73], a[220:223] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s24 + buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[34:37], v145 offset:33792 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[128:131], v[62:65], a[216:219] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[128:131], v[74:77], a[212:215] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[128:131], v[78:81], a[208:211] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[128:131], v[82:85], a[204:207] + ;;#ASMEND + ds_read_b128 v[26:29], v145 offset:34816 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[128:131], v[86:89], a[200:203] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[128:131], v[90:93], a[196:199] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[128:131], v[140:143], a[192:195] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[2:5], v[70:73], a[188:191] + ;;#ASMEND + v_add_lshl_u32 v6, v111, v101, 1 + ;;#ASMSTART + s_mov_b32 m0, s23 + buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[14:17], v145 offset:35840 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[2:5], v[62:65], a[184:187] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[2:5], v[74:77], a[180:183] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[2:5], v[78:81], a[176:179] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[2:5], v[82:85], a[172:175] + ;;#ASMEND + ds_read_b128 v[10:13], v145 offset:36864 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[2:5], v[86:89], a[168:171] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[2:5], v[90:93], a[164:167] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[2:5], v[140:143], a[160:163] + ;;#ASMEND + v_add_lshl_u32 v2, v111, v102, 1 + v_add_lshl_u32 v18, v103, v111, 1 + v_add_lshl_u32 v30, v104, v111, 1 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[132:135], v[70:73], a[156:159] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s17 + buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[6:9], v145 offset:37888 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[132:135], v[62:65], a[152:155] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[132:135], v[74:77], a[148:151] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[132:135], v[78:81], a[144:147] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[132:135], v[82:85], a[140:143] + ;;#ASMEND + ds_read_b128 v[2:5], v145 offset:38912 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[132:135], v[86:89], a[136:139] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[132:135], v[90:93], a[132:135] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[132:135], v[140:143], a[128:131] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[136:139], v[70:73], a[124:127] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s21 + buffer_load_dwordx4 v18, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[18:21], v146 offset:32768 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[136:139], v[62:65], a[120:123] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[136:139], v[74:77], a[116:119] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[136:139], v[78:81], a[112:115] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[136:139], v[82:85], a[108:111] + ;;#ASMEND + ds_read_b128 v[22:25], v146 offset:33792 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[136:139], v[86:89], a[104:107] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[136:139], v[90:93], a[100:103] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[136:139], v[140:143], a[96:99] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[46:49], v[70:73], a[92:95] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s16 + buffer_load_dwordx4 v30, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[30:33], v146 offset:34816 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[46:49], v[62:65], a[88:91] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[46:49], v[74:77], a[84:87] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[46:49], v[78:81], a[80:83] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[46:49], v[82:85], a[76:79] + ;;#ASMEND + ds_read_b128 v[38:41], v146 offset:35840 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[46:49], v[86:89], a[72:75] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[46:49], v[90:93], a[68:71] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[46:49], v[140:143], a[64:67] + ;;#ASMEND + v_add_lshl_u32 v46, v105, v111, 1 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[58:61], v[70:73], a[60:63] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s15 + buffer_load_dwordx4 v46, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[46:49], v146 offset:36864 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[58:61], v[62:65], a[56:59] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[58:61], v[74:77], a[52:55] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[58:61], v[78:81], a[48:51] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[58:61], v[82:85], a[44:47] + ;;#ASMEND + ds_read_b128 v[54:57], v146 offset:37888 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[58:61], v[86:89], a[40:43] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[58:61], v[90:93], a[36:39] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[58:61], v[140:143], a[32:35] + ;;#ASMEND + v_add_lshl_u32 v58, v106, v111, 1 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[66:69], v[70:73], a[28:31] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s14 + buffer_load_dwordx4 v58, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[58:61], v146 offset:38912 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[66:69], v[62:65], a[24:27] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[66:69], v[74:77], a[20:23] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[66:69], v[78:81], a[16:19] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[66:69], v[82:85], a[12:15] + ;;#ASMEND + ds_read_b128 v[62:65], v146 offset:39936 + v_lshlrev_b32_e32 v71, 5, v95 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[66:69], v[86:89], a[8:11] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[66:69], v[90:93], a[4:7] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[66:69], v[140:143], a[0:3] + ;;#ASMEND + v_bitop3_b32 v66, v109, 3, v0 bitop3:0x48 + v_lshlrev_b32_e32 v66, 4, v66 + s_or_b32 s23, s2, 0x3fc0 + s_or_b32 s24, s2, 0xc0 + v_lshl_or_b32 v67, s3, 15, v66 + s_movk_i32 s2, 0x8100 + v_lshl_add_u32 v66, v102, 1, v67 + v_lshl_add_u32 v68, v106, 1, v67 + v_lshl_add_u32 v70, v101, 1, v67 + v_lshl_add_u32 v72, v105, 1, v67 + v_lshl_add_u32 v74, v100, 1, v67 + v_lshl_add_u32 v76, v104, 1, v67 + v_lshl_add_u32 v78, v103, 1, v67 + v_lshl_add_u32 v80, v98, 1, v67 + s_mov_b64 s[14:15], 1 + s_mov_b32 s3, -1 + v_lshlrev_b32_e32 v67, 1, v110 + v_lshlrev_b32_e32 v69, 1, v71 + ;;#ASMSTART + s_waitcnt vmcnt(16) + s_barrier + ;;#ASMEND +.LBB0_1: + s_mov_b64 s[16:17], s[14:15] + s_min_i32 s15, s24, s23 + v_add_u32_e32 v82, s2, v72 + v_add_u32_e32 v83, s2, v68 + s_xor_b32 s14, s16, 1 + s_lshl_b32 s16, s16, 15 + v_add_u32_e32 v109, 0x8040, v82 + v_add_u32_e32 v154, 0x8040, v83 + v_or_b32_e32 v82, s15, v97 + s_lshl_b32 s17, s14, 15 + v_or_b32_e32 v83, s16, v96 + v_add_u32_e32 v71, s2, v80 + v_add_u32_e32 v73, s2, v74 + v_add_u32_e32 v75, s2, v70 + v_add_u32_e32 v77, s2, v66 + v_add_u32_e32 v79, s2, v78 + v_add_u32_e32 v81, s2, v76 + s_add_i32 s15, s16, s21 + v_add_lshl_u32 v162, v82, v98, 1 + v_add_lshl_u32 v163, v82, v100, 1 + v_add_lshl_u32 v164, v82, v101, 1 + v_add_lshl_u32 v165, v82, v102, 1 + v_add_lshl_u32 v166, v82, v103, 1 + v_add_lshl_u32 v167, v82, v104, 1 + v_add_lshl_u32 v168, v82, v105, 1 + v_add_lshl_u32 v169, v82, v106, 1 + s_add_i32 s16, s21, s17 + v_add_u32_e32 v82, v83, v108 + v_add_u32_e32 v126, v83, v67 + v_add3_u32 v158, v83, v69, s22 + v_or_b32_e32 v83, s17, v96 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[50:53], v[18:21], a[252:255] + ;;#ASMEND + v_add_u32_e32 v71, 0x8040, v71 + v_add_u32_e32 v73, 0x8040, v73 + v_add_u32_e32 v75, 0x8040, v75 + v_add_u32_e32 v77, 0x8040, v77 + v_add_u32_e32 v79, 0x8040, v79 + v_add_u32_e32 v81, 0x8040, v81 + s_add_i32 s31, s16, 0x4000 + s_add_i32 s33, s16, 0x14000 + s_add_i32 s34, s16, 0x5000 + s_add_i32 s35, s16, 0x15000 + s_add_i32 s36, s16, 0x6000 + s_add_i32 s37, s16, 0x16000 + s_add_i32 s38, s16, 0x7000 + s_add_i32 s16, s16, 0x17000 + v_add_u32_e32 v170, v83, v108 + v_add_u32_e32 v171, v83, v67 + v_add3_u32 v172, v83, v69, s22 + ;;#ASMSTART + s_mov_b32 m0, s33 + buffer_load_dwordx4 v71, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[82:85], v82 offset:16384 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[50:53], v[22:25], a[248:251] + ;;#ASMEND + s_waitcnt lgkmcnt(6) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[50:53], v[30:33], a[244:247] + ;;#ASMEND + s_waitcnt lgkmcnt(5) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[50:53], v[38:41], a[240:243] + ;;#ASMEND + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[50:53], v[46:49], a[236:239] + ;;#ASMEND + ds_read_b128 v[86:89], v126 offset:16384 + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[50:53], v[54:57], a[232:235] + ;;#ASMEND + s_waitcnt lgkmcnt(3) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[50:53], v[58:61], a[228:231] + ;;#ASMEND + s_waitcnt lgkmcnt(2) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[50:53], v[62:65], a[224:227] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[42:45], v[18:21], a[220:223] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s35 + buffer_load_dwordx4 v73, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[90:93], v126 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[42:45], v[22:25], a[216:219] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[42:45], v[30:33], a[212:215] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[42:45], v[38:41], a[208:211] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[42:45], v[46:49], a[204:207] + ;;#ASMEND + ds_read_b128 v[110:113], v126 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[42:45], v[54:57], a[200:203] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[42:45], v[58:61], a[196:199] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[42:45], v[62:65], a[192:195] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[34:37], v[18:21], a[188:191] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s37 + buffer_load_dwordx4 v75, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[114:117], v126 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[34:37], v[22:25], a[184:187] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[34:37], v[30:33], a[180:183] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[34:37], v[38:41], a[176:179] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[34:37], v[46:49], a[172:175] + ;;#ASMEND + ds_read_b128 v[118:121], v126 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[34:37], v[54:57], a[168:171] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[34:37], v[58:61], a[164:167] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[34:37], v[62:65], a[160:163] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[26:29], v[18:21], a[156:159] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s16 + buffer_load_dwordx4 v77, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[122:125], v126 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[26:29], v[22:25], a[152:155] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[26:29], v[30:33], a[148:151] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[26:29], v[38:41], a[144:147] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[26:29], v[46:49], a[140:143] + ;;#ASMEND + ds_read_b128 v[126:129], v126 offset:22528 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[26:29], v[54:57], a[136:139] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[26:29], v[58:61], a[132:135] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[26:29], v[62:65], a[128:131] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[14:17], v[18:21], a[124:127] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s31 + buffer_load_dwordx4 v79, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[130:133], v158 offset:16384 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[14:17], v[22:25], a[120:123] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[14:17], v[30:33], a[116:119] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[14:17], v[38:41], a[112:115] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[14:17], v[46:49], a[108:111] + ;;#ASMEND + ds_read_b128 v[134:137], v158 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[14:17], v[54:57], a[104:107] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[14:17], v[58:61], a[100:103] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[14:17], v[62:65], a[96:99] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[10:13], v[18:21], a[92:95] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s34 + buffer_load_dwordx4 v81, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[138:141], v158 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[10:13], v[22:25], a[88:91] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[10:13], v[30:33], a[84:87] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[10:13], v[38:41], a[80:83] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[10:13], v[46:49], a[76:79] + ;;#ASMEND + ds_read_b128 v[142:145], v158 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[10:13], v[54:57], a[72:75] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[10:13], v[58:61], a[68:71] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[10:13], v[62:65], a[64:67] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[6:9], v[18:21], a[60:63] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s36 + buffer_load_dwordx4 v109, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[146:149], v158 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[6:9], v[22:25], a[56:59] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[6:9], v[30:33], a[52:55] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[6:9], v[38:41], a[48:51] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[6:9], v[46:49], a[44:47] + ;;#ASMEND + ds_read_b128 v[150:153], v158 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[6:9], v[54:57], a[40:43] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[6:9], v[58:61], a[36:39] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[6:9], v[62:65], a[32:35] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[2:5], v[18:21], a[28:31] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s38 + buffer_load_dwordx4 v154, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[154:157], v158 offset:22528 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[2:5], v[22:25], a[24:27] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[2:5], v[30:33], a[20:23] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[2:5], v[38:41], a[16:19] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[2:5], v[46:49], a[12:15] + ;;#ASMEND + s_add_i32 s25, s15, 0x10000 + s_add_i32 s17, s15, 0x11000 + s_add_i32 s26, s15, 0x12000 + s_add_i32 s27, s15, 0x13000 + s_add_i32 s28, s15, 0x1000 + s_add_i32 s29, s15, 0x2000 + s_add_i32 s30, s15, 0x3000 + ds_read_b128 v[158:161], v158 offset:23552 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[2:5], v[54:57], a[8:11] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[2:5], v[58:61], a[4:7] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[2:5], v[62:65], a[0:3] + ;;#ASMEND + ;;#ASMSTART + s_waitcnt lgkmcnt(0) + s_barrier + ;;#ASMEND + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[82:85], v[130:133], a[252:255] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s25 + buffer_load_dwordx4 v162, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[50:53], v170 + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[82:85], v[134:137], a[248:251] + ;;#ASMEND + s_waitcnt lgkmcnt(6) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[82:85], v[138:141], a[244:247] + ;;#ASMEND + s_waitcnt lgkmcnt(5) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[82:85], v[142:145], a[240:243] + ;;#ASMEND + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[82:85], v[146:149], a[236:239] + ;;#ASMEND + ds_read_b128 v[42:45], v171 + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[82:85], v[150:153], a[232:235] + ;;#ASMEND + s_waitcnt lgkmcnt(3) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[82:85], v[154:157], a[228:231] + ;;#ASMEND + s_waitcnt lgkmcnt(2) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[82:85], v[158:161], a[224:227] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[86:89], v[130:133], a[220:223] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s17 + buffer_load_dwordx4 v163, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[34:37], v171 offset:1024 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[86:89], v[134:137], a[216:219] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[86:89], v[138:141], a[212:215] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[86:89], v[142:145], a[208:211] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[86:89], v[146:149], a[204:207] + ;;#ASMEND + ds_read_b128 v[26:29], v171 offset:2048 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[86:89], v[150:153], a[200:203] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[86:89], v[154:157], a[196:199] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[86:89], v[158:161], a[192:195] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[90:93], v[130:133], a[188:191] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s26 + buffer_load_dwordx4 v164, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[14:17], v171 offset:3072 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[90:93], v[134:137], a[184:187] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[90:93], v[138:141], a[180:183] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[90:93], v[142:145], a[176:179] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[90:93], v[146:149], a[172:175] + ;;#ASMEND + ds_read_b128 v[10:13], v171 offset:4096 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[90:93], v[150:153], a[168:171] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[90:93], v[154:157], a[164:167] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[90:93], v[158:161], a[160:163] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[110:113], v[130:133], a[156:159] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s27 + buffer_load_dwordx4 v165, s[8:11], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[6:9], v171 offset:5120 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[110:113], v[134:137], a[152:155] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[110:113], v[138:141], a[148:151] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[110:113], v[142:145], a[144:147] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[110:113], v[146:149], a[140:143] + ;;#ASMEND + ds_read_b128 v[2:5], v171 offset:6144 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[110:113], v[150:153], a[136:139] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[110:113], v[154:157], a[132:135] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[110:113], v[158:161], a[128:131] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[114:117], v[130:133], a[124:127] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s15 + buffer_load_dwordx4 v166, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[18:21], v172 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[114:117], v[134:137], a[120:123] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[114:117], v[138:141], a[116:119] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[114:117], v[142:145], a[112:115] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[114:117], v[146:149], a[108:111] + ;;#ASMEND + ds_read_b128 v[22:25], v172 offset:1024 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[114:117], v[150:153], a[104:107] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[114:117], v[154:157], a[100:103] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[114:117], v[158:161], a[96:99] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[118:121], v[130:133], a[92:95] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s28 + buffer_load_dwordx4 v167, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[30:33], v172 offset:2048 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[118:121], v[134:137], a[88:91] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[118:121], v[138:141], a[84:87] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[118:121], v[142:145], a[80:83] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[118:121], v[146:149], a[76:79] + ;;#ASMEND + ds_read_b128 v[38:41], v172 offset:3072 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[118:121], v[150:153], a[72:75] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[118:121], v[154:157], a[68:71] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[118:121], v[158:161], a[64:67] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[122:125], v[130:133], a[60:63] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s29 + buffer_load_dwordx4 v168, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[46:49], v172 offset:4096 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[122:125], v[134:137], a[56:59] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[122:125], v[138:141], a[52:55] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[122:125], v[142:145], a[48:51] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[122:125], v[146:149], a[44:47] + ;;#ASMEND + ds_read_b128 v[54:57], v172 offset:5120 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[122:125], v[150:153], a[40:43] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[122:125], v[154:157], a[36:39] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[122:125], v[158:161], a[32:35] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[126:129], v[130:133], a[28:31] + ;;#ASMEND + ;;#ASMSTART + s_mov_b32 m0, s30 + buffer_load_dwordx4 v169, s[4:7], 0 offen sc0 lds + ;;#ASMEND + ds_read_b128 v[58:61], v172 offset:6144 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[126:129], v[134:137], a[24:27] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[126:129], v[138:141], a[20:23] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[126:129], v[142:145], a[16:19] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[126:129], v[146:149], a[12:15] + ;;#ASMEND + ds_read_b128 v[62:65], v172 offset:7168 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[126:129], v[150:153], a[8:11] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[126:129], v[154:157], a[4:7] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[126:129], v[158:161], a[0:3] + ;;#ASMEND + s_add_i32 s24, s24, 64 + s_add_u32 s2, s2, 0x80 + s_addc_u32 s3, s3, 0 + s_cmp_lg_u64 s[2:3], 0 + ;;#ASMSTART + s_waitcnt vmcnt(16) + s_barrier + ;;#ASMEND + s_cbranch_scc1 .LBB0_1 + s_load_dwordx2 s[0:1], s[0:1], 0x0 + s_lshl_b32 s4, s14, 14 + s_lshl_b32 s4, s4, 1 + v_add3_u32 v67, v108, s4, v96 + s_waitcnt lgkmcnt(0) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[50:53], v[18:21], a[252:255] + ;;#ASMEND + ds_read_b128 v[68:71], v67 offset:16384 + v_add3_u32 v67, v107, s4, v96 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[50:53], v[22:25], a[248:251] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[50:53], v[30:33], a[244:247] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[50:53], v[38:41], a[240:243] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[50:53], v[46:49], a[236:239] + ;;#ASMEND + ds_read_b128 v[72:75], v67 offset:16384 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[50:53], v[54:57], a[232:235] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[50:53], v[58:61], a[228:231] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[50:53], v[62:65], a[224:227] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[42:45], v[18:21], a[220:223] + ;;#ASMEND + ds_read_b128 v[76:79], v67 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[42:45], v[22:25], a[216:219] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[42:45], v[30:33], a[212:215] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[42:45], v[38:41], a[208:211] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[42:45], v[46:49], a[204:207] + ;;#ASMEND + ds_read_b128 v[80:83], v67 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[42:45], v[54:57], a[200:203] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[42:45], v[58:61], a[196:199] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[42:45], v[62:65], a[192:195] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[34:37], v[18:21], a[188:191] + ;;#ASMEND + ds_read_b128 v[84:87], v67 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[34:37], v[22:25], a[184:187] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[34:37], v[30:33], a[180:183] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[34:37], v[38:41], a[176:179] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[34:37], v[46:49], a[172:175] + ;;#ASMEND + ds_read_b128 v[50:53], v67 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[34:37], v[54:57], a[168:171] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[34:37], v[58:61], a[164:167] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[34:37], v[62:65], a[160:163] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[26:29], v[18:21], a[156:159] + ;;#ASMEND + ds_read_b128 v[42:45], v67 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[26:29], v[22:25], a[152:155] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[26:29], v[30:33], a[148:151] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[26:29], v[38:41], a[144:147] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[26:29], v[46:49], a[140:143] + ;;#ASMEND + ds_read_b128 v[34:37], v67 offset:22528 + v_add3_u32 v67, v99, s4, v96 + s_mov_b32 s3, 0x27000 + s_mov_b32 s2, -1 + s_and_b32 s1, s1, 0xffff + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[26:29], v[54:57], a[136:139] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[26:29], v[58:61], a[132:135] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[26:29], v[62:65], a[128:131] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[14:17], v[18:21], a[124:127] + ;;#ASMEND + ds_read_b128 v[26:29], v67 offset:16384 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[14:17], v[22:25], a[120:123] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[14:17], v[30:33], a[116:119] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[14:17], v[38:41], a[112:115] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[14:17], v[46:49], a[108:111] + ;;#ASMEND + ds_read_b128 v[88:91], v67 offset:17408 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[14:17], v[54:57], a[104:107] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[14:17], v[58:61], a[100:103] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[14:17], v[62:65], a[96:99] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[10:13], v[18:21], a[92:95] + ;;#ASMEND + ds_read_b128 v[14:17], v67 offset:18432 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[10:13], v[22:25], a[88:91] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[10:13], v[30:33], a[84:87] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[10:13], v[38:41], a[80:83] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[10:13], v[46:49], a[76:79] + ;;#ASMEND + ds_read_b128 v[96:99], v67 offset:19456 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[10:13], v[54:57], a[72:75] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[10:13], v[58:61], a[68:71] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[10:13], v[62:65], a[64:67] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[6:9], v[18:21], a[60:63] + ;;#ASMEND + ds_read_b128 v[10:13], v67 offset:20480 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[6:9], v[22:25], a[56:59] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[6:9], v[30:33], a[52:55] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[6:9], v[38:41], a[48:51] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[6:9], v[46:49], a[44:47] + ;;#ASMEND + ds_read_b128 v[100:103], v67 offset:21504 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[6:9], v[54:57], a[40:43] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[6:9], v[58:61], a[36:39] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[6:9], v[62:65], a[32:35] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[2:5], v[18:21], a[28:31] + ;;#ASMEND + ds_read_b128 v[6:9], v67 offset:22528 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[2:5], v[22:25], a[24:27] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[2:5], v[30:33], a[20:23] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[2:5], v[38:41], a[16:19] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[2:5], v[46:49], a[12:15] + ;;#ASMEND + ds_read_b128 v[18:21], v67 offset:23552 + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[2:5], v[54:57], a[8:11] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[2:5], v[58:61], a[4:7] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[2:5], v[62:65], a[0:3] + ;;#ASMEND + v_or_b32_e32 v66, 0x70, v1 + ;;#ASMSTART + s_waitcnt lgkmcnt(0) + s_barrier + ;;#ASMEND + s_waitcnt lgkmcnt(7) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[252:255], v[68:71], v[26:29], a[252:255] + ;;#ASMEND + s_waitcnt lgkmcnt(6) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[248:251], v[68:71], v[88:91], a[248:251] + ;;#ASMEND + s_waitcnt lgkmcnt(5) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[244:247], v[68:71], v[14:17], a[244:247] + ;;#ASMEND + s_waitcnt lgkmcnt(4) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[240:243], v[68:71], v[96:99], a[240:243] + ;;#ASMEND + s_waitcnt lgkmcnt(3) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[236:239], v[68:71], v[10:13], a[236:239] + ;;#ASMEND + s_waitcnt lgkmcnt(2) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[232:235], v[68:71], v[100:103], a[232:235] + ;;#ASMEND + s_waitcnt lgkmcnt(1) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[228:231], v[68:71], v[6:9], a[228:231] + ;;#ASMEND + s_waitcnt lgkmcnt(0) + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[224:227], v[68:71], v[18:21], a[224:227] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[220:223], v[72:75], v[26:29], a[220:223] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[216:219], v[72:75], v[88:91], a[216:219] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[212:215], v[72:75], v[14:17], a[212:215] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[208:211], v[72:75], v[96:99], a[208:211] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[204:207], v[72:75], v[10:13], a[204:207] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[200:203], v[72:75], v[100:103], a[200:203] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[196:199], v[72:75], v[6:9], a[196:199] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[192:195], v[72:75], v[18:21], a[192:195] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[188:191], v[76:79], v[26:29], a[188:191] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[184:187], v[76:79], v[88:91], a[184:187] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[180:183], v[76:79], v[14:17], a[180:183] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[176:179], v[76:79], v[96:99], a[176:179] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[172:175], v[76:79], v[10:13], a[172:175] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[168:171], v[76:79], v[100:103], a[168:171] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[164:167], v[76:79], v[6:9], a[164:167] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[160:163], v[76:79], v[18:21], a[160:163] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[156:159], v[80:83], v[26:29], a[156:159] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[152:155], v[80:83], v[88:91], a[152:155] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[148:151], v[80:83], v[14:17], a[148:151] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[144:147], v[80:83], v[96:99], a[144:147] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[140:143], v[80:83], v[10:13], a[140:143] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[136:139], v[80:83], v[100:103], a[136:139] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[132:135], v[80:83], v[6:9], a[132:135] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[128:131], v[80:83], v[18:21], a[128:131] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[124:127], v[84:87], v[26:29], a[124:127] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[120:123], v[84:87], v[88:91], a[120:123] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[116:119], v[84:87], v[14:17], a[116:119] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[112:115], v[84:87], v[96:99], a[112:115] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[108:111], v[84:87], v[10:13], a[108:111] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[104:107], v[84:87], v[100:103], a[104:107] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[100:103], v[84:87], v[6:9], a[100:103] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[96:99], v[84:87], v[18:21], a[96:99] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[92:95], v[50:53], v[26:29], a[92:95] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[88:91], v[50:53], v[88:91], a[88:91] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[84:87], v[50:53], v[14:17], a[84:87] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[80:83], v[50:53], v[96:99], a[80:83] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[76:79], v[50:53], v[10:13], a[76:79] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[72:75], v[50:53], v[100:103], a[72:75] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[68:71], v[50:53], v[6:9], a[68:71] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[64:67], v[50:53], v[18:21], a[64:67] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[60:63], v[42:45], v[26:29], a[60:63] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[56:59], v[42:45], v[88:91], a[56:59] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[52:55], v[42:45], v[14:17], a[52:55] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[48:51], v[42:45], v[96:99], a[48:51] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[44:47], v[42:45], v[10:13], a[44:47] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[40:43], v[42:45], v[100:103], a[40:43] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[36:39], v[42:45], v[6:9], a[36:39] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[32:35], v[42:45], v[18:21], a[32:35] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[28:31], v[34:37], v[26:29], a[28:31] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[24:27], v[34:37], v[88:91], a[24:27] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[20:23], v[34:37], v[14:17], a[20:23] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[16:19], v[34:37], v[96:99], a[16:19] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[12:15], v[34:37], v[10:13], a[12:15] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[8:11], v[34:37], v[100:103], a[8:11] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[4:7], v[34:37], v[6:9], a[4:7] + ;;#ASMEND + ;;#ASMSTART + v_mfma_f32_16x16x32_bf16 a[0:3], v[34:37], v[18:21], a[0:3] + ;;#ASMEND + v_lshlrev_b32_e32 v2, 2, v94 + v_accvgpr_read_b32 v3, a252 + v_and_or_b32 v4, v2, 12, v1 + v_cvt_pk_bf16_f32 v5, v3, s0 + v_lshlrev_b32_e32 v3, 1, v95 + v_lshl_or_b32 v4, v4, 9, v3 + s_barrier + ds_write_b16 v4, v5 + v_accvgpr_read_b32 v5, a253 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:512 + v_accvgpr_read_b32 v5, a254 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1024 + v_accvgpr_read_b32 v5, a255 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1536 + v_accvgpr_read_b32 v5, a248 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:32 + v_accvgpr_read_b32 v5, a249 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:544 + v_accvgpr_read_b32 v5, a250 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1056 + v_accvgpr_read_b32 v5, a251 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1568 + v_accvgpr_read_b32 v5, a244 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:64 + v_accvgpr_read_b32 v5, a245 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:576 + v_accvgpr_read_b32 v5, a246 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1088 + v_accvgpr_read_b32 v5, a247 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1600 + v_accvgpr_read_b32 v5, a240 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:96 + v_accvgpr_read_b32 v5, a241 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:608 + v_accvgpr_read_b32 v5, a242 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1120 + v_accvgpr_read_b32 v5, a243 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1632 + v_accvgpr_read_b32 v5, a236 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:128 + v_accvgpr_read_b32 v5, a237 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:640 + v_accvgpr_read_b32 v5, a238 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1152 + v_accvgpr_read_b32 v5, a239 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1664 + v_accvgpr_read_b32 v5, a232 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:160 + v_accvgpr_read_b32 v5, a233 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:672 + v_accvgpr_read_b32 v5, a234 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1184 + v_accvgpr_read_b32 v5, a235 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1696 + v_accvgpr_read_b32 v5, a228 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:192 + v_accvgpr_read_b32 v5, a229 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:704 + v_accvgpr_read_b32 v5, a230 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1216 + v_accvgpr_read_b32 v5, a231 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1728 + v_accvgpr_read_b32 v5, a224 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:224 + v_accvgpr_read_b32 v5, a225 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:736 + v_accvgpr_read_b32 v5, a226 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1248 + v_accvgpr_read_b32 v5, a227 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:1760 + v_accvgpr_read_b32 v5, a220 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8192 + v_accvgpr_read_b32 v5, a221 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8704 + v_accvgpr_read_b32 v5, a222 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9216 + v_accvgpr_read_b32 v5, a223 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9728 + v_accvgpr_read_b32 v5, a216 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8224 + v_accvgpr_read_b32 v5, a217 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8736 + v_accvgpr_read_b32 v5, a218 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9248 + v_accvgpr_read_b32 v5, a219 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9760 + v_accvgpr_read_b32 v5, a212 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8256 + v_accvgpr_read_b32 v5, a213 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8768 + v_accvgpr_read_b32 v5, a214 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9280 + v_accvgpr_read_b32 v5, a215 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9792 + v_accvgpr_read_b32 v5, a208 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8288 + v_accvgpr_read_b32 v5, a209 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8800 + v_accvgpr_read_b32 v5, a210 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9312 + v_accvgpr_read_b32 v5, a211 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9824 + v_accvgpr_read_b32 v5, a204 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8320 + v_accvgpr_read_b32 v5, a205 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8832 + v_accvgpr_read_b32 v5, a206 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9344 + v_accvgpr_read_b32 v5, a207 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9856 + v_accvgpr_read_b32 v5, a200 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8352 + v_accvgpr_read_b32 v5, a201 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8864 + v_accvgpr_read_b32 v5, a202 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9376 + v_accvgpr_read_b32 v5, a203 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9888 + v_accvgpr_read_b32 v5, a196 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8384 + v_accvgpr_read_b32 v5, a197 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8896 + v_accvgpr_read_b32 v5, a198 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9408 + v_accvgpr_read_b32 v5, a199 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9920 + v_accvgpr_read_b32 v5, a192 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8416 + v_accvgpr_read_b32 v5, a193 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:8928 + v_accvgpr_read_b32 v5, a194 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9440 + v_accvgpr_read_b32 v5, a195 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:9952 + v_accvgpr_read_b32 v5, a188 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16384 + v_accvgpr_read_b32 v5, a189 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16896 + v_accvgpr_read_b32 v5, a190 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17408 + v_accvgpr_read_b32 v5, a191 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17920 + v_accvgpr_read_b32 v5, a184 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16416 + v_accvgpr_read_b32 v5, a185 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16928 + v_accvgpr_read_b32 v5, a186 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17440 + v_accvgpr_read_b32 v5, a187 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17952 + v_accvgpr_read_b32 v5, a180 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16448 + v_accvgpr_read_b32 v5, a181 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16960 + v_accvgpr_read_b32 v5, a182 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17472 + v_accvgpr_read_b32 v5, a183 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17984 + v_accvgpr_read_b32 v5, a176 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16480 + v_accvgpr_read_b32 v5, a177 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16992 + v_accvgpr_read_b32 v5, a178 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17504 + v_accvgpr_read_b32 v5, a179 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:18016 + v_accvgpr_read_b32 v5, a172 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16512 + v_accvgpr_read_b32 v5, a173 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17024 + v_accvgpr_read_b32 v5, a174 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17536 + v_accvgpr_read_b32 v5, a175 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:18048 + v_accvgpr_read_b32 v5, a168 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16544 + v_accvgpr_read_b32 v5, a169 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17056 + v_accvgpr_read_b32 v5, a170 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17568 + v_accvgpr_read_b32 v5, a171 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:18080 + v_accvgpr_read_b32 v5, a164 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16576 + v_accvgpr_read_b32 v5, a165 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17088 + v_accvgpr_read_b32 v5, a166 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17600 + v_accvgpr_read_b32 v5, a167 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:18112 + v_accvgpr_read_b32 v5, a160 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:16608 + v_accvgpr_read_b32 v5, a161 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17120 + v_accvgpr_read_b32 v5, a162 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:17632 + v_accvgpr_read_b32 v5, a163 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v4, v5 offset:18144 + v_or3_b32 v1, v1, 48, v2 + v_accvgpr_read_b32 v5, a156 + v_cvt_pk_bf16_f32 v5, v5, s0 + v_lshl_or_b32 v1, v1, 9, v3 + ds_write_b16 v1, v5 + v_accvgpr_read_b32 v5, a157 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:512 + v_accvgpr_read_b32 v5, a158 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1024 + v_accvgpr_read_b32 v5, a159 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1536 + v_accvgpr_read_b32 v5, a152 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:32 + v_accvgpr_read_b32 v5, a153 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:544 + v_accvgpr_read_b32 v5, a154 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1056 + v_accvgpr_read_b32 v5, a155 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1568 + v_accvgpr_read_b32 v5, a148 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:64 + v_accvgpr_read_b32 v5, a149 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:576 + v_accvgpr_read_b32 v5, a150 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1088 + v_accvgpr_read_b32 v5, a151 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1600 + v_accvgpr_read_b32 v5, a144 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:96 + v_accvgpr_read_b32 v5, a145 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:608 + v_accvgpr_read_b32 v5, a146 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1120 + v_accvgpr_read_b32 v5, a147 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1632 + v_accvgpr_read_b32 v5, a140 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:128 + v_accvgpr_read_b32 v5, a141 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:640 + v_accvgpr_read_b32 v5, a142 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1152 + v_accvgpr_read_b32 v5, a143 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1664 + v_accvgpr_read_b32 v5, a136 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:160 + v_accvgpr_read_b32 v5, a137 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:672 + v_accvgpr_read_b32 v5, a138 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1184 + v_accvgpr_read_b32 v5, a139 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1696 + v_accvgpr_read_b32 v5, a132 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:192 + v_accvgpr_read_b32 v5, a133 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:704 + v_accvgpr_read_b32 v5, a134 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1216 + v_accvgpr_read_b32 v5, a135 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1728 + v_accvgpr_read_b32 v5, a128 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:224 + v_accvgpr_read_b32 v5, a129 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:736 + v_accvgpr_read_b32 v5, a130 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1248 + v_accvgpr_read_b32 v5, a131 + v_cvt_pk_bf16_f32 v5, v5, s0 + ds_write_b16 v1, v5 offset:1760 + v_accvgpr_read_b32 v1, a124 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32768 + v_accvgpr_read_b32 v1, a125 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33280 + v_accvgpr_read_b32 v1, a126 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33792 + v_accvgpr_read_b32 v1, a127 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34304 + v_accvgpr_read_b32 v1, a120 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32800 + v_accvgpr_read_b32 v1, a121 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33312 + v_accvgpr_read_b32 v1, a122 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33824 + v_accvgpr_read_b32 v1, a123 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34336 + v_accvgpr_read_b32 v1, a116 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32832 + v_accvgpr_read_b32 v1, a117 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33344 + v_accvgpr_read_b32 v1, a118 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33856 + v_accvgpr_read_b32 v1, a119 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34368 + v_accvgpr_read_b32 v1, a112 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32864 + v_accvgpr_read_b32 v1, a113 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33376 + v_accvgpr_read_b32 v1, a114 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33888 + v_accvgpr_read_b32 v1, a115 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34400 + v_accvgpr_read_b32 v1, a108 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32896 + v_accvgpr_read_b32 v1, a109 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33408 + v_accvgpr_read_b32 v1, a110 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33920 + v_accvgpr_read_b32 v1, a111 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34432 + v_accvgpr_read_b32 v1, a104 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32928 + v_accvgpr_read_b32 v1, a105 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33440 + v_accvgpr_read_b32 v1, a106 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33952 + v_accvgpr_read_b32 v1, a107 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34464 + v_accvgpr_read_b32 v1, a100 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32960 + v_accvgpr_read_b32 v1, a101 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33472 + v_accvgpr_read_b32 v1, a102 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33984 + v_accvgpr_read_b32 v1, a103 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34496 + v_accvgpr_read_b32 v1, a96 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:32992 + v_accvgpr_read_b32 v1, a97 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:33504 + v_accvgpr_read_b32 v1, a98 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34016 + v_accvgpr_read_b32 v1, a99 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:34528 + v_accvgpr_read_b32 v1, a92 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:40960 + v_accvgpr_read_b32 v1, a93 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41472 + v_accvgpr_read_b32 v1, a94 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41984 + v_accvgpr_read_b32 v1, a95 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42496 + v_accvgpr_read_b32 v1, a88 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:40992 + v_accvgpr_read_b32 v1, a89 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41504 + v_accvgpr_read_b32 v1, a90 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42016 + v_accvgpr_read_b32 v1, a91 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42528 + v_accvgpr_read_b32 v1, a84 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41024 + v_accvgpr_read_b32 v1, a85 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41536 + v_accvgpr_read_b32 v1, a86 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42048 + v_accvgpr_read_b32 v1, a87 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42560 + v_accvgpr_read_b32 v1, a80 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41056 + v_accvgpr_read_b32 v1, a81 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41568 + v_accvgpr_read_b32 v1, a82 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42080 + v_accvgpr_read_b32 v1, a83 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42592 + v_accvgpr_read_b32 v1, a76 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41088 + v_accvgpr_read_b32 v1, a77 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41600 + v_accvgpr_read_b32 v1, a78 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42112 + v_accvgpr_read_b32 v1, a79 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42624 + v_accvgpr_read_b32 v1, a72 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41120 + v_accvgpr_read_b32 v1, a73 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41632 + v_accvgpr_read_b32 v1, a74 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42144 + v_accvgpr_read_b32 v1, a75 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42656 + v_accvgpr_read_b32 v1, a68 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41152 + v_accvgpr_read_b32 v1, a69 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41664 + v_accvgpr_read_b32 v1, a70 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42176 + v_accvgpr_read_b32 v1, a71 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42688 + v_accvgpr_read_b32 v1, a64 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41184 + v_accvgpr_read_b32 v1, a65 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:41696 + v_accvgpr_read_b32 v1, a66 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42208 + v_accvgpr_read_b32 v1, a67 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:42720 + v_accvgpr_read_b32 v1, a60 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49152 + v_accvgpr_read_b32 v1, a61 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49664 + v_accvgpr_read_b32 v1, a62 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50176 + v_accvgpr_read_b32 v1, a63 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50688 + v_accvgpr_read_b32 v1, a56 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49184 + v_accvgpr_read_b32 v1, a57 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49696 + v_accvgpr_read_b32 v1, a58 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50208 + v_accvgpr_read_b32 v1, a59 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50720 + v_accvgpr_read_b32 v1, a52 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49216 + v_accvgpr_read_b32 v1, a53 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49728 + v_accvgpr_read_b32 v1, a54 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50240 + v_accvgpr_read_b32 v1, a55 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50752 + v_accvgpr_read_b32 v1, a48 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49248 + v_accvgpr_read_b32 v1, a49 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49760 + v_accvgpr_read_b32 v1, a50 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50272 + v_accvgpr_read_b32 v1, a51 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50784 + v_accvgpr_read_b32 v1, a44 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49280 + v_accvgpr_read_b32 v1, a45 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49792 + v_accvgpr_read_b32 v1, a46 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50304 + v_accvgpr_read_b32 v1, a47 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50816 + v_accvgpr_read_b32 v1, a40 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49312 + v_accvgpr_read_b32 v1, a41 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49824 + v_accvgpr_read_b32 v1, a42 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50336 + v_accvgpr_read_b32 v1, a43 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50848 + v_accvgpr_read_b32 v1, a36 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49344 + v_accvgpr_read_b32 v1, a37 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49856 + v_accvgpr_read_b32 v1, a38 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50368 + v_accvgpr_read_b32 v1, a39 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50880 + v_accvgpr_read_b32 v1, a32 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49376 + v_accvgpr_read_b32 v1, a33 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:49888 + v_accvgpr_read_b32 v1, a34 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50400 + v_accvgpr_read_b32 v1, a35 + v_cvt_pk_bf16_f32 v1, v1, s0 + ds_write_b16 v4, v1 offset:50912 + v_or_b32_e32 v1, v2, v66 + v_accvgpr_read_b32 v2, a28 + v_cvt_pk_bf16_f32 v2, v2, s0 + v_lshl_or_b32 v1, v1, 9, v3 + ds_write_b16 v1, v2 + v_accvgpr_read_b32 v2, a29 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:512 + v_accvgpr_read_b32 v2, a30 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1024 + v_accvgpr_read_b32 v2, a31 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1536 + v_accvgpr_read_b32 v2, a24 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:32 + v_accvgpr_read_b32 v2, a25 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:544 + v_accvgpr_read_b32 v2, a26 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1056 + v_accvgpr_read_b32 v2, a27 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1568 + v_accvgpr_read_b32 v2, a20 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:64 + v_accvgpr_read_b32 v2, a21 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:576 + v_accvgpr_read_b32 v2, a22 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1088 + v_accvgpr_read_b32 v2, a23 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1600 + v_accvgpr_read_b32 v2, a16 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:96 + v_accvgpr_read_b32 v2, a17 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:608 + v_accvgpr_read_b32 v2, a18 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1120 + v_accvgpr_read_b32 v2, a19 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1632 + v_accvgpr_read_b32 v2, a12 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:128 + v_accvgpr_read_b32 v2, a13 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:640 + v_accvgpr_read_b32 v2, a14 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1152 + v_accvgpr_read_b32 v2, a15 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1664 + v_accvgpr_read_b32 v2, a8 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:160 + v_accvgpr_read_b32 v2, a9 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:672 + v_accvgpr_read_b32 v2, a10 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1184 + v_accvgpr_read_b32 v2, a11 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1696 + v_accvgpr_read_b32 v2, a4 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:192 + v_accvgpr_read_b32 v2, a5 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:704 + v_accvgpr_read_b32 v2, a6 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1216 + v_accvgpr_read_b32 v2, a7 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1728 + v_accvgpr_read_b32 v2, a0 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:224 + v_accvgpr_read_b32 v2, a1 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:736 + v_accvgpr_read_b32 v2, a2 + v_cvt_pk_bf16_f32 v2, v2, s0 + ds_write_b16 v1, v2 offset:1248 + v_accvgpr_read_b32 v2, a3 + v_cvt_pk_bf16_f32 v2, v2, s0 + v_lshrrev_b32_e32 v4, 5, v0 + ds_write_b16 v1, v2 offset:1760 + v_or_b32_e32 v2, s20, v4 + v_mov_b32_e32 v3, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] + v_lshlrev_b32_e32 v3, 3, v0 + s_waitcnt lgkmcnt(0) + s_barrier + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_4 + v_and_b32_e32 v0, 0xf8, v3 + v_lshlrev_b32_e32 v1, 1, v0 + v_lshl_or_b32 v1, v4, 9, v1 + ds_read_b128 v[6:9], v1 + v_or_b32_e32 v0, s18, v0 + v_lshlrev_b32_e32 v1, 14, v2 + v_lshl_add_u32 v0, v0, 1, v1 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_4: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_6 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_6: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 16, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_8 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_8: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 24, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_10 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_10: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 32, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_12 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_12: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 40, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_14 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_14: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 48, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_16 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_16: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 56, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_18 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_18: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 64, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_20 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_20: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x48, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_22 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_22: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x50, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_24 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_24: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x58, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_26 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_26: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x60, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_28 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_28: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x68, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_30 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_30: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x70, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_32 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_32: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x78, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_34 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_34: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x80, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_36 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_36: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x88, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_38 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_38: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x90, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_40 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_40: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0x98, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_42 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_42: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xa0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_44 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_44: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xa8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_46 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_46: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xb0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_48 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_48: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xb8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_50 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_50: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xc0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_52 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_52: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xc8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_54 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_54: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xd0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_56 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_56: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xd8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_58 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_58: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xe0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_60 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_60: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xe8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_62 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_62: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xf0, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_64 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v5, 1, v1 + v_lshl_or_b32 v2, v2, 9, v5 + ds_read_b128 v[6:9], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen +.LBB0_64: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v2, 0xf8, v4 + v_or_b32_e32 v0, s20, v2 + v_mov_b32_e32 v1, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] + s_and_saveexec_b64 s[4:5], vcc + s_cbranch_execz .LBB0_66 + v_and_b32_e32 v1, 0xf8, v3 + v_lshlrev_b32_e32 v3, 1, v1 + v_lshl_or_b32 v2, v2, 9, v3 + ds_read_b128 v[2:5], v2 + v_or_b32_e32 v1, s18, v1 + v_lshlrev_b32_e32 v0, 14, v0 + v_lshl_add_u32 v0, v1, 1, v0 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v[2:5], v0, s[0:3], 0 offen +.LBB0_66: + s_endpgm + .section .rodata,"a",@progbits + .p2align 6, 0x0 + .amdhsa_kernel hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .amdhsa_group_segment_fixed_size 131072 + .amdhsa_private_segment_fixed_size 0 + .amdhsa_kernarg_size 132 + .amdhsa_user_sgpr_count 2 + .amdhsa_user_sgpr_dispatch_ptr 0 + .amdhsa_user_sgpr_queue_ptr 0 + .amdhsa_user_sgpr_kernarg_segment_ptr 1 + .amdhsa_user_sgpr_dispatch_id 0 + .amdhsa_user_sgpr_kernarg_preload_length 0 + .amdhsa_user_sgpr_kernarg_preload_offset 0 + .amdhsa_user_sgpr_private_segment_size 0 + .amdhsa_uses_dynamic_stack 0 + .amdhsa_enable_private_segment 0 + .amdhsa_system_sgpr_workgroup_id_x 1 + .amdhsa_system_sgpr_workgroup_id_y 1 + .amdhsa_system_sgpr_workgroup_id_z 0 + .amdhsa_system_sgpr_workgroup_info 0 + .amdhsa_system_vgpr_workitem_id 0 + .amdhsa_next_free_vgpr 432 + .amdhsa_next_free_sgpr 96 + .amdhsa_accum_offset 176 + .amdhsa_reserve_vcc 1 + .amdhsa_float_round_mode_32 0 + .amdhsa_float_round_mode_16_64 0 + .amdhsa_float_denorm_mode_32 3 + .amdhsa_float_denorm_mode_16_64 3 + .amdhsa_dx10_clamp 1 + .amdhsa_ieee_mode 1 + .amdhsa_fp16_overflow 0 + .amdhsa_tg_split 0 + .amdhsa_exception_fp_ieee_invalid_op 0 + .amdhsa_exception_fp_denorm_src 0 + .amdhsa_exception_fp_ieee_div_zero 0 + .amdhsa_exception_fp_ieee_overflow 0 + .amdhsa_exception_fp_ieee_underflow 0 + .amdhsa_exception_fp_ieee_inexact 0 + .amdhsa_exception_int_div_zero 0 + .end_amdhsa_kernel + .text +.Lfunc_end0: + .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 + .p2alignl 6, 3212836864 + .fill 256, 4, 3212836864 + .section .AMDGPU.gpr_maximums,"",@progbits + .set amdgpu.max_num_vgpr, 0 + .set amdgpu.max_num_agpr, 0 + .set amdgpu.max_num_sgpr, 0 + .set amdgpu.max_num_named_barrier, 0 + .text + .section ".note.GNU-stack","",@progbits + .amdgpu_metadata +--- +amdhsa.kernels: + - .agpr_count: 256 + .args: + - .address_space: global + .offset: 0 + .size: 8 + .value_kind: global_buffer + - .offset: 8 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 24 + .size: 8 + .value_kind: global_buffer + - .offset: 32 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 48 + .size: 8 + .value_kind: global_buffer + - .offset: 56 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 72 + .size: 8 + .value_kind: global_buffer + - .offset: 80 + .size: 16 + .value_kind: by_value + - .offset: 96 + .size: 4 + .value_kind: by_value + - .address_space: global + .offset: 104 + .size: 8 + .value_kind: global_buffer + - .offset: 112 + .size: 4 + .value_kind: by_value + - .address_space: global + .offset: 120 + .size: 8 + .value_kind: global_buffer + - .offset: 128 + .size: 4 + .value_kind: by_value + .group_segment_fixed_size: 131072 + .kernarg_segment_align: 8 + .kernarg_segment_size: 132 + .max_flat_workgroup_size: 256 + .name: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .private_segment_fixed_size: 0 + .reqd_workgroup_size: + - 256 + - 1 + - 1 + .sgpr_count: 45 + .sgpr_spill_count: 0 + .symbol: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.kd + .uniform_work_group_size: 1 + .uses_dynamic_stack: false + .vgpr_count: 432 + .vgpr_spill_count: 0 + .wavefront_size: 64 +amdhsa.target: amdgcn-amd-amdhsa--gfx950 +amdhsa.version: + - 1 + - 2 +... + + .end_amdgpu_metadata From ed9d50937177e680ebe22eee8ab5d05bf3eac6ba Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 12:36:48 +0000 Subject: [PATCH 069/118] Add cleaned (pure) ISA of bf16 hgemm RP1 1117 TFLOPS kernel Run benenzhu/learn-hip gen_pure.py over the final ISA: strips comments/debug, inlines .loc as trailing comments, labels s_cbranch targets, expands v[a:b] register ranges and zero-pads vgpr numbers for readable diffing. Co-Authored-By: Claude Opus 4 (1M context) --- .../hgemm_bf16_rp1_1117tflops_pure.s | 2359 +++++++++++++++++ 1 file changed, 2359 insertions(+) create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s new file mode 100644 index 000000000..3e94db9de --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s @@ -0,0 +1,2359 @@ + .amdgcn_target "amdgcn-amd-amdhsa--gfx950" + .amdhsa_code_object_version 6 + .text + .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .p2align 8 + .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function +hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: + s_load_dword s12, s[0:1], 0x60 + s_load_dwordx2 s[4:5], s[0:1], 0x18 + s_load_dwordx2 s[8:9], s[0:1], 0x30 + s_ashr_i32 s14, s2, 31 + s_lshr_b32 s14, s14, 27 + s_add_i32 s14, s2, s14 + s_waitcnt lgkmcnt(0) + s_ashr_i32 s13, s12, 31 + s_and_b32 s5, s5, 0xffff + s_and_b32 s9, s9, 0xffff + s_ashr_i32 s18, s14, 5 + s_and_b32 s19, s14, 0xffffffe0 + s_cmp_lg_u32 s2, s19 + s_cselect_b64 s[14:15], -1, 0 + s_cmp_lt_i32 s2, 0 + s_cselect_b64 s[16:17], -1, 0 + s_and_b64 s[14:15], s[16:17], s[14:15] + v_lshrrev_b32_e32 v002, 6, v000 + s_subb_u32 s14, s18, 0 + s_lshl_b32 s20, s14, 8 + v_readfirstlane_b32 s14, v002 + v_lshrrev_b32_e32 v109, 2, v000 + s_sub_i32 s15, s2, s19 + s_lshl_b32 s21, s14, 10 + v_xor_b32_e32 v002, v109, v000 + s_lshl_b32 s2, s3, 14 + s_ashr_i32 s19, s20, 31 + s_lshl_b32 s18, s15, 8 + v_lshlrev_b32_e32 v002, 3, v002 + s_add_i32 s25, s21, 0x10000 + v_and_b32_e32 v097, 24, v002 + v_or_b32_e32 v002, s18, v109 + s_cmpk_lt_u32 s18, 0x2000 + v_lshlrev_b32_e32 v002, 14, v002 + s_cselect_b64 vcc, -1, 0 + v_or_b32_e32 v111, s2, v097 + v_cndmask_b32_e32 v098, 0, v002, vcc + s_mov_b32 s7, 0x27000 + s_mov_b32 s6, -1 + v_add_lshl_u32 v002, v111, v098, 1 + v_or_b32_e32 v004, 64, v109 + s_mov_b32 s10, s6 + s_mov_b32 s11, s7 + s_mov_b32 m0, s25 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v004 + v_lshlrev_b32_e32 v002, 14, v002 + v_cndmask_b32_e32 v100, 0, v002, vcc + v_add_lshl_u32 v002, v111, v100, 1 + v_or_b32_e32 v005, 0x80, v109 + s_add_i32 s24, s21, 0x11000 + s_mov_b32 m0, s24 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v005 + v_lshlrev_b32_e32 v002, 14, v002 + v_cndmask_b32_e32 v101, 0, v002, vcc + v_add_lshl_u32 v002, v111, v101, 1 + v_or_b32_e32 v006, 0xc0, v109 + s_add_i32 s23, s21, 0x12000 + s_mov_b32 m0, s23 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v006 + v_lshlrev_b32_e32 v002, 14, v002 + v_cndmask_b32_e32 v102, 0, v002, vcc + v_add_lshl_u32 v002, v111, v102, 1 + v_or_b32_e32 v007, 32, v111 + s_add_i32 s17, s21, 0x13000 + s_mov_b32 m0, s17 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v007, v098, 1 + s_add_i32 s14, s21, 0x14000 + s_mov_b32 m0, s14 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v007, v100, 1 + s_add_i32 s14, s21, 0x15000 + s_mov_b32 m0, s14 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v007, v101, 1 + s_add_i32 s14, s21, 0x16000 + s_mov_b32 m0, s14 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v007, v102, 1 + s_add_i32 s14, s21, 0x17000 + s_mov_b32 m0, s14 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v002, s20, v109 + v_mov_b32_e32 v003, s19 + v_lshlrev_b32_e32 v008, 14, v002 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 + s_add_i32 s16, s21, 0x1000 + s_add_i32 s15, s21, 0x2000 + v_cndmask_b32_e32 v103, 0, v008, vcc + v_add_lshl_u32 v002, v103, v111, 1 + s_mov_b32 m0, s21 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s20, v004 + v_lshlrev_b32_e32 v004, 14, v002 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 + s_add_i32 s14, s21, 0x3000 + s_add_i32 s27, s21, 0x4000 + v_cndmask_b32_e32 v104, 0, v004, vcc + v_add_lshl_u32 v002, v104, v111, 1 + s_mov_b32 m0, s16 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s20, v005 + v_lshlrev_b32_e32 v004, 14, v002 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 + v_and_b32_e32 v001, 0x80, v000 + v_lshlrev_b32_e32 v034, 1, v000 + v_cndmask_b32_e32 v105, 0, v004, vcc + v_add_lshl_u32 v002, v105, v111, 1 + s_mov_b32 m0, s15 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s20, v006 + v_lshlrev_b32_e32 v004, 14, v002 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 + v_and_b32_e32 v035, 15, v000 + v_lshrrev_b32_e32 v094, 4, v000 + v_cndmask_b32_e32 v106, 0, v004, vcc + v_add_lshl_u32 v002, v106, v111, 1 + s_mov_b32 m0, s14 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v103, v007, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v104, v007, 1 + s_add_i32 s27, s21, 0x5000 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v105, v007, 1 + s_add_i32 s27, s21, 0x6000 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v106, v007, 1 + s_add_i32 s27, s21, 0x7000 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, 64, v111 + s_add_i32 s27, s21, 0x18000 + v_add_lshl_u32 v003, v002, v098, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + s_add_i32 s27, s21, 0x19000 + v_add_lshl_u32 v003, v002, v100, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + s_add_i32 s27, s21, 0x1a000 + v_add_lshl_u32 v003, v002, v101, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + s_add_i32 s27, s21, 0x1b000 + v_add_lshl_u32 v003, v002, v102, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + s_add_i32 s27, s21, 0x8000 + v_add_lshl_u32 v003, v103, v002, 1 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + s_add_i32 s27, s21, 0x9000 + v_add_lshl_u32 v003, v104, v002, 1 + s_mov_b32 s22, 0x10000 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + s_add_i32 s27, s21, 0xa000 + v_add_lshl_u32 v003, v105, v002, 1 + v_add_lshl_u32 v002, v106, v002, 1 + s_movk_i32 s26, 0x80 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + s_add_i32 s27, s21, 0xb000 + s_mov_b32 m0, s27 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_xor_b32_e32 v002, v094, v000 + v_lshlrev_b32_e32 v002, 4, v002 + v_and_b32_e32 v096, 48, v002 + v_lshlrev_b32_e32 v002, 5, v000 + v_and_b32_e32 v002, 0x11e0, v002 + v_lshlrev_b32_e32 v108, 1, v002 + v_or3_b32 v006, v001, v035, 16 + v_and_or_b32 v095, v034, s26, v035 + v_mov_b32_e32 v034, 0x10000 + v_or_b32_e32 v144, v108, v096 + v_lshlrev_b32_e32 v107, 6, v006 + v_lshl_or_b32 v099, v095, 6, v034 + s_waitcnt vmcnt(0) + s_barrier + ds_read_b128 v002 v003 v004 v005, v144 + v_or_b32_e32 v145, v107, v096 + v_or_b32_e32 v146, v099, v096 + v_or_b32_e32 v090, 0x60, v111 + v_lshlrev_b32_e32 v110, 5, v006 + ds_read_b128 v006 v007 v008 v009, v145 + ds_read_b128 v010 v011 v012 v013, v145 offset:1024 + ds_read_b128 v014 v015 v016 v017, v145 offset:2048 + ds_read_b128 v018 v019 v020 v021, v145 offset:3072 + ds_read_b128 v022 v023 v024 v025, v145 offset:4096 + ds_read_b128 v026 v027 v028 v029, v145 offset:5120 + ds_read_b128 v030 v031 v032 v033, v145 offset:6144 + ds_read_b128 v034 v035 v036 v037, v146 + ds_read_b128 v038 v039 v040 v041, v146 offset:1024 + ds_read_b128 v042 v043 v044 v045, v146 offset:2048 + ds_read_b128 v050 v051 v052 v053, v146 offset:3072 + ds_read_b128 v054 v055 v056 v057, v146 offset:4096 + ds_read_b128 v112 v113 v114 v115, v146 offset:5120 + ds_read_b128 v116 v117 v118 v119, v146 offset:6144 + ds_read_b128 v120 v121 v122 v123, v146 offset:7168 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0x1c000 + v_add_lshl_u32 v046, v090, v098, 1 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v046, s[8:11], 0 offen sc0 lds + ds_read_b128 v124 v125 v126 v127, v144 offset:16384 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v038 v039 v040 v041, 0 + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v042 v043 v044 v045, 0 + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v050 v051 v052 v053, 0 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v054 v055 v056 v057, 0 + ds_read_b128 v128 v129 v130 v131, v145 offset:16384 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v112 v113 v114 v115, 0 + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v116 v117 v118 v119, 0 + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v120 v121 v122 v123, 0 + v_add_lshl_u32 v002, v090, v100, 1 + v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0x1d000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + ds_read_b128 v002 v003 v004 v005, v145 offset:17408 + v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v054 v055 v056 v057, 0 + ds_read_b128 v132 v133 v134 v135, v145 offset:18432 + v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v120 v121 v122 v123, 0 + v_add_lshl_u32 v006, v090, v101, 1 + v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0x1e000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v090, v102, 1 + ds_read_b128 v136 v137 v138 v139, v145 offset:19456 + v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v054 v055 v056 v057, 0 + ds_read_b128 v046 v047 v048 v049, v145 offset:20480 + v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v120 v121 v122 v123, 0 + v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0x1f000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v103, v090, 1 + ds_read_b128 v058 v059 v060 v061, v145 offset:21504 + v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v054 v055 v056 v057, 0 + ds_read_b128 v066 v067 v068 v069, v145 offset:22528 + v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v120 v121 v122 v123, 0 + v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0xc000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v104, v090, 1 + ds_read_b128 v070 v071 v072 v073, v146 offset:16384 + v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v054 v055 v056 v057, 0 + ds_read_b128 v062 v063 v064 v065, v146 offset:17408 + v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v120 v121 v122 v123, 0 + v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0xd000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v105, v090, 1 + ds_read_b128 v074 v075 v076 v077, v146 offset:18432 + v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v054 v055 v056 v057, 0 + ds_read_b128 v078 v079 v080 v081, v146 offset:19456 + v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v120 v121 v122 v123, 0 + v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0xe000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v106, v090, 1 + v_or_b32_e32 v111, 0x80, v111 + ds_read_b128 v082 v083 v084 v085, v146 offset:20480 + v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v054 v055 v056 v057, 0 + ds_read_b128 v086 v087 v088 v089, v146 offset:21504 + v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v120 v121 v122 v123, 0 + v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v034 v035 v036 v037, 0 + s_add_i32 s26, s21, 0xf000 + s_mov_b32 m0, s26 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v111, v098, 1 + ds_read_b128 v090 v091 v092 v093, v146 offset:22528 + v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v038 v039 v040 v041, 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v054 v055 v056 v057, 0 + ds_read_b128 v140 v141 v142 v143, v146 offset:23552 + v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v112 v113 v114 v115, 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v116 v117 v118 v119, 0 + v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v120 v121 v122 v123, 0 + s_waitcnt lgkmcnt(0) + s_barrier + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[252:255], v124 v125 v126 v127, v070 v071 v072 v073, a[252:255] + s_mov_b32 m0, s25 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v111, v100, 1 + ds_read_b128 v050 v051 v052 v053, v144 offset:32768 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[248:251], v124 v125 v126 v127, v062 v063 v064 v065, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v124 v125 v126 v127, v074 v075 v076 v077, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v124 v125 v126 v127, v078 v079 v080 v081, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v124 v125 v126 v127, v082 v083 v084 v085, a[236:239] + ds_read_b128 v042 v043 v044 v045, v145 offset:32768 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[232:235], v124 v125 v126 v127, v086 v087 v088 v089, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v124 v125 v126 v127, v090 v091 v092 v093, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v124 v125 v126 v127, v140 v141 v142 v143, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v128 v129 v130 v131, v070 v071 v072 v073, a[220:223] + s_mov_b32 m0, s24 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + ds_read_b128 v034 v035 v036 v037, v145 offset:33792 + v_mfma_f32_16x16x32_bf16 a[216:219], v128 v129 v130 v131, v062 v063 v064 v065, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v128 v129 v130 v131, v074 v075 v076 v077, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v128 v129 v130 v131, v078 v079 v080 v081, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v128 v129 v130 v131, v082 v083 v084 v085, a[204:207] + ds_read_b128 v026 v027 v028 v029, v145 offset:34816 + v_mfma_f32_16x16x32_bf16 a[200:203], v128 v129 v130 v131, v086 v087 v088 v089, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v128 v129 v130 v131, v090 v091 v092 v093, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v128 v129 v130 v131, v140 v141 v142 v143, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v070 v071 v072 v073, a[188:191] + v_add_lshl_u32 v006, v111, v101, 1 + s_mov_b32 m0, s23 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + ds_read_b128 v014 v015 v016 v017, v145 offset:35840 + v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v062 v063 v064 v065, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] + ds_read_b128 v010 v011 v012 v013, v145 offset:36864 + v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v140 v141 v142 v143, a[160:163] + v_add_lshl_u32 v002, v111, v102, 1 + v_add_lshl_u32 v018, v103, v111, 1 + v_add_lshl_u32 v030, v104, v111, 1 + v_mfma_f32_16x16x32_bf16 a[156:159], v132 v133 v134 v135, v070 v071 v072 v073, a[156:159] + s_mov_b32 m0, s17 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + ds_read_b128 v006 v007 v008 v009, v145 offset:37888 + v_mfma_f32_16x16x32_bf16 a[152:155], v132 v133 v134 v135, v062 v063 v064 v065, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v132 v133 v134 v135, v074 v075 v076 v077, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v132 v133 v134 v135, v078 v079 v080 v081, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v132 v133 v134 v135, v082 v083 v084 v085, a[140:143] + ds_read_b128 v002 v003 v004 v005, v145 offset:38912 + v_mfma_f32_16x16x32_bf16 a[136:139], v132 v133 v134 v135, v086 v087 v088 v089, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v132 v133 v134 v135, v090 v091 v092 v093, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v132 v133 v134 v135, v140 v141 v142 v143, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v136 v137 v138 v139, v070 v071 v072 v073, a[124:127] + s_mov_b32 m0, s21 + buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds + ds_read_b128 v018 v019 v020 v021, v146 offset:32768 + v_mfma_f32_16x16x32_bf16 a[120:123], v136 v137 v138 v139, v062 v063 v064 v065, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v136 v137 v138 v139, v074 v075 v076 v077, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v136 v137 v138 v139, v078 v079 v080 v081, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v136 v137 v138 v139, v082 v083 v084 v085, a[108:111] + ds_read_b128 v022 v023 v024 v025, v146 offset:33792 + v_mfma_f32_16x16x32_bf16 a[104:107], v136 v137 v138 v139, v086 v087 v088 v089, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v136 v137 v138 v139, v090 v091 v092 v093, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v136 v137 v138 v139, v140 v141 v142 v143, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v070 v071 v072 v073, a[92:95] + s_mov_b32 m0, s16 + buffer_load_dwordx4 v030, s[4:7], 0 offen sc0 lds + ds_read_b128 v030 v031 v032 v033, v146 offset:34816 + v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v062 v063 v064 v065, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v074 v075 v076 v077, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v078 v079 v080 v081, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v082 v083 v084 v085, a[76:79] + ds_read_b128 v038 v039 v040 v041, v146 offset:35840 + v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v086 v087 v088 v089, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v090 v091 v092 v093, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v140 v141 v142 v143, a[64:67] + v_add_lshl_u32 v046, v105, v111, 1 + v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v070 v071 v072 v073, a[60:63] + s_mov_b32 m0, s15 + buffer_load_dwordx4 v046, s[4:7], 0 offen sc0 lds + ds_read_b128 v046 v047 v048 v049, v146 offset:36864 + v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v062 v063 v064 v065, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] + ds_read_b128 v054 v055 v056 v057, v146 offset:37888 + v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v140 v141 v142 v143, a[32:35] + v_add_lshl_u32 v058, v106, v111, 1 + v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v070 v071 v072 v073, a[28:31] + s_mov_b32 m0, s14 + buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds + ds_read_b128 v058 v059 v060 v061, v146 offset:38912 + v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v062 v063 v064 v065, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] + ds_read_b128 v062 v063 v064 v065, v146 offset:39936 + v_lshlrev_b32_e32 v071, 5, v095 + v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v140 v141 v142 v143, a[0:3] + v_bitop3_b32 v066, v109, 3, v000 bitop3:0x48 + v_lshlrev_b32_e32 v066, 4, v066 + s_or_b32 s23, s2, 0x3fc0 + s_or_b32 s24, s2, 0xc0 + v_lshl_or_b32 v067, s3, 15, v066 + s_movk_i32 s2, 0x8100 + v_lshl_add_u32 v066, v102, 1, v067 + v_lshl_add_u32 v068, v106, 1, v067 + v_lshl_add_u32 v070, v101, 1, v067 + v_lshl_add_u32 v072, v105, 1, v067 + v_lshl_add_u32 v074, v100, 1, v067 + v_lshl_add_u32 v076, v104, 1, v067 + v_lshl_add_u32 v078, v103, 1, v067 + v_lshl_add_u32 v080, v098, 1, v067 + s_mov_b64 s[14:15], 1 + s_mov_b32 s3, -1 + v_lshlrev_b32_e32 v067, 1, v110 + v_lshlrev_b32_e32 v069, 1, v071 + s_waitcnt vmcnt(16) + s_barrier +.LBB0_1: + s_mov_b64 s[16:17], s[14:15] + s_min_i32 s15, s24, s23 + v_add_u32_e32 v082, s2, v072 + v_add_u32_e32 v083, s2, v068 + s_xor_b32 s14, s16, 1 + s_lshl_b32 s16, s16, 15 + v_add_u32_e32 v109, 0x8040, v082 + v_add_u32_e32 v154, 0x8040, v083 + v_or_b32_e32 v082, s15, v097 + s_lshl_b32 s17, s14, 15 + v_or_b32_e32 v083, s16, v096 + v_add_u32_e32 v071, s2, v080 + v_add_u32_e32 v073, s2, v074 + v_add_u32_e32 v075, s2, v070 + v_add_u32_e32 v077, s2, v066 + v_add_u32_e32 v079, s2, v078 + v_add_u32_e32 v081, s2, v076 + s_add_i32 s15, s16, s21 + v_add_lshl_u32 v162, v082, v098, 1 + v_add_lshl_u32 v163, v082, v100, 1 + v_add_lshl_u32 v164, v082, v101, 1 + v_add_lshl_u32 v165, v082, v102, 1 + v_add_lshl_u32 v166, v082, v103, 1 + v_add_lshl_u32 v167, v082, v104, 1 + v_add_lshl_u32 v168, v082, v105, 1 + v_add_lshl_u32 v169, v082, v106, 1 + s_add_i32 s16, s21, s17 + v_add_u32_e32 v082, v083, v108 + v_add_u32_e32 v126, v083, v067 + v_add3_u32 v158, v083, v069, s22 + v_or_b32_e32 v083, s17, v096 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[252:255], v050 v051 v052 v053, v018 v019 v020 v021, a[252:255] + v_add_u32_e32 v071, 0x8040, v071 + v_add_u32_e32 v073, 0x8040, v073 + v_add_u32_e32 v075, 0x8040, v075 + v_add_u32_e32 v077, 0x8040, v077 + v_add_u32_e32 v079, 0x8040, v079 + v_add_u32_e32 v081, 0x8040, v081 + s_add_i32 s31, s16, 0x4000 + s_add_i32 s33, s16, 0x14000 + s_add_i32 s34, s16, 0x5000 + s_add_i32 s35, s16, 0x15000 + s_add_i32 s36, s16, 0x6000 + s_add_i32 s37, s16, 0x16000 + s_add_i32 s38, s16, 0x7000 + s_add_i32 s16, s16, 0x17000 + v_add_u32_e32 v170, v083, v108 + v_add_u32_e32 v171, v083, v067 + v_add3_u32 v172, v083, v069, s22 + s_mov_b32 m0, s33 + buffer_load_dwordx4 v071, s[8:11], 0 offen sc0 lds + ds_read_b128 v082 v083 v084 v085, v082 offset:16384 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[248:251], v050 v051 v052 v053, v022 v023 v024 v025, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v050 v051 v052 v053, v030 v031 v032 v033, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v050 v051 v052 v053, v038 v039 v040 v041, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v050 v051 v052 v053, v046 v047 v048 v049, a[236:239] + ds_read_b128 v086 v087 v088 v089, v126 offset:16384 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[232:235], v050 v051 v052 v053, v054 v055 v056 v057, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v050 v051 v052 v053, v058 v059 v060 v061, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v050 v051 v052 v053, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] + s_mov_b32 m0, s35 + buffer_load_dwordx4 v073, s[8:11], 0 offen sc0 lds + ds_read_b128 v090 v091 v092 v093, v126 offset:17408 + v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] + ds_read_b128 v110 v111 v112 v113, v126 offset:18432 + v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v054 v055 v056 v057, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] + s_mov_b32 m0, s37 + buffer_load_dwordx4 v075, s[8:11], 0 offen sc0 lds + ds_read_b128 v114 v115 v116 v117, v126 offset:19456 + v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] + ds_read_b128 v118 v119 v120 v121, v126 offset:20480 + v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v054 v055 v056 v057, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] + s_mov_b32 m0, s16 + buffer_load_dwordx4 v077, s[8:11], 0 offen sc0 lds + ds_read_b128 v122 v123 v124 v125, v126 offset:21504 + v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] + ds_read_b128 v126 v127 v128 v129, v126 offset:22528 + v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v054 v055 v056 v057, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + s_mov_b32 m0, s31 + buffer_load_dwordx4 v079, s[4:7], 0 offen sc0 lds + ds_read_b128 v130 v131 v132 v133, v158 offset:16384 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] + ds_read_b128 v134 v135 v136 v137, v158 offset:17408 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + s_mov_b32 m0, s34 + buffer_load_dwordx4 v081, s[4:7], 0 offen sc0 lds + ds_read_b128 v138 v139 v140 v141, v158 offset:18432 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] + ds_read_b128 v142 v143 v144 v145, v158 offset:19456 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + s_mov_b32 m0, s36 + buffer_load_dwordx4 v109, s[4:7], 0 offen sc0 lds + ds_read_b128 v146 v147 v148 v149, v158 offset:20480 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] + ds_read_b128 v150 v151 v152 v153, v158 offset:21504 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + s_mov_b32 m0, s38 + buffer_load_dwordx4 v154, s[4:7], 0 offen sc0 lds + ds_read_b128 v154 v155 v156 v157, v158 offset:22528 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] + s_add_i32 s25, s15, 0x10000 + s_add_i32 s17, s15, 0x11000 + s_add_i32 s26, s15, 0x12000 + s_add_i32 s27, s15, 0x13000 + s_add_i32 s28, s15, 0x1000 + s_add_i32 s29, s15, 0x2000 + s_add_i32 s30, s15, 0x3000 + ds_read_b128 v158 v159 v160 v161, v158 offset:23552 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + s_waitcnt lgkmcnt(0) + s_barrier + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[252:255], v082 v083 v084 v085, v130 v131 v132 v133, a[252:255] + s_mov_b32 m0, s25 + buffer_load_dwordx4 v162, s[8:11], 0 offen sc0 lds + ds_read_b128 v050 v051 v052 v053, v170 + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[248:251], v082 v083 v084 v085, v134 v135 v136 v137, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v082 v083 v084 v085, v138 v139 v140 v141, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v082 v083 v084 v085, v142 v143 v144 v145, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v082 v083 v084 v085, v146 v147 v148 v149, a[236:239] + ds_read_b128 v042 v043 v044 v045, v171 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[232:235], v082 v083 v084 v085, v150 v151 v152 v153, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v082 v083 v084 v085, v154 v155 v156 v157, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v082 v083 v084 v085, v158 v159 v160 v161, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v086 v087 v088 v089, v130 v131 v132 v133, a[220:223] + s_mov_b32 m0, s17 + buffer_load_dwordx4 v163, s[8:11], 0 offen sc0 lds + ds_read_b128 v034 v035 v036 v037, v171 offset:1024 + v_mfma_f32_16x16x32_bf16 a[216:219], v086 v087 v088 v089, v134 v135 v136 v137, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v086 v087 v088 v089, v138 v139 v140 v141, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v086 v087 v088 v089, v142 v143 v144 v145, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v086 v087 v088 v089, v146 v147 v148 v149, a[204:207] + ds_read_b128 v026 v027 v028 v029, v171 offset:2048 + v_mfma_f32_16x16x32_bf16 a[200:203], v086 v087 v088 v089, v150 v151 v152 v153, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v086 v087 v088 v089, v154 v155 v156 v157, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v086 v087 v088 v089, v158 v159 v160 v161, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v090 v091 v092 v093, v130 v131 v132 v133, a[188:191] + s_mov_b32 m0, s26 + buffer_load_dwordx4 v164, s[8:11], 0 offen sc0 lds + ds_read_b128 v014 v015 v016 v017, v171 offset:3072 + v_mfma_f32_16x16x32_bf16 a[184:187], v090 v091 v092 v093, v134 v135 v136 v137, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v090 v091 v092 v093, v138 v139 v140 v141, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v090 v091 v092 v093, v142 v143 v144 v145, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v090 v091 v092 v093, v146 v147 v148 v149, a[172:175] + ds_read_b128 v010 v011 v012 v013, v171 offset:4096 + v_mfma_f32_16x16x32_bf16 a[168:171], v090 v091 v092 v093, v150 v151 v152 v153, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v090 v091 v092 v093, v154 v155 v156 v157, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v090 v091 v092 v093, v158 v159 v160 v161, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v110 v111 v112 v113, v130 v131 v132 v133, a[156:159] + s_mov_b32 m0, s27 + buffer_load_dwordx4 v165, s[8:11], 0 offen sc0 lds + ds_read_b128 v006 v007 v008 v009, v171 offset:5120 + v_mfma_f32_16x16x32_bf16 a[152:155], v110 v111 v112 v113, v134 v135 v136 v137, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v110 v111 v112 v113, v138 v139 v140 v141, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v110 v111 v112 v113, v142 v143 v144 v145, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v110 v111 v112 v113, v146 v147 v148 v149, a[140:143] + ds_read_b128 v002 v003 v004 v005, v171 offset:6144 + v_mfma_f32_16x16x32_bf16 a[136:139], v110 v111 v112 v113, v150 v151 v152 v153, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v110 v111 v112 v113, v154 v155 v156 v157, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v110 v111 v112 v113, v158 v159 v160 v161, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v114 v115 v116 v117, v130 v131 v132 v133, a[124:127] + s_mov_b32 m0, s15 + buffer_load_dwordx4 v166, s[4:7], 0 offen sc0 lds + ds_read_b128 v018 v019 v020 v021, v172 + v_mfma_f32_16x16x32_bf16 a[120:123], v114 v115 v116 v117, v134 v135 v136 v137, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v114 v115 v116 v117, v138 v139 v140 v141, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v114 v115 v116 v117, v142 v143 v144 v145, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v114 v115 v116 v117, v146 v147 v148 v149, a[108:111] + ds_read_b128 v022 v023 v024 v025, v172 offset:1024 + v_mfma_f32_16x16x32_bf16 a[104:107], v114 v115 v116 v117, v150 v151 v152 v153, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v114 v115 v116 v117, v154 v155 v156 v157, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v114 v115 v116 v117, v158 v159 v160 v161, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v118 v119 v120 v121, v130 v131 v132 v133, a[92:95] + s_mov_b32 m0, s28 + buffer_load_dwordx4 v167, s[4:7], 0 offen sc0 lds + ds_read_b128 v030 v031 v032 v033, v172 offset:2048 + v_mfma_f32_16x16x32_bf16 a[88:91], v118 v119 v120 v121, v134 v135 v136 v137, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v118 v119 v120 v121, v138 v139 v140 v141, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v118 v119 v120 v121, v142 v143 v144 v145, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v118 v119 v120 v121, v146 v147 v148 v149, a[76:79] + ds_read_b128 v038 v039 v040 v041, v172 offset:3072 + v_mfma_f32_16x16x32_bf16 a[72:75], v118 v119 v120 v121, v150 v151 v152 v153, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v118 v119 v120 v121, v154 v155 v156 v157, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v118 v119 v120 v121, v158 v159 v160 v161, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v122 v123 v124 v125, v130 v131 v132 v133, a[60:63] + s_mov_b32 m0, s29 + buffer_load_dwordx4 v168, s[4:7], 0 offen sc0 lds + ds_read_b128 v046 v047 v048 v049, v172 offset:4096 + v_mfma_f32_16x16x32_bf16 a[56:59], v122 v123 v124 v125, v134 v135 v136 v137, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v122 v123 v124 v125, v138 v139 v140 v141, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v122 v123 v124 v125, v142 v143 v144 v145, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v122 v123 v124 v125, v146 v147 v148 v149, a[44:47] + ds_read_b128 v054 v055 v056 v057, v172 offset:5120 + v_mfma_f32_16x16x32_bf16 a[40:43], v122 v123 v124 v125, v150 v151 v152 v153, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v122 v123 v124 v125, v154 v155 v156 v157, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v122 v123 v124 v125, v158 v159 v160 v161, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v126 v127 v128 v129, v130 v131 v132 v133, a[28:31] + s_mov_b32 m0, s30 + buffer_load_dwordx4 v169, s[4:7], 0 offen sc0 lds + ds_read_b128 v058 v059 v060 v061, v172 offset:6144 + v_mfma_f32_16x16x32_bf16 a[24:27], v126 v127 v128 v129, v134 v135 v136 v137, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v126 v127 v128 v129, v138 v139 v140 v141, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v126 v127 v128 v129, v142 v143 v144 v145, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v126 v127 v128 v129, v146 v147 v148 v149, a[12:15] + ds_read_b128 v062 v063 v064 v065, v172 offset:7168 + v_mfma_f32_16x16x32_bf16 a[8:11], v126 v127 v128 v129, v150 v151 v152 v153, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v126 v127 v128 v129, v154 v155 v156 v157, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v126 v127 v128 v129, v158 v159 v160 v161, a[0:3] + s_add_i32 s24, s24, 64 + s_add_u32 s2, s2, 0x80 + s_addc_u32 s3, s3, 0 + s_cmp_lg_u64 s[2:3], 0 + s_waitcnt vmcnt(16) + s_barrier +.JUMP.LBB0_1: + s_cbranch_scc1 .LBB0_1 + s_load_dwordx2 s[0:1], s[0:1], 0x0 + s_lshl_b32 s4, s14, 14 + s_lshl_b32 s4, s4, 1 + v_add3_u32 v067, v108, s4, v096 + s_waitcnt lgkmcnt(0) + v_mfma_f32_16x16x32_bf16 a[252:255], v050 v051 v052 v053, v018 v019 v020 v021, a[252:255] + ds_read_b128 v068 v069 v070 v071, v067 offset:16384 + v_add3_u32 v067, v107, s4, v096 + v_mfma_f32_16x16x32_bf16 a[248:251], v050 v051 v052 v053, v022 v023 v024 v025, a[248:251] + v_mfma_f32_16x16x32_bf16 a[244:247], v050 v051 v052 v053, v030 v031 v032 v033, a[244:247] + v_mfma_f32_16x16x32_bf16 a[240:243], v050 v051 v052 v053, v038 v039 v040 v041, a[240:243] + v_mfma_f32_16x16x32_bf16 a[236:239], v050 v051 v052 v053, v046 v047 v048 v049, a[236:239] + ds_read_b128 v072 v073 v074 v075, v067 offset:16384 + v_mfma_f32_16x16x32_bf16 a[232:235], v050 v051 v052 v053, v054 v055 v056 v057, a[232:235] + v_mfma_f32_16x16x32_bf16 a[228:231], v050 v051 v052 v053, v058 v059 v060 v061, a[228:231] + v_mfma_f32_16x16x32_bf16 a[224:227], v050 v051 v052 v053, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] + ds_read_b128 v076 v077 v078 v079, v067 offset:17408 + v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] + ds_read_b128 v080 v081 v082 v083, v067 offset:18432 + v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v054 v055 v056 v057, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] + ds_read_b128 v084 v085 v086 v087, v067 offset:19456 + v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] + ds_read_b128 v050 v051 v052 v053, v067 offset:20480 + v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v054 v055 v056 v057, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] + ds_read_b128 v042 v043 v044 v045, v067 offset:21504 + v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] + ds_read_b128 v034 v035 v036 v037, v067 offset:22528 + v_add3_u32 v067, v099, s4, v096 + s_mov_b32 s3, 0x27000 + s_mov_b32 s2, -1 + s_and_b32 s1, s1, 0xffff + v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v054 v055 v056 v057, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + ds_read_b128 v026 v027 v028 v029, v067 offset:16384 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] + ds_read_b128 v088 v089 v090 v091, v067 offset:17408 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + ds_read_b128 v014 v015 v016 v017, v067 offset:18432 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] + ds_read_b128 v096 v097 v098 v099, v067 offset:19456 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + ds_read_b128 v010 v011 v012 v013, v067 offset:20480 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] + ds_read_b128 v100 v101 v102 v103, v067 offset:21504 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + ds_read_b128 v006 v007 v008 v009, v067 offset:22528 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] + ds_read_b128 v018 v019 v020 v021, v067 offset:23552 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + v_or_b32_e32 v066, 0x70, v001 + s_waitcnt lgkmcnt(0) + s_barrier + s_waitcnt lgkmcnt(7) + v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v026 v027 v028 v029, a[252:255] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v096 v097 v098 v099, a[240:243] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v100 v101 v102 v103, a[232:235] + s_waitcnt lgkmcnt(1) + v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] + s_waitcnt lgkmcnt(0) + v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v026 v027 v028 v029, a[220:223] + v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v096 v097 v098 v099, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] + v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v100 v101 v102 v103, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v026 v027 v028 v029, a[188:191] + v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v096 v097 v098 v099, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] + v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v100 v101 v102 v103, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v026 v027 v028 v029, a[156:159] + v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v096 v097 v098 v099, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] + v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v100 v101 v102 v103, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v026 v027 v028 v029, a[124:127] + v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v096 v097 v098 v099, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] + v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v100 v101 v102 v103, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v050 v051 v052 v053, v026 v027 v028 v029, a[92:95] + v_mfma_f32_16x16x32_bf16 a[88:91], v050 v051 v052 v053, v088 v089 v090 v091, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v050 v051 v052 v053, v014 v015 v016 v017, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v050 v051 v052 v053, v096 v097 v098 v099, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v050 v051 v052 v053, v010 v011 v012 v013, a[76:79] + v_mfma_f32_16x16x32_bf16 a[72:75], v050 v051 v052 v053, v100 v101 v102 v103, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v050 v051 v052 v053, v006 v007 v008 v009, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v050 v051 v052 v053, v018 v019 v020 v021, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v042 v043 v044 v045, v026 v027 v028 v029, a[60:63] + v_mfma_f32_16x16x32_bf16 a[56:59], v042 v043 v044 v045, v088 v089 v090 v091, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v042 v043 v044 v045, v014 v015 v016 v017, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v042 v043 v044 v045, v096 v097 v098 v099, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v042 v043 v044 v045, v010 v011 v012 v013, a[44:47] + v_mfma_f32_16x16x32_bf16 a[40:43], v042 v043 v044 v045, v100 v101 v102 v103, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v042 v043 v044 v045, v006 v007 v008 v009, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v042 v043 v044 v045, v018 v019 v020 v021, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v034 v035 v036 v037, v026 v027 v028 v029, a[28:31] + v_mfma_f32_16x16x32_bf16 a[24:27], v034 v035 v036 v037, v088 v089 v090 v091, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v034 v035 v036 v037, v014 v015 v016 v017, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v034 v035 v036 v037, v096 v097 v098 v099, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v034 v035 v036 v037, v010 v011 v012 v013, a[12:15] + v_mfma_f32_16x16x32_bf16 a[8:11], v034 v035 v036 v037, v100 v101 v102 v103, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v034 v035 v036 v037, v006 v007 v008 v009, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v034 v035 v036 v037, v018 v019 v020 v021, a[0:3] + v_lshlrev_b32_e32 v002, 2, v094 + v_accvgpr_read_b32 v003, a252 + v_and_or_b32 v004, v002, 12, v001 + v_cvt_pk_bf16_f32 v005, v003, s0 + v_lshlrev_b32_e32 v003, 1, v095 + v_lshl_or_b32 v004, v004, 9, v003 + s_barrier + ds_write_b16 v004, v005 + v_accvgpr_read_b32 v005, a253 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:512 + v_accvgpr_read_b32 v005, a254 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1024 + v_accvgpr_read_b32 v005, a255 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1536 + v_accvgpr_read_b32 v005, a248 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:32 + v_accvgpr_read_b32 v005, a249 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:544 + v_accvgpr_read_b32 v005, a250 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1056 + v_accvgpr_read_b32 v005, a251 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1568 + v_accvgpr_read_b32 v005, a244 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:64 + v_accvgpr_read_b32 v005, a245 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:576 + v_accvgpr_read_b32 v005, a246 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1088 + v_accvgpr_read_b32 v005, a247 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1600 + v_accvgpr_read_b32 v005, a240 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:96 + v_accvgpr_read_b32 v005, a241 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:608 + v_accvgpr_read_b32 v005, a242 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1120 + v_accvgpr_read_b32 v005, a243 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1632 + v_accvgpr_read_b32 v005, a236 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:128 + v_accvgpr_read_b32 v005, a237 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:640 + v_accvgpr_read_b32 v005, a238 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1152 + v_accvgpr_read_b32 v005, a239 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1664 + v_accvgpr_read_b32 v005, a232 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:160 + v_accvgpr_read_b32 v005, a233 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:672 + v_accvgpr_read_b32 v005, a234 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1184 + v_accvgpr_read_b32 v005, a235 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1696 + v_accvgpr_read_b32 v005, a228 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:192 + v_accvgpr_read_b32 v005, a229 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:704 + v_accvgpr_read_b32 v005, a230 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1216 + v_accvgpr_read_b32 v005, a231 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1728 + v_accvgpr_read_b32 v005, a224 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:224 + v_accvgpr_read_b32 v005, a225 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:736 + v_accvgpr_read_b32 v005, a226 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1248 + v_accvgpr_read_b32 v005, a227 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:1760 + v_accvgpr_read_b32 v005, a220 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8192 + v_accvgpr_read_b32 v005, a221 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8704 + v_accvgpr_read_b32 v005, a222 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9216 + v_accvgpr_read_b32 v005, a223 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9728 + v_accvgpr_read_b32 v005, a216 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8224 + v_accvgpr_read_b32 v005, a217 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8736 + v_accvgpr_read_b32 v005, a218 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9248 + v_accvgpr_read_b32 v005, a219 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9760 + v_accvgpr_read_b32 v005, a212 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8256 + v_accvgpr_read_b32 v005, a213 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8768 + v_accvgpr_read_b32 v005, a214 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9280 + v_accvgpr_read_b32 v005, a215 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9792 + v_accvgpr_read_b32 v005, a208 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8288 + v_accvgpr_read_b32 v005, a209 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8800 + v_accvgpr_read_b32 v005, a210 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9312 + v_accvgpr_read_b32 v005, a211 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9824 + v_accvgpr_read_b32 v005, a204 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8320 + v_accvgpr_read_b32 v005, a205 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8832 + v_accvgpr_read_b32 v005, a206 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9344 + v_accvgpr_read_b32 v005, a207 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9856 + v_accvgpr_read_b32 v005, a200 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8352 + v_accvgpr_read_b32 v005, a201 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8864 + v_accvgpr_read_b32 v005, a202 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9376 + v_accvgpr_read_b32 v005, a203 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9888 + v_accvgpr_read_b32 v005, a196 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8384 + v_accvgpr_read_b32 v005, a197 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8896 + v_accvgpr_read_b32 v005, a198 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9408 + v_accvgpr_read_b32 v005, a199 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9920 + v_accvgpr_read_b32 v005, a192 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8416 + v_accvgpr_read_b32 v005, a193 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:8928 + v_accvgpr_read_b32 v005, a194 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9440 + v_accvgpr_read_b32 v005, a195 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:9952 + v_accvgpr_read_b32 v005, a188 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16384 + v_accvgpr_read_b32 v005, a189 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16896 + v_accvgpr_read_b32 v005, a190 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17408 + v_accvgpr_read_b32 v005, a191 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17920 + v_accvgpr_read_b32 v005, a184 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16416 + v_accvgpr_read_b32 v005, a185 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16928 + v_accvgpr_read_b32 v005, a186 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17440 + v_accvgpr_read_b32 v005, a187 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17952 + v_accvgpr_read_b32 v005, a180 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16448 + v_accvgpr_read_b32 v005, a181 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16960 + v_accvgpr_read_b32 v005, a182 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17472 + v_accvgpr_read_b32 v005, a183 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17984 + v_accvgpr_read_b32 v005, a176 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16480 + v_accvgpr_read_b32 v005, a177 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16992 + v_accvgpr_read_b32 v005, a178 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17504 + v_accvgpr_read_b32 v005, a179 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:18016 + v_accvgpr_read_b32 v005, a172 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16512 + v_accvgpr_read_b32 v005, a173 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17024 + v_accvgpr_read_b32 v005, a174 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17536 + v_accvgpr_read_b32 v005, a175 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:18048 + v_accvgpr_read_b32 v005, a168 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16544 + v_accvgpr_read_b32 v005, a169 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17056 + v_accvgpr_read_b32 v005, a170 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17568 + v_accvgpr_read_b32 v005, a171 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:18080 + v_accvgpr_read_b32 v005, a164 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16576 + v_accvgpr_read_b32 v005, a165 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17088 + v_accvgpr_read_b32 v005, a166 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17600 + v_accvgpr_read_b32 v005, a167 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:18112 + v_accvgpr_read_b32 v005, a160 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:16608 + v_accvgpr_read_b32 v005, a161 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17120 + v_accvgpr_read_b32 v005, a162 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:17632 + v_accvgpr_read_b32 v005, a163 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v004, v005 offset:18144 + v_or3_b32 v001, v001, 48, v002 + v_accvgpr_read_b32 v005, a156 + v_cvt_pk_bf16_f32 v005, v005, s0 + v_lshl_or_b32 v001, v001, 9, v003 + ds_write_b16 v001, v005 + v_accvgpr_read_b32 v005, a157 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:512 + v_accvgpr_read_b32 v005, a158 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1024 + v_accvgpr_read_b32 v005, a159 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1536 + v_accvgpr_read_b32 v005, a152 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:32 + v_accvgpr_read_b32 v005, a153 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:544 + v_accvgpr_read_b32 v005, a154 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1056 + v_accvgpr_read_b32 v005, a155 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1568 + v_accvgpr_read_b32 v005, a148 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:64 + v_accvgpr_read_b32 v005, a149 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:576 + v_accvgpr_read_b32 v005, a150 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1088 + v_accvgpr_read_b32 v005, a151 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1600 + v_accvgpr_read_b32 v005, a144 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:96 + v_accvgpr_read_b32 v005, a145 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:608 + v_accvgpr_read_b32 v005, a146 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1120 + v_accvgpr_read_b32 v005, a147 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1632 + v_accvgpr_read_b32 v005, a140 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:128 + v_accvgpr_read_b32 v005, a141 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:640 + v_accvgpr_read_b32 v005, a142 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1152 + v_accvgpr_read_b32 v005, a143 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1664 + v_accvgpr_read_b32 v005, a136 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:160 + v_accvgpr_read_b32 v005, a137 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:672 + v_accvgpr_read_b32 v005, a138 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1184 + v_accvgpr_read_b32 v005, a139 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1696 + v_accvgpr_read_b32 v005, a132 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:192 + v_accvgpr_read_b32 v005, a133 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:704 + v_accvgpr_read_b32 v005, a134 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1216 + v_accvgpr_read_b32 v005, a135 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1728 + v_accvgpr_read_b32 v005, a128 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:224 + v_accvgpr_read_b32 v005, a129 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:736 + v_accvgpr_read_b32 v005, a130 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1248 + v_accvgpr_read_b32 v005, a131 + v_cvt_pk_bf16_f32 v005, v005, s0 + ds_write_b16 v001, v005 offset:1760 + v_accvgpr_read_b32 v001, a124 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32768 + v_accvgpr_read_b32 v001, a125 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33280 + v_accvgpr_read_b32 v001, a126 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33792 + v_accvgpr_read_b32 v001, a127 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34304 + v_accvgpr_read_b32 v001, a120 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32800 + v_accvgpr_read_b32 v001, a121 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33312 + v_accvgpr_read_b32 v001, a122 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33824 + v_accvgpr_read_b32 v001, a123 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34336 + v_accvgpr_read_b32 v001, a116 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32832 + v_accvgpr_read_b32 v001, a117 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33344 + v_accvgpr_read_b32 v001, a118 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33856 + v_accvgpr_read_b32 v001, a119 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34368 + v_accvgpr_read_b32 v001, a112 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32864 + v_accvgpr_read_b32 v001, a113 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33376 + v_accvgpr_read_b32 v001, a114 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33888 + v_accvgpr_read_b32 v001, a115 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34400 + v_accvgpr_read_b32 v001, a108 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32896 + v_accvgpr_read_b32 v001, a109 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33408 + v_accvgpr_read_b32 v001, a110 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33920 + v_accvgpr_read_b32 v001, a111 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34432 + v_accvgpr_read_b32 v001, a104 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32928 + v_accvgpr_read_b32 v001, a105 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33440 + v_accvgpr_read_b32 v001, a106 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33952 + v_accvgpr_read_b32 v001, a107 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34464 + v_accvgpr_read_b32 v001, a100 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32960 + v_accvgpr_read_b32 v001, a101 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33472 + v_accvgpr_read_b32 v001, a102 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33984 + v_accvgpr_read_b32 v001, a103 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34496 + v_accvgpr_read_b32 v001, a96 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:32992 + v_accvgpr_read_b32 v001, a97 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:33504 + v_accvgpr_read_b32 v001, a98 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34016 + v_accvgpr_read_b32 v001, a99 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:34528 + v_accvgpr_read_b32 v001, a92 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:40960 + v_accvgpr_read_b32 v001, a93 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41472 + v_accvgpr_read_b32 v001, a94 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41984 + v_accvgpr_read_b32 v001, a95 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42496 + v_accvgpr_read_b32 v001, a88 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:40992 + v_accvgpr_read_b32 v001, a89 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41504 + v_accvgpr_read_b32 v001, a90 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42016 + v_accvgpr_read_b32 v001, a91 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42528 + v_accvgpr_read_b32 v001, a84 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41024 + v_accvgpr_read_b32 v001, a85 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41536 + v_accvgpr_read_b32 v001, a86 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42048 + v_accvgpr_read_b32 v001, a87 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42560 + v_accvgpr_read_b32 v001, a80 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41056 + v_accvgpr_read_b32 v001, a81 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41568 + v_accvgpr_read_b32 v001, a82 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42080 + v_accvgpr_read_b32 v001, a83 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42592 + v_accvgpr_read_b32 v001, a76 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41088 + v_accvgpr_read_b32 v001, a77 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41600 + v_accvgpr_read_b32 v001, a78 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42112 + v_accvgpr_read_b32 v001, a79 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42624 + v_accvgpr_read_b32 v001, a72 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41120 + v_accvgpr_read_b32 v001, a73 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41632 + v_accvgpr_read_b32 v001, a74 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42144 + v_accvgpr_read_b32 v001, a75 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42656 + v_accvgpr_read_b32 v001, a68 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41152 + v_accvgpr_read_b32 v001, a69 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41664 + v_accvgpr_read_b32 v001, a70 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42176 + v_accvgpr_read_b32 v001, a71 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42688 + v_accvgpr_read_b32 v001, a64 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41184 + v_accvgpr_read_b32 v001, a65 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:41696 + v_accvgpr_read_b32 v001, a66 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42208 + v_accvgpr_read_b32 v001, a67 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:42720 + v_accvgpr_read_b32 v001, a60 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49152 + v_accvgpr_read_b32 v001, a61 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49664 + v_accvgpr_read_b32 v001, a62 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50176 + v_accvgpr_read_b32 v001, a63 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50688 + v_accvgpr_read_b32 v001, a56 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49184 + v_accvgpr_read_b32 v001, a57 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49696 + v_accvgpr_read_b32 v001, a58 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50208 + v_accvgpr_read_b32 v001, a59 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50720 + v_accvgpr_read_b32 v001, a52 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49216 + v_accvgpr_read_b32 v001, a53 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49728 + v_accvgpr_read_b32 v001, a54 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50240 + v_accvgpr_read_b32 v001, a55 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50752 + v_accvgpr_read_b32 v001, a48 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49248 + v_accvgpr_read_b32 v001, a49 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49760 + v_accvgpr_read_b32 v001, a50 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50272 + v_accvgpr_read_b32 v001, a51 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50784 + v_accvgpr_read_b32 v001, a44 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49280 + v_accvgpr_read_b32 v001, a45 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49792 + v_accvgpr_read_b32 v001, a46 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50304 + v_accvgpr_read_b32 v001, a47 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50816 + v_accvgpr_read_b32 v001, a40 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49312 + v_accvgpr_read_b32 v001, a41 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49824 + v_accvgpr_read_b32 v001, a42 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50336 + v_accvgpr_read_b32 v001, a43 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50848 + v_accvgpr_read_b32 v001, a36 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49344 + v_accvgpr_read_b32 v001, a37 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49856 + v_accvgpr_read_b32 v001, a38 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50368 + v_accvgpr_read_b32 v001, a39 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50880 + v_accvgpr_read_b32 v001, a32 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49376 + v_accvgpr_read_b32 v001, a33 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:49888 + v_accvgpr_read_b32 v001, a34 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50400 + v_accvgpr_read_b32 v001, a35 + v_cvt_pk_bf16_f32 v001, v001, s0 + ds_write_b16 v004, v001 offset:50912 + v_or_b32_e32 v001, v002, v066 + v_accvgpr_read_b32 v002, a28 + v_cvt_pk_bf16_f32 v002, v002, s0 + v_lshl_or_b32 v001, v001, 9, v003 + ds_write_b16 v001, v002 + v_accvgpr_read_b32 v002, a29 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:512 + v_accvgpr_read_b32 v002, a30 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1024 + v_accvgpr_read_b32 v002, a31 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1536 + v_accvgpr_read_b32 v002, a24 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:32 + v_accvgpr_read_b32 v002, a25 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:544 + v_accvgpr_read_b32 v002, a26 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1056 + v_accvgpr_read_b32 v002, a27 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1568 + v_accvgpr_read_b32 v002, a20 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:64 + v_accvgpr_read_b32 v002, a21 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:576 + v_accvgpr_read_b32 v002, a22 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1088 + v_accvgpr_read_b32 v002, a23 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1600 + v_accvgpr_read_b32 v002, a16 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:96 + v_accvgpr_read_b32 v002, a17 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:608 + v_accvgpr_read_b32 v002, a18 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1120 + v_accvgpr_read_b32 v002, a19 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1632 + v_accvgpr_read_b32 v002, a12 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:128 + v_accvgpr_read_b32 v002, a13 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:640 + v_accvgpr_read_b32 v002, a14 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1152 + v_accvgpr_read_b32 v002, a15 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1664 + v_accvgpr_read_b32 v002, a8 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:160 + v_accvgpr_read_b32 v002, a9 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:672 + v_accvgpr_read_b32 v002, a10 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1184 + v_accvgpr_read_b32 v002, a11 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1696 + v_accvgpr_read_b32 v002, a4 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:192 + v_accvgpr_read_b32 v002, a5 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:704 + v_accvgpr_read_b32 v002, a6 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1216 + v_accvgpr_read_b32 v002, a7 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1728 + v_accvgpr_read_b32 v002, a0 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:224 + v_accvgpr_read_b32 v002, a1 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:736 + v_accvgpr_read_b32 v002, a2 + v_cvt_pk_bf16_f32 v002, v002, s0 + ds_write_b16 v001, v002 offset:1248 + v_accvgpr_read_b32 v002, a3 + v_cvt_pk_bf16_f32 v002, v002, s0 + v_lshrrev_b32_e32 v004, 5, v000 + ds_write_b16 v001, v002 offset:1760 + v_or_b32_e32 v002, s20, v004 + v_mov_b32_e32 v003, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 + v_lshlrev_b32_e32 v003, 3, v000 + s_waitcnt lgkmcnt(0) + s_barrier + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_4: + s_cbranch_execz .LBB0_4 + v_and_b32_e32 v000, 0xf8, v003 + v_lshlrev_b32_e32 v001, 1, v000 + v_lshl_or_b32 v001, v004, 9, v001 + ds_read_b128 v006 v007 v008 v009, v001 + v_or_b32_e32 v000, s18, v000 + v_lshlrev_b32_e32 v001, 14, v002 + v_lshl_add_u32 v000, v000, 1, v001 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_4: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_6: + s_cbranch_execz .LBB0_6 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_6: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 16, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_8: + s_cbranch_execz .LBB0_8 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_8: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 24, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_10: + s_cbranch_execz .LBB0_10 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_10: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 32, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_12: + s_cbranch_execz .LBB0_12 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_12: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 40, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_14: + s_cbranch_execz .LBB0_14 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_14: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 48, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_16: + s_cbranch_execz .LBB0_16 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_16: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 56, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_18: + s_cbranch_execz .LBB0_18 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_18: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 64, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_20: + s_cbranch_execz .LBB0_20 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_20: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x48, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_22: + s_cbranch_execz .LBB0_22 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_22: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x50, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_24: + s_cbranch_execz .LBB0_24 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_24: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x58, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_26: + s_cbranch_execz .LBB0_26 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_26: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x60, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_28: + s_cbranch_execz .LBB0_28 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_28: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x68, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_30: + s_cbranch_execz .LBB0_30 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_30: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x70, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_32: + s_cbranch_execz .LBB0_32 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_32: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x78, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_34: + s_cbranch_execz .LBB0_34 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_34: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x80, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_36: + s_cbranch_execz .LBB0_36 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_36: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x88, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_38: + s_cbranch_execz .LBB0_38 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_38: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x90, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_40: + s_cbranch_execz .LBB0_40 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_40: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0x98, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_42: + s_cbranch_execz .LBB0_42 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_42: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xa0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_44: + s_cbranch_execz .LBB0_44 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_44: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xa8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_46: + s_cbranch_execz .LBB0_46 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_46: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xb0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_48: + s_cbranch_execz .LBB0_48 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_48: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xb8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_50: + s_cbranch_execz .LBB0_50 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_50: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xc0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_52: + s_cbranch_execz .LBB0_52 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_52: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xc8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_54: + s_cbranch_execz .LBB0_54 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_54: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xd0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_56: + s_cbranch_execz .LBB0_56 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_56: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xd8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_58: + s_cbranch_execz .LBB0_58 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_58: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xe0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_60: + s_cbranch_execz .LBB0_60 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_60: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xe8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_62: + s_cbranch_execz .LBB0_62 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_62: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xf0, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_64: + s_cbranch_execz .LBB0_64 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v005, 1, v001 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_64: + s_or_b64 exec, exec, s[4:5] + v_or_b32_e32 v002, 0xf8, v004 + v_or_b32_e32 v000, s20, v002 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 + s_and_saveexec_b64 s[4:5], vcc +.JUMP.LBB0_66: + s_cbranch_execz .LBB0_66 + v_and_b32_e32 v001, 0xf8, v003 + v_lshlrev_b32_e32 v003, 1, v001 + v_lshl_or_b32 v002, v002, 9, v003 + ds_read_b128 v002 v003 v004 v005, v002 + v_or_b32_e32 v001, s18, v001 + v_lshlrev_b32_e32 v000, 14, v000 + v_lshl_add_u32 v000, v001, 1, v000 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen +.LBB0_66: + s_endpgm +.Lfunc_end0: + .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 + .p2alignl 6, 3212836864 + .fill 256, 4, 3212836864 + .section .AMDGPU.gpr_maximums,"",@progbits + .set amdgpu.max_num_vgpr, 0 + .set amdgpu.max_num_agpr, 0 + .set amdgpu.max_num_sgpr, 0 + .set amdgpu.max_num_named_barrier, 0 + .text + .section ".note.GNU-stack","",@progbits + .amdgpu_metadata +--- +amdhsa.kernels: + - .agpr_count: 256 + .args: + - .address_space: global + .offset: 0 + .size: 8 + .value_kind: global_buffer + - .offset: 8 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 24 + .size: 8 + .value_kind: global_buffer + - .offset: 32 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 48 + .size: 8 + .value_kind: global_buffer + - .offset: 56 + .size: 16 + .value_kind: by_value + - .address_space: global + .offset: 72 + .size: 8 + .value_kind: global_buffer + - .offset: 80 + .size: 16 + .value_kind: by_value + - .offset: 96 + .size: 4 + .value_kind: by_value + - .address_space: global + .offset: 104 + .size: 8 + .value_kind: global_buffer + - .offset: 112 + .size: 4 + .value_kind: by_value + - .address_space: global + .offset: 120 + .size: 8 + .value_kind: global_buffer + - .offset: 128 + .size: 4 + .value_kind: by_value + .group_segment_fixed_size: 131072 + .kernarg_segment_align: 8 + .kernarg_segment_size: 132 + .max_flat_workgroup_size: 256 + .name: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .private_segment_fixed_size: 0 + .reqd_workgroup_size: + - 256 + - 1 + - 1 + .sgpr_count: 45 + .sgpr_spill_count: 0 + .symbol: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.kd + .uniform_work_group_size: 1 + .uses_dynamic_stack: false + .vgpr_count: 432 + .vgpr_spill_count: 0 + .wavefront_size: 64 +amdhsa.target: amdgcn-amd-amdhsa--gfx950 +amdhsa.version: + - 1 + - 2 +... + .end_amdgpu_metadata From a5612526492796f5ba106fb548b10bbc91586afa Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 17 Jun 2026 12:41:57 +0000 Subject: [PATCH 070/118] Add hotloop-table skill + bf16 hgemm RP1 hot-loop table Standardize hot-loop inspection: reduce a kernel's main loop ISA to M=v_mfma, r=ds_read, L=buffer_load, B=s_barrier, one per line plus a single-char stream summary. Includes the table for the 1117 TFLOPS bf16 hgemm RP1 kernel; its stream MLrMMMMrMMMM...B... shows loads/reads tucked into MFMA co-issue shadows with no front-loaded wall. Co-Authored-By: Claude Opus 4 (1M context) --- .claude/skills/hotloop-table/SKILL.md | 63 ++++++ .../hotloop-table/scripts/hotloop_table.py | 126 ++++++++++++ .../hgemm_bf16_rp1_1117tflops_hotloop.txt | 184 ++++++++++++++++++ 3 files changed, 373 insertions(+) create mode 100644 .claude/skills/hotloop-table/SKILL.md create mode 100644 .claude/skills/hotloop-table/scripts/hotloop_table.py create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt diff --git a/.claude/skills/hotloop-table/SKILL.md b/.claude/skills/hotloop-table/SKILL.md new file mode 100644 index 000000000..2a9dd1e74 --- /dev/null +++ b/.claude/skills/hotloop-table/SKILL.md @@ -0,0 +1,63 @@ +--- +name: hotloop-table +description: Generate a compact hot-loop instruction table from a kernel's AMDGCN ISA, reduced to the three GEMM-scheduling ops (v_mfma=M, ds_read=r, buffer_load=L) plus s_barrier=B, one per line with a single-char stream summary. Use when inspecting or comparing how MFMA / LDS-read / global-load prefetch are interleaved in a GEMM/attention main loop, or when the user asks for a "hotloop table" / "指令排布表". +--- + +# Hot-loop Table + +Standardize how we look at a kernel's steady-state main loop: collapse the ISA to +only the ops that matter for GEMM scheduling and show their interleaving. + +## Tags (only these three ops + barrier) + +| Tag | Instruction | Role | +|-----|-------------|------| +| `M` | `v_mfma_*` | matrix multiply-accumulate (compute) | +| `r` | `ds_read_*` | LDS -> register (S2R operand load) | +| `L` | `buffer_load_*` | global -> LDS/VGPR prefetch (G2S) | +| `B` | `s_barrier` | half / loop boundary | + +Everything else (address calc, `s_waitcnt`, salu, valu) is dropped so the M/r/L +interleaving and the barrier-delimited halves are obvious. + +## Input: a "pure" ISA + +Best run on a cleaned ISA. Produce one with benenzhu/learn-hip `gen_pure.py` +(strips comments/debug, inlines `.loc`, labels `s_cbranch` targets, expands +`v[a:b]` ranges, zero-pads vgpr numbers): + +```bash +curl -sL https://raw.githubusercontent.com/benenzhu/learn-hip/main/gen_pure.py -o /tmp/gen_pure.py +python /tmp/gen_pure.py _final_isa.s # writes <...>final_isa.spure.s +``` + +Get the raw ISA from a FlyDSL compile with `FLYDSL_DUMP_IR=1` (file +`/_0/21_final_isa.s`). + +## Generate the table + +```bash +python .claude/skills/hotloop-table/scripts/hotloop_table.py \ + --out _hotloop.txt --compact +``` + +- Auto-detects the main loop as the most-MFMA-heavy backward `s_cbranch` body. + Override with `--loop-label .LBB0_1` if needed. +- `--compact` appends a one-char-per-op `stream:` line, e.g. + `MLrMMMMrMMMMLrMMMMrMMMM...B...B` — read it to judge interleaving at a glance: + a leading run like `LLLLrrrr` before any `M` means a front-loaded load/read + wall (bad); `MLrMMMM` repeating means loads/reads are tucked into MFMA + co-issue shadows (good). + +## Header reports per-loop counts + +`Per loop: M=128 r=32 L=16 B=2` — sanity-check against the kernel: e.g. a +256x256 bf16 tile, 4 waves, BK64 (2 K-steps) gives 2x64 MFMA, 2x16 ds_read, +2x8 buffer_load, 2 barriers per loop. + +## Reporting + +Lead with the `stream:` line and the per-loop counts; point out any leading wall +or uneven half. Commit the generated `_hotloop.txt` next to the ISA +snapshot under `resource_inspect/snapshots/` so loops can be diffed across +optimization steps. diff --git a/.claude/skills/hotloop-table/scripts/hotloop_table.py b/.claude/skills/hotloop-table/scripts/hotloop_table.py new file mode 100644 index 000000000..631da53a1 --- /dev/null +++ b/.claude/skills/hotloop-table/scripts/hotloop_table.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +"""Generate a compact hot-loop instruction table from a (pure) AMDGCN ISA file. + +Reduces the steady-state main loop to the three memory/compute ops that drive +GEMM scheduling, one per line, using single-letter tags: + + M = v_mfma_* (matrix multiply-accumulate) + r = ds_read_* (LDS -> register, S2R) + L = buffer_load_* (global -> LDS/VGPR prefetch, G2S) + B = s_barrier (half / loop boundary) + +All other instructions (address calc, waitcnt, salu, valu) are dropped so the +M/r/L interleaving and the barrier-delimited halves are visible at a glance. + +Usage: + hotloop_table.py [--loop-label .LBB0_1] [--out table.txt] + [--compact] # also emit a one-char-per-op stream line + +If --loop-label is omitted, the script auto-detects the main loop as the body +between the most-branched-to backward label and its s_cbranch. +""" +import argparse +import re +import sys +from collections import Counter + +TAGS = [ + ("M", re.compile(r"^\s*v_mfma")), + ("r", re.compile(r"^\s*ds_read")), + ("L", re.compile(r"^\s*buffer_load")), + ("B", re.compile(r"^\s*s_barrier")), +] + + +def classify(line: str): + for tag, pat in TAGS: + if pat.match(line): + return tag + return None + + +def find_main_loop(lines): + # Pick the backward branch target that a s_cbranch jumps to, preferring the + # one whose body contains the most v_mfma (the steady-state K loop). + labels = {l.strip().rstrip(":"): i for i, l in enumerate(lines) if re.match(r"^\.\w", l.strip()) and l.strip().endswith(":")} + best = None + for i, l in enumerate(lines): + m = re.search(r"s_cbranch\w*\s+(\.\S+)", l) + if not m: + continue + tgt = m.group(1) + if tgt in labels and labels[tgt] < i: + start = labels[tgt] + body = lines[start : i + 1] + nmfma = sum(1 for b in body if b.strip().startswith("v_mfma")) + if best is None or nmfma > best[0]: + best = (nmfma, tgt, start, i) + if best is None: + raise SystemExit("could not auto-detect a backward loop; pass --loop-label") + return best[1], best[2], best[3] + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("isa") + ap.add_argument("--loop-label", default=None) + ap.add_argument("--out", default=None) + ap.add_argument("--compact", action="store_true") + args = ap.parse_args() + + lines = open(args.isa).read().splitlines() + + if args.loop_label: + labels = {l.strip().rstrip(":"): i for i, l in enumerate(lines) if l.strip().endswith(":")} + start = labels[args.loop_label] + end = next(i for i, l in enumerate(lines) if i > start and "s_cbranch" in l and args.loop_label in l) + label = args.loop_label + else: + label, start, end = find_main_loop(lines) + + body = lines[start : end + 1] + seq = [] # (tag, operands-summary) + counts = Counter() + for l in body: + tag = classify(l) + if tag is None: + continue + counts[tag] += 1 + s = l.strip() + # keep just mnemonic + first dst operand for context + parts = s.split(None, 1) + mnem = parts[0] + rest = parts[1].split(";")[0].strip() if len(parts) > 1 else "" + dst = rest.split(",")[0].strip() if rest else "" + seq.append((tag, mnem, dst)) + + out = [] + out.append(f"Hot-loop table for main loop {label} (ISA: {args.isa})") + out.append("Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier") + out.append( + f"Per loop: M={counts['M']} r={counts['r']} L={counts['L']} B={counts['B']}" + ) + out.append("=" * 60) + half = 0 + for tag, mnem, dst in seq: + if tag == "B": + out.append(f"B -------- barrier (end of half {half}) --------") + half += 1 + else: + out.append(f"{tag} {mnem:28s} {dst}") + + if args.compact: + stream = "".join(t for t, _, _ in seq) + out.append("=" * 60) + out.append("stream: " + stream) + + text = "\n".join(out) + "\n" + if args.out: + open(args.out, "w").write(text) + print(f"wrote {args.out} ({len(seq)} ops)") + else: + sys.stdout.write(text) + + +if __name__ == "__main__": + main() diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt new file mode 100644 index 000000000..fb0b7f9bf --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt @@ -0,0 +1,184 @@ +Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s) +Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier +Per loop: M=128 r=32 L=16 B=2 +============================================================ +M v_mfma_f32_16x16x32_bf16 a[252:255] +L buffer_load_dwordx4 v071 +r ds_read_b128 v082 v083 v084 v085 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v086 v087 v088 v089 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v073 +r ds_read_b128 v090 v091 v092 v093 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v110 v111 v112 v113 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +M v_mfma_f32_16x16x32_bf16 a[188:191] +L buffer_load_dwordx4 v075 +r ds_read_b128 v114 v115 v116 v117 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v118 v119 v120 v121 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +L buffer_load_dwordx4 v077 +r ds_read_b128 v122 v123 v124 v125 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v126 v127 v128 v129 +M v_mfma_f32_16x16x32_bf16 a[136:139] +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +L buffer_load_dwordx4 v079 +r ds_read_b128 v130 v131 v132 v133 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +r ds_read_b128 v134 v135 v136 v137 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +L buffer_load_dwordx4 v081 +r ds_read_b128 v138 v139 v140 v141 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v142 v143 v144 v145 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +L buffer_load_dwordx4 v109 +r ds_read_b128 v146 v147 v148 v149 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v150 v151 v152 v153 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +L buffer_load_dwordx4 v154 +r ds_read_b128 v154 v155 v156 v157 +M v_mfma_f32_16x16x32_bf16 a[24:27] +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v158 v159 v160 v161 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 0) -------- +M v_mfma_f32_16x16x32_bf16 a[252:255] +L buffer_load_dwordx4 v162 +r ds_read_b128 v050 v051 v052 v053 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v042 v043 v044 v045 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v163 +r ds_read_b128 v034 v035 v036 v037 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v026 v027 v028 v029 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +M v_mfma_f32_16x16x32_bf16 a[188:191] +L buffer_load_dwordx4 v164 +r ds_read_b128 v014 v015 v016 v017 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v010 v011 v012 v013 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +L buffer_load_dwordx4 v165 +r ds_read_b128 v006 v007 v008 v009 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v002 v003 v004 v005 +M v_mfma_f32_16x16x32_bf16 a[136:139] +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +L buffer_load_dwordx4 v166 +r ds_read_b128 v018 v019 v020 v021 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +r ds_read_b128 v022 v023 v024 v025 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +L buffer_load_dwordx4 v167 +r ds_read_b128 v030 v031 v032 v033 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v038 v039 v040 v041 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +L buffer_load_dwordx4 v168 +r ds_read_b128 v046 v047 v048 v049 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v054 v055 v056 v057 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +L buffer_load_dwordx4 v169 +r ds_read_b128 v058 v059 v060 v061 +M v_mfma_f32_16x16x32_bf16 a[24:27] +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v062 v063 v064 v065 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 1) -------- +============================================================ +stream: MLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB From 6b3e67dc71768ffc9593087eef1d4671709cccb3 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 03:18:04 +0000 Subject: [PATCH 071/118] Tighten RP1 tail vmcnt to provably-safe bound (LDG_WAIT_COUNT//2) s_waitcnt vmcnt(N) waits until <= N VMEM loads remain in flight: smaller N is safer (more loads forced to land), larger N is faster but risks reading not-yet-landed data. The loop-tail read (next_stage K0, prefetched 2 tiles ago) has only one k-group of newer bfld issued before it (LDG_WAIT_COUNT//2 = 8 loads), so 8 is the largest N that still guarantees the target batch landed. Was 16 (=full LDG_WAIT_COUNT), which equals "don't wait" since a loop only issues 16 loads -- correct only by luck of lead-2 timing. Perf identical (tail vmcnt isn't the bottleneck): 8192x8192x16384 ~1131 TFLOPS, cos 0.99999. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index dfc0153a0..caf49bbd1 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -250,10 +250,15 @@ def compile_hgemm_kernel( LDG_REG_B_COUNT_AS = BLOCK_NK_SIZE // LDG_ASYNC_VEC_SIZE // BLOCK_THREADS LDG_WAIT_COUNT = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS assert ((STAGES - 2) * LDG_WAIT_COUNT) < 63 - # RP1: how many in-flight global loads to leave un-drained at the loop tail. - # The next-read K0 was prefetched 2 tiles earlier (lead 2), so one k-group's - # worth (LDG_WAIT_COUNT) may stay in flight without a read-before-write hazard. - RP1_TAIL_VMCNT = LDG_WAIT_COUNT + # RP1: vmcnt(N) at the loop tail = "wait until <= N VMEM loads are in flight". + # Smaller N is safer (forces more loads to land) but slower; larger N is faster + # but risks reading not-yet-landed data. The tile read next (next_stage K0) was + # prefetched 2 tiles earlier; between that bfld and this read only one k-group's + # worth of newer bfld is issued (LDG_WAIT_COUNT // 2 loads), so that is the + # largest N that still guarantees the target batch has landed. Perf is identical + # to the looser LDG_WAIT_COUNT (the tail vmcnt is not the bottleneck), so use the + # tighter, provably-safe bound. + RP1_TAIL_VMCNT = LDG_WAIT_COUNT // 2 # A is consumed one K32 slice at a time. Store A in a K32-blocked LDS view # when the shape supports it. For the gfx950 256x256x64 path this makes # each async A chunk 64x32 instead of 32x64. From 3fbb4cbb4236f57062c3d2b578a07922a57a3028 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 03:30:23 +0000 Subject: [PATCH 072/118] Make both RP1 half barriers carry vmcnt(8) + lgkmcnt(0) for provable safety Each of the two half barriers per loop now syncs both memory classes. Per-half analysis: every half issues a ds_read of a globally-prefetched LDS block (needs vmcnt to guarantee the bfld landed) AND writes LDS that another wave overwrites next iteration (needs lgkmcnt(0)+s_barrier for cross-wave WAR/visibility). The previous code only put vmcnt on the half-1 tail and lgkmcnt(0) on the half-0 barrier, so each guarded only one of the two ds_reads -- correct only by lead-2 timing luck. Unify both to vmcnt(LDG_WAIT_COUNT//2)+lgkmcnt(0)+s_barrier. Perf unchanged (barriers aren't the bottleneck): 8192x8192x16384 ~1129 TFLOPS, cos 0.99999; small-shape 512x512x4096 max_abs 0.001. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index caf49bbd1..0b91ff7b6 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -391,11 +391,17 @@ def __barrier(vmcnt=0, use_s_barrier=True): asm = f"s_waitcnt vmcnt({vmcnt})" llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) - def __barrier_lgkmcnt(use_s_barrier=True): + def __barrier_lgkmcnt(use_s_barrier=True, vmcnt=None): + # vmcnt is None -> LDS-only sync; otherwise also bound in-flight global + # loads. Both RP1 half barriers carry vmcnt + lgkmcnt(0): each half has a + # ds_read of a globally-prefetched block (needs vmcnt to ensure the bfld + # landed) and writes LDS that another wave will overwrite next iter + # (needs lgkmcnt(0)+s_barrier for cross-wave WAR/visibility). + wait = "s_waitcnt lgkmcnt(0)" if vmcnt is None else f"s_waitcnt vmcnt({vmcnt}) lgkmcnt(0)" if const_expr(use_s_barrier): - asm = "s_waitcnt lgkmcnt(0)\n\ts_barrier" + asm = wait + "\n\ts_barrier" else: - asm = "s_waitcnt lgkmcnt(0)" + asm = wait llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) def get_llvm_ptr(ptr, offset, dtype_bytes, ptr_type=ir.Type.parse("!llvm.ptr<1>")): @@ -985,7 +991,7 @@ def make_bfld_tasks(k_offset, lds_stage, k_group): a0_frags, b0_frags, k1_idx, zero_acc=init_zero, bfld_tasks=h1_bfld ) - __barrier_lgkmcnt() + __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) # half-2: bfld the tile-after-next's K0 (lead 2) dripped into the MFMAs; # compute K1 while reading the NEXT tile's K0 group (from @@ -1105,7 +1111,7 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch ) hot_loop_scheduler_register_prefetch(tail_prefetch_initial=True) next_stage_init = arith.constant(1 % STAGES, index=True) - __barrier(RP1_TAIL_VMCNT) + __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) init_state = ( [ks_begin + fx.Int32(BLOCK_K), next_stage_init] @@ -1143,7 +1149,7 @@ def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch ) k_offset_next = k_offset + fx.Int32(BLOCK_K) hot_loop_scheduler_register_prefetch(prefetched_initial=True, tail_prefetch_initial=True) - __barrier(RP1_TAIL_VMCNT) + __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) results = ( yield [k_offset_next, next_stage] + c_frags_new + carry_a0_next + carry_b0_next ) From 8c65b6423b0e13149c617dc34f9539529096d5a2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 03:53:23 +0000 Subject: [PATCH 073/118] Add A/B coarse preshuffle ([256,BLOCK_K] tiles contiguous) to bf16 hgemm PRESHUFFLE flag: host pre-permutes A and B_T so each [256, BLOCK_K] tile is physically contiguous in global memory ([R,K]->[R/256,K/BK,256,BK]); the kernel maps logical (row,col) to the shuffled linear offset via preshuffle_off. A row-major tile load then hits one contiguous run instead of 256 strided segments, so the global->LDS DMAs coalesce and hit L1/L2 lines. ATT (8192x8192x16320): cycles_per_mfma16 2.21 -> 1.41, half-0 buffer_load stall 1804 -> 212; both halves are now MFMA-bound. Wall clock 1266 -> 1309 TFLOPS, cos 0.99999. B is a weight so its preshuffle is offline/free; A preshuffle is applied on the host here for the benchmark. Co-Authored-By: Claude Opus 4 (1M context) --- experiments/bf16_gemm_single_block.py | 28 +++++++++++++++++++++++++-- kernels/hgemm_splitk.py | 26 +++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/experiments/bf16_gemm_single_block.py b/experiments/bf16_gemm_single_block.py index 757c924b3..6e847bf1d 100644 --- a/experiments/bf16_gemm_single_block.py +++ b/experiments/bf16_gemm_single_block.py @@ -110,6 +110,15 @@ def assert_no_spills() -> None: print(f"spill_check=ok isa={isa_path}") +def preshuffle_rows_k(t: torch.Tensor, tile_row: int, tile_k: int) -> torch.Tensor: + """Permute a row-major [R, K] tensor so each [tile_row, tile_k] block is + physically contiguous: [R, K] -> [R//tr, K//tk, tr, tk] -> flat. Matches the + kernel's preshuffle_off mapping (PRESHUFFLE=True).""" + r, k = t.shape[-2:] + assert r % tile_row == 0 and k % tile_k == 0, f"need R%{tile_row}==0 K%{tile_k}==0, got R={r} K={k}" + return t.reshape(r // tile_row, tile_row, k // tile_k, tile_k).permute(0, 2, 1, 3).contiguous().view(r, k) + + def make_inputs(m: int, n: int, k: int, *, skip_init: bool) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: device = torch.device("cuda") if skip_init: @@ -188,10 +197,16 @@ def main() -> None: action="store_true", help="Enable the experimental K32-blocked LDS layout for B.", ) + parser.add_argument( + "--preshuffle", + action="store_true", + help="Preshuffle A/B so each [256, BLOCK_K] tile is contiguous in global memory.", + ) args = parser.parse_args() HGEMM_KWARGS["A_LDS_K32_BLOCKING"] = bool(args.a_lds_k32_blocking) HGEMM_KWARGS["B_LDS_K32_BLOCKING"] = bool(args.b_lds_k32_blocking) HGEMM_KWARGS["K32_REGISTER_PIPELINE"] = bool(args.k32_register_pipeline) + HGEMM_KWARGS["PRESHUFFLE"] = bool(args.preshuffle) if not torch.cuda.is_available(): raise RuntimeError("CUDA/ROCm device is not available") @@ -212,8 +227,17 @@ def main() -> None: a, b, c = make_inputs(args.m, args.n, args.k, skip_init=args.skip_init) b_t = b.t().contiguous() if not args.skip_init else torch.empty((args.n, args.k), device=b.device, dtype=b.dtype) + # The kernel consumes preshuffled A / B_T; the reference check below still uses + # the original a / b, so correctness is validated against the true GEMM. + tile_k = int(HGEMM_KWARGS["TILE_K"]) + if args.preshuffle: + a_k = preshuffle_rows_k(a, 256, tile_k) + b_t_k = preshuffle_rows_k(b_t, 256, tile_k) + else: + a_k, b_t_k = a, b_t + # First call compiles and launches the fixed-shape FlyDSL kernel. - run_kernel(c, a, b_t) + run_kernel(c, a_k, b_t_k) torch.cuda.synchronize() assert_no_spills() @@ -222,7 +246,7 @@ def main() -> None: if not args.no_check and not args.skip_init: max_abs, cos = check_result(c, a, b) - us = time_kernel(c, a, b_t, warmup=args.warmup, iters=args.iters) + us = time_kernel(c, a_k, b_t_k, warmup=args.warmup, iters=args.iters) tflops = (2.0 * args.m * args.n * args.k) / (us * 1.0e-6) / 1.0e12 print(f"arch={get_rocm_arch()}") diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 0b91ff7b6..fa3621e0e 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -153,6 +153,7 @@ def compile_hgemm_kernel( A_LDS_K32_BLOCKING: bool = False, B_LDS_K32_BLOCKING: bool = False, K32_REGISTER_PIPELINE: bool = False, + PRESHUFFLE: bool = False, HAS_BIAS: bool = False, ): assert BLOCK_M_WARPS * BLOCK_N_WARPS * BLOCK_K_WARPS <= 16 @@ -337,6 +338,21 @@ def hgemm_kernel( A_ = GTensor(A, dtype=dtype_, shape=(-1, k)) B_ = GTensor(B, dtype=dtype_, shape=(n, k)) + + # Preshuffle: A/B are pre-permuted on the host so each [TILE_ROW, BLOCK_K] + # tile is physically contiguous in global memory. A row-major load of a + # tile then hits one contiguous run instead of TILE_ROW strided segments, + # improving L1/L2 line utilization. Map a logical (row, col) coordinate to + # the shuffled linear element offset. + _PRESH_TK = BLOCK_K # K granularity of a contiguous tile + _K_TILES_SH = k // _PRESH_TK + + def preshuffle_off(row, col, tile_row): + tm = row // tile_row + mi = row % tile_row + tk = col // _PRESH_TK + ki = col % _PRESH_TK + return ((tm * _K_TILES_SH + tk) * tile_row + mi) * _PRESH_TK + ki C_ = GTensor(C, dtype=dtype_, shape=(-1, n)) if const_expr(HAS_BIAS): BIAS_ = GTensor(BIAS, dtype=dtype_, shape=(n,)) @@ -592,7 +608,10 @@ def ldg_sts_a_async_one(k_offset, lds_stage, i): row_idx, fx.Index(0), ) - global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES + if const_expr(PRESHUFFLE): + global_offset = preshuffle_off(safe_row_idx, col_idx, BLOCK_M) * DTYPE_BYTES + else: + global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) @@ -626,7 +645,10 @@ def ldg_sts_b_async_one(k_offset, lds_stage, i): row_idx, fx.Index(0), ) - global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES + if const_expr(PRESHUFFLE): + global_offset = preshuffle_off(safe_row_idx, col_idx, BLOCK_N) * DTYPE_BYTES + else: + global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) From 9987b5c8dd3e08aad08d4f7898850c10de738e76 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 06:38:05 +0000 Subject: [PATCH 074/118] Add pure ISA + hotloop table for preshuffle bf16 hgemm (~1313 TFLOPS) Cleaned (gen_pure.py) ISA and the M/r/L/B hotloop table for the current best bf16 hgemm RP1 + A/B preshuffle kernel at 8192x8192x16320 (~1313 TFLOPS, cycles_per_mfma16 1.41, MFMA-bound). Stream MLrMMMMrMMMM...B... shows full load/read interleave with no leading wall. Co-Authored-By: Claude Opus 4 (1M context) --- ...gemm_bf16_rp1_presh_1313tflops_hotloop.txt | 184 ++ .../hgemm_bf16_rp1_presh_1313tflops_pure.s | 2457 +++++++++++++++++ 2 files changed, 2641 insertions(+) create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt new file mode 100644 index 000000000..3acabe07f --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt @@ -0,0 +1,184 @@ +Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s) +Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier +Per loop: M=128 r=32 L=16 B=2 +============================================================ +M v_mfma_f32_16x16x32_bf16 a[252:255] +L buffer_load_dwordx4 v071 +r ds_read_b128 v070 v071 v072 v073 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v074 v075 v076 v077 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v088 +r ds_read_b128 v078 v079 v080 v081 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v082 v083 v084 v085 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +M v_mfma_f32_16x16x32_bf16 a[188:191] +L buffer_load_dwordx4 v089 +r ds_read_b128 v086 v087 v088 v089 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v090 v091 v092 v093 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +L buffer_load_dwordx4 v094 +r ds_read_b128 v094 v095 v096 v097 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v130 v131 v132 v133 +M v_mfma_f32_16x16x32_bf16 a[136:139] +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +L buffer_load_dwordx4 v117 +r ds_read_b128 v134 v135 v136 v137 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +r ds_read_b128 v138 v139 v140 v141 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +L buffer_load_dwordx4 v119 +r ds_read_b128 v142 v143 v144 v145 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v146 v147 v148 v149 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +L buffer_load_dwordx4 v121 +r ds_read_b128 v150 v151 v152 v153 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v154 v155 v156 v157 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +L buffer_load_dwordx4 v069 +r ds_read_b128 v158 v159 v160 v161 +M v_mfma_f32_16x16x32_bf16 a[24:27] +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v162 v163 v164 v165 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 0) -------- +M v_mfma_f32_16x16x32_bf16 a[252:255] +L buffer_load_dwordx4 v002 +r ds_read_b128 v046 v047 v048 v049 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v038 v039 v040 v041 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v003 +r ds_read_b128 v030 v031 v032 v033 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v022 v023 v024 v025 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +M v_mfma_f32_16x16x32_bf16 a[188:191] +L buffer_load_dwordx4 v004 +r ds_read_b128 v014 v015 v016 v017 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v010 v011 v012 v013 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +L buffer_load_dwordx4 v005 +r ds_read_b128 v006 v007 v008 v009 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v002 v003 v004 v005 +M v_mfma_f32_16x16x32_bf16 a[136:139] +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +L buffer_load_dwordx4 v018 +r ds_read_b128 v018 v019 v020 v021 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +r ds_read_b128 v026 v027 v028 v029 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +L buffer_load_dwordx4 v034 +r ds_read_b128 v034 v035 v036 v037 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v042 v043 v044 v045 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +L buffer_load_dwordx4 v050 +r ds_read_b128 v050 v051 v052 v053 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v054 v055 v056 v057 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +L buffer_load_dwordx4 v058 +r ds_read_b128 v058 v059 v060 v061 +M v_mfma_f32_16x16x32_bf16 a[24:27] +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v062 v063 v064 v065 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 1) -------- +============================================================ +stream: MLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s new file mode 100644 index 000000000..651103b60 --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s @@ -0,0 +1,2457 @@ + .amdgcn_target "amdgcn-amd-amdhsa--gfx950" + .amdhsa_code_object_version 6 + .text + .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .p2align 8 + .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function +hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: +.Lfunc_begin0: + .cfi_sections .debug_frame + .cfi_startproc + .file 1 "/root/FlyDSL/kernels" "tensor_shim.py" + s_load_dword s12, s[0:1], 0x60 ;.loc 1 289 24 prologue_end + s_load_dwordx2 s[4:5], s[0:1], 0x18 + s_load_dwordx2 s[8:9], s[0:1], 0x30 + .file 2 "/root/FlyDSL/kernels" "hgemm_splitk.py" + s_ashr_i32 s14, s2, 31 ;.loc 2 382 0 + s_lshr_b32 s14, s14, 27 + s_add_i32 s14, s2, s14 + s_waitcnt lgkmcnt(0) ;.loc 1 289 24 + s_ashr_i32 s13, s12, 31 + s_and_b32 s5, s5, 0xffff + s_and_b32 s9, s9, 0xffff + s_ashr_i32 s18, s14, 5 ;.loc 2 382 0 + s_and_b32 s19, s14, 0xffffffe0 + s_cmp_lg_u32 s2, s19 + s_cselect_b64 s[14:15], -1, 0 + s_cmp_lt_i32 s2, 0 + s_cselect_b64 s[16:17], -1, 0 + s_and_b64 s[14:15], s[16:17], s[14:15] + v_lshrrev_b32_e32 v002, 6, v000 ;.loc 2 375 0 + s_subb_u32 s14, s18, 0 ;.loc 2 382 0 + s_sub_i32 s15, s2, s19 + s_lshl_b32 s18, s14, 8 ;.loc 2 388 0 + v_readfirstlane_b32 s14, v002 ;.loc 2 552 0 + s_lshl_b32 s16, s15, 8 ;.loc 2 389 0 + s_lshl_b32 s19, s14, 10 ;.loc 2 552 0 + s_mul_i32 s2, s3, 0x3fc0 ;.loc 2 386 0 + .file 3 "/root/FlyDSL/python/flydsl/expr" "numeric.py" + s_ashr_i32 s17, s18, 31 ;.loc 3 875 16 + s_ashr_i32 s3, s16, 31 + s_add_i32 s24, s19, 0x10000 ;.loc 2 583 0 + v_lshrrev_b32_e32 v002, 2, v000 ;.loc 2 626 0 + s_cmpk_lt_u32 s16, 0x2000 ;.loc 2 644 12 + v_xor_b32_e32 v003, v002, v000 ;.loc 2 630 0 + s_cselect_b64 vcc, -1, 0 ;.loc 2 644 12 + v_lshlrev_b32_e32 v003, 3, v003 ;.loc 2 630 0 + s_and_b64 s[14:15], vcc, exec ;.loc 2 643 23 + v_and_b32_e32 v105, 24, v003 ;.loc 2 630 0 + v_or_b32_e32 v003, s16, v002 ;.loc 2 642 0 + s_cselect_b32 s3, s3, 0 ;.loc 2 643 23 + v_cndmask_b32_e32 v004, 0, v003, vcc + v_mov_b32_e32 v003, s3 + v_alignbit_b32 v003, v003, v004, 8 ;.loc 2 355 0 + s_movk_i32 s28, 0xff + v_mad_u64_u32 v098 v099, s[14:15], v003, s28, 0 + v_lshlrev_b32_e32 v003, 6, v004 + s_lshr_b32 s29, s2, 6 ;.loc 2 353 0 + v_and_b32_e32 v100, 0xfc0, v003 ;.loc 2 355 0 + v_add_u32_e32 v003, s29, v098 + v_lshl_or_b32 v004, v003, 14, v100 + v_or_b32_e32 v003, v004, v105 + s_mov_b32 s7, 0x27000 + s_mov_b32 s6, -1 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 + v_or_b32_e32 v005, 64, v002 ;.loc 2 628 0 + s_mov_b32 s10, s6 ;.loc 1 289 24 + s_mov_b32 s11, s7 + s_mov_b32 m0, s24 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v003, s16, v005 ;.loc 2 642 0 + v_cndmask_b32_e32 v006, 0, v003, vcc ;.loc 2 643 23 + v_mov_b32_e32 v003, s3 + v_alignbit_b32 v003, v003, v006, 8 ;.loc 2 355 0 + v_mad_u64_u32 v102 v103, s[14:15], v003, s28, 0 + v_lshlrev_b32_e32 v003, 6, v006 + v_and_b32_e32 v104, 0x3fc0, v003 + v_add_u32_e32 v003, s29, v102 + v_lshl_or_b32 v006, v003, 14, v104 + v_or_b32_e32 v003, v006, v105 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 + v_or_b32_e32 v007, 0x80, v002 ;.loc 2 628 0 + s_add_i32 s23, s19, 0x11000 ;.loc 2 583 0 + s_mov_b32 m0, s23 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v003, s16, v007 ;.loc 2 642 0 + v_cndmask_b32_e32 v008, 0, v003, vcc ;.loc 2 643 23 + v_mov_b32_e32 v003, s3 + v_alignbit_b32 v003, v003, v008, 8 ;.loc 2 355 0 + v_mad_u64_u32 v106 v107, s[14:15], v003, s28, 0 + v_lshlrev_b32_e32 v003, 6, v008 + v_and_b32_e32 v108, 0x3fc0, v003 + v_add_u32_e32 v003, s29, v106 + v_lshl_or_b32 v008, v003, 14, v108 + v_or_b32_e32 v003, v008, v105 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 + v_or_b32_e32 v009, 0xc0, v002 ;.loc 2 628 0 + s_add_i32 s22, s19, 0x12000 ;.loc 2 583 0 + s_mov_b32 m0, s22 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v003, s16, v009 ;.loc 2 642 0 + v_cndmask_b32_e32 v010, 0, v003, vcc ;.loc 2 643 23 + v_mov_b32_e32 v003, s3 + v_alignbit_b32 v003, v003, v010, 8 ;.loc 2 355 0 + v_mad_u64_u32 v110 v111, s[14:15], v003, s28, 0 + v_lshlrev_b32_e32 v003, 6, v010 + v_and_b32_e32 v112, 0x3fc0, v003 + v_add_u32_e32 v003, s29, v110 + v_lshl_or_b32 v003, v003, 14, v112 + v_or_b32_e32 v010, v003, v105 + v_lshlrev_b32_e32 v010, 1, v010 ;.loc 2 652 24 + s_add_i32 s21, s19, 0x13000 ;.loc 2 583 0 + s_mov_b32 m0, s21 ;.loc 2 567 0 + buffer_load_dwordx4 v010, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v010, 32, v105 ;.loc 2 631 0 + v_or_b32_e32 v004, v004, v010 ;.loc 2 355 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 2 652 24 + s_add_i32 s3, s19, 0x14000 ;.loc 2 583 0 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v004, v006, v010 ;.loc 2 355 0 + s_add_i32 s3, s19, 0x15000 ;.loc 2 583 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 2 652 24 + v_or_b32_e32 v003, v003, v010 ;.loc 2 355 0 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds + s_add_i32 s3, s19, 0x16000 ;.loc 2 583 0 + v_or_b32_e32 v004, v008, v010 ;.loc 2 355 0 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 + v_lshlrev_b32_e32 v004, 1, v004 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds + s_add_i32 s3, s19, 0x17000 ;.loc 2 583 0 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v002 ;.loc 2 605 0 + v_mov_b32_e32 v003, s17 + v_mov_b32_e32 v004, s17 ;.loc 2 606 23 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 + s_add_i32 s3, s19, 0x3000 ;.loc 2 583 0 + v_and_b32_e32 v001, 0x80, v000 ;.loc 2 392 0 + v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 + v_cndmask_b32_e32 v002, 0, v002, vcc + v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 + v_mad_u64_u32 v114 v115, s[14:15], v003, s28, 0 + v_lshlrev_b32_e32 v002, 6, v002 + v_and_b32_e32 v116, 0xfc0, v002 + v_add_u32_e32 v002, s29, v114 + v_lshl_or_b32 v006, v002, 14, v116 + v_or_b32_e32 v002, v006, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_mov_b32 m0, s19 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v005 ;.loc 2 605 0 + v_mov_b32_e32 v003, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 + s_add_i32 s15, s19, 0x1000 ;.loc 2 583 0 + s_add_i32 s14, s19, 0x2000 + v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 + v_cndmask_b32_e32 v002, 0, v002, vcc + v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 + v_mad_u64_u32 v118 v119, s[26:27], v003, s28, 0 + v_lshlrev_b32_e32 v002, 6, v002 + v_and_b32_e32 v120, 0x3fc0, v002 + v_add_u32_e32 v002, s29, v118 + v_lshl_or_b32 v005, v002, 14, v120 + v_or_b32_e32 v002, v005, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_mov_b32 m0, s15 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v007 ;.loc 2 605 0 + v_mov_b32_e32 v003, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 + v_lshlrev_b32_e32 v034, 1, v000 ;.loc 2 393 0 + v_and_b32_e32 v035, 15, v000 ;.loc 2 394 0 + v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 + v_cndmask_b32_e32 v002, 0, v002, vcc + v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 + v_mad_u64_u32 v122 v123, s[26:27], v003, s28, 0 + v_lshlrev_b32_e32 v002, 6, v002 + v_and_b32_e32 v124, 0x3fc0, v002 + v_add_u32_e32 v002, s29, v122 + v_lshl_or_b32 v007, v002, 14, v124 + v_or_b32_e32 v002, v007, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_mov_b32 m0, s14 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v002, s18, v009 ;.loc 2 605 0 + v_mov_b32_e32 v003, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 + v_lshrrev_b32_e32 v101, 4, v000 ;.loc 2 395 0 + s_mov_b32 s20, 0x10000 + v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 + v_cndmask_b32_e32 v002, 0, v002, vcc + v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 + v_mad_u64_u32 v126 v127, s[26:27], v003, s28, 0 + v_lshlrev_b32_e32 v002, 6, v002 + v_and_b32_e32 v128, 0x3fc0, v002 + v_add_u32_e32 v002, s29, v126 + v_lshl_or_b32 v002, v002, 14, v128 + v_or_b32_e32 v003, v002, v105 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v003, v006, v010 ;.loc 2 355 0 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 + s_add_i32 s26, s19, 0x4000 ;.loc 2 583 0 + s_mov_b32 m0, s26 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + v_or_b32_e32 v003, v005, v010 ;.loc 2 355 0 + s_add_i32 s26, s19, 0x5000 ;.loc 2 583 0 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 + s_mov_b32 m0, s26 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + s_add_i32 s26, s19, 0x6000 ;.loc 2 583 0 + v_or_b32_e32 v003, v007, v010 ;.loc 2 355 0 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 + s_mov_b32 m0, s26 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds + s_add_i32 s26, s19, 0x7000 ;.loc 2 583 0 + v_or_b32_e32 v002, v002, v010 ;.loc 2 355 0 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_mov_b32 m0, s26 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + s_add_i32 s26, s2, 64 ;.loc 2 1046 0 + s_lshr_b32 s26, s26, 6 ;.loc 2 353 0 + v_add_lshl_u32 v002, v098, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v100, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + s_add_i32 s27, s19, 0x18000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v102, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v104, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + s_add_i32 s27, s19, 0x19000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v106, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v108, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + s_add_i32 s27, s19, 0x1a000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v110, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v112, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + s_add_i32 s27, s19, 0x1b000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v002, v114, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v116, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_add_i32 s27, s19, 0x8000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v118, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v120, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_add_i32 s27, s19, 0x9000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v122, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v124, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_add_i32 s27, s19, 0xa000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v002, v126, s26, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v128, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 + s_movk_i32 s25, 0x80 + v_or_b32_e32 v113, s2, v105 ;.loc 2 631 0 + s_add_i32 s27, s19, 0xb000 ;.loc 2 583 0 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds + v_xor_b32_e32 v002, v101, v000 ;.loc 2 701 0 + v_lshlrev_b32_e32 v002, 4, v002 + v_and_b32_e32 v103, 48, v002 + v_lshlrev_b32_e32 v002, 5, v000 ;.loc 2 702 0 + v_and_b32_e32 v002, 0x11e0, v002 + v_and_or_b32 v099, v034, s25, v035 ;.loc 2 713 0 + s_add_i32 s25, s2, 0x60 ;.loc 2 631 0 + v_lshlrev_b32_e32 v111, 1, v002 ;.loc 1 317 12 + v_or3_b32 v006, v001, v035, 16 ;.loc 2 696 0 + v_mov_b32_e32 v034, 0x10000 ;.loc 1 317 12 + s_lshr_b32 s28, s25, 6 ;.loc 2 353 0 + v_or_b32_e32 v117, v111, v103 ;.loc 1 317 12 + v_lshlrev_b32_e32 v109, 6, v006 + v_lshl_or_b32 v107, v099, 6, v034 + v_bitop3_b32 v090, v105, 56, s25 bitop3:0xc8 ;.loc 2 354 0 + v_add_lshl_u32 v034, v098, s28, 14 ;.loc 2 355 0 + s_waitcnt vmcnt(0) ;.loc 2 408 0 + s_barrier + ds_read_b128 v002 v003 v004 v005, v117 ;.loc 1 317 12 + v_or_b32_e32 v119, v109, v103 + v_or_b32_e32 v121, v107, v103 + v_or3_b32 v034, v034, v100, v090 ;.loc 2 355 0 + v_lshlrev_b32_e32 v115, 5, v006 ;.loc 2 702 0 + ds_read_b128 v006 v007 v008 v009, v119 ;.loc 1 317 12 + ds_read_b128 v010 v011 v012 v013, v119 offset:1024 + ds_read_b128 v014 v015 v016 v017, v119 offset:2048 + ds_read_b128 v018 v019 v020 v021, v119 offset:3072 + ds_read_b128 v022 v023 v024 v025, v119 offset:4096 + ds_read_b128 v026 v027 v028 v029, v119 offset:5120 + ds_read_b128 v030 v031 v032 v033, v119 offset:6144 + ds_read_b128 v038 v039 v040 v041, v121 + ds_read_b128 v042 v043 v044 v045, v121 offset:1024 + ds_read_b128 v046 v047 v048 v049, v121 offset:2048 + ds_read_b128 v054 v055 v056 v057, v121 offset:3072 + ds_read_b128 v094 v095 v096 v097, v121 offset:4096 + ds_read_b128 v130 v131 v132 v133, v121 offset:5120 + ds_read_b128 v134 v135 v136 v137, v121 offset:6144 + ds_read_b128 v138 v139 v140 v141, v121 offset:7168 + s_waitcnt lgkmcnt(7) ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v038 v039 v040 v041, 0 + s_add_i32 s27, s19, 0x1c000 ;.loc 2 583 0 + v_lshlrev_b32_e32 v034, 1, v034 ;.loc 2 652 24 + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v034, s[8:11], 0 offen sc0 lds + ds_read_b128 v142 v143 v144 v145, v117 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v042 v043 v044 v045, 0 + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v046 v047 v048 v049, 0 + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v054 v055 v056 v057, 0 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v094 v095 v096 v097, 0 + ds_read_b128 v146 v147 v148 v149, v119 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v130 v131 v132 v133, 0 + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v134 v135 v136 v137, 0 + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v138 v139 v140 v141, 0 + v_add_lshl_u32 v002, v102, s28, 14 ;.loc 2 355 0 + v_or3_b32 v002, v002, v104, v090 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v038 v039 v040 v041, 0 ;.loc 2 977 0 + s_add_i32 s25, s19, 0x1d000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + ds_read_b128 v002 v003 v004 v005, v119 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v094 v095 v096 v097, 0 + ds_read_b128 v150 v151 v152 v153, v119 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v138 v139 v140 v141, 0 + v_add_lshl_u32 v006, v106, s28, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v108, v090 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 + v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v038 v039 v040 v041, 0 ;.loc 2 977 0 + s_add_i32 s25, s19, 0x1e000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v110, s28, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v112, v090 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 + ds_read_b128 v034 v035 v036 v037, v119 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v094 v095 v096 v097, 0 + ds_read_b128 v050 v051 v052 v053, v119 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v138 v139 v140 v141, 0 + v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v038 v039 v040 v041, 0 + s_add_i32 s25, s19, 0x1f000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v114, s28, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v116, v090 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 + ds_read_b128 v058 v059 v060 v061, v119 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v094 v095 v096 v097, 0 + ds_read_b128 v066 v067 v068 v069, v119 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v138 v139 v140 v141, 0 + v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v038 v039 v040 v041, 0 + s_add_i32 s25, s19, 0xc000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v118, s28, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v120, v090 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 + ds_read_b128 v070 v071 v072 v073, v121 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v094 v095 v096 v097, 0 + ds_read_b128 v062 v063 v064 v065, v121 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v138 v139 v140 v141, 0 + v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v038 v039 v040 v041, 0 + s_add_i32 s25, s19, 0xd000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v122, s28, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v124, v090 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 + ds_read_b128 v074 v075 v076 v077, v121 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v094 v095 v096 v097, 0 + ds_read_b128 v078 v079 v080 v081, v121 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v138 v139 v140 v141, 0 + v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v038 v039 v040 v041, 0 + s_add_i32 s25, s19, 0xe000 ;.loc 2 583 0 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + v_add_lshl_u32 v006, v126, s28, 14 ;.loc 2 355 0 + s_add_i32 s26, s2, 0x80 ;.loc 2 1124 0 + s_add_i32 s25, s19, 0xf000 ;.loc 2 583 0 + v_or3_b32 v006, v006, v128, v090 ;.loc 2 355 0 + ds_read_b128 v082 v083 v084 v085, v121 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v094 v095 v096 v097, 0 + ds_read_b128 v086 v087 v088 v089, v121 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v138 v139 v140 v141, 0 + v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v038 v039 v040 v041, 0 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds + s_lshr_b32 s25, s26, 6 ;.loc 2 353 0 + v_add_lshl_u32 v006, v098, s25, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v100, v105 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 + ds_read_b128 v090 v091 v092 v093, v121 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v042 v043 v044 v045, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v046 v047 v048 v049, 0 + v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v054 v055 v056 v057, 0 + v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v094 v095 v096 v097, 0 + ds_read_b128 v094 v095 v096 v097, v121 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v130 v131 v132 v133, 0 ;.loc 2 977 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v138 v139 v140 v141, 0 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v142 v143 v144 v145, v070 v071 v072 v073, a[252:255] + s_mov_b32 m0, s24 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v102, s25, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v104, v105 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 + ds_read_b128 v046 v047 v048 v049, v117 offset:32768 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v142 v143 v144 v145, v062 v063 v064 v065, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v142 v143 v144 v145, v074 v075 v076 v077, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v142 v143 v144 v145, v078 v079 v080 v081, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v142 v143 v144 v145, v082 v083 v084 v085, a[236:239] + ds_read_b128 v038 v039 v040 v041, v119 offset:32768 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v142 v143 v144 v145, v086 v087 v088 v089, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v142 v143 v144 v145, v090 v091 v092 v093, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v142 v143 v144 v145, v094 v095 v096 v097, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v146 v147 v148 v149, v070 v071 v072 v073, a[220:223] + s_mov_b32 m0, s23 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + v_add_lshl_u32 v006, v106, s25, 14 ;.loc 2 355 0 + v_or3_b32 v006, v006, v108, v105 + ds_read_b128 v030 v031 v032 v033, v119 offset:33792 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v146 v147 v148 v149, v062 v063 v064 v065, a[216:219] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v146 v147 v148 v149, v074 v075 v076 v077, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v146 v147 v148 v149, v078 v079 v080 v081, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v146 v147 v148 v149, v082 v083 v084 v085, a[204:207] + ds_read_b128 v022 v023 v024 v025, v119 offset:34816 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v146 v147 v148 v149, v086 v087 v088 v089, a[200:203] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v146 v147 v148 v149, v090 v091 v092 v093, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v146 v147 v148 v149, v094 v095 v096 v097, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v070 v071 v072 v073, a[188:191] + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 + s_mov_b32 m0, s22 ;.loc 2 567 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds + ds_read_b128 v014 v015 v016 v017, v119 offset:35840 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v062 v063 v064 v065, a[184:187] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] + ds_read_b128 v010 v011 v012 v013, v119 offset:36864 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v094 v095 v096 v097, a[160:163] + v_add_lshl_u32 v002, v110, s25, 14 ;.loc 2 355 0 + v_add_lshl_u32 v018, v114, s25, 14 + v_or3_b32 v002, v002, v112, v105 + v_or3_b32 v018, v018, v116, v105 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 + v_lshlrev_b32_e32 v018, 1, v018 ;.loc 2 615 24 + v_mfma_f32_16x16x32_bf16 a[156:159], v150 v151 v152 v153, v070 v071 v072 v073, a[156:159] ;.loc 2 939 0 + s_mov_b32 m0, s21 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + ds_read_b128 v006 v007 v008 v009, v119 offset:37888 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v150 v151 v152 v153, v062 v063 v064 v065, a[152:155] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v150 v151 v152 v153, v074 v075 v076 v077, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v150 v151 v152 v153, v078 v079 v080 v081, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v150 v151 v152 v153, v082 v083 v084 v085, a[140:143] + ds_read_b128 v002 v003 v004 v005, v119 offset:38912 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v150 v151 v152 v153, v086 v087 v088 v089, a[136:139] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v150 v151 v152 v153, v090 v091 v092 v093, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v150 v151 v152 v153, v094 v095 v096 v097, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v034 v035 v036 v037, v070 v071 v072 v073, a[124:127] + s_mov_b32 m0, s19 ;.loc 2 567 0 + buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds + ds_read_b128 v018 v019 v020 v021, v121 offset:32768 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v034 v035 v036 v037, v062 v063 v064 v065, a[120:123] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v034 v035 v036 v037, v074 v075 v076 v077, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v034 v035 v036 v037, v078 v079 v080 v081, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v034 v035 v036 v037, v082 v083 v084 v085, a[108:111] + ds_read_b128 v026 v027 v028 v029, v121 offset:33792 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v034 v035 v036 v037, v086 v087 v088 v089, a[104:107] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v034 v035 v036 v037, v090 v091 v092 v093, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v034 v035 v036 v037, v094 v095 v096 v097, a[96:99] + v_add_lshl_u32 v034, v118, s25, 14 ;.loc 2 355 0 + v_or3_b32 v034, v034, v120, v105 + v_lshlrev_b32_e32 v034, 1, v034 ;.loc 2 615 24 + v_mfma_f32_16x16x32_bf16 a[92:95], v050 v051 v052 v053, v070 v071 v072 v073, a[92:95] ;.loc 2 939 0 + s_mov_b32 m0, s15 ;.loc 2 567 0 + buffer_load_dwordx4 v034, s[4:7], 0 offen sc0 lds + ds_read_b128 v034 v035 v036 v037, v121 offset:34816 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v050 v051 v052 v053, v062 v063 v064 v065, a[88:91] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v050 v051 v052 v053, v074 v075 v076 v077, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v050 v051 v052 v053, v078 v079 v080 v081, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v050 v051 v052 v053, v082 v083 v084 v085, a[76:79] + ds_read_b128 v042 v043 v044 v045, v121 offset:35840 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v050 v051 v052 v053, v086 v087 v088 v089, a[72:75] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v050 v051 v052 v053, v090 v091 v092 v093, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v050 v051 v052 v053, v094 v095 v096 v097, a[64:67] + v_add_lshl_u32 v050, v122, s25, 14 ;.loc 2 355 0 + v_or3_b32 v050, v050, v124, v105 + v_lshlrev_b32_e32 v050, 1, v050 ;.loc 2 615 24 + v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v070 v071 v072 v073, a[60:63] ;.loc 2 939 0 + s_mov_b32 m0, s14 ;.loc 2 567 0 + buffer_load_dwordx4 v050, s[4:7], 0 offen sc0 lds + ds_read_b128 v050 v051 v052 v053, v121 offset:36864 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v062 v063 v064 v065, a[56:59] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] + ds_read_b128 v054 v055 v056 v057, v121 offset:37888 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v094 v095 v096 v097, a[32:35] + v_add_lshl_u32 v058, v126, s25, 14 ;.loc 2 355 0 + v_or3_b32 v058, v058, v128, v105 + v_lshlrev_b32_e32 v058, 1, v058 ;.loc 2 615 24 + v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v070 v071 v072 v073, a[28:31] ;.loc 2 939 0 + s_mov_b32 m0, s3 ;.loc 2 567 0 + buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds + ds_read_b128 v058 v059 v060 v061, v121 offset:38912 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v062 v063 v064 v065, a[24:27] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] + ds_read_b128 v062 v063 v064 v065, v121 offset:39936 ;.loc 1 317 12 + v_lshlrev_b32_e32 v070, 5, v099 ;.loc 2 719 0 + v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v094 v095 v096 v097, a[0:3] + s_add_i32 s21, s2, 0x3f80 + s_add_i32 s22, s2, 0xc0 ;.loc 2 1144 0 + v_add_u32_e32 v066, 0xa0, v113 + s_mov_b64 s[14:15], 1 + s_mov_b64 s[2:3], 0 + v_lshlrev_b32_e32 v067, 1, v115 + v_lshlrev_b32_e32 v068, 1, v070 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 + s_barrier +.LBB0_1: + s_mov_b64 s[24:25], s[14:15] ;.loc 2 0 0 is_stmt 0 + s_add_i32 s15, s22, s2 ;.loc 2 1156 31 is_stmt 1 + v_add_u32_e32 v069, s2, v066 ;.loc 3 875 16 + s_min_i32 s23, s15, s21 ;.loc 2 1156 31 + v_lshrrev_b32_e32 v070, 6, v069 ;.loc 2 353 0 + s_lshl_b32 s15, s24, 15 ;.loc 1 317 12 + s_xor_b32 s14, s24, 1 ;.loc 2 1150 0 + v_and_b32_e32 v069, 56, v069 ;.loc 2 354 0 + v_add_lshl_u32 v071, v070, v098, 14 ;.loc 2 355 0 + v_or_b32_e32 v072, s15, v103 ;.loc 1 317 12 + v_add_lshl_u32 v073, v070, v102, 14 ;.loc 2 355 0 + v_add_lshl_u32 v074, v070, v106, 14 + v_add_lshl_u32 v075, v070, v110, 14 + v_add_lshl_u32 v076, v070, v114, 14 + v_add_lshl_u32 v077, v070, v118, 14 + v_add_lshl_u32 v078, v070, v122, 14 + v_add_lshl_u32 v070, v070, v126, 14 + s_lshr_b32 s30, s23, 6 ;.loc 2 353 0 + s_lshl_b32 s24, s14, 15 ;.loc 2 582 0 + v_bitop3_b32 v079, s23, 63, v105 bitop3:0xc8 ;.loc 2 354 0 + v_or3_b32 v071, v071, v100, v069 ;.loc 2 355 0 + v_add_u32_e32 v080, v072, v111 ;.loc 1 317 12 + v_add_u32_e32 v113, v072, v067 + v_or3_b32 v073, v073, v104, v069 ;.loc 2 355 0 + v_or3_b32 v074, v074, v108, v069 + v_or3_b32 v075, v075, v112, v069 + v_or3_b32 v076, v076, v116, v069 + v_add3_u32 v115, v072, v068, s20 ;.loc 1 317 12 + v_or3_b32 v072, v077, v120, v069 ;.loc 2 355 0 + v_or3_b32 v077, v078, v124, v069 + v_or3_b32 v069, v070, v128, v069 + v_add_lshl_u32 v070, s30, v098, 14 + v_add_lshl_u32 v081, s30, v102, 14 + v_add_lshl_u32 v082, s30, v106, 14 + v_add_lshl_u32 v083, s30, v110, 14 + v_add_lshl_u32 v084, s30, v114, 14 + v_add_lshl_u32 v085, s30, v118, 14 + v_add_lshl_u32 v086, s30, v122, 14 + v_add_lshl_u32 v087, s30, v126, 14 + s_add_i32 s31, s19, s24 ;.loc 2 582 0 + v_or_b32_e32 v078, s24, v103 ;.loc 1 317 12 + v_lshlrev_b32_e32 v071, 1, v071 ;.loc 2 652 24 + v_lshlrev_b32_e32 v088, 1, v073 + v_lshlrev_b32_e32 v089, 1, v074 + v_lshlrev_b32_e32 v094, 1, v075 + v_or3_b32 v123, v070, v100, v079 ;.loc 2 355 0 + v_or3_b32 v129, v081, v104, v079 + v_or3_b32 v166, v082, v108, v079 + v_or3_b32 v167, v083, v112, v079 + v_or3_b32 v168, v084, v116, v079 + v_or3_b32 v170, v085, v120, v079 + v_or3_b32 v171, v086, v124, v079 + v_or3_b32 v172, v087, v128, v079 + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v046 v047 v048 v049, v018 v019 v020 v021, a[252:255] + s_add_i32 s15, s15, s19 ;.loc 2 582 0 + s_add_i32 s30, s31, 0x4000 + s_add_i32 s33, s31, 0x14000 ;.loc 2 583 0 + s_add_i32 s34, s31, 0x5000 ;.loc 2 582 0 + s_add_i32 s35, s31, 0x15000 ;.loc 2 583 0 + s_add_i32 s36, s31, 0x6000 ;.loc 2 582 0 + s_add_i32 s37, s31, 0x16000 ;.loc 2 583 0 + s_add_i32 s38, s31, 0x7000 ;.loc 2 582 0 + s_add_i32 s31, s31, 0x17000 ;.loc 2 583 0 + v_lshlrev_b32_e32 v117, 1, v076 ;.loc 2 615 24 + v_lshlrev_b32_e32 v119, 1, v072 + v_lshlrev_b32_e32 v121, 1, v077 + v_lshlrev_b32_e32 v069, 1, v069 + v_add_u32_e32 v125, v078, v111 ;.loc 1 317 12 + v_add_u32_e32 v127, v078, v067 + v_add3_u32 v169, v078, v068, s20 + s_mov_b32 m0, s33 ;.loc 2 567 0 + buffer_load_dwordx4 v071, s[8:11], 0 offen sc0 lds + ds_read_b128 v070 v071 v072 v073, v080 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v046 v047 v048 v049, v026 v027 v028 v029, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v046 v047 v048 v049, v034 v035 v036 v037, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v046 v047 v048 v049, v042 v043 v044 v045, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v046 v047 v048 v049, v050 v051 v052 v053, a[236:239] + ds_read_b128 v074 v075 v076 v077, v113 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v046 v047 v048 v049, v054 v055 v056 v057, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v046 v047 v048 v049, v058 v059 v060 v061, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v046 v047 v048 v049, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v038 v039 v040 v041, v018 v019 v020 v021, a[220:223] + s_mov_b32 m0, s35 ;.loc 2 567 0 + buffer_load_dwordx4 v088, s[8:11], 0 offen sc0 lds + ds_read_b128 v078 v079 v080 v081, v113 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v038 v039 v040 v041, v026 v027 v028 v029, a[216:219] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v038 v039 v040 v041, v034 v035 v036 v037, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v038 v039 v040 v041, v042 v043 v044 v045, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v038 v039 v040 v041, v050 v051 v052 v053, a[204:207] + ds_read_b128 v082 v083 v084 v085, v113 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v038 v039 v040 v041, v054 v055 v056 v057, a[200:203] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v038 v039 v040 v041, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v038 v039 v040 v041, v062 v063 v064 v065, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v030 v031 v032 v033, v018 v019 v020 v021, a[188:191] + s_mov_b32 m0, s37 ;.loc 2 567 0 + buffer_load_dwordx4 v089, s[8:11], 0 offen sc0 lds + ds_read_b128 v086 v087 v088 v089, v113 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v030 v031 v032 v033, v026 v027 v028 v029, a[184:187] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v030 v031 v032 v033, v034 v035 v036 v037, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v030 v031 v032 v033, v042 v043 v044 v045, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v030 v031 v032 v033, v050 v051 v052 v053, a[172:175] + ds_read_b128 v090 v091 v092 v093, v113 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v030 v031 v032 v033, v054 v055 v056 v057, a[168:171] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v030 v031 v032 v033, v058 v059 v060 v061, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v030 v031 v032 v033, v062 v063 v064 v065, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v022 v023 v024 v025, v018 v019 v020 v021, a[156:159] + s_mov_b32 m0, s31 ;.loc 2 567 0 + buffer_load_dwordx4 v094, s[8:11], 0 offen sc0 lds + ds_read_b128 v094 v095 v096 v097, v113 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v022 v023 v024 v025, v026 v027 v028 v029, a[152:155] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v022 v023 v024 v025, v034 v035 v036 v037, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v022 v023 v024 v025, v042 v043 v044 v045, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v022 v023 v024 v025, v050 v051 v052 v053, a[140:143] + ds_read_b128 v130 v131 v132 v133, v113 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v022 v023 v024 v025, v054 v055 v056 v057, a[136:139] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v022 v023 v024 v025, v058 v059 v060 v061, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v022 v023 v024 v025, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + s_mov_b32 m0, s30 ;.loc 2 567 0 + buffer_load_dwordx4 v117, s[4:7], 0 offen sc0 lds + ds_read_b128 v134 v135 v136 v137, v115 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v026 v027 v028 v029, a[120:123] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v034 v035 v036 v037, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v042 v043 v044 v045, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v050 v051 v052 v053, a[108:111] + ds_read_b128 v138 v139 v140 v141, v115 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + s_mov_b32 m0, s34 ;.loc 2 567 0 + buffer_load_dwordx4 v119, s[4:7], 0 offen sc0 lds + ds_read_b128 v142 v143 v144 v145, v115 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v026 v027 v028 v029, a[88:91] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v034 v035 v036 v037, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v042 v043 v044 v045, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v050 v051 v052 v053, a[76:79] + ds_read_b128 v146 v147 v148 v149, v115 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + s_mov_b32 m0, s36 ;.loc 2 567 0 + buffer_load_dwordx4 v121, s[4:7], 0 offen sc0 lds + ds_read_b128 v150 v151 v152 v153, v115 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v026 v027 v028 v029, a[56:59] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v034 v035 v036 v037, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v042 v043 v044 v045, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v050 v051 v052 v053, a[44:47] + ds_read_b128 v154 v155 v156 v157, v115 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + s_mov_b32 m0, s38 ;.loc 2 567 0 + buffer_load_dwordx4 v069, s[4:7], 0 offen sc0 lds + ds_read_b128 v158 v159 v160 v161, v115 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v026 v027 v028 v029, a[24:27] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v034 v035 v036 v037, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v042 v043 v044 v045, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v050 v051 v052 v053, a[12:15] + ds_read_b128 v162 v163 v164 v165, v115 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + v_lshlrev_b32_e32 v002, 1, v123 ;.loc 2 652 24 + v_lshlrev_b32_e32 v003, 1, v129 + v_lshlrev_b32_e32 v004, 1, v166 + v_lshlrev_b32_e32 v005, 1, v167 + v_lshlrev_b32_e32 v018, 1, v168 ;.loc 2 615 24 + v_lshlrev_b32_e32 v034, 1, v170 + v_lshlrev_b32_e32 v050, 1, v171 + v_lshlrev_b32_e32 v058, 1, v172 + s_add_i32 s23, s15, 0x10000 ;.loc 2 583 0 + s_add_i32 s24, s15, 0x11000 + s_add_i32 s25, s15, 0x12000 + s_add_i32 s26, s15, 0x13000 + s_add_i32 s27, s15, 0x1000 + s_add_i32 s28, s15, 0x2000 + s_add_i32 s29, s15, 0x3000 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v070 v071 v072 v073, v134 v135 v136 v137, a[252:255] + s_mov_b32 m0, s23 ;.loc 2 567 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds + ds_read_b128 v046 v047 v048 v049, v125 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v070 v071 v072 v073, v138 v139 v140 v141, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v070 v071 v072 v073, v142 v143 v144 v145, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v070 v071 v072 v073, v146 v147 v148 v149, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v070 v071 v072 v073, v150 v151 v152 v153, a[236:239] + ds_read_b128 v038 v039 v040 v041, v127 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v070 v071 v072 v073, v154 v155 v156 v157, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v070 v071 v072 v073, v158 v159 v160 v161, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v070 v071 v072 v073, v162 v163 v164 v165, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v074 v075 v076 v077, v134 v135 v136 v137, a[220:223] + s_mov_b32 m0, s24 ;.loc 2 567 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds + ds_read_b128 v030 v031 v032 v033, v127 offset:1024 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v074 v075 v076 v077, v138 v139 v140 v141, a[216:219] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v074 v075 v076 v077, v142 v143 v144 v145, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v074 v075 v076 v077, v146 v147 v148 v149, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v074 v075 v076 v077, v150 v151 v152 v153, a[204:207] + ds_read_b128 v022 v023 v024 v025, v127 offset:2048 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v074 v075 v076 v077, v154 v155 v156 v157, a[200:203] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v074 v075 v076 v077, v158 v159 v160 v161, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v074 v075 v076 v077, v162 v163 v164 v165, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v078 v079 v080 v081, v134 v135 v136 v137, a[188:191] + s_mov_b32 m0, s25 ;.loc 2 567 0 + buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds + ds_read_b128 v014 v015 v016 v017, v127 offset:3072 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v078 v079 v080 v081, v138 v139 v140 v141, a[184:187] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v078 v079 v080 v081, v142 v143 v144 v145, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v078 v079 v080 v081, v146 v147 v148 v149, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v078 v079 v080 v081, v150 v151 v152 v153, a[172:175] + ds_read_b128 v010 v011 v012 v013, v127 offset:4096 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v078 v079 v080 v081, v154 v155 v156 v157, a[168:171] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v078 v079 v080 v081, v158 v159 v160 v161, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v078 v079 v080 v081, v162 v163 v164 v165, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v082 v083 v084 v085, v134 v135 v136 v137, a[156:159] + s_mov_b32 m0, s26 ;.loc 2 567 0 + buffer_load_dwordx4 v005, s[8:11], 0 offen sc0 lds + ds_read_b128 v006 v007 v008 v009, v127 offset:5120 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v082 v083 v084 v085, v138 v139 v140 v141, a[152:155] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v082 v083 v084 v085, v142 v143 v144 v145, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v082 v083 v084 v085, v146 v147 v148 v149, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v082 v083 v084 v085, v150 v151 v152 v153, a[140:143] + ds_read_b128 v002 v003 v004 v005, v127 offset:6144 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v082 v083 v084 v085, v154 v155 v156 v157, a[136:139] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v082 v083 v084 v085, v158 v159 v160 v161, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v082 v083 v084 v085, v162 v163 v164 v165, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v086 v087 v088 v089, v134 v135 v136 v137, a[124:127] + s_mov_b32 m0, s15 ;.loc 2 567 0 + buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds + ds_read_b128 v018 v019 v020 v021, v169 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v086 v087 v088 v089, v138 v139 v140 v141, a[120:123] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v086 v087 v088 v089, v142 v143 v144 v145, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v086 v087 v088 v089, v146 v147 v148 v149, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v086 v087 v088 v089, v150 v151 v152 v153, a[108:111] + ds_read_b128 v026 v027 v028 v029, v169 offset:1024 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v086 v087 v088 v089, v154 v155 v156 v157, a[104:107] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v086 v087 v088 v089, v158 v159 v160 v161, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v086 v087 v088 v089, v162 v163 v164 v165, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v090 v091 v092 v093, v134 v135 v136 v137, a[92:95] + s_mov_b32 m0, s27 ;.loc 2 567 0 + buffer_load_dwordx4 v034, s[4:7], 0 offen sc0 lds + ds_read_b128 v034 v035 v036 v037, v169 offset:2048 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v090 v091 v092 v093, v138 v139 v140 v141, a[88:91] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v090 v091 v092 v093, v142 v143 v144 v145, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v090 v091 v092 v093, v146 v147 v148 v149, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v090 v091 v092 v093, v150 v151 v152 v153, a[76:79] + ds_read_b128 v042 v043 v044 v045, v169 offset:3072 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v090 v091 v092 v093, v154 v155 v156 v157, a[72:75] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v090 v091 v092 v093, v158 v159 v160 v161, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v090 v091 v092 v093, v162 v163 v164 v165, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v094 v095 v096 v097, v134 v135 v136 v137, a[60:63] + s_mov_b32 m0, s28 ;.loc 2 567 0 + buffer_load_dwordx4 v050, s[4:7], 0 offen sc0 lds + ds_read_b128 v050 v051 v052 v053, v169 offset:4096 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v094 v095 v096 v097, v138 v139 v140 v141, a[56:59] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v094 v095 v096 v097, v142 v143 v144 v145, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v094 v095 v096 v097, v146 v147 v148 v149, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v094 v095 v096 v097, v150 v151 v152 v153, a[44:47] + ds_read_b128 v054 v055 v056 v057, v169 offset:5120 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v094 v095 v096 v097, v154 v155 v156 v157, a[40:43] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v094 v095 v096 v097, v158 v159 v160 v161, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v094 v095 v096 v097, v162 v163 v164 v165, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v130 v131 v132 v133, v134 v135 v136 v137, a[28:31] + s_mov_b32 m0, s29 ;.loc 2 567 0 + buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds + ds_read_b128 v058 v059 v060 v061, v169 offset:6144 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v130 v131 v132 v133, v138 v139 v140 v141, a[24:27] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v130 v131 v132 v133, v142 v143 v144 v145, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v130 v131 v132 v133, v146 v147 v148 v149, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v130 v131 v132 v133, v150 v151 v152 v153, a[12:15] + ds_read_b128 v062 v063 v064 v065, v169 offset:7168 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v130 v131 v132 v133, v154 v155 v156 v157, a[8:11] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v130 v131 v132 v133, v158 v159 v160 v161, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v130 v131 v132 v133, v162 v163 v164 v165, a[0:3] + s_add_u32 s2, s2, 64 ;.loc 2 1144 0 + s_addc_u32 s3, s3, 0 + s_cmp_lg_u64 s[2:3], 0x3f40 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 + s_barrier +.JUMP.LBB0_1: + s_cbranch_scc1 .LBB0_1 ;.loc 2 1144 0 + s_load_dwordx2 s[0:1], s[0:1], 0x0 ;.loc 1 289 24 + s_lshl_b32 s4, s14, 14 ;.loc 1 0 0 is_stmt 0 + s_lshl_b32 s4, s4, 1 ;.loc 1 317 12 is_stmt 1 + v_add3_u32 v067, v111, s4, v103 + s_waitcnt lgkmcnt(0) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v046 v047 v048 v049, v018 v019 v020 v021, a[252:255] + ds_read_b128 v068 v069 v070 v071, v067 offset:16384 ;.loc 1 317 12 + v_add3_u32 v067, v109, s4, v103 + v_mfma_f32_16x16x32_bf16 a[248:251], v046 v047 v048 v049, v026 v027 v028 v029, a[248:251] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[244:247], v046 v047 v048 v049, v034 v035 v036 v037, a[244:247] + v_mfma_f32_16x16x32_bf16 a[240:243], v046 v047 v048 v049, v042 v043 v044 v045, a[240:243] + v_mfma_f32_16x16x32_bf16 a[236:239], v046 v047 v048 v049, v050 v051 v052 v053, a[236:239] + ds_read_b128 v072 v073 v074 v075, v067 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[232:235], v046 v047 v048 v049, v054 v055 v056 v057, a[232:235] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[228:231], v046 v047 v048 v049, v058 v059 v060 v061, a[228:231] + v_mfma_f32_16x16x32_bf16 a[224:227], v046 v047 v048 v049, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v038 v039 v040 v041, v018 v019 v020 v021, a[220:223] + ds_read_b128 v076 v077 v078 v079, v067 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v038 v039 v040 v041, v026 v027 v028 v029, a[216:219] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v038 v039 v040 v041, v034 v035 v036 v037, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v038 v039 v040 v041, v042 v043 v044 v045, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v038 v039 v040 v041, v050 v051 v052 v053, a[204:207] + ds_read_b128 v080 v081 v082 v083, v067 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v038 v039 v040 v041, v054 v055 v056 v057, a[200:203] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v038 v039 v040 v041, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v038 v039 v040 v041, v062 v063 v064 v065, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v030 v031 v032 v033, v018 v019 v020 v021, a[188:191] + ds_read_b128 v084 v085 v086 v087, v067 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v030 v031 v032 v033, v026 v027 v028 v029, a[184:187] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v030 v031 v032 v033, v034 v035 v036 v037, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v030 v031 v032 v033, v042 v043 v044 v045, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v030 v031 v032 v033, v050 v051 v052 v053, a[172:175] + ds_read_b128 v046 v047 v048 v049, v067 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v030 v031 v032 v033, v054 v055 v056 v057, a[168:171] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v030 v031 v032 v033, v058 v059 v060 v061, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v030 v031 v032 v033, v062 v063 v064 v065, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v022 v023 v024 v025, v018 v019 v020 v021, a[156:159] + ds_read_b128 v038 v039 v040 v041, v067 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v022 v023 v024 v025, v026 v027 v028 v029, a[152:155] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v022 v023 v024 v025, v034 v035 v036 v037, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v022 v023 v024 v025, v042 v043 v044 v045, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v022 v023 v024 v025, v050 v051 v052 v053, a[140:143] + ds_read_b128 v030 v031 v032 v033, v067 offset:22528 ;.loc 1 317 12 + v_add3_u32 v067, v107, s4, v103 + s_mov_b32 s3, 0x27000 + s_mov_b32 s2, -1 + s_and_b32 s1, s1, 0xffff ;.loc 1 289 24 + v_mfma_f32_16x16x32_bf16 a[136:139], v022 v023 v024 v025, v054 v055 v056 v057, a[136:139] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v022 v023 v024 v025, v058 v059 v060 v061, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v022 v023 v024 v025, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + ds_read_b128 v022 v023 v024 v025, v067 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v026 v027 v028 v029, a[120:123] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v034 v035 v036 v037, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v042 v043 v044 v045, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v050 v051 v052 v053, a[108:111] + ds_read_b128 v088 v089 v090 v091, v067 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + ds_read_b128 v014 v015 v016 v017, v067 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v026 v027 v028 v029, a[88:91] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v034 v035 v036 v037, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v042 v043 v044 v045, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v050 v051 v052 v053, a[76:79] + ds_read_b128 v092 v093 v094 v095, v067 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + ds_read_b128 v010 v011 v012 v013, v067 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v026 v027 v028 v029, a[56:59] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v034 v035 v036 v037, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v042 v043 v044 v045, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v050 v051 v052 v053, a[44:47] + ds_read_b128 v102 v103 v104 v105, v067 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + ds_read_b128 v006 v007 v008 v009, v067 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v026 v027 v028 v029, a[24:27] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v034 v035 v036 v037, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v042 v043 v044 v045, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v050 v051 v052 v053, a[12:15] + ds_read_b128 v018 v019 v020 v021, v067 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + v_or_b32_e32 v066, 0x70, v001 ;.loc 2 695 0 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 939 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v022 v023 v024 v025, a[252:255] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v092 v093 v094 v095, a[240:243] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v102 v103 v104 v105, a[232:235] + s_waitcnt lgkmcnt(1) + v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] + s_waitcnt lgkmcnt(0) + v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v022 v023 v024 v025, a[220:223] + v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v092 v093 v094 v095, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] + v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v102 v103 v104 v105, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v022 v023 v024 v025, a[188:191] + v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v092 v093 v094 v095, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] + v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v102 v103 v104 v105, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v022 v023 v024 v025, a[156:159] + v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v092 v093 v094 v095, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] + v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v102 v103 v104 v105, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v022 v023 v024 v025, a[124:127] + v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v092 v093 v094 v095, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] + v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v102 v103 v104 v105, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v022 v023 v024 v025, a[92:95] + v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v088 v089 v090 v091, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v014 v015 v016 v017, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v092 v093 v094 v095, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v010 v011 v012 v013, a[76:79] + v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v102 v103 v104 v105, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v006 v007 v008 v009, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v018 v019 v020 v021, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v038 v039 v040 v041, v022 v023 v024 v025, a[60:63] + v_mfma_f32_16x16x32_bf16 a[56:59], v038 v039 v040 v041, v088 v089 v090 v091, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v038 v039 v040 v041, v014 v015 v016 v017, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v038 v039 v040 v041, v092 v093 v094 v095, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v038 v039 v040 v041, v010 v011 v012 v013, a[44:47] + v_mfma_f32_16x16x32_bf16 a[40:43], v038 v039 v040 v041, v102 v103 v104 v105, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v038 v039 v040 v041, v006 v007 v008 v009, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v038 v039 v040 v041, v018 v019 v020 v021, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v022 v023 v024 v025, a[28:31] + v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v088 v089 v090 v091, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v014 v015 v016 v017, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v092 v093 v094 v095, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v010 v011 v012 v013, a[12:15] + v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v102 v103 v104 v105, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v006 v007 v008 v009, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v018 v019 v020 v021, a[0:3] + v_lshlrev_b32_e32 v002, 2, v101 ;.loc 2 1298 0 + v_accvgpr_read_b32 v003, a252 ;.loc 2 1308 22 + v_and_or_b32 v004, v002, 12, v001 ;.loc 2 1306 0 + v_cvt_pk_bf16_f32 v005, v003, s0 ;.loc 2 1309 0 + v_lshlrev_b32_e32 v003, 1, v099 ;.loc 1 330 12 + v_lshl_or_b32 v004, v004, 9, v003 + s_barrier ;.loc 2 1300 0 + ds_write_b16 v004, v005 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a253 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a254 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a255 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a248 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a249 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a250 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a251 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a244 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a245 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a246 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a247 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a240 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a241 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a242 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a243 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a236 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a237 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a238 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a239 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a232 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a233 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a234 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a235 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a228 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a229 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a230 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a231 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a224 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a225 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a226 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a227 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:1760 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a220 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a221 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a222 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a223 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a216 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a217 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a218 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a219 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9760 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a212 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8256 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a213 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8768 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a214 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9280 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a215 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9792 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a208 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8288 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a209 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8800 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a210 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9312 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a211 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9824 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a204 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8320 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a205 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8832 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a206 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9344 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a207 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9856 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a200 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8352 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a201 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8864 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a202 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9376 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a203 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9888 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a196 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8384 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a197 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8896 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a198 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9408 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a199 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9920 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a192 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8416 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a193 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:8928 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a194 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9440 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a195 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:9952 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a188 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16384 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a189 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16896 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a190 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17408 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a191 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17920 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a184 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16416 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a185 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16928 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a186 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17440 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a187 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17952 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a180 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16448 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a181 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16960 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a182 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17472 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a183 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17984 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a176 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16480 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a177 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16992 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a178 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17504 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a179 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:18016 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a172 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a173 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a174 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a175 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:18048 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a168 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a169 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a170 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a171 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:18080 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a164 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a165 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a166 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a167 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:18112 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a160 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:16608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a161 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a162 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:17632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a163 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v005 offset:18144 ;.loc 1 330 12 + v_or3_b32 v001, v001, 48, v002 ;.loc 2 1306 0 + v_accvgpr_read_b32 v005, a156 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 + ds_write_b16 v001, v005 + v_accvgpr_read_b32 v005, a157 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a158 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a159 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a152 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a153 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a154 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a155 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a148 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a149 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a150 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a151 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a144 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a145 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a146 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a147 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a140 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a141 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a142 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a143 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a136 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a137 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a138 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a139 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a132 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a133 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a134 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a135 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a128 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a129 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a130 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a131 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v005 offset:1760 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a124 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32768 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a125 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33280 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a126 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33792 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a127 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34304 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a120 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32800 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a121 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33312 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a122 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33824 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a123 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34336 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a116 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32832 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a117 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33344 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a118 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33856 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a119 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34368 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a112 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32864 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a113 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33376 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a114 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33888 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a115 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34400 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a108 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32896 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a109 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33408 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a110 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33920 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a111 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34432 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a104 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32928 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a105 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33440 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a106 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33952 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a107 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34464 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a100 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32960 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a101 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33472 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a102 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33984 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a103 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34496 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a96 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:32992 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a97 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:33504 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a98 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34016 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a99 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:34528 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a92 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:40960 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a93 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41472 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a94 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41984 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a95 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42496 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a88 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:40992 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a89 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41504 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a90 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42016 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a91 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42528 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a84 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41024 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a85 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41536 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a86 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42048 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a87 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42560 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a80 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41056 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a81 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41568 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a82 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42080 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a83 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42592 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a76 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41088 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a77 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41600 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a78 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42112 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a79 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42624 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a72 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41120 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a73 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41632 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a74 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42144 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a75 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42656 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a68 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41152 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a69 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41664 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a70 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42176 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a71 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42688 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a64 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41184 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a65 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:41696 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a66 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42208 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a67 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:42720 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a60 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49152 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a61 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49664 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a62 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50176 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a63 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50688 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a56 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49184 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a57 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49696 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a58 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50208 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a59 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50720 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a52 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49216 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a53 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49728 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a54 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50240 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a55 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50752 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a48 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49248 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a49 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49760 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a50 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50272 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a51 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50784 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a44 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49280 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a45 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49792 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a46 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50304 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a47 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50816 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a40 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49312 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a41 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49824 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a42 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50336 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a43 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50848 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a36 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49344 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a37 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49856 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a38 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50368 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a39 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50880 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a32 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49376 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a33 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:49888 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a34 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50400 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a35 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 + ds_write_b16 v004, v001 offset:50912 ;.loc 1 330 12 + v_or_b32_e32 v001, v002, v066 ;.loc 2 1306 0 + v_accvgpr_read_b32 v002, a28 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 + ds_write_b16 v001, v002 + v_accvgpr_read_b32 v002, a29 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a30 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a31 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a24 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a25 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a26 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a27 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a20 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a21 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a22 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a23 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a16 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a17 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a18 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a19 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a12 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a13 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a14 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a15 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a8 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a9 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a10 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a11 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a4 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a5 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a6 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a7 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a0 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a1 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a2 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + ds_write_b16 v001, v002 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a3 ;.loc 2 1308 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 + v_lshrrev_b32_e32 v004, 5, v000 ;.loc 2 1352 0 + ds_write_b16 v001, v002 offset:1760 ;.loc 1 330 12 + v_or_b32_e32 v002, s18, v004 ;.loc 2 1354 0 + v_mov_b32_e32 v003, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 1355 28 + v_lshlrev_b32_e32 v003, 3, v000 + s_waitcnt lgkmcnt(0) ;.loc 2 1349 0 + s_barrier + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_4: + s_cbranch_execz .LBB0_4 + v_and_b32_e32 v000, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v001, 1, v000 ;.loc 1 317 12 + v_lshl_or_b32 v001, v004, 9, v001 + ds_read_b128 v006 v007 v008 v009, v001 + v_or_b32_e32 v000, s16, v000 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v001, 13, v002 + v_add_lshl_u32 v000, v000, v001, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_4: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_6: + s_cbranch_execz .LBB0_6 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_6: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 16, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_8: + s_cbranch_execz .LBB0_8 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_8: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 24, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_10: + s_cbranch_execz .LBB0_10 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_10: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 32, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_12: + s_cbranch_execz .LBB0_12 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_12: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 40, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_14: + s_cbranch_execz .LBB0_14 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_14: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 48, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_16: + s_cbranch_execz .LBB0_16 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_16: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 56, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_18: + s_cbranch_execz .LBB0_18 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_18: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 64, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_20: + s_cbranch_execz .LBB0_20 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_20: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x48, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_22: + s_cbranch_execz .LBB0_22 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_22: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x50, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_24: + s_cbranch_execz .LBB0_24 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_24: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x58, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_26: + s_cbranch_execz .LBB0_26 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_26: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x60, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_28: + s_cbranch_execz .LBB0_28 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_28: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x68, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_30: + s_cbranch_execz .LBB0_30 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_30: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x70, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_32: + s_cbranch_execz .LBB0_32 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_32: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x78, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_34: + s_cbranch_execz .LBB0_34 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_34: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x80, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_36: + s_cbranch_execz .LBB0_36 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_36: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x88, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_38: + s_cbranch_execz .LBB0_38 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_38: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x90, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_40: + s_cbranch_execz .LBB0_40 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_40: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x98, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_42: + s_cbranch_execz .LBB0_42 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_42: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xa0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_44: + s_cbranch_execz .LBB0_44 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_44: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xa8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_46: + s_cbranch_execz .LBB0_46 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_46: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xb0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_48: + s_cbranch_execz .LBB0_48 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_48: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xb8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_50: + s_cbranch_execz .LBB0_50 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_50: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xc0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_52: + s_cbranch_execz .LBB0_52 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_52: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xc8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_54: + s_cbranch_execz .LBB0_54 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_54: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xd0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_56: + s_cbranch_execz .LBB0_56 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_56: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xd8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_58: + s_cbranch_execz .LBB0_58 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_58: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xe0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_60: + s_cbranch_execz .LBB0_60 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_60: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xe8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_62: + s_cbranch_execz .LBB0_62 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_62: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xf0, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_64: + s_cbranch_execz .LBB0_64 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_64: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xf8, v004 ;.loc 2 1352 0 is_stmt 1 + v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 + v_mov_b32_e32 v001, s17 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 +.JUMP.LBB0_66: + s_cbranch_execz .LBB0_66 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 + v_lshlrev_b32_e32 v003, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v003 + ds_read_b128 v002 v003 v004 v005, v002 + v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen +.LBB0_66: + s_endpgm ;.loc 2 325 0 +.Lfunc_end0: + .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .cfi_endproc + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 + .p2alignl 6, 3212836864 + .fill 256, 4, 3212836864 + .section .AMDGPU.gpr_maximums,"",@progbits + .set amdgpu.max_num_vgpr, 0 + .set amdgpu.max_num_agpr, 0 + .set amdgpu.max_num_sgpr, 0 + .set amdgpu.max_num_named_barrier, 0 + .text + .section .debug_abbrev,"",@progbits + .byte 1 + .byte 17 + .byte 0 + .byte 37 + .byte 14 + .byte 19 + .byte 5 + .byte 3 + .byte 14 + .byte 16 + .byte 23 + .byte 17 + .byte 1 + .byte 18 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .section .debug_info,"",@progbits +... + .end_amdgpu_metadata + .section .debug_line,"",@progbits +.Lline_table_start0: From 9a17cd544ebce86458f567b558266604884c8b15 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 06:46:36 +0000 Subject: [PATCH 075/118] Split preshuffle global-address math into invariant + k-stepped term (-33 loop insts) preshuffle_off computed ((tm*K_TILES+tk)*tile_row+mi)*TK+ki with tk=col//TK; since col = k_offset + within mixes the loop-variant k_offset with the invariant within-tile column, the compiler recomputed the whole row/tm/mi/ki expression every K iteration (a ~70-inst address burst at each tile head, incl. 16 v_or3_b32). preshuffle_off_split takes k_offset and within separately, so the offset is invariant_part + (k_offset//TK)*(tile_row*TK): the heavy per-thread row math hoists out of the loop and only one k-stepped add remains. Main loop 592 -> 559 insts (v_or3_b32 16 -> 0), VGPR 424 -> 428 (no spill). 8192x8192x16320 ~1313 -> ~1320 TFLOPS, cos 0.99999. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index fa3621e0e..58fd66675 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -353,6 +353,21 @@ def preshuffle_off(row, col, tile_row): tk = col // _PRESH_TK ki = col % _PRESH_TK return ((tm * _K_TILES_SH + tk) * tile_row + mi) * _PRESH_TK + ki + + def preshuffle_off_split(row, k_offset, within, tile_row): + # Same mapping as preshuffle_off but with the K coordinate pre-split into + # the loop-variant tile index (k_offset // TK) and the loop-invariant + # within-tile column (within in [0, TK)). The row/tm/mi term and `within` + # are per-thread constants, so only `tk * tile_row * TK` steps per K iter: + # off = (tm*K_TILES*tile_row + mi)*TK + within + tk*(tile_row*TK) + row = fx.Index(row) + k_offset = fx.Index(k_offset) + within = fx.Index(within) + tm = row // tile_row + mi = row % tile_row + tk = k_offset // _PRESH_TK + invariant = (tm * _K_TILES_SH * tile_row + mi) * _PRESH_TK + within + return invariant + tk * (tile_row * _PRESH_TK) C_ = GTensor(C, dtype=dtype_, shape=(-1, n)) if const_expr(HAS_BIAS): BIAS_ = GTensor(BIAS, dtype=dtype_, shape=(n,)) @@ -591,7 +606,8 @@ def ldg_sts_a_async_one(k_offset, lds_stage, i): m_local_idx = row_group * A_LDS_ROWS_PER_CHUNK_AS + row_in_group col_in_bytes = k_local_idx * DTYPE_BYTES col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, fx.Int32(A_LDS_K_BLOCKS16)) - col_idx = fx.Index(k_offset + k_group * A_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES) + a_within = k_group * A_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES + col_idx = fx.Index(k_offset + a_within) lds_offset = as_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * A_LDS_ROWS_PER_CHUNK_AS, 0)) lds_ptr = get_async_lds_ptr_from_offset(as_k32_, lds_offset) else: @@ -609,7 +625,7 @@ def ldg_sts_a_async_one(k_offset, lds_stage, i): fx.Index(0), ) if const_expr(PRESHUFFLE): - global_offset = preshuffle_off(safe_row_idx, col_idx, BLOCK_M) * DTYPE_BYTES + global_offset = preshuffle_off_split(safe_row_idx, fx.Index(k_offset), a_within, BLOCK_M) * DTYPE_BYTES else: global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) @@ -628,7 +644,8 @@ def ldg_sts_b_async_one(k_offset, lds_stage, i): n_local_idx = row_group * B_LDS_ROWS_PER_CHUNK_AS + row_in_group col_in_bytes = k_local_idx * DTYPE_BYTES col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, fx.Int32(B_LDS_K_BLOCKS16)) - col_idx = fx.Index(k_offset + k_group * B_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES) + b_within = k_group * B_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES + col_idx = fx.Index(k_offset + b_within) lds_offset = bs_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * B_LDS_ROWS_PER_CHUNK_AS, 0)) lds_ptr = get_async_lds_ptr_from_offset(bs_k32_, lds_offset) else: @@ -646,7 +663,7 @@ def ldg_sts_b_async_one(k_offset, lds_stage, i): fx.Index(0), ) if const_expr(PRESHUFFLE): - global_offset = preshuffle_off(safe_row_idx, col_idx, BLOCK_N) * DTYPE_BYTES + global_offset = preshuffle_off_split(safe_row_idx, fx.Index(k_offset), b_within, BLOCK_N) * DTYPE_BYTES else: global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) From 2e5ffdd0e488dc3e5ebee486df4f5b821657f154 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 06:59:48 +0000 Subject: [PATCH 076/118] Add optional XCD-swizzle CTA remap (off by default; L2 up but perf neutral/down) XCD_SWIZZLE flag + XCD_WGM (M-major super-group, default 4) port the fp8_gemm_4wave._xcd_swizzle into hgemm's swizzle_for_cache_reuse: invert the HW round-robin XCD assignment so each of gfx950's 8 XCDs owns a contiguous tile range, super-grouped along M for L2 reuse. swizzle_for_cache_reuse is a no-op when XCD_SWIZZLE is False (default), so the main path is unchanged. Measured 4096x4096x16320 (preshuffle): swizzle lifts L2 hit 85.0% -> 90.3% (WGM 4/8), confirming the remap improves locality. But wall clock does NOT benefit: WGM=4 90.3% L2 -> 1237 TFLOPS vs baseline 85.0% L2 -> 1268; best swizzle (WGM=2, L2 85.7%) is 1265, still below the 1268 no-swizzle baseline. L2 is not this kernel's bottleneck (VMEM throughput is), and the remap's altered CTA schedule slightly hurts HBM-channel parallelism / CU balance. Kept behind a flag for future use once L2 becomes load-bearing. Co-Authored-By: Claude Opus 4 (1M context) --- experiments/bf16_gemm_single_block.py | 6 ++++ kernels/hgemm_splitk.py | 43 +++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/experiments/bf16_gemm_single_block.py b/experiments/bf16_gemm_single_block.py index 6e847bf1d..c3cb1a4c0 100644 --- a/experiments/bf16_gemm_single_block.py +++ b/experiments/bf16_gemm_single_block.py @@ -202,11 +202,17 @@ def main() -> None: action="store_true", help="Preshuffle A/B so each [256, BLOCK_K] tile is contiguous in global memory.", ) + parser.add_argument( + "--xcd-swizzle", + action="store_true", + help="Enable XCD-aware CTA tile remap for L2 reuse across the 8 gfx950 XCDs.", + ) args = parser.parse_args() HGEMM_KWARGS["A_LDS_K32_BLOCKING"] = bool(args.a_lds_k32_blocking) HGEMM_KWARGS["B_LDS_K32_BLOCKING"] = bool(args.b_lds_k32_blocking) HGEMM_KWARGS["K32_REGISTER_PIPELINE"] = bool(args.k32_register_pipeline) HGEMM_KWARGS["PRESHUFFLE"] = bool(args.preshuffle) + HGEMM_KWARGS["XCD_SWIZZLE"] = bool(args.xcd_swizzle) if not torch.cuda.is_available(): raise RuntimeError("CUDA/ROCm device is not available") diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 58fd66675..c8b04a454 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -154,6 +154,8 @@ def compile_hgemm_kernel( B_LDS_K32_BLOCKING: bool = False, K32_REGISTER_PIPELINE: bool = False, PRESHUFFLE: bool = False, + XCD_SWIZZLE: bool = False, + XCD_WGM: int = 4, HAS_BIAS: bool = False, ): assert BLOCK_M_WARPS * BLOCK_N_WARPS * BLOCK_K_WARPS <= 16 @@ -393,8 +395,45 @@ def preshuffle_off_split(row, k_offset, within, tile_row): w_tid = tid % WARP_SIZE def swizzle_for_cache_reuse(pid): - # Do nothing currently - return pid // N_BLOCKS, pid % N_BLOCKS + if const_expr(not XCD_SWIZZLE): + return pid // N_BLOCKS, pid % N_BLOCKS + # XCD-aware tile remap (ported from fp8_gemm_4wave._xcd_swizzle). gfx950 + # has 8 XCDs each with its own L2 slice; HW assigns CTAs round-robin + # (xcd = pid % 8). Invert that so each XCD owns a contiguous tile range, + # then super-group along M (WGM rows) so tiles on one XCD reuse the same + # A rows / B columns in that XCD's L2. Falls back to plain row-major for + # small grids or grids not divisible by NUM_XCDS. + NUM_XCDS = const_expr(8) + WGM = const_expr(XCD_WGM) # M-major super-group size + + pid_idx = fx.Index(pid) + num_pid_m = (fx.Index(m) + (BLOCK_M - 1)) // BLOCK_M + num_pid_n = N_BLOCKS + num_wg = num_pid_m * num_pid_n + + simple_m = pid_idx // num_pid_n + simple_n = pid_idx % num_pid_n + + intra_xcd = pid_idx // NUM_XCDS + xcd = pid_idx % NUM_XCDS + wgid_remap = xcd * (num_wg // NUM_XCDS) + intra_xcd + num_wgid_in_group = WGM * num_pid_n + group_id = wgid_remap // num_wgid_in_group + intra_group = wgid_remap % num_wgid_in_group + first_pid_m = group_id * WGM + gsm = num_pid_m - first_pid_m + group_size_m = arith.select( + arith.cmpi(arith.CmpIPredicate.slt, gsm, fx.Index(WGM)), gsm, fx.Index(WGM) + ) + pid_n = intra_group // group_size_m + intra_group_m = intra_group % group_size_m + pid_m = first_pid_m + intra_group_m + + use_simple = arith.cmpi(arith.CmpIPredicate.ne, num_wg % NUM_XCDS, fx.Index(0)) + return ( + arith.select(use_simple, simple_m, pid_m), + arith.select(use_simple, simple_n, pid_n), + ) block_m_idx, block_n_idx = swizzle_for_cache_reuse(fx.block_idx.x) ks_idx = fx.Index(fx.block_idx.y) From 9ff9796da00adffcee5cd371fd22d0fd1b9f18f0 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 07:32:09 +0000 Subject: [PATCH 077/118] Delay first-half bfld drip by one MFMA row (-80% buffer_load issue stall) The first RP1 half (K1 prefetch) saturated the VMEM issue queue on its later buffer_loads while the second half was bfld-idle; ATT showed ~750 cyc/loop of buffer_load issue stall concentrated there. Starting that half's bfld drip one MFMA row later (bfld_start=WARP_N_STEPS=8) lets the previous half's in-flight DMAs drain first. Swept start in {0,8,16,24,32}: 8 is the sweet spot, cutting half-0 buffer_load stall ~5560->1060 (-81%). 8192^3 1337->1345, 16384 1275->1283, cos 0.99999. (Most of that stall was MFMA-hidden, hence the modest wall-clock gain, but it is a clean positive and removes real VMEM-queue back-pressure.) Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index c8b04a454..25a94f56b 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -1004,8 +1004,22 @@ def do_mfma(ii, jj, a_frag, b_frag): # so their ~64-cyc latency hides fully under the 64 MFMAs. ds_reads are # spread front-loaded-but-interleaved so all land before the half's # trailing lgkmcnt(0). + def _spread_from(numer, denom, start): + out = [0] * denom + if const_expr(numer <= 0): + return out + span = denom - start + if const_expr(span < numer): + start = denom - numer + span = numer + sub = spread_counts(numer, span) + for i in range_constexpr(span): + out[start + i] = sub[i] + return out + def compute_slice_interleaved( - a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False, bfld_tasks=None + a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False, bfld_tasks=None, + bfld_start=0, ): out_a = [0] * WARP_M_STEPS out_b = [0] * WARP_N_STEPS @@ -1024,7 +1038,10 @@ def compute_slice_interleaved( # co-issue shadows instead of bursting at the region head. tasks = bfld_tasks if bfld_tasks is not None else [] n_tasks = len(tasks) - bfld_at = spread_counts(n_tasks, WARP_M_STEPS * WARP_N_STEPS) + if const_expr(bfld_start > 0): + bfld_at = _spread_from(n_tasks, WARP_M_STEPS * WARP_N_STEPS, bfld_start) + else: + bfld_at = spread_counts(n_tasks, WARP_M_STEPS * WARP_N_STEPS) read_cursor = 0 bfld_cursor = 0 for ii in range_constexpr(WARP_M_STEPS): @@ -1064,9 +1081,13 @@ def make_bfld_tasks(k_offset, lds_stage, k_group): # half-1: bfld next tile's K1 (lead 1) dripped into the MFMAs; compute K0 # while reading this tile's K1 operands for half-2. + # Delay the first half's bfld drip by 1 MFMA row so the previous half's + # in-flight DMAs drain off the VMEM queue before new ones issue; ATT + # showed this cuts the first half's buffer_load issue stalls ~80%. h1_bfld = make_bfld_tasks(prefetch_k_offset, prefetch_lds_stage, 1) if prefetch_k_offset is not None else None a1_frags, b1_frags = compute_slice_interleaved( - a0_frags, b0_frags, k1_idx, zero_acc=init_zero, bfld_tasks=h1_bfld + a0_frags, b0_frags, k1_idx, zero_acc=init_zero, bfld_tasks=h1_bfld, + bfld_start=WARP_N_STEPS, ) __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) From 12a18d9b1dc89c6f59c8223004186b9df9e4543f Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 09:15:47 +0000 Subject: [PATCH 078/118] Add bufferload-cycle-table skill (per-tile buffer_load gap/stall compare) Tool to compare two ATT traces' buffer_load behavior inside one K tile, anchored at the tile-start barrier: each load shows gap-since-prev-load and its stall, plus gap-to-tile-end. Surfaces whether stalls are a spacing issue or VMEM-queue back-pressure (larger gap + more stall => not spacing). Used to find fp8 4wave stalls 24 cyc vs our bf16 4wave 740 cyc on identical bytes/tile. Co-Authored-By: Claude Opus 4 (1M context) --- .../skills/bufferload-cycle-table/SKILL.md | 60 +++++++++++++ .../scripts/bufferload_table.py | 87 +++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 .claude/skills/bufferload-cycle-table/SKILL.md create mode 100644 .claude/skills/bufferload-cycle-table/scripts/bufferload_table.py diff --git a/.claude/skills/bufferload-cycle-table/SKILL.md b/.claude/skills/bufferload-cycle-table/SKILL.md new file mode 100644 index 000000000..91d5ce50f --- /dev/null +++ b/.claude/skills/bufferload-cycle-table/SKILL.md @@ -0,0 +1,60 @@ +--- +name: bufferload-cycle-table +description: Build a per-tile buffer_load cycle/stall comparison table from two ATT traces, anchored at the K-tile start barrier. Each load shows gap-since-previous-load and its stall, with a trailing gap-to-tile-end. Use when comparing why one GEMM kernel's buffer_load stalls and another's does not (e.g. fp8 vs bf16, our kernel vs HipKittens), or when the user asks for a "buffer_load cycle table" / "每个 buffer_load 卡了多久". +--- + +# buffer_load Cycle Table + +Compare two kernels' global-load (buffer_load) behavior inside one steady-state K +tile, to see whether stalls come from spacing (排布) or from VMEM-queue +back-pressure / DMA retire rate. + +## What it prints + +For each `buffer_load` in one K tile, anchored at the tile-start `s_barrier`: + +``` + fp8 gap(stall) bf16 gap(stall) + L 0 80(4) 284(0) + L 2 208(0) 128(216) <- bf16 stalls here + ... +end-> 140(end) 128(end) <- last load -> tile-end barrier + sum stall=24 stall=740 + len 2468 3324 +``` + +- **gap** = cycles since the previous buffer_load (L0's gap = offset from the tile + barrier). +- **stall** = ATT stall cycles on that load. +- **end->** = cycles from the last load to the tile-end barrier. +- **sum/len** = total stall and tile length (cycles) per kernel. + +## How to read it (the key insight) + +If the stalling kernel has **larger gaps but more stall**, spacing is NOT the +problem — it's VMEM-queue back-pressure (DMAs not retiring fast enough), which +correlates with **occupancy** and **dtype arithmetic intensity**, not scheduling. +A big empty gap (e.g. a 576-cyc hole at a half boundary) followed by zero-stall +loads confirms the queue had to fully drain before new loads could issue. + +Example finding: fp8 4wave moved the same bytes/tile as our bf16 4wave but stalled +24 vs 740 cyc — fp8's loads spread evenly with small gaps and never stalled, while +bf16's first-half loads (L2-L7) stalled despite *larger* gaps. Root cause: VMEM +queue turnover, tied to occupancy=1 and bf16's lower FLOP/byte, not load spacing. + +## Run + +1. Capture ATT for both kernels (see att-hotloop-benchmark skill), pick a + steady-state `--bar-start` (e.g. 40). +2. Determine how many barrier intervals make one K tile (`--tiles`): RP1 bf16 and + fp8 4wave both use 2 barriers per tile. + +```bash +python .claude/skills/bufferload-cycle-table/scripts/bufferload_table.py \ + --labels fp8,bf16 --bar-start 40 --tiles 2 +``` + +Uses wave `se0_sm0_sl0_wv0.json` by default (override with `--wave`). The ATT inst +tuple is `[cycle, type, stall, dur, code_id]`; barriers are located via code.json +asm text. See [[feedback-bufferload-per-tile-cycle-analysis]], +[[bf16-hgemm-vmem-bound-arith-intensity]], [[fp8-4wave-8buffer-no-lgkmcnt-drain]]. diff --git a/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py b/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py new file mode 100644 index 000000000..0352d80f5 --- /dev/null +++ b/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""Per-tile buffer_load cycle/stall table from ATT, anchored at the tile barrier. + +For one steady-state K tile, list every buffer_load as: + gap(stall) +where gap = cycles since the previous buffer_load (the first one's gap is its +offset from the tile-start barrier), and stall = ATT stall cycles on that load. +A trailing `end-> gap(end)` row gives the cycles from the last load to the tile +end barrier. Compares two kernels side by side. + +Why: if two GEMMs move the same bytes/tile but one stalls far more than the +MFMA-width difference can explain, the faster one's DMAs are completing faster / +the VMEM queue turns over faster -- not just hidden behind longer MFMAs. The +per-load gap+stall view (anchored at the tile barrier) exposes that. Note that a +LARGER gap with MORE stall rules out "spacing too tight"; it points at VMEM queue +back-pressure (DMA retire rate), which correlates with occupancy and dtype. + +Usage: + bufferload_table.py [--labels fp8,bf16] + [--bar-start 40] [--tiles 2] [--wave se0_sm0_sl0_wv0.json] + +`--tiles N` = how many barrier intervals make one K tile (RP1 bf16 = 2; check the +kernel). Pick `--bar-start` in the steady state (e.g. 40). +""" +import argparse +import json +import os + + +def load_loads(ui_dir, bar_start, tiles, wave): + j = json.load(open(os.path.join(ui_dir, wave))) + insts = j["wave"]["instructions"] + code = json.load(open(os.path.join(ui_dir, "code.json")))["code"] + idmap = {c[2]: c[0] for c in code} # code line index -> asm text + # inst tuple = [cycle, type, stall, dur, code_id] + bar = [t[0] for t in insts if "s_barrier" in str(idmap.get(t[4], ""))] + b0 = bar[bar_start] + b_end = bar[bar_start + tiles] + out = [] + for t in insts: + if b0 <= t[0] < b_end: + asm = str(idmap.get(t[4], "")).strip() + if asm.startswith("buffer_load"): + out.append((t[0] - b0, t[2])) # (offset_from_tile_start, stall) + return out, b_end - b0 + + +def to_gaps(loads, tilelen): + rows = [] + prev = 0 + for off, st in loads: + rows.append((off - prev, st)) + prev = off + rows.append((tilelen - prev, "end")) + return rows + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("dir_a") + ap.add_argument("dir_b") + ap.add_argument("--labels", default="A,B") + ap.add_argument("--bar-start", type=int, default=40) + ap.add_argument("--tiles", type=int, default=2) + ap.add_argument("--wave", default="se0_sm0_sl0_wv0.json") + args = ap.parse_args() + la, lb = args.labels.split(",") + + a, al = load_loads(args.dir_a, args.bar_start, args.tiles, args.wave) + b, bl = load_loads(args.dir_b, args.bar_start, args.tiles, args.wave) + ga, gb = to_gaps(a, al), to_gaps(b, bl) + + n = max(len(ga), len(gb)) + print(f"{'':>5} {la+' gap(stall)':>16} {lb+' gap(stall)':>16} (gap=cyc since prev L)") + print("-" * 56) + for i in range(n): + ca = f"{ga[i][0]}({ga[i][1]})" if i < len(ga) else "" + cb = f"{gb[i][0]}({gb[i][1]})" if i < len(gb) else "" + tag = "end->" if i == n - 1 else f"L{i:>2} " + print(f"{tag:>5} {ca:>16} {cb:>16}") + print("-" * 56) + print(f"{'sum':>5} {'stall='+str(sum(s for _,s in a)):>16} {'stall='+str(sum(s for _,s in b)):>16}") + print(f"{'len':>5} {al:>16} {bl:>16}") + + +if __name__ == "__main__": + main() From 676aeccef1abf29769d6788e95a20fc0c1948863 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 09:37:14 +0000 Subject: [PATCH 079/118] Drop sc0 (glc) from read-only A/B buffer_load_lds On CDNA3/CDNA4, sc0 is the renamed glc (globally-coherent) bit. The A/B GEMM inputs are read-only during the kernel, so global coherence is unnecessary; sc0 only risks extra L2 coherence traffic under cache pressure. fp8_gemm_4wave's loads already omit sc0 -- match it. Correctness unchanged across shapes (512^2x4096, 1024^2x8192, 8192^3; with and without preshuffle, cos 0.99999); wall-clock and L2 hit/access unchanged on the measured shapes, this is a semantic cleanup that removes an unnecessary coherence constraint. Refs: glc->sc0 rename (gfx940+), AMD MI300 CDNA3 ISA. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 25a94f56b..6978676cf 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -610,12 +610,16 @@ def get_dma_copy_warp_offset(): return warp_offset def buffer_load_lds_inline(rsrc, lds_ptr, global_offset): + # No sc0 (=glc) on these read-only A/B input loads: the inputs are not + # written during the kernel, so global coherence is unnecessary, and it + # matches the fp8_gemm_4wave path (which omits sc0). Avoids the extra L2 + # coherence traffic glc can force under cache pressure. if const_expr(DMA_BYTES == 16): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, 0 offen sc0 lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, 0 offen lds" elif const_expr(DMA_BYTES == 8): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, 0 offen sc0 lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, 0 offen lds" elif const_expr(DMA_BYTES == 4): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, 0 offen sc0 lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, 0 offen lds" else: raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") llvm.InlineAsmOp(None, [lds_ptr, global_offset, rsrc], asm, "s,v,s", has_side_effects=True) From 76d94d4b38b92061d4b8e128809c02cfc42006a7 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 09:38:22 +0000 Subject: [PATCH 080/118] Add pure ISA + hotloop table for bf16 hgemm RP1 (preshuffle, no-sc0) Snapshot of the current best bf16 hgemm RP1 + A/B preshuffle kernel after dropping sc0/glc from the A/B loads, at 8192x8192x8192 (~1339 TFLOPS). Cleaned (gen_pure.py) ISA + M/r/L/B hotloop table for offline inspection. Co-Authored-By: Claude Opus 4 (1M context) --- .../hgemm_bf16_rp1_presh_nosc0_hotloop.txt | 184 ++ .../hgemm_bf16_rp1_presh_nosc0_pure.s | 2418 +++++++++++++++++ 2 files changed, 2602 insertions(+) create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt create mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt new file mode 100644 index 000000000..ee40112fa --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt @@ -0,0 +1,184 @@ +Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s) +Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier +Per loop: M=128 r=32 L=16 B=2 +============================================================ +M v_mfma_f32_16x16x32_bf16 a[252:255] +r ds_read_b128 v082 v083 v084 v085 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v086 v087 v088 v089 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v071 +r ds_read_b128 v090 v091 v092 v093 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v110 v111 v112 v113 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +L buffer_load_dwordx4 v073 +M v_mfma_f32_16x16x32_bf16 a[188:191] +r ds_read_b128 v114 v115 v116 v117 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v118 v119 v120 v121 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +L buffer_load_dwordx4 v075 +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +r ds_read_b128 v122 v123 v124 v125 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v126 v127 v128 v129 +M v_mfma_f32_16x16x32_bf16 a[136:139] +L buffer_load_dwordx4 v077 +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +r ds_read_b128 v130 v131 v132 v133 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +L buffer_load_dwordx4 v079 +r ds_read_b128 v134 v135 v136 v137 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +r ds_read_b128 v138 v139 v140 v141 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +L buffer_load_dwordx4 v081 +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v142 v143 v144 v145 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +r ds_read_b128 v146 v147 v148 v149 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +L buffer_load_dwordx4 v107 +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v150 v151 v152 v153 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +r ds_read_b128 v154 v155 v156 v157 +M v_mfma_f32_16x16x32_bf16 a[24:27] +L buffer_load_dwordx4 v109 +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v158 v159 v160 v161 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 0) -------- +M v_mfma_f32_16x16x32_bf16 a[252:255] +L buffer_load_dwordx4 v162 +r ds_read_b128 v054 v055 v056 v057 +M v_mfma_f32_16x16x32_bf16 a[248:251] +M v_mfma_f32_16x16x32_bf16 a[244:247] +M v_mfma_f32_16x16x32_bf16 a[240:243] +M v_mfma_f32_16x16x32_bf16 a[236:239] +r ds_read_b128 v042 v043 v044 v045 +M v_mfma_f32_16x16x32_bf16 a[232:235] +M v_mfma_f32_16x16x32_bf16 a[228:231] +M v_mfma_f32_16x16x32_bf16 a[224:227] +M v_mfma_f32_16x16x32_bf16 a[220:223] +L buffer_load_dwordx4 v163 +r ds_read_b128 v034 v035 v036 v037 +M v_mfma_f32_16x16x32_bf16 a[216:219] +M v_mfma_f32_16x16x32_bf16 a[212:215] +M v_mfma_f32_16x16x32_bf16 a[208:211] +M v_mfma_f32_16x16x32_bf16 a[204:207] +r ds_read_b128 v026 v027 v028 v029 +M v_mfma_f32_16x16x32_bf16 a[200:203] +M v_mfma_f32_16x16x32_bf16 a[196:199] +M v_mfma_f32_16x16x32_bf16 a[192:195] +M v_mfma_f32_16x16x32_bf16 a[188:191] +L buffer_load_dwordx4 v164 +r ds_read_b128 v014 v015 v016 v017 +M v_mfma_f32_16x16x32_bf16 a[184:187] +M v_mfma_f32_16x16x32_bf16 a[180:183] +M v_mfma_f32_16x16x32_bf16 a[176:179] +M v_mfma_f32_16x16x32_bf16 a[172:175] +r ds_read_b128 v010 v011 v012 v013 +M v_mfma_f32_16x16x32_bf16 a[168:171] +M v_mfma_f32_16x16x32_bf16 a[164:167] +M v_mfma_f32_16x16x32_bf16 a[160:163] +M v_mfma_f32_16x16x32_bf16 a[156:159] +L buffer_load_dwordx4 v165 +r ds_read_b128 v006 v007 v008 v009 +M v_mfma_f32_16x16x32_bf16 a[152:155] +M v_mfma_f32_16x16x32_bf16 a[148:151] +M v_mfma_f32_16x16x32_bf16 a[144:147] +M v_mfma_f32_16x16x32_bf16 a[140:143] +r ds_read_b128 v002 v003 v004 v005 +M v_mfma_f32_16x16x32_bf16 a[136:139] +M v_mfma_f32_16x16x32_bf16 a[132:135] +M v_mfma_f32_16x16x32_bf16 a[128:131] +M v_mfma_f32_16x16x32_bf16 a[124:127] +L buffer_load_dwordx4 v166 +r ds_read_b128 v018 v019 v020 v021 +M v_mfma_f32_16x16x32_bf16 a[120:123] +M v_mfma_f32_16x16x32_bf16 a[116:119] +M v_mfma_f32_16x16x32_bf16 a[112:115] +M v_mfma_f32_16x16x32_bf16 a[108:111] +r ds_read_b128 v022 v023 v024 v025 +M v_mfma_f32_16x16x32_bf16 a[104:107] +M v_mfma_f32_16x16x32_bf16 a[100:103] +M v_mfma_f32_16x16x32_bf16 a[96:99] +M v_mfma_f32_16x16x32_bf16 a[92:95] +L buffer_load_dwordx4 v167 +r ds_read_b128 v030 v031 v032 v033 +M v_mfma_f32_16x16x32_bf16 a[88:91] +M v_mfma_f32_16x16x32_bf16 a[84:87] +M v_mfma_f32_16x16x32_bf16 a[80:83] +M v_mfma_f32_16x16x32_bf16 a[76:79] +r ds_read_b128 v038 v039 v040 v041 +M v_mfma_f32_16x16x32_bf16 a[72:75] +M v_mfma_f32_16x16x32_bf16 a[68:71] +M v_mfma_f32_16x16x32_bf16 a[64:67] +M v_mfma_f32_16x16x32_bf16 a[60:63] +L buffer_load_dwordx4 v168 +r ds_read_b128 v046 v047 v048 v049 +M v_mfma_f32_16x16x32_bf16 a[56:59] +M v_mfma_f32_16x16x32_bf16 a[52:55] +M v_mfma_f32_16x16x32_bf16 a[48:51] +M v_mfma_f32_16x16x32_bf16 a[44:47] +r ds_read_b128 v050 v051 v052 v053 +M v_mfma_f32_16x16x32_bf16 a[40:43] +M v_mfma_f32_16x16x32_bf16 a[36:39] +M v_mfma_f32_16x16x32_bf16 a[32:35] +M v_mfma_f32_16x16x32_bf16 a[28:31] +L buffer_load_dwordx4 v169 +r ds_read_b128 v058 v059 v060 v061 +M v_mfma_f32_16x16x32_bf16 a[24:27] +M v_mfma_f32_16x16x32_bf16 a[20:23] +M v_mfma_f32_16x16x32_bf16 a[16:19] +M v_mfma_f32_16x16x32_bf16 a[12:15] +r ds_read_b128 v062 v063 v064 v065 +M v_mfma_f32_16x16x32_bf16 a[8:11] +M v_mfma_f32_16x16x32_bf16 a[4:7] +M v_mfma_f32_16x16x32_bf16 a[0:3] +B -------- barrier (end of half 1) -------- +============================================================ +stream: MrMMMMrMMMMLrMMMMrMMMLMrMMMMrMMLMMrMMMMrMLMMMrMMMMLrMMMMrMMMLMrMMMMrMMLMMrMMMMrMLMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s new file mode 100644 index 000000000..e9621781a --- /dev/null +++ b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s @@ -0,0 +1,2418 @@ + .amdgcn_target "amdgcn-amd-amdhsa--gfx950" + .amdhsa_code_object_version 6 + .text + .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .p2align 8 + .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function +hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: +.Lfunc_begin0: + .cfi_sections .debug_frame + .cfi_startproc + .file 1 "/root/FlyDSL/kernels" "tensor_shim.py" + s_load_dword s12, s[0:1], 0x60 ;.loc 1 289 24 prologue_end + s_load_dwordx2 s[4:5], s[0:1], 0x18 + s_load_dwordx2 s[8:9], s[0:1], 0x30 + .file 2 "/root/FlyDSL/kernels" "hgemm_splitk.py" + s_ashr_i32 s14, s2, 31 ;.loc 2 399 0 + s_lshr_b32 s14, s14, 27 + s_add_i32 s14, s2, s14 + s_waitcnt lgkmcnt(0) ;.loc 1 289 24 + s_ashr_i32 s13, s12, 31 + s_and_b32 s5, s5, 0xffff + s_and_b32 s9, s9, 0xffff + s_ashr_i32 s18, s14, 5 ;.loc 2 399 0 + s_and_b32 s19, s14, 0xffffffe0 + s_cmp_lg_u32 s2, s19 + s_cselect_b64 s[14:15], -1, 0 + s_cmp_lt_i32 s2, 0 + s_cselect_b64 s[16:17], -1, 0 + s_and_b64 s[14:15], s[16:17], s[14:15] + v_lshrrev_b32_e32 v002, 6, v000 ;.loc 2 392 0 + s_subb_u32 s14, s18, 0 ;.loc 2 399 0 + s_sub_i32 s15, s2, s19 + s_lshl_b32 s20, s14, 8 ;.loc 2 442 0 + v_readfirstlane_b32 s14, v002 ;.loc 2 606 0 + s_lshl_b32 s18, s15, 8 ;.loc 2 443 0 + s_lshl_b32 s21, s14, 10 ;.loc 2 606 0 + s_lshl_b32 s2, s3, 13 ;.loc 2 440 0 + .file 3 "/root/FlyDSL/python/flydsl/expr" "numeric.py" + s_ashr_i32 s19, s20, 31 ;.loc 3 875 16 + s_ashr_i32 s16, s18, 31 + s_add_i32 s25, s21, 0x10000 ;.loc 2 641 0 + v_lshrrev_b32_e32 v109, 2, v000 ;.loc 2 685 0 + s_cmpk_lt_u32 s18, 0x2000 ;.loc 2 704 12 + v_xor_b32_e32 v002, v109, v000 ;.loc 2 689 0 + s_cselect_b64 vcc, -1, 0 ;.loc 2 704 12 + v_lshlrev_b32_e32 v002, 3, v002 ;.loc 2 689 0 + s_and_b64 s[14:15], vcc, exec ;.loc 2 703 23 + v_and_b32_e32 v010, 24, v002 ;.loc 2 689 0 + v_or_b32_e32 v002, s18, v109 ;.loc 2 702 0 + s_cselect_b32 s14, s16, 0 ;.loc 2 703 23 + v_cndmask_b32_e32 v110, 0, v002, vcc + v_mov_b32_e32 v111, s14 + v_lshlrev_b64 v002 v003, 7, v110 v111 ;.loc 2 371 0 + v_and_b32_e32 v107, 63, v110 ;.loc 2 1225 0 + v_and_b32_e32 v002, 0xffff8000, v002 ;.loc 2 371 0 + v_and_b32_e32 v003, 0x3ffffff, v003 + v_or_b32_e32 v002, v002, v107 + v_lshlrev_b64 v002 v003, 6, v002 v003 + v_or_b32_e32 v094, v002, v010 + s_lshl_b32 s26, s3, 21 ;.loc 2 372 0 + s_mov_b32 s7, 0x27000 + s_mov_b32 s6, -1 + v_add_lshl_u32 v003, v094, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v011, 64, v109 ;.loc 2 687 0 + s_mov_b32 s10, s6 ;.loc 1 289 24 + s_mov_b32 s11, s7 + s_mov_b32 m0, s25 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen lds + v_or_b32_e32 v003, s18, v011 ;.loc 2 702 0 + v_cndmask_b32_e32 v112, 0, v003, vcc ;.loc 2 703 23 + v_mov_b32_e32 v113, s14 + v_lshlrev_b64 v004 v005, 7, v112 v113 ;.loc 2 371 0 + v_and_b32_e32 v003, 0x7f, v112 ;.loc 2 369 0 + v_and_b32_e32 v004, 0xffff8000, v004 ;.loc 2 371 0 + v_and_b32_e32 v005, 0x3ffffff, v005 + v_or_b32_e32 v004, v004, v003 + v_lshlrev_b64 v004 v005, 6, v004 v005 + v_or_b32_e32 v096, v004, v010 + v_add_lshl_u32 v003, v096, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v012, 0x80, v109 ;.loc 2 687 0 + s_add_i32 s24, s21, 0x11000 ;.loc 2 641 0 + s_mov_b32 m0, s24 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen lds + v_or_b32_e32 v003, s18, v012 ;.loc 2 702 0 + v_cndmask_b32_e32 v114, 0, v003, vcc ;.loc 2 703 23 + v_mov_b32_e32 v115, s14 + v_lshlrev_b64 v006 v007, 7, v114 v115 ;.loc 2 371 0 + v_and_b32_e32 v003, 0xbf, v114 ;.loc 2 369 0 + v_and_b32_e32 v005, 0xffff8000, v006 ;.loc 2 371 0 + v_and_b32_e32 v007, 0x3ffffff, v007 + v_or_b32_e32 v006, v005, v003 + v_lshlrev_b64 v006 v007, 6, v006 v007 + v_or_b32_e32 v098, v006, v010 + v_add_lshl_u32 v003, v098, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v013, 0xc0, v109 ;.loc 2 687 0 + s_add_i32 s23, s21, 0x12000 ;.loc 2 641 0 + s_mov_b32 m0, s23 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen lds + v_or_b32_e32 v003, s18, v013 ;.loc 2 702 0 + v_cndmask_b32_e32 v116, 0, v003, vcc ;.loc 2 703 23 + v_mov_b32_e32 v117, s14 + v_lshlrev_b64 v008 v009, 7, v116 v117 ;.loc 2 371 0 + v_and_b32_e32 v111, 0xff, v116 ;.loc 2 1225 0 + v_and_b32_e32 v003, 0xffff8000, v008 ;.loc 2 371 0 + v_and_b32_e32 v009, 0x3ffffff, v009 + v_or_b32_e32 v008, v003, v111 + v_or_b32_e32 v014, 32, v010 ;.loc 2 690 0 + v_lshlrev_b64 v008 v009, 6, v008 v009 ;.loc 2 371 0 + v_or_b32_e32 v046, v002, v014 + v_or_b32_e32 v100, v008, v010 + v_add_lshl_u32 v002, v046, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v047, v004, v014 ;.loc 2 371 0 + s_add_i32 s17, s21, 0x13000 ;.loc 2 641 0 + v_add_lshl_u32 v003, v100, s26, 1 ;.loc 2 712 24 + s_mov_b32 m0, s17 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[8:11], 0 offen lds + s_add_i32 s14, s21, 0x14000 ;.loc 2 641 0 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v047, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v058, v006, v014 ;.loc 2 371 0 + s_add_i32 s14, s21, 0x15000 ;.loc 2 641 0 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v058, s26, 1 ;.loc 2 712 24 + v_or_b32_e32 v062, v008, v014 ;.loc 2 371 0 + s_add_i32 s14, s21, 0x16000 ;.loc 2 641 0 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v062, s26, 1 ;.loc 2 712 24 + s_add_i32 s14, s21, 0x17000 ;.loc 2 641 0 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_or_b32_e32 v002, s20, v109 ;.loc 2 664 0 + v_mov_b32_e32 v003, s19 + v_mov_b32_e32 v015, s19 ;.loc 2 665 23 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 666 12 + v_or_b32_e32 v004, s20, v011 ;.loc 2 664 0 + v_mov_b32_e32 v005, s19 + v_cndmask_b32_e32 v119, 0, v015, vcc ;.loc 2 665 23 + v_cndmask_b32_e32 v118, 0, v002, vcc + v_lshlrev_b64 v002 v003, 7, v118 v119 ;.loc 2 371 0 + v_and_b32_e32 v113, 63, v118 ;.loc 2 1225 0 + v_and_b32_e32 v002, 0xffff8000, v002 ;.loc 2 371 0 + v_and_b32_e32 v003, 0x3ffffff, v003 + v_or_b32_e32 v002, v002, v113 + v_lshlrev_b64 v002 v003, 6, v002 v003 + v_cmp_gt_u64_e32 vcc, s[12:13], v004 v005 ;.loc 2 666 12 + v_or_b32_e32 v102, v002, v010 ;.loc 2 371 0 + v_add_lshl_u32 v003, v102, s26, 1 ;.loc 2 674 24 + v_cndmask_b32_e32 v121, 0, v015, vcc ;.loc 2 665 23 + v_cndmask_b32_e32 v120, 0, v004, vcc + v_lshlrev_b64 v004 v005, 7, v120 v121 ;.loc 2 371 0 + s_mov_b32 m0, s21 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen lds + v_and_b32_e32 v003, 0x7f, v120 ;.loc 2 369 0 + v_and_b32_e32 v004, 0xffff8000, v004 ;.loc 2 371 0 + v_and_b32_e32 v005, 0x3ffffff, v005 + v_or_b32_e32 v004, v004, v003 + v_or_b32_e32 v006, s20, v012 ;.loc 2 664 0 + v_mov_b32_e32 v007, s19 + v_lshlrev_b64 v004 v005, 6, v004 v005 ;.loc 2 371 0 + v_cmp_gt_u64_e32 vcc, s[12:13], v006 v007 ;.loc 2 666 12 + v_or_b32_e32 v104, v004, v010 ;.loc 2 371 0 + v_add_lshl_u32 v003, v104, s26, 1 ;.loc 2 674 24 + v_cndmask_b32_e32 v123, 0, v015, vcc ;.loc 2 665 23 + v_cndmask_b32_e32 v122, 0, v006, vcc + v_lshlrev_b64 v006 v007, 7, v122 v123 ;.loc 2 371 0 + s_add_i32 s16, s21, 0x1000 ;.loc 2 641 0 + s_mov_b32 m0, s16 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen lds + v_and_b32_e32 v003, 0xbf, v122 ;.loc 2 369 0 + v_and_b32_e32 v005, 0xffff8000, v006 ;.loc 2 371 0 + v_and_b32_e32 v007, 0x3ffffff, v007 + v_or_b32_e32 v006, v005, v003 + v_or_b32_e32 v008, s20, v013 ;.loc 2 664 0 + v_mov_b32_e32 v009, s19 + v_lshlrev_b64 v006 v007, 6, v006 v007 ;.loc 2 371 0 + v_cmp_gt_u64_e32 vcc, s[12:13], v008 v009 ;.loc 2 666 12 + v_or_b32_e32 v106, v006, v010 ;.loc 2 371 0 + v_add_lshl_u32 v003, v106, s26, 1 ;.loc 2 674 24 + v_cndmask_b32_e32 v125, 0, v015, vcc ;.loc 2 665 23 + v_cndmask_b32_e32 v124, 0, v008, vcc + v_lshlrev_b64 v008 v009, 7, v124 v125 ;.loc 2 371 0 + s_add_i32 s15, s21, 0x2000 ;.loc 2 641 0 + s_mov_b32 m0, s15 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen lds + v_and_b32_e32 v117, 0xff, v124 ;.loc 2 1225 0 + v_and_b32_e32 v003, 0xffff8000, v008 ;.loc 2 371 0 + v_and_b32_e32 v009, 0x3ffffff, v009 + v_or_b32_e32 v008, v003, v117 + v_lshlrev_b64 v008 v009, 6, v008 v009 + v_or_b32_e32 v070, v002, v014 + v_or_b32_e32 v108, v008, v010 + v_add_lshl_u32 v002, v070, s26, 1 ;.loc 2 674 24 + v_or_b32_e32 v078, v004, v014 ;.loc 2 371 0 + s_add_i32 s14, s21, 0x3000 ;.loc 2 641 0 + v_add_lshl_u32 v003, v108, s26, 1 ;.loc 2 674 24 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v003, s[4:7], 0 offen lds + s_add_i32 s28, s21, 0x4000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v078, s26, 1 ;.loc 2 674 24 + v_or_b32_e32 v086, v006, v014 ;.loc 2 371 0 + s_add_i32 s28, s21, 0x5000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v086, s26, 1 ;.loc 2 674 24 + v_or_b32_e32 v119, v008, v014 ;.loc 2 371 0 + s_add_i32 s28, s21, 0x6000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v119, s26, 1 ;.loc 2 674 24 + s_or_b32 s29, s26, 0x4000 ;.loc 2 372 0 + s_add_i32 s28, s21, 0x7000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v094, s29, 1 ;.loc 2 712 24 + s_add_i32 s28, s21, 0x18000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v096, s29, 1 ;.loc 2 712 24 + s_add_i32 s28, s21, 0x19000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v098, s29, 1 ;.loc 2 712 24 + s_add_i32 s28, s21, 0x1a000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v100, s29, 1 ;.loc 2 712 24 + s_add_i32 s28, s21, 0x1b000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + v_add_lshl_u32 v002, v102, s29, 1 ;.loc 2 674 24 + s_add_i32 s28, s21, 0x8000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v104, s29, 1 ;.loc 2 674 24 + s_add_i32 s28, s21, 0x9000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v106, s29, 1 ;.loc 2 674 24 + v_and_b32_e32 v001, 0x80, v000 ;.loc 2 446 0 + v_lshlrev_b32_e32 v034, 1, v000 ;.loc 2 447 0 + v_and_b32_e32 v035, 15, v000 ;.loc 2 448 0 + v_lshrrev_b32_e32 v095, 4, v000 ;.loc 2 449 0 + s_mov_b32 s22, 0x10000 + s_add_i32 s28, s21, 0xa000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_add_lshl_u32 v002, v108, s29, 1 ;.loc 2 674 24 + s_movk_i32 s27, 0x80 + s_add_i32 s28, s21, 0xb000 ;.loc 2 641 0 + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[4:7], 0 offen lds + v_xor_b32_e32 v002, v095, v000 ;.loc 2 761 0 + v_lshlrev_b32_e32 v002, 4, v002 + v_and_b32_e32 v099, 48, v002 + v_lshlrev_b32_e32 v002, 5, v000 ;.loc 2 762 0 + v_and_b32_e32 v002, 0x11e0, v002 + v_lshlrev_b32_e32 v105, 1, v002 ;.loc 1 317 12 + v_or3_b32 v006, v001, v035, 16 ;.loc 2 756 0 + v_and_or_b32 v097, v034, s27, v035 ;.loc 2 773 0 + v_mov_b32_e32 v034, 0x10000 ;.loc 1 317 12 + v_or_b32_e32 v121, v105, v099 + v_lshlrev_b32_e32 v103, 6, v006 + v_lshl_or_b32 v101, v097, 6, v034 + s_waitcnt vmcnt(0) ;.loc 2 462 0 + s_barrier + ds_read_b128 v002 v003 v004 v005, v121 ;.loc 1 317 12 + v_or_b32_e32 v123, v103, v099 + v_or_b32_e32 v125, v101, v099 + v_lshlrev_b32_e32 v115, 5, v006 ;.loc 2 762 0 + ds_read_b128 v006 v007 v008 v009, v123 ;.loc 1 317 12 + ds_read_b128 v010 v011 v012 v013, v123 offset:1024 + ds_read_b128 v014 v015 v016 v017, v123 offset:2048 + ds_read_b128 v018 v019 v020 v021, v123 offset:3072 + ds_read_b128 v022 v023 v024 v025, v123 offset:4096 + ds_read_b128 v026 v027 v028 v029, v123 offset:5120 + ds_read_b128 v030 v031 v032 v033, v123 offset:6144 + ds_read_b128 v034 v035 v036 v037, v125 + ds_read_b128 v038 v039 v040 v041, v125 offset:1024 + ds_read_b128 v042 v043 v044 v045, v125 offset:2048 + ds_read_b128 v050 v051 v052 v053, v125 offset:3072 + ds_read_b128 v054 v055 v056 v057, v125 offset:4096 + ds_read_b128 v126 v127 v128 v129, v125 offset:5120 + ds_read_b128 v130 v131 v132 v133, v125 offset:6144 + ds_read_b128 v134 v135 v136 v137, v125 offset:7168 + s_waitcnt lgkmcnt(7) ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v034 v035 v036 v037, 0 + ds_read_b128 v138 v139 v140 v141, v121 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v038 v039 v040 v041, 0 + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v042 v043 v044 v045, 0 + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v050 v051 v052 v053, 0 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v054 v055 v056 v057, 0 + ds_read_b128 v142 v143 v144 v145, v123 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v126 v127 v128 v129, 0 + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v130 v131 v132 v133, 0 + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v134 v135 v136 v137, 0 + v_add_lshl_u32 v002, v046, s29, 1 ;.loc 2 712 24 + v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v034 v035 v036 v037, 0 ;.loc 2 1054 0 + s_add_i32 s27, s21, 0x1c000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + ds_read_b128 v002 v003 v004 v005, v123 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v054 v055 v056 v057, 0 + ds_read_b128 v146 v147 v148 v149, v123 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v130 v131 v132 v133, 0 + v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v134 v135 v136 v137, 0 + v_add_lshl_u32 v006, v047, s29, 1 ;.loc 2 712 24 + s_add_i32 s27, s21, 0x1d000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + v_add_lshl_u32 v006, v058, s29, 1 ;.loc 2 712 24 + v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v034 v035 v036 v037, 0 ;.loc 2 1054 0 + ds_read_b128 v150 v151 v152 v153, v123 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v054 v055 v056 v057, 0 + ds_read_b128 v046 v047 v048 v049, v123 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v130 v131 v132 v133, 0 + s_add_i32 s27, s21, 0x1e000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + v_add_lshl_u32 v006, v062, s29, 1 ;.loc 2 712 24 + v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v134 v135 v136 v137, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v034 v035 v036 v037, 0 + ds_read_b128 v058 v059 v060 v061, v123 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v054 v055 v056 v057, 0 + ds_read_b128 v066 v067 v068 v069, v123 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + s_add_i32 s27, s21, 0x1f000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + v_add_lshl_u32 v006, v070, s29, 1 ;.loc 2 674 24 + v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v130 v131 v132 v133, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v034 v035 v036 v037, 0 + ds_read_b128 v062 v063 v064 v065, v125 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v054 v055 v056 v057, 0 + s_add_i32 s27, s21, 0xc000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen lds + v_add_lshl_u32 v006, v078, s29, 1 ;.loc 2 674 24 + ds_read_b128 v070 v071 v072 v073, v125 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v130 v131 v132 v133, 0 + v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v034 v035 v036 v037, 0 + ds_read_b128 v074 v075 v076 v077, v125 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v042 v043 v044 v045, 0 + v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v050 v051 v052 v053, 0 + s_add_i32 s27, s21, 0xd000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen lds + v_add_lshl_u32 v006, v086, s29, 1 ;.loc 2 674 24 + v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v054 v055 v056 v057, 0 ;.loc 2 1054 0 + ds_read_b128 v078 v079 v080 v081, v125 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v130 v131 v132 v133, 0 + v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v034 v035 v036 v037, 0 + ds_read_b128 v082 v083 v084 v085, v125 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v042 v043 v044 v045, 0 + s_add_i32 s27, s21, 0xe000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen lds + v_add_lshl_u32 v006, v119, s29, 1 ;.loc 2 674 24 + s_bitset1_b32 s26, 15 ;.loc 2 372 0 + v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v050 v051 v052 v053, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v054 v055 v056 v057, 0 + ds_read_b128 v086 v087 v088 v089, v125 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v130 v131 v132 v133, 0 + v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v134 v135 v136 v137, 0 + v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v034 v035 v036 v037, 0 + ds_read_b128 v090 v091 v092 v093, v125 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v038 v039 v040 v041, 0 ;.loc 2 1054 0 + s_add_i32 s27, s21, 0xf000 ;.loc 2 641 0 + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[4:7], 0 offen lds + v_add_lshl_u32 v006, v094, s26, 1 ;.loc 2 712 24 + v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v042 v043 v044 v045, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v050 v051 v052 v053, 0 + v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v054 v055 v056 v057, 0 + ds_read_b128 v154 v155 v156 v157, v125 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v126 v127 v128 v129, 0 ;.loc 2 1054 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v130 v131 v132 v133, 0 + v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v134 v135 v136 v137, 0 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v138 v139 v140 v141, v062 v063 v064 v065, a[252:255] + s_mov_b32 m0, s25 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + v_add_lshl_u32 v006, v096, s26, 1 ;.loc 2 712 24 + ds_read_b128 v054 v055 v056 v057, v121 offset:32768 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v138 v139 v140 v141, v070 v071 v072 v073, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v138 v139 v140 v141, v074 v075 v076 v077, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v138 v139 v140 v141, v078 v079 v080 v081, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v138 v139 v140 v141, v082 v083 v084 v085, a[236:239] + ds_read_b128 v042 v043 v044 v045, v123 offset:32768 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v138 v139 v140 v141, v086 v087 v088 v089, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v138 v139 v140 v141, v090 v091 v092 v093, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v138 v139 v140 v141, v154 v155 v156 v157, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v142 v143 v144 v145, v062 v063 v064 v065, a[220:223] + s_mov_b32 m0, s24 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + ds_read_b128 v034 v035 v036 v037, v123 offset:33792 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v142 v143 v144 v145, v070 v071 v072 v073, a[216:219] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v142 v143 v144 v145, v074 v075 v076 v077, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v142 v143 v144 v145, v078 v079 v080 v081, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v142 v143 v144 v145, v082 v083 v084 v085, a[204:207] + ds_read_b128 v026 v027 v028 v029, v123 offset:34816 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v142 v143 v144 v145, v086 v087 v088 v089, a[200:203] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v142 v143 v144 v145, v090 v091 v092 v093, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v142 v143 v144 v145, v154 v155 v156 v157, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v062 v063 v064 v065, a[188:191] + v_add_lshl_u32 v006, v098, s26, 1 ;.loc 2 712 24 + s_mov_b32 m0, s23 ;.loc 2 625 0 + buffer_load_dwordx4 v006, s[8:11], 0 offen lds + ds_read_b128 v014 v015 v016 v017, v123 offset:35840 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v070 v071 v072 v073, a[184:187] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] + ds_read_b128 v010 v011 v012 v013, v123 offset:36864 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v154 v155 v156 v157, a[160:163] + v_add_lshl_u32 v002, v100, s26, 1 ;.loc 2 712 24 + v_add_lshl_u32 v018, v102, s26, 1 ;.loc 2 674 24 + v_add_lshl_u32 v030, v104, s26, 1 + v_mfma_f32_16x16x32_bf16 a[156:159], v146 v147 v148 v149, v062 v063 v064 v065, a[156:159] ;.loc 2 999 0 + s_mov_b32 m0, s17 ;.loc 2 625 0 + buffer_load_dwordx4 v002, s[8:11], 0 offen lds + ds_read_b128 v006 v007 v008 v009, v123 offset:37888 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v146 v147 v148 v149, v070 v071 v072 v073, a[152:155] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v146 v147 v148 v149, v074 v075 v076 v077, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v146 v147 v148 v149, v078 v079 v080 v081, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v146 v147 v148 v149, v082 v083 v084 v085, a[140:143] + ds_read_b128 v002 v003 v004 v005, v123 offset:38912 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v146 v147 v148 v149, v086 v087 v088 v089, a[136:139] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v146 v147 v148 v149, v090 v091 v092 v093, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v146 v147 v148 v149, v154 v155 v156 v157, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v150 v151 v152 v153, v062 v063 v064 v065, a[124:127] + s_mov_b32 m0, s21 ;.loc 2 625 0 + buffer_load_dwordx4 v018, s[4:7], 0 offen lds + ds_read_b128 v018 v019 v020 v021, v125 offset:32768 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v150 v151 v152 v153, v070 v071 v072 v073, a[120:123] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v150 v151 v152 v153, v074 v075 v076 v077, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v150 v151 v152 v153, v078 v079 v080 v081, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v150 v151 v152 v153, v082 v083 v084 v085, a[108:111] + ds_read_b128 v022 v023 v024 v025, v125 offset:33792 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v150 v151 v152 v153, v086 v087 v088 v089, a[104:107] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v150 v151 v152 v153, v090 v091 v092 v093, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v150 v151 v152 v153, v154 v155 v156 v157, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v062 v063 v064 v065, a[92:95] + s_mov_b32 m0, s16 ;.loc 2 625 0 + buffer_load_dwordx4 v030, s[4:7], 0 offen lds + ds_read_b128 v030 v031 v032 v033, v125 offset:34816 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v070 v071 v072 v073, a[88:91] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v074 v075 v076 v077, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v078 v079 v080 v081, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v082 v083 v084 v085, a[76:79] + ds_read_b128 v038 v039 v040 v041, v125 offset:35840 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v086 v087 v088 v089, a[72:75] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v090 v091 v092 v093, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v154 v155 v156 v157, a[64:67] + v_add_lshl_u32 v046, v106, s26, 1 ;.loc 2 674 24 + v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v062 v063 v064 v065, a[60:63] ;.loc 2 999 0 + s_mov_b32 m0, s15 ;.loc 2 625 0 + buffer_load_dwordx4 v046, s[4:7], 0 offen lds + ds_read_b128 v046 v047 v048 v049, v125 offset:36864 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v070 v071 v072 v073, a[56:59] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] + ds_read_b128 v050 v051 v052 v053, v125 offset:37888 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v154 v155 v156 v157, a[32:35] + v_add_lshl_u32 v058, v108, s26, 1 ;.loc 2 674 24 + v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v062 v063 v064 v065, a[28:31] ;.loc 2 999 0 + s_mov_b32 m0, s14 ;.loc 2 625 0 + buffer_load_dwordx4 v058, s[4:7], 0 offen lds + ds_read_b128 v058 v059 v060 v061, v125 offset:38912 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v070 v071 v072 v073, a[24:27] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] + ds_read_b128 v062 v063 v064 v065, v125 offset:39936 ;.loc 1 317 12 + v_lshlrev_b32_e32 v071, 5, v097 ;.loc 2 779 0 + v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v154 v155 v156 v157, a[0:3] + v_lshlrev_b32_e32 v066, 14, v124 ;.loc 2 1225 0 + s_lshl_b32 s3, s3, 22 + v_and_b32_e32 v066, 0xffc00000, v066 + v_bitop3_b32 v068, v109, 3, v000 bitop3:0x48 + v_add_u32_e32 v066, s3, v066 + v_lshlrev_b32_e32 v067, 7, v117 + v_lshlrev_b32_e32 v069, 4, v068 + v_or3_b32 v066, v066, v067, v069 + v_lshlrev_b32_e32 v067, 14, v122 + v_and_b32_e32 v067, 0xffc00000, v067 + v_mov_b32_e32 v073, 7 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_sdwa v068, v073, v122 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 + v_or3_b32 v068, v067, v068, v069 + v_lshlrev_b32_e32 v067, 14, v120 + v_and_b32_e32 v067, 0xffc00000, v067 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_sdwa v070, v073, v120 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 + v_or3_b32 v070, v067, v070, v069 + v_lshlrev_b32_e32 v067, 14, v118 + v_and_b32_e32 v067, 0xffc00000, v067 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_e32 v072, 7, v113 + v_or3_b32 v072, v067, v072, v069 + v_lshlrev_b32_e32 v067, 14, v116 + v_and_b32_e32 v067, 0xffc00000, v067 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_e32 v074, 7, v111 + v_or3_b32 v074, v067, v074, v069 + v_lshlrev_b32_e32 v067, 14, v114 + v_and_b32_e32 v067, 0xffc00000, v067 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_sdwa v075, v073, v114 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 + v_or3_b32 v076, v067, v075, v069 + v_lshlrev_b32_e32 v067, 14, v112 + v_and_b32_e32 v067, 0xffc00000, v067 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_sdwa v073, v073, v112 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 + v_or3_b32 v078, v067, v073, v069 + v_lshlrev_b32_e32 v067, 14, v110 + v_and_b32_e32 v067, 0xffc00000, v067 + s_or_b32 s23, s2, 0x1fc0 + v_add_u32_e32 v067, s3, v067 + v_lshlrev_b32_e32 v073, 7, v107 + s_or_b32 s24, s2, 0xc0 + s_mov_b32 s2, 0xffc10000 + v_or3_b32 v080, v067, v073, v069 + s_mov_b64 s[14:15], 1 + s_mov_b32 s3, -1 + v_lshlrev_b32_e32 v067, 1, v115 + v_lshlrev_b32_e32 v069, 1, v071 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 + s_barrier +.LBB0_1: + s_mov_b64 s[16:17], s[14:15] ;.loc 2 0 0 is_stmt 0 + v_add_u32_e32 v082, s2, v068 ;.loc 2 625 0 is_stmt 1 + s_xor_b32 s14, s16, 1 ;.loc 2 1231 0 + s_lshl_b32 s16, s16, 15 ;.loc 1 317 12 + s_min_i32 s15, s24, s23 ;.loc 2 1237 31 + v_add_u32_e32 v083, s2, v066 ;.loc 2 625 0 + v_add_u32_e32 v107, 0x400040, v082 + v_or_b32_e32 v082, s16, v099 ;.loc 1 317 12 + s_lshl_b32 s25, s14, 15 ;.loc 2 640 0 + v_add_u32_e32 v071, s2, v080 ;.loc 2 625 0 + v_add_u32_e32 v073, s2, v078 + v_add_u32_e32 v075, s2, v076 + v_add_u32_e32 v077, s2, v074 + v_add_u32_e32 v079, s2, v072 + v_add_u32_e32 v081, s2, v070 + v_add_u32_e32 v109, 0x400040, v083 + s_lshl_b32 s17, s15, 8 ;.loc 2 372 0 + s_add_i32 s15, s16, s21 ;.loc 2 640 0 + v_add_u32_e32 v083, v082, v105 ;.loc 1 317 12 + v_add_u32_e32 v126, v082, v067 + s_add_i32 s16, s21, s25 ;.loc 2 640 0 + v_add3_u32 v158, v082, v069, s22 ;.loc 1 317 12 + v_or_b32_e32 v090, s25, v099 + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v054 v055 v056 v057, v018 v019 v020 v021, a[252:255] + v_add_u32_e32 v071, 0x400040, v071 ;.loc 2 625 0 + v_add_u32_e32 v073, 0x400040, v073 + v_add_u32_e32 v075, 0x400040, v075 + v_add_u32_e32 v077, 0x400040, v077 + v_add_u32_e32 v079, 0x400040, v079 + v_add_u32_e32 v081, 0x400040, v081 + ds_read_b128 v082 v083 v084 v085, v083 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v054 v055 v056 v057, v022 v023 v024 v025, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v054 v055 v056 v057, v030 v031 v032 v033, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v054 v055 v056 v057, v038 v039 v040 v041, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v054 v055 v056 v057, v046 v047 v048 v049, a[236:239] + ds_read_b128 v086 v087 v088 v089, v126 offset:16384 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v054 v055 v056 v057, v050 v051 v052 v053, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v054 v055 v056 v057, v058 v059 v060 v061, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v054 v055 v056 v057, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] + s_add_i32 s31, s16, 0x4000 ;.loc 2 640 0 + s_add_i32 s33, s16, 0x14000 ;.loc 2 641 0 + s_add_i32 s34, s16, 0x5000 ;.loc 2 640 0 + s_add_i32 s35, s16, 0x15000 ;.loc 2 641 0 + s_add_i32 s36, s16, 0x6000 ;.loc 2 640 0 + s_add_i32 s37, s16, 0x16000 ;.loc 2 641 0 + s_add_i32 s38, s16, 0x7000 ;.loc 2 640 0 + s_add_i32 s16, s16, 0x17000 ;.loc 2 641 0 + v_add_u32_e32 v054, v090, v105 ;.loc 1 317 12 + v_add_u32_e32 v170, v090, v067 + v_add3_u32 v171, v090, v069, s22 + s_mov_b32 m0, s33 ;.loc 2 625 0 + buffer_load_dwordx4 v071, s[8:11], 0 offen lds + ds_read_b128 v090 v091 v092 v093, v126 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] + ds_read_b128 v110 v111 v112 v113, v126 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v050 v051 v052 v053, a[200:203] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] + s_mov_b32 m0, s35 ;.loc 2 625 0 + buffer_load_dwordx4 v073, s[8:11], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] ;.loc 2 999 0 + ds_read_b128 v114 v115 v116 v117, v126 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] + ds_read_b128 v118 v119 v120 v121, v126 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v050 v051 v052 v053, a[168:171] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] + s_mov_b32 m0, s37 ;.loc 2 625 0 + buffer_load_dwordx4 v075, s[8:11], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] + ds_read_b128 v122 v123 v124 v125, v126 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] + ds_read_b128 v126 v127 v128 v129, v126 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v050 v051 v052 v053, a[136:139] ;.loc 2 999 0 + s_mov_b32 m0, s16 ;.loc 2 625 0 + buffer_load_dwordx4 v077, s[8:11], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + ds_read_b128 v130 v131 v132 v133, v158 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] + s_mov_b32 m0, s31 ;.loc 2 625 0 + buffer_load_dwordx4 v079, s[4:7], 0 offen lds + ds_read_b128 v134 v135 v136 v137, v158 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v050 v051 v052 v053, a[104:107] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + ds_read_b128 v138 v139 v140 v141, v158 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] + s_mov_b32 m0, s34 ;.loc 2 625 0 + buffer_load_dwordx4 v081, s[4:7], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] ;.loc 2 999 0 + ds_read_b128 v142 v143 v144 v145, v158 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v050 v051 v052 v053, a[72:75] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + ds_read_b128 v146 v147 v148 v149, v158 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] + s_mov_b32 m0, s36 ;.loc 2 625 0 + buffer_load_dwordx4 v107, s[4:7], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] + ds_read_b128 v150 v151 v152 v153, v158 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v050 v051 v052 v053, a[40:43] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + ds_read_b128 v154 v155 v156 v157, v158 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] ;.loc 2 999 0 + s_mov_b32 m0, s38 ;.loc 2 625 0 + buffer_load_dwordx4 v109, s[4:7], 0 offen lds + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] + v_add_lshl_u32 v162, s17, v094, 1 ;.loc 2 712 24 + v_add_lshl_u32 v163, s17, v096, 1 + v_add_lshl_u32 v164, s17, v098, 1 + v_add_lshl_u32 v165, s17, v100, 1 + v_add_lshl_u32 v166, s17, v102, 1 ;.loc 2 674 24 + v_add_lshl_u32 v167, s17, v104, 1 + v_add_lshl_u32 v168, s17, v106, 1 + v_add_lshl_u32 v169, s17, v108, 1 + s_add_i32 s17, s15, 0x10000 ;.loc 2 641 0 + s_add_i32 s25, s15, 0x11000 + s_add_i32 s26, s15, 0x12000 + s_add_i32 s27, s15, 0x13000 + s_add_i32 s28, s15, 0x1000 + s_add_i32 s29, s15, 0x2000 + s_add_i32 s30, s15, 0x3000 + ds_read_b128 v158 v159 v160 v161, v158 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v050 v051 v052 v053, a[8:11] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v082 v083 v084 v085, v130 v131 v132 v133, a[252:255] + s_mov_b32 m0, s17 ;.loc 2 625 0 + buffer_load_dwordx4 v162, s[8:11], 0 offen lds + ds_read_b128 v054 v055 v056 v057, v054 ;.loc 1 317 12 + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[248:251], v082 v083 v084 v085, v134 v135 v136 v137, a[248:251] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[244:247], v082 v083 v084 v085, v138 v139 v140 v141, a[244:247] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[240:243], v082 v083 v084 v085, v142 v143 v144 v145, a[240:243] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[236:239], v082 v083 v084 v085, v146 v147 v148 v149, a[236:239] + ds_read_b128 v042 v043 v044 v045, v170 ;.loc 1 317 12 + s_waitcnt lgkmcnt(4) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[232:235], v082 v083 v084 v085, v150 v151 v152 v153, a[232:235] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[228:231], v082 v083 v084 v085, v154 v155 v156 v157, a[228:231] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[224:227], v082 v083 v084 v085, v158 v159 v160 v161, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v086 v087 v088 v089, v130 v131 v132 v133, a[220:223] + s_mov_b32 m0, s25 ;.loc 2 625 0 + buffer_load_dwordx4 v163, s[8:11], 0 offen lds + ds_read_b128 v034 v035 v036 v037, v170 offset:1024 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v086 v087 v088 v089, v134 v135 v136 v137, a[216:219] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v086 v087 v088 v089, v138 v139 v140 v141, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v086 v087 v088 v089, v142 v143 v144 v145, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v086 v087 v088 v089, v146 v147 v148 v149, a[204:207] + ds_read_b128 v026 v027 v028 v029, v170 offset:2048 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v086 v087 v088 v089, v150 v151 v152 v153, a[200:203] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v086 v087 v088 v089, v154 v155 v156 v157, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v086 v087 v088 v089, v158 v159 v160 v161, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v090 v091 v092 v093, v130 v131 v132 v133, a[188:191] + s_mov_b32 m0, s26 ;.loc 2 625 0 + buffer_load_dwordx4 v164, s[8:11], 0 offen lds + ds_read_b128 v014 v015 v016 v017, v170 offset:3072 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v090 v091 v092 v093, v134 v135 v136 v137, a[184:187] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v090 v091 v092 v093, v138 v139 v140 v141, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v090 v091 v092 v093, v142 v143 v144 v145, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v090 v091 v092 v093, v146 v147 v148 v149, a[172:175] + ds_read_b128 v010 v011 v012 v013, v170 offset:4096 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v090 v091 v092 v093, v150 v151 v152 v153, a[168:171] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v090 v091 v092 v093, v154 v155 v156 v157, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v090 v091 v092 v093, v158 v159 v160 v161, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v110 v111 v112 v113, v130 v131 v132 v133, a[156:159] + s_mov_b32 m0, s27 ;.loc 2 625 0 + buffer_load_dwordx4 v165, s[8:11], 0 offen lds + ds_read_b128 v006 v007 v008 v009, v170 offset:5120 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v110 v111 v112 v113, v134 v135 v136 v137, a[152:155] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v110 v111 v112 v113, v138 v139 v140 v141, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v110 v111 v112 v113, v142 v143 v144 v145, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v110 v111 v112 v113, v146 v147 v148 v149, a[140:143] + ds_read_b128 v002 v003 v004 v005, v170 offset:6144 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[136:139], v110 v111 v112 v113, v150 v151 v152 v153, a[136:139] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v110 v111 v112 v113, v154 v155 v156 v157, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v110 v111 v112 v113, v158 v159 v160 v161, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v114 v115 v116 v117, v130 v131 v132 v133, a[124:127] + s_mov_b32 m0, s15 ;.loc 2 625 0 + buffer_load_dwordx4 v166, s[4:7], 0 offen lds + ds_read_b128 v018 v019 v020 v021, v171 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v114 v115 v116 v117, v134 v135 v136 v137, a[120:123] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v114 v115 v116 v117, v138 v139 v140 v141, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v114 v115 v116 v117, v142 v143 v144 v145, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v114 v115 v116 v117, v146 v147 v148 v149, a[108:111] + ds_read_b128 v022 v023 v024 v025, v171 offset:1024 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v114 v115 v116 v117, v150 v151 v152 v153, a[104:107] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v114 v115 v116 v117, v154 v155 v156 v157, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v114 v115 v116 v117, v158 v159 v160 v161, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v118 v119 v120 v121, v130 v131 v132 v133, a[92:95] + s_mov_b32 m0, s28 ;.loc 2 625 0 + buffer_load_dwordx4 v167, s[4:7], 0 offen lds + ds_read_b128 v030 v031 v032 v033, v171 offset:2048 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v118 v119 v120 v121, v134 v135 v136 v137, a[88:91] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v118 v119 v120 v121, v138 v139 v140 v141, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v118 v119 v120 v121, v142 v143 v144 v145, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v118 v119 v120 v121, v146 v147 v148 v149, a[76:79] + ds_read_b128 v038 v039 v040 v041, v171 offset:3072 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v118 v119 v120 v121, v150 v151 v152 v153, a[72:75] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v118 v119 v120 v121, v154 v155 v156 v157, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v118 v119 v120 v121, v158 v159 v160 v161, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v122 v123 v124 v125, v130 v131 v132 v133, a[60:63] + s_mov_b32 m0, s29 ;.loc 2 625 0 + buffer_load_dwordx4 v168, s[4:7], 0 offen lds + ds_read_b128 v046 v047 v048 v049, v171 offset:4096 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v122 v123 v124 v125, v134 v135 v136 v137, a[56:59] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v122 v123 v124 v125, v138 v139 v140 v141, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v122 v123 v124 v125, v142 v143 v144 v145, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v122 v123 v124 v125, v146 v147 v148 v149, a[44:47] + ds_read_b128 v050 v051 v052 v053, v171 offset:5120 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v122 v123 v124 v125, v150 v151 v152 v153, a[40:43] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v122 v123 v124 v125, v154 v155 v156 v157, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v122 v123 v124 v125, v158 v159 v160 v161, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v126 v127 v128 v129, v130 v131 v132 v133, a[28:31] + s_mov_b32 m0, s30 ;.loc 2 625 0 + buffer_load_dwordx4 v169, s[4:7], 0 offen lds + ds_read_b128 v058 v059 v060 v061, v171 offset:6144 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v126 v127 v128 v129, v134 v135 v136 v137, a[24:27] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v126 v127 v128 v129, v138 v139 v140 v141, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v126 v127 v128 v129, v142 v143 v144 v145, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v126 v127 v128 v129, v146 v147 v148 v149, a[12:15] + ds_read_b128 v062 v063 v064 v065, v171 offset:7168 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v126 v127 v128 v129, v150 v151 v152 v153, a[8:11] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v126 v127 v128 v129, v154 v155 v156 v157, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v126 v127 v128 v129, v158 v159 v160 v161, a[0:3] + s_add_u32 s2, s2, 0x8000 ;.loc 2 1225 0 + s_addc_u32 s3, s3, 0 + s_add_i32 s24, s24, 64 + s_cmp_lg_u64 s[2:3], 0 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 + s_barrier +.JUMP.LBB0_1: + s_cbranch_scc1 .LBB0_1 ;.loc 2 1225 0 + s_load_dwordx2 s[0:1], s[0:1], 0x0 ;.loc 1 289 24 + s_lshl_b32 s4, s14, 14 ;.loc 1 0 0 is_stmt 0 + s_lshl_b32 s4, s4, 1 ;.loc 1 317 12 is_stmt 1 + v_add3_u32 v067, v105, s4, v099 + s_waitcnt lgkmcnt(0) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v054 v055 v056 v057, v018 v019 v020 v021, a[252:255] + ds_read_b128 v068 v069 v070 v071, v067 offset:16384 ;.loc 1 317 12 + v_add3_u32 v067, v103, s4, v099 + v_mfma_f32_16x16x32_bf16 a[248:251], v054 v055 v056 v057, v022 v023 v024 v025, a[248:251] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[244:247], v054 v055 v056 v057, v030 v031 v032 v033, a[244:247] + v_mfma_f32_16x16x32_bf16 a[240:243], v054 v055 v056 v057, v038 v039 v040 v041, a[240:243] + v_mfma_f32_16x16x32_bf16 a[236:239], v054 v055 v056 v057, v046 v047 v048 v049, a[236:239] + ds_read_b128 v072 v073 v074 v075, v067 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[232:235], v054 v055 v056 v057, v050 v051 v052 v053, a[232:235] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[228:231], v054 v055 v056 v057, v058 v059 v060 v061, a[228:231] + v_mfma_f32_16x16x32_bf16 a[224:227], v054 v055 v056 v057, v062 v063 v064 v065, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] + ds_read_b128 v076 v077 v078 v079, v067 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] + ds_read_b128 v080 v081 v082 v083, v067 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v050 v051 v052 v053, a[200:203] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] + ds_read_b128 v084 v085 v086 v087, v067 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] + ds_read_b128 v054 v055 v056 v057, v067 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v050 v051 v052 v053, a[168:171] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] + ds_read_b128 v042 v043 v044 v045, v067 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] + ds_read_b128 v034 v035 v036 v037, v067 offset:22528 ;.loc 1 317 12 + v_add3_u32 v067, v101, s4, v099 + s_mov_b32 s3, 0x27000 + s_mov_b32 s2, -1 + s_and_b32 s1, s1, 0xffff ;.loc 1 289 24 + v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v050 v051 v052 v053, a[136:139] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] + ds_read_b128 v026 v027 v028 v029, v067 offset:16384 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] + ds_read_b128 v088 v089 v090 v091, v067 offset:17408 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v050 v051 v052 v053, a[104:107] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] + ds_read_b128 v014 v015 v016 v017, v067 offset:18432 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] + ds_read_b128 v098 v099 v100 v101, v067 offset:19456 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v050 v051 v052 v053, a[72:75] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] + ds_read_b128 v010 v011 v012 v013, v067 offset:20480 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] + ds_read_b128 v102 v103 v104 v105, v067 offset:21504 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v050 v051 v052 v053, a[40:43] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] + ds_read_b128 v006 v007 v008 v009, v067 offset:22528 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] + ds_read_b128 v018 v019 v020 v021, v067 offset:23552 ;.loc 1 317 12 + v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v050 v051 v052 v053, a[8:11] ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] + v_or_b32_e32 v066, 0x70, v001 ;.loc 2 755 0 + s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 + s_barrier + s_waitcnt lgkmcnt(7) ;.loc 2 999 0 + v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v026 v027 v028 v029, a[252:255] + s_waitcnt lgkmcnt(6) + v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] + s_waitcnt lgkmcnt(5) + v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v098 v099 v100 v101, a[240:243] + s_waitcnt lgkmcnt(3) + v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v102 v103 v104 v105, a[232:235] + s_waitcnt lgkmcnt(1) + v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] + s_waitcnt lgkmcnt(0) + v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] + v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v026 v027 v028 v029, a[220:223] + v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] + v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] + v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v098 v099 v100 v101, a[208:211] + v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] + v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v102 v103 v104 v105, a[200:203] + v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] + v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] + v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v026 v027 v028 v029, a[188:191] + v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] + v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] + v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v098 v099 v100 v101, a[176:179] + v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] + v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v102 v103 v104 v105, a[168:171] + v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] + v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] + v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v026 v027 v028 v029, a[156:159] + v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] + v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] + v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v098 v099 v100 v101, a[144:147] + v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] + v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v102 v103 v104 v105, a[136:139] + v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] + v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] + v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v026 v027 v028 v029, a[124:127] + v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] + v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] + v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v098 v099 v100 v101, a[112:115] + v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] + v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v102 v103 v104 v105, a[104:107] + v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] + v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] + v_mfma_f32_16x16x32_bf16 a[92:95], v054 v055 v056 v057, v026 v027 v028 v029, a[92:95] + v_mfma_f32_16x16x32_bf16 a[88:91], v054 v055 v056 v057, v088 v089 v090 v091, a[88:91] + v_mfma_f32_16x16x32_bf16 a[84:87], v054 v055 v056 v057, v014 v015 v016 v017, a[84:87] + v_mfma_f32_16x16x32_bf16 a[80:83], v054 v055 v056 v057, v098 v099 v100 v101, a[80:83] + v_mfma_f32_16x16x32_bf16 a[76:79], v054 v055 v056 v057, v010 v011 v012 v013, a[76:79] + v_mfma_f32_16x16x32_bf16 a[72:75], v054 v055 v056 v057, v102 v103 v104 v105, a[72:75] + v_mfma_f32_16x16x32_bf16 a[68:71], v054 v055 v056 v057, v006 v007 v008 v009, a[68:71] + v_mfma_f32_16x16x32_bf16 a[64:67], v054 v055 v056 v057, v018 v019 v020 v021, a[64:67] + v_mfma_f32_16x16x32_bf16 a[60:63], v042 v043 v044 v045, v026 v027 v028 v029, a[60:63] + v_mfma_f32_16x16x32_bf16 a[56:59], v042 v043 v044 v045, v088 v089 v090 v091, a[56:59] + v_mfma_f32_16x16x32_bf16 a[52:55], v042 v043 v044 v045, v014 v015 v016 v017, a[52:55] + v_mfma_f32_16x16x32_bf16 a[48:51], v042 v043 v044 v045, v098 v099 v100 v101, a[48:51] + v_mfma_f32_16x16x32_bf16 a[44:47], v042 v043 v044 v045, v010 v011 v012 v013, a[44:47] + v_mfma_f32_16x16x32_bf16 a[40:43], v042 v043 v044 v045, v102 v103 v104 v105, a[40:43] + v_mfma_f32_16x16x32_bf16 a[36:39], v042 v043 v044 v045, v006 v007 v008 v009, a[36:39] + v_mfma_f32_16x16x32_bf16 a[32:35], v042 v043 v044 v045, v018 v019 v020 v021, a[32:35] + v_mfma_f32_16x16x32_bf16 a[28:31], v034 v035 v036 v037, v026 v027 v028 v029, a[28:31] + v_mfma_f32_16x16x32_bf16 a[24:27], v034 v035 v036 v037, v088 v089 v090 v091, a[24:27] + v_mfma_f32_16x16x32_bf16 a[20:23], v034 v035 v036 v037, v014 v015 v016 v017, a[20:23] + v_mfma_f32_16x16x32_bf16 a[16:19], v034 v035 v036 v037, v098 v099 v100 v101, a[16:19] + v_mfma_f32_16x16x32_bf16 a[12:15], v034 v035 v036 v037, v010 v011 v012 v013, a[12:15] + v_mfma_f32_16x16x32_bf16 a[8:11], v034 v035 v036 v037, v102 v103 v104 v105, a[8:11] + v_mfma_f32_16x16x32_bf16 a[4:7], v034 v035 v036 v037, v006 v007 v008 v009, a[4:7] + v_mfma_f32_16x16x32_bf16 a[0:3], v034 v035 v036 v037, v018 v019 v020 v021, a[0:3] + v_lshlrev_b32_e32 v002, 2, v095 ;.loc 2 1379 0 + v_accvgpr_read_b32 v003, a252 ;.loc 2 1389 22 + v_and_or_b32 v004, v002, 12, v001 ;.loc 2 1387 0 + v_cvt_pk_bf16_f32 v005, v003, s0 ;.loc 2 1390 0 + v_lshlrev_b32_e32 v003, 1, v097 ;.loc 1 330 12 + v_lshl_or_b32 v004, v004, 9, v003 + s_barrier ;.loc 2 1381 0 + ds_write_b16 v004, v005 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a253 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a254 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a255 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a248 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a249 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a250 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a251 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a244 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a245 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a246 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a247 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a240 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a241 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a242 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a243 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a236 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a237 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a238 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a239 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a232 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a233 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a234 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a235 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a228 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a229 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a230 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a231 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a224 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a225 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a226 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a227 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:1760 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a220 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a221 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a222 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a223 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a216 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a217 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a218 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a219 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9760 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a212 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8256 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a213 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8768 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a214 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9280 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a215 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9792 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a208 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8288 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a209 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8800 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a210 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9312 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a211 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9824 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a204 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8320 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a205 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8832 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a206 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9344 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a207 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9856 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a200 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8352 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a201 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8864 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a202 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9376 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a203 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9888 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a196 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8384 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a197 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8896 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a198 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9408 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a199 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9920 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a192 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8416 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a193 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:8928 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a194 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9440 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a195 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:9952 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a188 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16384 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a189 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16896 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a190 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17408 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a191 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17920 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a184 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16416 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a185 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16928 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a186 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17440 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a187 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17952 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a180 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16448 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a181 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16960 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a182 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17472 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a183 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17984 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a176 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16480 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a177 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16992 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a178 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17504 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a179 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:18016 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a172 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a173 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a174 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a175 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:18048 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a168 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a169 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a170 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a171 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:18080 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a164 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a165 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a166 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a167 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:18112 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a160 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:16608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a161 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a162 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:17632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a163 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v005 offset:18144 ;.loc 1 330 12 + v_or3_b32 v001, v001, 48, v002 ;.loc 2 1387 0 + v_accvgpr_read_b32 v005, a156 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 + ds_write_b16 v001, v005 + v_accvgpr_read_b32 v005, a157 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a158 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a159 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a152 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a153 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a154 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a155 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a148 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a149 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a150 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a151 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a144 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a145 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a146 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a147 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a140 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a141 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a142 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a143 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a136 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a137 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a138 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a139 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a132 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a133 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a134 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a135 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a128 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a129 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a130 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v005, a131 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v005 offset:1760 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a124 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32768 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a125 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33280 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a126 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33792 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a127 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34304 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a120 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32800 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a121 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33312 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a122 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33824 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a123 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34336 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a116 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32832 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a117 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33344 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a118 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33856 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a119 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34368 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a112 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32864 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a113 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33376 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a114 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33888 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a115 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34400 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a108 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32896 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a109 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33408 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a110 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33920 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a111 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34432 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a104 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32928 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a105 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33440 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a106 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33952 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a107 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34464 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a100 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32960 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a101 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33472 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a102 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33984 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a103 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34496 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a96 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:32992 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a97 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:33504 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a98 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34016 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a99 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:34528 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a92 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:40960 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a93 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41472 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a94 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41984 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a95 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42496 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a88 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:40992 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a89 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41504 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a90 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42016 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a91 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42528 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a84 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41024 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a85 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41536 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a86 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42048 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a87 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42560 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a80 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41056 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a81 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41568 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a82 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42080 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a83 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42592 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a76 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41088 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a77 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41600 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a78 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42112 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a79 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42624 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a72 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41120 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a73 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41632 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a74 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42144 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a75 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42656 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a68 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41152 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a69 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41664 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a70 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42176 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a71 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42688 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a64 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41184 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a65 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:41696 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a66 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42208 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a67 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:42720 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a60 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49152 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a61 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49664 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a62 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50176 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a63 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50688 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a56 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49184 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a57 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49696 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a58 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50208 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a59 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50720 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a52 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49216 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a53 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49728 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a54 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50240 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a55 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50752 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a48 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49248 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a49 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49760 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a50 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50272 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a51 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50784 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a44 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49280 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a45 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49792 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a46 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50304 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a47 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50816 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a40 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49312 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a41 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49824 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a42 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50336 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a43 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50848 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a36 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49344 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a37 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49856 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a38 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50368 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a39 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50880 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a32 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49376 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a33 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:49888 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a34 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50400 ;.loc 1 330 12 + v_accvgpr_read_b32 v001, a35 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 + ds_write_b16 v004, v001 offset:50912 ;.loc 1 330 12 + v_or_b32_e32 v001, v002, v066 ;.loc 2 1387 0 + v_accvgpr_read_b32 v002, a28 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 + ds_write_b16 v001, v002 + v_accvgpr_read_b32 v002, a29 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:512 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a30 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1024 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a31 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1536 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a24 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:32 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a25 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:544 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a26 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1056 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a27 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1568 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a20 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:64 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a21 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:576 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a22 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1088 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a23 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1600 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a16 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:96 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a17 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:608 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a18 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1120 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a19 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1632 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a12 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:128 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a13 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:640 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a14 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1152 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a15 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1664 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a8 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:160 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a9 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:672 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a10 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1184 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a11 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1696 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a4 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:192 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a5 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:704 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a6 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1216 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a7 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1728 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a0 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:224 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a1 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:736 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a2 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + ds_write_b16 v001, v002 offset:1248 ;.loc 1 330 12 + v_accvgpr_read_b32 v002, a3 ;.loc 2 1389 22 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 + v_lshrrev_b32_e32 v004, 5, v000 ;.loc 2 1433 0 + ds_write_b16 v001, v002 offset:1760 ;.loc 1 330 12 + v_or_b32_e32 v002, s20, v004 ;.loc 2 1435 0 + v_mov_b32_e32 v003, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 1436 28 + v_lshlrev_b32_e32 v003, 3, v000 + s_waitcnt lgkmcnt(0) ;.loc 2 1430 0 + s_barrier + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_4: + s_cbranch_execz .LBB0_4 + v_and_b32_e32 v000, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v001, 1, v000 ;.loc 1 317 12 + v_lshl_or_b32 v001, v004, 9, v001 + ds_read_b128 v006 v007 v008 v009, v001 + v_or_b32_e32 v000, s18, v000 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v001, 13, v002 + v_add_lshl_u32 v000, v000, v001, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_4: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_6: + s_cbranch_execz .LBB0_6 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_6: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 16, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_8: + s_cbranch_execz .LBB0_8 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_8: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 24, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_10: + s_cbranch_execz .LBB0_10 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_10: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 32, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_12: + s_cbranch_execz .LBB0_12 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_12: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 40, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_14: + s_cbranch_execz .LBB0_14 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_14: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 48, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_16: + s_cbranch_execz .LBB0_16 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_16: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 56, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_18: + s_cbranch_execz .LBB0_18 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_18: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 64, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_20: + s_cbranch_execz .LBB0_20 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_20: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x48, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_22: + s_cbranch_execz .LBB0_22 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_22: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x50, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_24: + s_cbranch_execz .LBB0_24 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_24: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x58, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_26: + s_cbranch_execz .LBB0_26 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_26: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x60, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_28: + s_cbranch_execz .LBB0_28 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_28: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x68, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_30: + s_cbranch_execz .LBB0_30 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_30: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x70, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_32: + s_cbranch_execz .LBB0_32 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_32: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x78, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_34: + s_cbranch_execz .LBB0_34 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_34: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x80, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_36: + s_cbranch_execz .LBB0_36 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_36: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x88, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_38: + s_cbranch_execz .LBB0_38 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_38: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x90, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_40: + s_cbranch_execz .LBB0_40 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_40: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0x98, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_42: + s_cbranch_execz .LBB0_42 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_42: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xa0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_44: + s_cbranch_execz .LBB0_44 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_44: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xa8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_46: + s_cbranch_execz .LBB0_46 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_46: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xb0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_48: + s_cbranch_execz .LBB0_48 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_48: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xb8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_50: + s_cbranch_execz .LBB0_50 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_50: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xc0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_52: + s_cbranch_execz .LBB0_52 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_52: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xc8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_54: + s_cbranch_execz .LBB0_54 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_54: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xd0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_56: + s_cbranch_execz .LBB0_56 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_56: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xd8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_58: + s_cbranch_execz .LBB0_58 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_58: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xe0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_60: + s_cbranch_execz .LBB0_60 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_60: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xe8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_62: + s_cbranch_execz .LBB0_62 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_62: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xf0, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_64: + s_cbranch_execz .LBB0_64 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v005 + ds_read_b128 v006 v007 v008 v009, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen +.LBB0_64: + s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 + v_or_b32_e32 v002, 0xf8, v004 ;.loc 2 1433 0 is_stmt 1 + v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 + v_mov_b32_e32 v001, s19 + v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 + s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 +.JUMP.LBB0_66: + s_cbranch_execz .LBB0_66 + v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 + v_lshlrev_b32_e32 v003, 1, v001 ;.loc 1 317 12 + v_lshl_or_b32 v002, v002, 9, v003 + ds_read_b128 v002 v003 v004 v005, v002 + v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 + v_lshlrev_b32_e32 v000, 13, v000 + v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 + s_waitcnt lgkmcnt(0) + buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen +.LBB0_66: + s_endpgm ;.loc 2 327 0 +.Lfunc_end0: + .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 + .cfi_endproc + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 172 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 + .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 + .p2alignl 6, 3212836864 + .fill 256, 4, 3212836864 + .section .AMDGPU.gpr_maximums,"",@progbits + .set amdgpu.max_num_vgpr, 0 + .set amdgpu.max_num_agpr, 0 + .set amdgpu.max_num_sgpr, 0 + .set amdgpu.max_num_named_barrier, 0 + .text + .section .debug_abbrev,"",@progbits + .byte 1 + .byte 17 + .byte 0 + .byte 37 + .byte 14 + .byte 19 + .byte 5 + .byte 3 + .byte 14 + .byte 16 + .byte 23 + .byte 17 + .byte 1 + .byte 18 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .section .debug_info,"",@progbits +... + .end_amdgpu_metadata + .section .debug_line,"",@progbits +.Lline_table_start0: From 1cbcd5e9c6f5bb47a411e9490eccd02a515b199a Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 09:44:37 +0000 Subject: [PATCH 081/118] Add fp8_gemm_4wave pure ISA (8192x8192x16384, ~2973 TFLOPS) Cleaned (gen_pure.py) ISA for the fp8 4wave reference kernel, for side-by-side study vs our bf16 hgemm. Notable: its A/B buffer_load_lds use soffset (s33) to carry the K-step while keeping the per-lane vaddr VGPR constant, and omit sc0 -- contrast with our bf16 which recomputes the vaddr offset per tile. Co-Authored-By: Claude Opus 4 (1M context) --- .../snapshots/fp8_gemm_4wave_16k_pure.s | 27992 ++++++++++++++++ 1 file changed, 27992 insertions(+) create mode 100644 resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s diff --git a/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s b/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s new file mode 100644 index 000000000..b4878b56d --- /dev/null +++ b/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s @@ -0,0 +1,27992 @@ + .amdgcn_target "amdgcn-amd-amdhsa--gfx950" + .amdhsa_code_object_version 6 + .text + .globl kernel_gemm_0 + .p2align 8 + .type kernel_gemm_0,@function +kernel_gemm_0: +.Lfunc_begin0: + .cfi_sections .debug_frame + .cfi_startproc + .file 1 "/root/FlyDSL/kernels" "fp8_gemm_4wave.py" + s_load_dwordx2 s[4:5], s[0:1], 0x0 ;.loc 1 418 0 prologue_end + s_load_dword s6, s[0:1], 0x8 + s_load_dwordx4 s[28:31], s[0:1], 0x10 + s_load_dwordx4 s[12:15], s[0:1], 0x28 + s_load_dwordx2 s[34:35], s[0:1], 0x38 + v_mov_b32_e32 v009, v000 + s_load_dword s0, s[0:1], 0x4c ;.loc 1 289 0 + v_lshrrev_b32_e32 v005, 6, v009 ;.loc 1 127 0 + v_lshlrev_b32_e32 v001, 3, v005 ;.loc 1 289 0 + s_waitcnt lgkmcnt(0) ;.loc 1 129 0 + s_add_i32 s3, s35, 0xff + s_ashr_i32 s7, s3, 31 + s_lshr_b32 s7, s7, 24 + s_add_i32 s7, s3, s7 + s_ashr_i32 s16, s7, 8 + s_and_b32 s7, s7, 0xffffff00 + s_cmp_lg_u32 s3, s7 + s_cselect_b64 s[8:9], -1, 0 + s_cmp_lt_i32 s3, 0 + s_cselect_b64 s[10:11], -1, 0 + s_and_b64 s[8:9], s[10:11], s[8:9] + s_subb_u32 s7, s16, 0 + s_add_i32 s3, s34, 0xff ;.loc 1 131 0 + s_ashr_i32 s8, s3, 31 + s_lshr_b32 s8, s8, 24 + s_add_i32 s8, s3, s8 + s_ashr_i32 s20, s8, 8 + s_and_b32 s8, s8, 0xffffff00 + s_cmp_lg_u32 s3, s8 + s_cselect_b64 s[8:9], -1, 0 + s_cmp_lt_i32 s3, 0 + s_cselect_b64 s[10:11], -1, 0 + s_and_b64 s[8:9], s[10:11], s[8:9] + s_subb_u32 s3, s20, 0 + s_abs_i32 s11, s7 + v_cvt_f32_u32_e32 v000, s11 + s_sub_i32 s16, 0, s11 + s_mul_i32 s21, s7, s3 + s_ashr_i32 s3, s2, 31 + v_rcp_iflag_f32_e32 v000, v000 + s_ashr_i32 s10, s7, 31 + s_xor_b32 s22, s3, s10 + s_abs_i32 s10, s2 + v_mul_f32_e32 v000, 0x4f7ffffe, v000 + v_cvt_u32_f32_e32 v000, v000 + v_lshlrev_b32_e32 v006, 4, v009 ;.loc 1 289 0 + s_movk_i32 s59, 0x70 + v_lshlrev_b32_e32 v005, 10, v005 ;.loc 1 299 0 + v_readfirstlane_b32 s17, v000 ;.loc 1 131 0 + s_mul_i32 s16, s16, s17 + s_mul_hi_u32 s16, s17, s16 + s_add_i32 s17, s17, s16 + s_mul_hi_u32 s16, s10, s17 + s_mul_i32 s17, s16, s11 + s_sub_i32 s10, s10, s17 + s_add_i32 s17, s16, 1 + s_sub_i32 s18, s10, s11 + s_cmp_ge_u32 s10, s11 + s_cselect_b32 s16, s17, s16 + s_cselect_b32 s10, s18, s10 + s_add_i32 s17, s16, 1 + s_cmp_ge_u32 s10, s11 + s_cselect_b32 s10, s17, s16 + s_xor_b32 s23, s10, s22 + s_sub_i32 s10, s23, s22 + s_mul_i32 s24, s10, s7 + s_cmp_lg_u32 s2, s24 + s_cselect_b64 s[10:11], -1, 0 + s_cmp_lt_i32 s2, 0 + s_cselect_b64 s[16:17], -1, 0 + s_xor_b32 s18, s7, s2 + s_cmp_lt_i32 s18, 0 + s_cselect_b64 s[18:19], -1, 0 + s_and_b64 s[10:11], s[18:19], s[10:11] + s_subb_u32 s18, s23, s22 + s_lshr_b32 s3, s3, 29 + s_add_i32 s3, s2, s3 + s_sub_i32 s19, s2, s24 + s_ashr_i32 s22, s3, 3 + s_and_b32 s3, s3, -8 + s_cmp_lg_u32 s2, s3 + s_cselect_b64 s[10:11], -1, 0 + s_and_b64 s[10:11], s[16:17], s[10:11] + s_subb_u32 s16, s22, 0 + s_sub_i32 s17, s2, s3 + s_ashr_i32 s2, s21, 31 + s_lshr_b32 s2, s2, 29 + s_add_i32 s2, s21, s2 + s_ashr_i32 s22, s2, 3 + s_and_b32 s2, s2, -8 + s_cmp_lg_u32 s21, s2 + s_cselect_b64 s[2:3], -1, 0 + s_cmp_lt_i32 s21, 0 + s_cselect_b64 s[10:11], -1, 0 + s_and_b64 s[2:3], s[10:11], s[2:3] + s_subb_u32 s2, s22, 0 + s_mul_i32 s2, s2, s17 + s_add_i32 s16, s16, s2 + s_lshl_b32 s2, s7, 2 + s_abs_i32 s10, s2 + v_cvt_f32_u32_e32 v000, s10 + s_sub_i32 s11, 0, s10 + s_xor_b32 s3, s16, s2 + s_ashr_i32 s17, s3, 31 + v_rcp_iflag_f32_e32 v000, v000 + s_abs_i32 s3, s16 + .file 2 "/root/FlyDSL/python/flydsl/expr/rocdl" "universal.py" + s_mov_b32 s24, s14 ;.loc 2 159 14 + v_mov_b32_e32 v011, v009 + v_mul_f32_e32 v000, 0x4f7ffffe, v000 ;.loc 1 131 0 + v_cvt_u32_f32_e32 v000, v000 + s_nop 0 + v_readfirstlane_b32 s22, v000 + s_mul_i32 s11, s11, s22 + s_mul_hi_u32 s11, s22, s11 + s_add_i32 s22, s22, s11 + s_mul_hi_u32 s11, s3, s22 + s_mul_i32 s22, s11, s10 + s_sub_i32 s3, s3, s22 + s_add_i32 s22, s11, 1 + s_sub_i32 s23, s3, s10 + s_cmp_ge_u32 s3, s10 + s_cselect_b32 s11, s22, s11 + s_cselect_b32 s3, s23, s3 + s_add_i32 s22, s11, 1 + s_cmp_ge_u32 s3, s10 + s_cselect_b32 s3, s22, s11 + s_xor_b32 s22, s3, s17 + s_sub_i32 s3, s22, s17 + s_mul_i32 s23, s3, s2 + s_cmp_lg_u32 s16, s23 + s_cselect_b64 s[2:3], -1, 0 + s_xor_b32 s7, s16, s7 + s_cmp_lt_i32 s7, 0 + s_cselect_b64 s[10:11], -1, 0 + s_and_b64 s[2:3], s[10:11], s[2:3] + s_subb_u32 s2, s22, s17 + s_sub_i32 s7, s16, s23 + s_lshl_b32 s10, s2, 2 + s_cmp_lg_u64 s[8:9], 0 + s_subb_u32 s8, s20, s10 + s_min_i32 s2, s8, 4 ;.loc 1 39 11 + s_abs_i32 s9, s2 ;.loc 1 131 0 + v_cvt_f32_u32_e32 v000, s9 + s_sub_i32 s16, 0, s9 + s_xor_b32 s3, s7, s2 + s_ashr_i32 s11, s3, 31 + v_rcp_iflag_f32_e32 v000, v000 + s_abs_i32 s3, s7 + v_mul_f32_e32 v000, 0x4f7ffffe, v000 + v_cvt_u32_f32_e32 v000, v000 + s_nop 0 + v_readfirstlane_b32 s17, v000 + s_mul_i32 s16, s16, s17 + s_mul_hi_u32 s16, s17, s16 + s_add_i32 s17, s17, s16 + s_mul_hi_u32 s16, s3, s17 + s_mul_i32 s17, s16, s9 + s_sub_i32 s3, s3, s17 + s_add_i32 s17, s16, 1 + s_sub_i32 s20, s3, s9 + s_cmp_ge_u32 s3, s9 + s_cselect_b32 s16, s17, s16 + s_cselect_b32 s3, s20, s3 + s_add_i32 s17, s16, 1 + s_cmp_ge_u32 s3, s9 + s_cselect_b32 s3, s17, s16 + s_xor_b32 s16, s3, s11 + s_sub_i32 s3, s16, s11 + s_mul_i32 s17, s2, s3 + s_cmp_lg_u32 s7, s17 + s_cselect_b64 s[2:3], -1, 0 + s_xor_b32 s8, s8, s7 + s_cmp_lt_i32 s8, 0 + s_cselect_b64 s[8:9], -1, 0 + s_and_b64 s[2:3], s[8:9], s[2:3] + s_subb_u32 s11, s16, s11 + s_sub_i32 s2, s7, s17 + s_add_i32 s10, s10, s2 + s_cmpk_lt_i32 s21, 0x401 + s_cselect_b64 s[2:3], -1, 0 + s_and_b32 s7, s21, 7 + s_cselect_b64 s[8:9], -1, 0 + v_lshrrev_b32_e32 v000, 3, v009 ;.loc 1 289 0 + s_or_b64 s[2:3], s[2:3], s[8:9] ;.loc 1 131 0 + v_and_or_b32 v000, v000, 7, v001 ;.loc 1 289 0 + s_and_b64 s[2:3], s[2:3], exec ;.loc 1 66 12 + v_lshlrev_b32_e32 v001, 3, v000 ;.loc 1 289 0 + s_cselect_b32 s2, s18, s10 ;.loc 1 66 12 + s_cselect_b32 s7, s19, s11 ;.loc 1 66 55 is_stmt 0 + s_mov_b32 s8, s28 ;.loc 2 159 14 is_stmt 1 + s_bfe_u32 s28, s0, 0xa0006 ;.loc 1 289 0 + v_bitop3_b32 v001, v001, s59, v006 bitop3:0x48 + v_lshlrev_b32_e32 v002, 14, v000 + v_or_b32_e32 v003, v001, v002 + s_lshl_b32 s39, s28, 10 + v_lshl_add_u32 v002, s28, 18, v002 + v_lshl_add_u32 v004, v000, 7, s39 + v_or_b32_e32 v002, v002, v001 + v_mad_u64_u32 v000 v001, s[0:1], s28, 24, v000 v001 + v_lshrrev_b32_e32 v007, 4, v004 + v_lshlrev_b32_e32 v001, 3, v000 + v_xor_b32_e32 v007, v007, v006 + v_lshlrev_b32_e32 v004, 7, v004 + v_xor_b32_e32 v001, v001, v006 + s_mov_b32 s16, s30 ;.loc 2 159 14 + .file 3 "/root/FlyDSL/kernels" "fp8_gemm_utils.py" + v_readfirstlane_b32 s30, v005 ;.loc 3 89 12 + v_add_u32_e32 v006, s39, v005 ;.loc 1 299 0 + s_lshl_b32 s3, s2, 8 ;.loc 1 137 0 + s_lshl_b32 s33, s2, 22 + s_lshl_b32 s2, s7, 8 ;.loc 1 140 0 + s_lshl_b32 s36, s7, 22 + s_and_b32 s5, s5, 0xffff ;.loc 2 159 14 + s_mov_b32 s7, 0x27000 + s_and_b32 s9, s29, 0xffff + v_and_or_b32 v004, v007, s59, v004 ;.loc 1 289 0 + s_mov_b32 m0, s30 ;.loc 3 89 12 + v_readfirstlane_b32 s29, v006 + v_lshl_add_u32 v007, s28, 11, v005 ;.loc 1 299 0 + v_lshlrev_b32_e32 v000, 14, v000 ;.loc 1 289 0 + buffer_load_dwordx4 v003, s[4:7], s33 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s29 + v_readfirstlane_b32 s28, v007 + v_add_u32_e32 v008, s39, v007 ;.loc 1 299 0 + v_and_or_b32 v001, v001, s59, v000 ;.loc 1 289 0 + s_and_b32 s25, s15, 0xffff ;.loc 2 159 14 + buffer_load_dwordx4 v004, s[4:7], s33 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s28 + v_readfirstlane_b32 s15, v008 + v_or_b32_e32 v000, 0x10000, v005 ;.loc 1 300 0 + buffer_load_dwordx4 v002, s[4:7], s33 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s15 + v_readfirstlane_b32 s14, v000 + v_add_u32_e32 v000, 0x10000, v006 ;.loc 1 300 0 + s_brev_b32 s10, 16 + s_mov_b32 s11, s7 ;.loc 2 159 14 + s_and_b32 s21, s13, 0xffff + buffer_load_dwordx4 v001, s[4:7], s33 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s14 + v_readfirstlane_b32 s13, v000 + v_add_u32_e32 v000, 0x10000, v007 ;.loc 1 300 0 + s_mov_b32 s20, s12 ;.loc 2 159 14 + buffer_load_dwordx4 v003, s[8:11], s36 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s13 + v_readfirstlane_b32 s12, v000 + v_add_u32_e32 v000, 0x10000, v008 ;.loc 1 300 0 + buffer_load_dwordx4 v004, s[8:11], s36 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s12 + v_readfirstlane_b32 s1, v000 + v_or_b32_e32 v000, 0x14000, v005 ;.loc 1 301 0 + buffer_load_dwordx4 v002, s[8:11], s36 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s1 + v_readfirstlane_b32 s50, v000 + v_add_u32_e32 v000, 0x14000, v006 ;.loc 1 301 0 + s_or_b32 s38, s36, 0x200000 ;.loc 1 141 0 + buffer_load_dwordx4 v001, s[8:11], s36 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s50 + v_readfirstlane_b32 s49, v000 + v_add_u32_e32 v000, 0x14000, v007 ;.loc 1 301 0 + buffer_load_dwordx4 v003, s[8:11], s38 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s49 + v_readfirstlane_b32 s48, v000 + v_add_u32_e32 v000, 0x14000, v008 ;.loc 1 301 0 + buffer_load_dwordx4 v004, s[8:11], s38 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s48 + v_readfirstlane_b32 s47, v000 + v_or_b32_e32 v000, 0x4000, v005 ;.loc 1 302 0 + buffer_load_dwordx4 v002, s[8:11], s38 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s47 + v_readfirstlane_b32 s46, v000 + v_add_u32_e32 v000, 0x4000, v006 ;.loc 1 302 0 + s_or_b32 s37, s33, 0x200000 ;.loc 1 138 0 + buffer_load_dwordx4 v001, s[8:11], s38 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s46 + v_readfirstlane_b32 s45, v000 + v_add_u32_e32 v000, 0x4000, v007 ;.loc 1 302 0 + buffer_load_dwordx4 v003, s[4:7], s37 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s45 + v_readfirstlane_b32 s44, v000 + v_add_u32_e32 v000, 0x4000, v008 ;.loc 1 302 0 + buffer_load_dwordx4 v004, s[4:7], s37 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s44 + v_readfirstlane_b32 s43, v000 + v_or_b32_e32 v000, 0x8000, v005 ;.loc 1 304 0 + buffer_load_dwordx4 v002, s[4:7], s37 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s43 + v_readfirstlane_b32 s42, v000 + v_add_u32_e32 v000, 0x8000, v006 ;.loc 1 304 0 + s_and_b32 s17, s31, 0xffff ;.loc 2 159 14 + buffer_load_dwordx4 v001, s[4:7], s37 offen lds ;.loc 3 89 12 + s_or_b32 s31, s33, 0x80 ;.loc 1 304 0 + s_mov_b32 m0, s42 ;.loc 3 89 12 + v_readfirstlane_b32 s40, v000 + v_add_u32_e32 v000, 0x8000, v007 ;.loc 1 304 0 + buffer_load_dwordx4 v003, s[4:7], s31 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s40 + v_readfirstlane_b32 s39, v000 + v_add_u32_e32 v000, 0x8000, v008 ;.loc 1 304 0 + buffer_load_dwordx4 v004, s[4:7], s31 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s39 + v_readfirstlane_b32 s41, v000 + v_or_b32_e32 v000, 0x18000, v005 ;.loc 1 305 0 + buffer_load_dwordx4 v002, s[4:7], s31 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s41 + v_readfirstlane_b32 s38, v000 + v_add_u32_e32 v000, 0x18000, v006 ;.loc 1 305 0 + s_mul_i32 s0, s35, s34 ;.loc 1 296 0 + s_lshl_b32 s22, s34, 2 + buffer_load_dwordx4 v001, s[4:7], s31 offen lds ;.loc 3 89 12 + s_or_b32 s51, s36, 0x80 ;.loc 1 305 0 + s_mov_b32 m0, s38 ;.loc 3 89 12 + v_readfirstlane_b32 s34, v000 + v_add_u32_e32 v000, 0x18000, v007 ;.loc 1 305 0 + buffer_load_dwordx4 v003, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s34 + v_readfirstlane_b32 s37, v000 + v_add_u32_e32 v000, 0x18000, v008 ;.loc 1 305 0 + buffer_load_dwordx4 v004, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s37 + v_readfirstlane_b32 s31, v000 + v_or_b32_e32 v000, 0x1c000, v005 ;.loc 1 306 0 + buffer_load_dwordx4 v002, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s31 + v_readfirstlane_b32 s58, v000 + v_add_u32_e32 v000, 0x1c000, v006 ;.loc 1 306 0 + buffer_load_dwordx4 v001, s[8:11], s51 offen lds ;.loc 3 89 12 + s_or_b32 s51, s36, 0x200080 ;.loc 1 306 0 + s_mov_b32 m0, s58 ;.loc 3 89 12 + v_readfirstlane_b32 s57, v000 + v_add_u32_e32 v000, 0x1c000, v007 ;.loc 1 306 0 + buffer_load_dwordx4 v003, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s57 + v_readfirstlane_b32 s56, v000 + v_add_u32_e32 v000, 0x1c000, v008 ;.loc 1 306 0 + buffer_load_dwordx4 v004, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s56 + v_readfirstlane_b32 s55, v000 + v_or_b32_e32 v000, 0xc000, v005 ;.loc 1 307 0 + buffer_load_dwordx4 v002, s[8:11], s51 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s55 + v_readfirstlane_b32 s54, v000 + v_add_u32_e32 v000, 0xc000, v006 ;.loc 1 307 0 + buffer_load_dwordx4 v001, s[8:11], s51 offen lds ;.loc 3 89 12 + s_or_b32 s60, s33, 0x200080 ;.loc 1 307 0 + s_mov_b32 m0, s54 ;.loc 3 89 12 + v_readfirstlane_b32 s53, v000 + v_add_u32_e32 v000, 0xc000, v007 ;.loc 1 307 0 + buffer_load_dwordx4 v003, s[4:7], s60 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s53 + v_readfirstlane_b32 s52, v000 + v_add_u32_e32 v000, 0xc000, v008 ;.loc 1 307 0 + buffer_load_dwordx4 v004, s[4:7], s60 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s52 + v_readfirstlane_b32 s51, v000 + v_lshrrev_b32_e32 v000, 1, v009 ;.loc 1 311 0 + buffer_load_dwordx4 v002, s[4:7], s60 offen lds ;.loc 3 89 12 + s_mov_b32 m0, s51 + v_and_b32_e32 v000, 64, v000 ;.loc 1 311 0 + v_and_b32_e32 v005, 15, v009 + buffer_load_dwordx4 v001, s[4:7], s60 offen lds ;.loc 3 89 12 + s_waitcnt vmcnt(28) ;.loc 1 309 0 +s_barrier + scratch_store_dword off, v000, off offset:40 ;.loc 1 311 0 + scratch_store_dword off, v005, off offset:36 + v_or_b32_e32 v000, v000, v005 + v_and_b32_e32 v006, 48, v009 + v_lshlrev_b32_e32 v005, 3, v009 + v_and_b32_e32 v007, 0x70, v005 + v_lshlrev_b32_e32 v000, 7, v000 + v_or_b32_e32 v009, 64, v006 + v_bitop3_b32 v008, v005, v006, s59 bitop3:0x6c + v_bitop3_b32 v005, v000, v007, v006 bitop3:0xf6 + v_bitop3_b32 v010, v006, v007, 64 bitop3:0x36 + v_bitop3_b32 v006, v000, v009, v007 bitop3:0xf6 + v_and_b32_e32 v000, 64, v011 ;.loc 1 315 0 + .file 4 "/root/FlyDSL/python/flydsl/expr" "typing.py" + ds_read_b128 v012 v013 v014 v015, v005 ;.loc 4 920 22 + ds_read_b128 v016 v017 v018 v019, v006 + ds_read_b128 v020 v021 v022 v023, v005 offset:2048 + ds_read_b128 v024 v025 v026 v027, v006 offset:2048 + ds_read_b128 v098 v099 v100 v101, v005 offset:4096 + ds_read_b128 v102 v103 v104 v105, v006 offset:4096 + ds_read_b128 v106 v107 v108 v109, v005 offset:6144 + ds_read_b128 v110 v111 v112 v113, v006 offset:6144 + s_waitcnt vmcnt(24) ;.loc 1 313 0 +s_barrier + scratch_store_dword off, v000, off offset:44 + v_lshlrev_b32_e32 v000, 7, v011 ;.loc 1 315 0 + v_and_b32_e32 v000, 0x2780, v000 + v_or_b32_e32 v007, v008, v000 + v_or_b32_e32 v008, 0x10000, v007 ;.loc 3 110 18 + v_or_b32_e32 v000, v010, v000 ;.loc 1 315 0 + ds_read_b128 v114 v115 v116 v117, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a37, v008 + v_or_b32_e32 v008, 0x10000, v000 ;.loc 3 110 18 + ds_read_b128 v118 v119 v120 v121, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a36, v008 + v_or_b32_e32 v008, 0x10800, v007 ;.loc 3 110 18 + ds_read_b128 v122 v123 v124 v125, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a108, v008 + v_or_b32_e32 v008, 0x10800, v000 ;.loc 3 110 18 + ds_read_b128 v126 v127 v128 v129, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a109, v008 + v_or_b32_e32 v008, 0x11800, v007 ;.loc 3 110 18 + v_or_b32_e32 v246, 0x11000, v007 + v_or_b32_e32 v247, 0x11000, v000 + ds_read_b128 v138 v139 v140 v141, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a78, v008 + v_or_b32_e32 v008, 0x11800, v000 ;.loc 3 110 18 + s_or_b32 s59, s33, 0x100 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + scratch_store_dword off, v011, off offset:48 ;.loc 1 315 0 + ds_read_b128 v130 v131 v132 v133, v246 ;.loc 4 920 22 + ds_read_b128 v134 v135 v136 v137, v247 + ds_read_b128 v142 v143 v144 v145, v008 + v_accvgpr_write_b32 a140, v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x14000, v007 ;.loc 3 110 18 + ds_read_b128 v146 v147 v148 v149, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a149, v008 + v_or_b32_e32 v008, 0x14000, v000 ;.loc 3 110 18 + s_mov_b32 m0, s29 ;.loc 3 94 8 + ds_read_b128 v150 v151 v152 v153, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a255, v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x14800, v007 ;.loc 3 110 18 + scratch_store_dword off, v008, off offset:52 ;.loc 4 920 22 + ds_read_b128 v154 v155 v156 v157, v008 + v_or_b32_e32 v008, 0x14800, v000 ;.loc 3 110 18 + s_mov_b32 m0, s28 ;.loc 3 94 8 + ds_read_b128 v158 v159 v160 v161, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a79, v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x15000, v007 ;.loc 3 110 18 + ds_read_b128 v162 v163 v164 v165, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a141, v008 + v_or_b32_e32 v008, 0x15000, v000 ;.loc 3 110 18 + s_mov_b32 m0, s15 ;.loc 3 94 8 + ds_read_b128 v166 v167 v168 v169, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a147, v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x15800, v007 ;.loc 3 110 18 + ds_read_b128 v170 v171 v172 v173, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a146, v008 + v_or_b32_e32 v008, 0x15800, v000 ;.loc 3 110 18 + ds_read_b128 v174 v175 v176 v177, v008 ;.loc 4 920 22 + s_or_b32 s59, s36, 0x100 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], v012 v013 v014 v015 v016 v017 v018 v019, v114 v115 v116 v117 v118 v119 v120 v121, 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + ds_read_b128 v178 v179 v180 v181, v005 offset:16384 ;.loc 4 920 22 + ds_read_b128 v182 v183 v184 v185, v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + v_accvgpr_write_b32 a148, v008 + s_waitcnt lgkmcnt(14) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], v012 v013 v014 v015 v016 v017 v018 v019, v122 v123 v124 v125 v126 v127 v128 v129, 0 + ds_read_b128 v008 v009 v010 v011, v005 offset:18432 ;.loc 4 920 22 + v_or_b32_e32 v032, 0x18000, v007 ;.loc 3 110 18 + v_accvgpr_write_b32 a139, v032 + s_lshl_b32 s26, s35, 2 ;.loc 1 296 0 + s_mov_b32 s23, s7 ;.loc 2 159 14 + s_mov_b32 s27, s7 + s_lshl_b32 s18, s0, 1 ;.loc 1 296 0 + s_waitcnt lgkmcnt(12) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[238:241], v012 v013 v014 v015 v016 v017 v018 v019, v130 v131 v132 v133 v134 v135 v136 v137, 0 + s_mov_b32 s19, s7 ;.loc 2 159 14 + s_waitcnt lgkmcnt(11) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[242:245], v012 v013 v014 v015 v016 v017 v018 v019, v138 v139 v140 v141 v142 v143 v144 v145, 0 + s_waitcnt lgkmcnt(9) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v012 v013 v014 v015 v016 v017 v018 v019, v146 v147 v148 v149 v150 v151 v152 v153, 0 + s_waitcnt lgkmcnt(7) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v234 v235 v236 v237, v012 v013 v014 v015 v016 v017 v018 v019, v154 v155 v156 v157 v158 v159 v160 v161, 0 + s_waitcnt lgkmcnt(5) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v238 v239 v240 v241, v012 v013 v014 v015 v016 v017 v018 v019, v162 v163 v164 v165 v166 v167 v168 v169, 0 + s_waitcnt lgkmcnt(3) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v012 v013 v014 v015 v016 v017 v018 v019, v170 v171 v172 v173 v174 v175 v176 v177, 0 + ds_read_b128 v012 v013 v014 v015, v006 offset:18432 ;.loc 4 920 22 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 v016 v017 v018 v019, v005 offset:20480 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[246:249], v020 v021 v022 v023 v024 v025 v026 v027, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[250:253], v020 v021 v022 v023 v024 v025 v026 v027, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[126:129], v020 v021 v022 v023 v024 v025 v026 v027, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[80:83], v020 v021 v022 v023 v024 v025 v026 v027, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[4:7], v020 v021 v022 v023 v024 v025 v026 v027, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[8:11], v020 v021 v022 v023 v024 v025 v026 v027, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[12:15], v020 v021 v022 v023 v024 v025 v026 v027, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[16:19], v020 v021 v022 v023 v024 v025 v026 v027, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 203 0 + ds_read_b128 v020 v021 v022 v023, v006 offset:20480 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 v024 v025 v026 v027, v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 v028 v029 v030 v031, v006 offset:22528 + s_or_b32 s59, s36, 0x200100 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[84:87], v098 v099 v100 v101 v102 v103 v104 v105, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 208 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 a[104:107], v098 v099 v100 v101 v102 v103 v104 v105, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 a[142:145], v098 v099 v100 v101 v102 v103 v104 v105, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 a[88:91], v098 v099 v100 v101 v102 v103 v104 v105, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[20:23], v098 v099 v100 v101 v102 v103 v104 v105, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 a[24:27], v098 v099 v100 v101 v102 v103 v104 v105, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 a[28:31], v098 v099 v100 v101 v102 v103 v104 v105, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 a[32:35], v098 v099 v100 v101 v102 v103 v104 v105, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 215 0 + ds_read_b128 v098 v099 v100 v101, v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 v102 v103 v104 v105, v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 v082 v083 v084 v085, v106 v107 v108 v109 v110 v111 v112 v113, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 a[92:95], v106 v107 v108 v109 v110 v111 v112 v113, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 a[96:99], v106 v107 v108 v109 v110 v111 v112 v113, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[100:103], v106 v107 v108 v109 v110 v111 v112 v113, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[38:41], v106 v107 v108 v109 v110 v111 v112 v113, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 a[42:45], v106 v107 v108 v109 v110 v111 v112 v113, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 a[46:49], v106 v107 v108 v109 v110 v111 v112 v113, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[50:53], v106 v107 v108 v109 v110 v111 v112 v113, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 227 0 + ds_read_b128 v106 v107 v108 v109, v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 v110 v111 v112 v113, v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + ds_read_b128 v186 v187 v188 v189, v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 v190 v191 v192 v193, v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200100 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + ds_read_b128 v194 v195 v196 v197, v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 v198 v199 v200 v201, v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 a[54:57], v178 v179 v180 v181 v182 v183 v184 v185, v114 v115 v116 v117 v118 v119 v120 v121, 0 + s_mov_b32 m0, s45 ;.loc 3 94 8 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[58:61], v008 v009 v010 v011 v012 v013 v014 v015, v114 v115 v116 v117 v118 v119 v120 v121, 0 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 a[110:113], v016 v017 v018 v019 v020 v021 v022 v023, v114 v115 v116 v117 v118 v119 v120 v121, 0 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 a[150:153], v024 v025 v026 v027 v028 v029 v030 v031, v114 v115 v116 v117 v118 v119 v120 v121, 0 + ds_read_b128 v116 v117 v118 v119, v032 ;.loc 4 920 22 + v_or_b32_e32 v032, 0x18000, v000 ;.loc 3 110 18 + v_accvgpr_write_b32 a137, v032 + v_mfma_f32_16x16x128_f8f6f4 a[62:65], v178 v179 v180 v181 v182 v183 v184 v185, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[74:77], v008 v009 v010 v011 v012 v013 v014 v015, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[114:117], v016 v017 v018 v019 v020 v021 v022 v023, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], v024 v025 v026 v027 v028 v029 v030 v031, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 221 0 + ds_read_b128 v120 v121 v122 v123, v032 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v032, 0x18800, v007 ;.loc 3 110 18 + ds_read_b128 v124 v125 v126 v127, v032 ;.loc 4 920 22 + v_accvgpr_write_b32 a138, v032 + v_or_b32_e32 v032, 0x18800, v000 ;.loc 3 110 18 + s_mov_b32 m0, s44 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[66:69], v178 v179 v180 v181 v182 v183 v184 v185, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 186 0 + scratch_store_dword off, v032, off ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v242 v243 v244 v245, v008 v009 v010 v011 v012 v013 v014 v015, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, v008 v009 v010 v011 v012 v013 v014 v015, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[118:121], v016 v017 v018 v019 v020 v021 v022 v023, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], v024 v025 v026 v027 v028 v029 v030 v031, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 226 0 + ds_read_b128 v128 v129 v130 v131, v032 ;.loc 4 920 22 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], v008 v009 v010 v011 v012 v013 v014 v015, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], v008 v009 v010 v011 v012 v013 v014 v015, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], v008 v009 v010 v011 v012 v013 v014 v015, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], v008 v009 v010 v011 v012 v013 v014 v015, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 203 0 + v_or_b32_e32 v008, 0x19000, v007 ;.loc 3 110 18 + ds_read_b128 v132 v133 v134 v135, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a131, v008 + v_or_b32_e32 v008, 0x19000, v000 ;.loc 3 110 18 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 a[70:73], v178 v179 v180 v181 v182 v183 v184 v185, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[122:125], v016 v017 v018 v019 v020 v021 v022 v023, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], v024 v025 v026 v027 v028 v029 v030 v031, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 227 0 + ds_read_b128 v136 v137 v138 v139, v008 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x19800, v007 ;.loc 3 110 18 + scratch_store_dword off, v008, off offset:12 ;.loc 4 920 22 + ds_read_b128 v140 v141 v142 v143, v008 + v_or_b32_e32 v008, 0x19800, v000 ;.loc 3 110 18 + s_or_b32 s59, s33, 0x180 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], v178 v179 v180 v181 v182 v183 v184 v185, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 179 0 + scratch_store_dword off, v008, off offset:16 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], v016 v017 v018 v019 v020 v021 v022 v023, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], v024 v025 v026 v027 v028 v029 v030 v031, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 220 0 + ds_read_b128 v144 v145 v146 v147, v008 ;.loc 4 920 22 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x1c000, v007 ;.loc 3 110 18 + ds_read_b128 v202 v203 v204 v205, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a133, v008 + v_or_b32_e32 v008, 0x1c000, v000 ;.loc 3 110 18 + s_mov_b32 m0, s40 ;.loc 3 94 8 + scratch_store_dword off, v008, off offset:4 ;.loc 4 920 22 + ds_read_b128 v206 v207 v208 v209, v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x1c800, v007 ;.loc 3 110 18 + ds_read_b128 v210 v211 v212 v213, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a134, v008 + v_or_b32_e32 v008, 0x1c800, v000 ;.loc 3 110 18 + s_mov_b32 m0, s39 ;.loc 3 94 8 + scratch_store_dword off, v008, off offset:8 ;.loc 4 920 22 + ds_read_b128 v214 v215 v216 v217, v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v008, 0x1d000, v007 ;.loc 3 110 18 + ds_read_b128 v218 v219 v220 v221, v008 ;.loc 4 920 22 + v_accvgpr_write_b32 a135, v008 + v_or_b32_e32 v008, 0x1d000, v000 ;.loc 3 110 18 + s_mov_b32 m0, s41 ;.loc 3 94 8 + ds_read_b128 v222 v223 v224 v225, v008 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_or_b32_e32 v007, 0x1d800, v007 ;.loc 3 110 18 + v_or_b32_e32 v000, 0x1d800, v000 + ds_read_b128 v226 v227 v228 v229, v007 ;.loc 4 920 22 + ds_read_b128 v230 v231 v232 v233, v000 + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v098 v099 v100 v101 v102 v103 v104 v105, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] + s_or_b32 s59, s36, 0x180 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_write_b32 a254, v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds + s_mov_b32 m0, s34 + ds_read_b128 v148 v149 v150 v151, v005 offset:49152 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a36 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], v024 v025 v026 v027 v028 v029 v030 v031, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 221 0 + v_accvgpr_write_b32 a130, v008 + v_accvgpr_read_b32 v008, a150 + v_accvgpr_write_b32 a136, v000 + v_accvgpr_read_b32 v009, a151 + v_accvgpr_read_b32 v010, a152 + v_accvgpr_read_b32 v011, a153 + v_accvgpr_read_b32 v000, a140 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], v024 v025 v026 v027 v028 v029 v030 v031, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], v024 v025 v026 v027 v028 v029 v030 v031, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 227 0 + v_accvgpr_read_b32 v027, a3 + v_accvgpr_read_b32 v026, a2 + v_accvgpr_read_b32 v025, a1 + v_accvgpr_read_b32 v024, a0 + v_accvgpr_mov_b32 a0, a4 + v_accvgpr_mov_b32 a1, a5 + v_accvgpr_mov_b32 a2, a6 + v_accvgpr_mov_b32 a3, a7 + v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v194 v195 v196 v197 v198 v199 v200 v201, v116 v117 v118 v119 v120 v121 v122 v123, v082 v083 v084 v085 ;.loc 1 220 0 + v_accvgpr_mov_b32 a4, a66 + v_accvgpr_mov_b32 a5, a67 + v_accvgpr_mov_b32 a6, a68 + v_accvgpr_mov_b32 a7, a69 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], v178 v179 v180 v181 v182 v183 v184 v185, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 180 0 + s_nop 10 + v_accvgpr_read_b32 v087, a3 + v_accvgpr_read_b32 v086, a2 + v_accvgpr_read_b32 v085, a1 + v_accvgpr_read_b32 v084, a0 + v_accvgpr_mov_b32 a0, a8 + v_accvgpr_mov_b32 a1, a9 + v_accvgpr_mov_b32 a2, a10 + v_accvgpr_mov_b32 a3, a11 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], v016 v017 v018 v019 v020 v021 v022 v023, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 209 0 + ds_read_b128 v152 v153 v154 v155, v006 offset:49152 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + v_accvgpr_mov_b32 a8, a70 + v_accvgpr_mov_b32 a9, a71 + v_accvgpr_mov_b32 a10, a72 + v_accvgpr_mov_b32 a11, a73 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], v016 v017 v018 v019 v020 v021 v022 v023, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 214 0 + s_nop 10 + v_accvgpr_read_b32 v031, a3 + v_accvgpr_read_b32 v030, a2 + v_accvgpr_read_b32 v029, a1 + v_accvgpr_read_b32 v028, a0 + v_accvgpr_mov_b32 a0, a12 + v_accvgpr_mov_b32 a1, a13 + v_accvgpr_mov_b32 a2, a14 + v_accvgpr_mov_b32 a3, a15 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], v016 v017 v018 v019 v020 v021 v022 v023, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 215 0 + v_accvgpr_mov_b32 a12, a58 + v_accvgpr_mov_b32 a13, a59 + v_accvgpr_mov_b32 a14, a60 + v_accvgpr_mov_b32 a15, a61 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], v098 v099 v100 v101 v102 v103 v104 v105, v116 v117 v118 v119 v120 v121 v122 v123, a[230:233] ;.loc 1 179 0 + s_nop 10 + v_accvgpr_read_b32 v159, a3 + v_accvgpr_read_b32 v158, a2 + v_accvgpr_read_b32 v157, a1 + v_accvgpr_read_b32 v156, a0 + v_accvgpr_mov_b32 a0, a16 + v_accvgpr_mov_b32 a1, a17 + v_accvgpr_mov_b32 a2, a18 + v_accvgpr_mov_b32 a3, a19 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], v098 v099 v100 v101 v102 v103 v104 v105, v124 v125 v126 v127 v128 v129 v130 v131, a[234:237] ;.loc 1 180 0 + s_nop 0 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] + v_mfma_f32_16x16x128_f8f6f4 a[238:241], v098 v099 v100 v101 v102 v103 v104 v105, v132 v133 v134 v135 v136 v137 v138 v139, a[238:241] ;.loc 1 186 0 + s_nop 10 + v_accvgpr_read_b32 v035, a3 + v_accvgpr_read_b32 v034, a2 + v_accvgpr_read_b32 v033, a1 + v_accvgpr_read_b32 v032, a0 + v_accvgpr_mov_b32 a0, a20 + v_accvgpr_mov_b32 a1, a21 + v_accvgpr_mov_b32 a2, a22 + v_accvgpr_mov_b32 a3, a23 + v_mfma_f32_16x16x128_f8f6f4 a[242:245], v098 v099 v100 v101 v102 v103 v104 v105, v140 v141 v142 v143 v144 v145 v146 v147, a[242:245] ;.loc 1 191 0 + v_accvgpr_mov_b32 a20, a110 + v_accvgpr_mov_b32 a21, a111 + v_accvgpr_mov_b32 a22, a112 + v_accvgpr_mov_b32 a23, a113 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v098 v099 v100 v101 v102 v103 v104 v105, v202 v203 v204 v205 v206 v207 v208 v209, v248 v249 v250 v251 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v098 v099 v100 v101 v102 v103 v104 v105, v210 v211 v212 v213 v214 v215 v216 v217, v234 v235 v236 v237 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, v098 v099 v100 v101 v102 v103 v104 v105, v218 v219 v220 v221 v222 v223 v224 v225, v238 v239 v240 v241 ;.loc 1 186 0 + s_nop 8 + v_accvgpr_read_b32 v099, a3 + v_accvgpr_read_b32 v098, a2 + v_accvgpr_read_b32 v097, a1 + v_accvgpr_read_b32 v096, a0 + v_accvgpr_mov_b32 a0, a24 + v_accvgpr_mov_b32 a1, a25 + v_accvgpr_mov_b32 a2, a26 + v_accvgpr_mov_b32 a3, a27 + v_mfma_f32_16x16x128_f8f6f4 a[246:249], v106 v107 v108 v109 v110 v111 v112 v113, v116 v117 v118 v119 v120 v121 v122 v123, a[246:249] ;.loc 1 196 0 + v_accvgpr_mov_b32 a24, a118 + v_accvgpr_mov_b32 a25, a119 + v_accvgpr_mov_b32 a26, a120 + v_accvgpr_mov_b32 a27, a121 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 a[250:253], v106 v107 v108 v109 v110 v111 v112 v113, v124 v125 v126 v127 v128 v129 v130 v131, a[250:253] ;.loc 1 197 0 + s_nop 10 + v_accvgpr_read_b32 v039, a3 + v_accvgpr_read_b32 v038, a2 + v_accvgpr_read_b32 v037, a1 + v_accvgpr_read_b32 v036, a0 + v_accvgpr_mov_b32 a0, a28 + v_accvgpr_mov_b32 a1, a29 + v_accvgpr_mov_b32 a2, a30 + v_accvgpr_mov_b32 a3, a31 + v_mfma_f32_16x16x128_f8f6f4 a[126:129], v106 v107 v108 v109 v110 v111 v112 v113, v132 v133 v134 v135 v136 v137 v138 v139, a[126:129] ;.loc 1 202 0 + s_nop 0 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] + v_mfma_f32_16x16x128_f8f6f4 a[80:83], v106 v107 v108 v109 v110 v111 v112 v113, v140 v141 v142 v143 v144 v145 v146 v147, a[80:83] ;.loc 1 203 0 + s_nop 10 + v_accvgpr_read_b32 v083, a3 + v_accvgpr_read_b32 v082, a2 + v_accvgpr_read_b32 v081, a1 + v_accvgpr_read_b32 v080, a0 + v_accvgpr_mov_b32 a0, a32 + v_accvgpr_mov_b32 a1, a33 + v_accvgpr_mov_b32 a2, a34 + v_accvgpr_mov_b32 a3, a35 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], v178 v179 v180 v181 v182 v183 v184 v185, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 186 0 + ds_read_b128 v160 v161 v162 v163, v005 offset:51200 ;.loc 4 920 22 + ds_read_b128 v164 v165 v166 v167, v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], v178 v179 v180 v181 v182 v183 v184 v185, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 191 0 + ds_read_b128 v176 v177 v178 v179, v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 v180 v181 v182 v183, v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x200180 ;.loc 1 345 0 + s_nop 6 + v_accvgpr_read_b32 v043, a3 + v_accvgpr_read_b32 v042, a2 + v_accvgpr_read_b32 v041, a1 + v_accvgpr_read_b32 v040, a0 + v_accvgpr_mov_b32 a0, a38 + v_accvgpr_mov_b32 a1, a39 + v_accvgpr_mov_b32 a2, a40 + v_accvgpr_mov_b32 a3, a41 + s_waitcnt lgkmcnt(2) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[12:15], v160 v161 v162 v163 v164 v165 v166 v167, v116 v117 v118 v119 v120 v121 v122 v123, a[12:15] + s_mov_b32 m0, s58 ;.loc 3 94 8 + ds_read_b128 v234 v235 v236 v237, v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 v238 v239 v240 v241, v006 offset:55296 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 220 0 + s_nop 5 + v_accvgpr_read_b32 v095, a15 + v_accvgpr_read_b32 v094, a14 + s_waitcnt lgkmcnt(2) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 a[20:23], v176 v177 v178 v179 v180 v181 v182 v183, v116 v117 v118 v119 v120 v121 v122 v123, a[20:23] + v_accvgpr_read_b32 v093, a13 + v_accvgpr_read_b32 v092, a12 + v_accvgpr_mov_b32 a12, a74 + v_accvgpr_mov_b32 a13, a75 + v_accvgpr_read_b32 v091, a3 + v_accvgpr_read_b32 v090, a2 + v_accvgpr_read_b32 v089, a1 + v_accvgpr_read_b32 v088, a0 + v_accvgpr_mov_b32 a0, a42 + v_accvgpr_mov_b32 a1, a43 + v_accvgpr_mov_b32 a2, a44 + v_accvgpr_mov_b32 a3, a45 + v_accvgpr_read_b32 v111, a23 + v_mfma_f32_16x16x128_f8f6f4 a[4:7], v148 v149 v150 v151 v152 v153 v154 v155, v132 v133 v134 v135 v136 v137 v138 v139, a[4:7] ;.loc 1 186 0 + v_accvgpr_mov_b32 a14, a76 + v_accvgpr_mov_b32 a15, a77 + v_accvgpr_read_b32 v110, a22 + v_accvgpr_read_b32 v109, a21 + v_accvgpr_read_b32 v108, a20 + v_accvgpr_mov_b32 a20, a114 + v_accvgpr_mov_b32 a21, a115 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 221 0 + v_accvgpr_mov_b32 a22, a116 + v_accvgpr_mov_b32 a23, a117 + v_accvgpr_mov_b32 a72, a242 + v_accvgpr_mov_b32 a73, a243 + v_accvgpr_read_b32 v059, a7 + v_accvgpr_read_b32 v058, a6 + v_accvgpr_read_b32 v057, a5 + v_mfma_f32_16x16x128_f8f6f4 a[8:11], v148 v149 v150 v151 v152 v153 v154 v155, v140 v141 v142 v143 v144 v145 v146 v147, a[8:11] ;.loc 1 191 0 + v_accvgpr_read_b32 v056, a4 + ds_read_b128 a[4:7], v006 ;.loc 4 920 22 + v_accvgpr_mov_b32 a74, a244 + v_accvgpr_mov_b32 a75, a245 + v_accvgpr_read_b32 v047, a3 + v_accvgpr_read_b32 v046, a2 + v_accvgpr_read_b32 v045, a1 + v_accvgpr_read_b32 v044, a0 + v_accvgpr_mov_b32 a0, a46 + v_accvgpr_mov_b32 a1, a47 + v_accvgpr_mov_b32 a2, a48 + v_accvgpr_mov_b32 a3, a49 + v_mfma_f32_16x16x128_f8f6f4 a[12:15], v160 v161 v162 v163 v164 v165 v166 v167, v124 v125 v126 v127 v128 v129 v130 v131, a[12:15] ;.loc 1 197 0 + v_accvgpr_read_b32 v063, a11 + v_accvgpr_read_b32 v062, a10 + v_accvgpr_read_b32 v061, a9 + v_accvgpr_read_b32 v060, a8 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] ;.loc 1 226 0 + s_nop 6 + v_accvgpr_read_b32 v067, a15 + v_accvgpr_read_b32 v066, a14 + v_accvgpr_read_b32 v065, a13 + v_mfma_f32_16x16x128_f8f6f4 a[24:27], v176 v177 v178 v179 v180 v181 v182 v183, v132 v133 v134 v135 v136 v137 v138 v139, a[24:27] ;.loc 1 214 0 + v_accvgpr_read_b32 v064, a12 + v_accvgpr_read_b32 v107, a3 + v_accvgpr_read_b32 v106, a2 + v_accvgpr_read_b32 v105, a1 + v_accvgpr_read_b32 v104, a0 + v_accvgpr_mov_b32 a0, a50 + v_accvgpr_mov_b32 a1, a51 + v_accvgpr_mov_b32 a2, a52 + v_accvgpr_mov_b32 a3, a53 + v_mfma_f32_16x16x128_f8f6f4 a[20:23], v176 v177 v178 v179 v180 v181 v182 v183, v124 v125 v126 v127 v128 v129 v130 v131, a[20:23] ;.loc 1 209 0 + s_nop 1 + v_accvgpr_read_b32 v115, a27 + v_accvgpr_read_b32 v114, a26 + v_accvgpr_read_b32 v113, a25 + v_accvgpr_read_b32 v112, a24 + v_accvgpr_mov_b32 a24, a122 + v_accvgpr_mov_b32 a25, a123 + v_accvgpr_mov_b32 a26, a124 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] ;.loc 1 227 0 + v_accvgpr_mov_b32 a27, a125 + v_accvgpr_mov_b32 a48, a190 + v_accvgpr_mov_b32 a49, a191 + v_accvgpr_mov_b32 a50, a192 + v_accvgpr_read_b32 v075, a23 + v_accvgpr_read_b32 v074, a22 + v_accvgpr_read_b32 v073, a21 + v_accvgpr_read_b32 v072, a20 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, v160 v161 v162 v163 v164 v165 v166 v167, v140 v141 v142 v143 v144 v145 v146 v147, v252 v253 v254 v255 ;.loc 1 203 0 + v_accvgpr_mov_b32 a51, a193 + v_accvgpr_write_b32 a193, v043 + v_accvgpr_write_b32 a192, v042 + v_accvgpr_read_b32 v051, a3 + v_accvgpr_read_b32 v050, a2 + v_accvgpr_read_b32 v049, a1 + v_accvgpr_read_b32 v048, a0 + v_accvgpr_mov_b32 a0, a54 + v_accvgpr_mov_b32 a1, a55 + v_accvgpr_mov_b32 a2, a56 + v_accvgpr_mov_b32 a3, a57 + v_mfma_f32_16x16x128_f8f6f4 a[120:123], v176 v177 v178 v179 v180 v181 v182 v183, v140 v141 v142 v143 v144 v145 v146 v147, a[24:27] ;.loc 1 215 0 + v_accvgpr_read_b32 v254, a37 + v_accvgpr_read_b32 v253, a108 + v_accvgpr_read_b32 v252, a109 + v_accvgpr_mov_b32 a108, a246 + v_accvgpr_mov_b32 a109, a247 + v_accvgpr_mov_b32 a110, a248 + v_accvgpr_mov_b32 a111, a249 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v148 v149 v150 v151 v152 v153 v154 v155, v116 v117 v118 v119 v120 v121 v122 v123, a[0:3] ;.loc 1 179 0 + v_accvgpr_write_b32 a191, v041 + v_accvgpr_write_b32 a190, v040 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, v160 v161 v162 v163 v164 v165 v166 v167, v132 v133 v134 v135 v136 v137 v138 v139, v242 v243 v244 v245 ;.loc 1 202 0 + s_nop 8 + v_accvgpr_read_b32 v079, a3 + v_accvgpr_read_b32 v078, a2 + v_accvgpr_read_b32 v077, a1 + v_accvgpr_read_b32 v076, a0 + v_accvgpr_mov_b32 a0, a62 + v_accvgpr_mov_b32 a1, a63 + v_accvgpr_mov_b32 a2, a64 + v_accvgpr_mov_b32 a3, a65 + v_mfma_f32_16x16x128_f8f6f4 a[150:153], v160 v161 v162 v163 v164 v165 v166 v167, v218 v219 v220 v221 v222 v223 v224 v225, a[48:51] + v_accvgpr_read_b32 v243, a78 + v_accvgpr_mov_b32 a64, a226 + v_accvgpr_mov_b32 a65, a227 + v_accvgpr_mov_b32 a66, a228 + v_accvgpr_mov_b32 a67, a229 + v_mov_b32_e32 v244, v247 + v_accvgpr_read_b32 v245, a149 + v_mfma_f32_16x16x128_f8f6f4 a[0:3], v148 v149 v150 v151 v152 v153 v154 v155, v124 v125 v126 v127 v128 v129 v130 v131, a[0:3] ;.loc 1 180 0 + v_accvgpr_read_b32 v242, a147 + v_mfma_f32_16x16x128_f8f6f4 a[84:87], v186 v187 v188 v189 v190 v191 v192 v193, v116 v117 v118 v119 v120 v121 v122 v123, a[84:87] ;.loc 1 208 0 + s_nop 9 + v_accvgpr_read_b32 v055, a3 + v_accvgpr_read_b32 v054, a2 + v_accvgpr_read_b32 v053, a1 + v_accvgpr_read_b32 v052, a0 + ds_read_b128 a[0:3], v005 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + ds_read_b128 a[8:11], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[12:15], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + ds_read_b128 a[16:19], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[20:23], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200180 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + ds_read_b128 a[24:27], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[28:31], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + ds_read_b128 a[32:35], v254 ;.loc 4 920 22 + ds_read_b128 a[36:39], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + ds_read_b128 a[40:43], v253 ;.loc 4 920 22 + ds_read_b128 a[44:47], v252 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + ds_read_b128 a[48:51], v246 ;.loc 4 920 22 + ds_read_b128 a[52:55], v247 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[56:59], v243 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + scratch_load_dword v255, off, off offset:52 + s_waitcnt lgkmcnt(14) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, v234 v235 v236 v237 v238 v239 v240 v241, v116 v117 v118 v119 v120 v121 v122 v123, v008 v009 v010 v011 + s_or_b32 s59, s33, 0x200 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v247, a255 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds + s_mov_b32 m0, s29 + ds_read_b128 a[68:71], v247 ;.loc 4 920 22 + s_nop 0 + v_accvgpr_read_b32 v008, a154 + v_accvgpr_read_b32 v009, a155 + v_accvgpr_read_b32 v010, a156 + v_accvgpr_read_b32 v011, a157 + v_mfma_f32_16x16x128_f8f6f4 a[104:107], v186 v187 v188 v189 v190 v191 v192 v193, v124 v125 v126 v127 v128 v129 v130 v131, a[104:107] ;.loc 1 209 0 + s_nop 0 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, v234 v235 v236 v237 v238 v239 v240 v241, v124 v125 v126 v127 v128 v129 v130 v131, v008 v009 v010 v011 + s_nop 6 + v_accvgpr_read_b32 v008, a158 + v_accvgpr_read_b32 v009, a159 + v_accvgpr_read_b32 v010, a160 + v_accvgpr_read_b32 v011, a161 + v_mfma_f32_16x16x128_f8f6f4 a[92:95], v194 v195 v196 v197 v198 v199 v200 v201, v124 v125 v126 v127 v128 v129 v130 v131, a[92:95] + s_nop 0 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, v234 v235 v236 v237 v238 v239 v240 v241, v132 v133 v134 v135 v136 v137 v138 v139, v008 v009 v010 v011 + s_nop 6 + v_accvgpr_read_b32 v008, a162 + v_accvgpr_read_b32 v009, a163 + v_accvgpr_read_b32 v010, a164 + v_accvgpr_read_b32 v011, a165 + v_mfma_f32_16x16x128_f8f6f4 a[142:145], v186 v187 v188 v189 v190 v191 v192 v193, v132 v133 v134 v135 v136 v137 v138 v139, a[142:145] ;.loc 1 214 0 + s_nop 0 ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, v234 v235 v236 v237 v238 v239 v240 v241, v140 v141 v142 v143 v144 v145 v146 v147, v008 v009 v010 v011 + s_nop 6 + v_accvgpr_read_b32 v008, a166 + v_accvgpr_read_b32 v009, a167 + v_accvgpr_read_b32 v010, a168 + v_accvgpr_read_b32 v011, a169 + v_mfma_f32_16x16x128_f8f6f4 a[96:99], v194 v195 v196 v197 v198 v199 v200 v201, v132 v133 v134 v135 v136 v137 v138 v139, a[96:99] ;.loc 1 226 0 + v_accvgpr_write_b32 a169, v019 + v_accvgpr_write_b32 a168, v018 + v_accvgpr_write_b32 a167, v017 + v_accvgpr_write_b32 a166, v016 + v_accvgpr_read_b32 v016, a150 + v_accvgpr_read_b32 v017, a151 + v_accvgpr_read_b32 v018, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, v148 v149 v150 v151 v152 v153 v154 v155, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 179 0 + v_accvgpr_read_b32 v019, a153 + v_accvgpr_mov_b32 a152, a131 + v_accvgpr_mov_b32 a151, a130 + v_accvgpr_mov_b32 a153, a132 + v_accvgpr_write_b32 a150, v254 + s_nop 1 + v_accvgpr_read_b32 v008, a170 + v_accvgpr_read_b32 v009, a171 + v_accvgpr_read_b32 v010, a172 + v_accvgpr_read_b32 v011, a173 + v_mfma_f32_16x16x128_f8f6f4 a[88:91], v186 v187 v188 v189 v190 v191 v192 v193, v140 v141 v142 v143 v144 v145 v146 v147, a[88:91] ;.loc 1 215 0 + v_accvgpr_write_b32 a173, v023 + v_accvgpr_write_b32 a172, v022 + v_accvgpr_write_b32 a171, v021 + v_accvgpr_write_b32 a170, v020 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, v148 v149 v150 v151 v152 v153 v154 v155, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 180 0 + s_nop 6 + v_accvgpr_read_b32 v008, a174 + v_accvgpr_read_b32 v009, a175 + v_accvgpr_read_b32 v010, a176 + v_accvgpr_read_b32 v011, a177 + v_mfma_f32_16x16x128_f8f6f4 a[100:103], v194 v195 v196 v197 v198 v199 v200 v201, v140 v141 v142 v143 v144 v145 v146 v147, a[100:103] ;.loc 1 227 0 + v_accvgpr_write_b32 a177, v027 + v_accvgpr_write_b32 a176, v026 + v_accvgpr_write_b32 a175, v025 + v_accvgpr_write_b32 a174, v024 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, v148 v149 v150 v151 v152 v153 v154 v155, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 ;.loc 1 186 0 + s_nop 6 + v_accvgpr_read_b32 v008, a178 + v_accvgpr_read_b32 v009, a179 + v_accvgpr_read_b32 v010, a180 + v_accvgpr_read_b32 v011, a181 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[0:7], a[56:63], a[72:75] + v_accvgpr_write_b32 a181, v099 + v_accvgpr_write_b32 a180, v098 + v_accvgpr_write_b32 a179, v097 + v_accvgpr_write_b32 a178, v096 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, v148 v149 v150 v151 v152 v153 v154 v155, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 + s_nop 6 + v_accvgpr_read_b32 v008, a182 + v_accvgpr_read_b32 v009, a183 + v_accvgpr_read_b32 v010, a184 + v_accvgpr_read_b32 v011, a185 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[24:31], a[40:47], a[92:95] ;.loc 1 221 0 + v_accvgpr_write_b32 a185, v039 + v_accvgpr_write_b32 a184, v038 + v_accvgpr_write_b32 a183, v037 + v_accvgpr_write_b32 a182, v036 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, v160 v161 v162 v163 v164 v165 v166 v167, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 196 0 + s_nop 6 + v_accvgpr_read_b32 v008, a186 + v_accvgpr_read_b32 v009, a187 + v_accvgpr_read_b32 v010, a188 + v_accvgpr_read_b32 v011, a189 + v_mfma_f32_16x16x128_f8f6f4 a[242:245], a[8:15], a[32:39], a[108:111] + v_accvgpr_write_b32 a189, v083 + v_accvgpr_write_b32 a188, v082 + v_accvgpr_write_b32 a187, v081 + v_accvgpr_write_b32 a186, v080 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, v160 v161 v162 v163 v164 v165 v166 v167, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 197 0 + s_nop 1 + v_accvgpr_mov_b32 a108, a250 + v_accvgpr_mov_b32 a109, a251 + v_accvgpr_mov_b32 a110, a252 + v_accvgpr_mov_b32 a111, a253 + s_nop 0 + v_accvgpr_read_b32 v008, a194 + v_accvgpr_read_b32 v009, a195 + v_accvgpr_read_b32 v010, a196 + v_accvgpr_read_b32 v011, a197 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[24:31], a[48:55], a[96:99] ;.loc 1 226 0 + v_accvgpr_write_b32 a197, v091 + v_accvgpr_write_b32 a196, v090 + v_accvgpr_write_b32 a195, v089 + v_accvgpr_write_b32 a194, v088 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, v160 v161 v162 v163 v164 v165 v166 v167, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 ;.loc 1 203 0 + s_nop 1 + v_accvgpr_mov_b32 a96, a100 + v_accvgpr_mov_b32 a97, a101 + v_accvgpr_mov_b32 a98, a102 + v_accvgpr_mov_b32 a99, a103 + s_nop 0 + v_accvgpr_read_b32 v008, a198 + v_accvgpr_read_b32 v009, a199 + v_accvgpr_read_b32 v010, a200 + v_accvgpr_read_b32 v011, a201 + v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[8:15], a[40:47], a[108:111] ;.loc 1 197 0 + v_accvgpr_write_b32 a201, v047 + v_accvgpr_write_b32 a200, v046 + v_accvgpr_write_b32 a199, v045 + v_accvgpr_write_b32 a198, v044 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, v176 v177 v178 v179 v180 v181 v182 v183, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 208 0 + s_nop 1 + v_accvgpr_mov_b32 a108, a126 + v_accvgpr_mov_b32 a109, a127 + v_accvgpr_mov_b32 a110, a128 + v_accvgpr_mov_b32 a111, a129 + s_nop 0 + v_accvgpr_read_b32 v008, a202 + v_accvgpr_read_b32 v009, a203 + v_accvgpr_read_b32 v010, a204 + v_accvgpr_read_b32 v011, a205 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[24:31], a[56:63], a[96:99] ;.loc 1 227 0 + v_accvgpr_write_b32 a205, v107 + v_accvgpr_write_b32 a204, v106 + v_accvgpr_write_b32 a203, v105 + v_accvgpr_write_b32 a202, v104 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, v176 v177 v178 v179 v180 v181 v182 v183, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 209 0 + s_nop 6 + v_accvgpr_read_b32 v008, a206 + v_accvgpr_read_b32 v009, a207 + v_accvgpr_read_b32 v010, a208 + v_accvgpr_read_b32 v011, a209 + v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[8:15], a[48:55], a[108:111] ;.loc 1 202 0 + v_accvgpr_write_b32 a209, v051 + v_accvgpr_write_b32 a208, v050 + v_accvgpr_write_b32 a207, v049 + v_accvgpr_write_b32 a206, v048 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, v176 v177 v178 v179 v180 v181 v182 v183, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 ;.loc 1 214 0 + s_nop 6 + v_accvgpr_read_b32 v008, a210 + v_accvgpr_read_b32 v009, a211 + v_accvgpr_read_b32 v010, a212 + v_accvgpr_read_b32 v011, a213 + v_accvgpr_write_b32 a213, v079 + v_accvgpr_write_b32 a212, v078 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, v176 v177 v178 v179 v180 v181 v182 v183, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 ;.loc 1 215 0 + v_accvgpr_write_b32 a211, v077 + v_accvgpr_write_b32 a210, v076 + s_nop 4 + v_accvgpr_read_b32 v008, a214 + v_accvgpr_read_b32 v009, a215 + v_accvgpr_read_b32 v010, a216 + v_accvgpr_read_b32 v011, a217 + v_accvgpr_write_b32 a217, v055 + v_accvgpr_write_b32 a216, v054 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, v234 v235 v236 v237 v238 v239 v240 v241, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 220 0 + v_accvgpr_write_b32 a215, v053 + v_accvgpr_write_b32 a214, v052 + s_nop 4 + v_accvgpr_read_b32 v008, a218 + v_accvgpr_read_b32 v009, a219 + v_accvgpr_read_b32 v010, a220 + v_accvgpr_read_b32 v011, a221 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], v234 v235 v236 v237 v238 v239 v240 v241, v226 v227 v228 v229 v230 v231 v232 v233, a[64:67] ;.loc 1 227 0 + s_nop 0 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, v234 v235 v236 v237 v238 v239 v240 v241, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 + s_nop 4 + v_accvgpr_mov_b32 a64, a230 + v_accvgpr_mov_b32 a65, a231 + v_accvgpr_mov_b32 a66, a232 + v_accvgpr_mov_b32 a67, a233 + v_accvgpr_read_b32 v008, a222 + v_accvgpr_read_b32 v009, a223 + v_accvgpr_read_b32 v010, a224 + v_accvgpr_read_b32 v011, a225 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[0:7], a[32:39], a[64:67] ;.loc 1 179 0 + s_nop 0 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, v234 v235 v236 v237 v238 v239 v240 v241, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 + s_nop 4 ;.loc 4 920 22 + ds_read_b128 a[64:67], v245 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v240, a79 + s_mov_b32 m0, s28 + s_waitcnt vmcnt(2) ;.loc 4 920 22 + ds_read_b128 a[72:75], v255 + ds_read_b128 a[76:79], v240 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a234 + v_accvgpr_read_b32 v009, a235 + v_accvgpr_read_b32 v010, a236 + v_accvgpr_read_b32 v011, a237 + v_accvgpr_read_b32 v241, a141 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[0:7], a[40:47], v008 v009 v010 v011 ;.loc 1 180 0 + v_accvgpr_read_b32 v239, a145 + v_accvgpr_read_b32 v238, a144 + v_accvgpr_read_b32 v237, a143 + v_accvgpr_read_b32 v236, a142 + s_nop 2 + v_accvgpr_read_b32 v008, a238 + v_accvgpr_read_b32 v009, a239 + v_accvgpr_read_b32 v010, a240 + v_accvgpr_read_b32 v011, a241 + v_mfma_f32_16x16x128_f8f6f4 a[140:143], a[16:23], a[56:63], a[88:91] ;.loc 1 215 0 + s_nop 0 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[0:7], a[48:55], v008 v009 v010 v011 + s_nop 6 + v_accvgpr_read_b32 v008, a80 + v_accvgpr_read_b32 v009, a81 + v_accvgpr_read_b32 v010, a82 + v_accvgpr_read_b32 v011, a83 + ds_read_b128 a[80:83], v241 ;.loc 4 920 22 + s_waitcnt lgkmcnt(3) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[0:7], a[64:71], v248 v249 v250 v251 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[8:15], a[56:63], v008 v009 v010 v011 ;.loc 1 203 0 + s_nop 6 + v_accvgpr_read_b32 v008, a84 + v_accvgpr_read_b32 v009, a85 + v_accvgpr_read_b32 v010, a86 + v_accvgpr_read_b32 v011, a87 + ds_read_b128 a[84:87], v242 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[16:23], a[32:39], v008 v009 v010 v011 ;.loc 1 208 0 + s_or_b32 s59, s36, 0x200 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + s_nop 4 + v_accvgpr_read_b32 v008, a104 + v_accvgpr_read_b32 v009, a105 + v_accvgpr_read_b32 v010, a106 + v_accvgpr_read_b32 v011, a107 + s_waitcnt lgkmcnt(2) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[0:7], a[72:79], a[166:169] + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[16:23], a[40:47], v008 v009 v010 v011 ;.loc 1 209 0 + s_nop 6 + v_accvgpr_read_b32 v008, a146 + v_accvgpr_read_b32 v011, a148 + ds_read_b128 a[88:91], v008 ;.loc 4 920 22 + ds_read_b128 a[92:95], v011 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + ds_read_b128 a[96:99], v005 offset:16384 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(4) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[0:7], a[80:87], a[170:173] + v_accvgpr_write_b32 a147, v015 + v_accvgpr_write_b32 a146, v014 + v_accvgpr_write_b32 a145, v013 + v_accvgpr_write_b32 a144, v012 + v_accvgpr_read_b32 v012, a120 + v_accvgpr_read_b32 v013, a121 + v_accvgpr_read_b32 v014, a122 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[0:7], a[88:95], a[174:177] + ds_read_b128 a[0:3], v005 offset:18432 ;.loc 4 920 22 + ds_read_b128 a[4:7], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_accvgpr_read_b32 v015, a123 + v_accvgpr_read_b32 v010, a137 + v_accvgpr_write_b32 a137, v007 + v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[8:15], a[64:71], v084 v085 v086 v087 ;.loc 1 196 0 + v_accvgpr_write_b32 a148, v252 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[8:15], a[72:79], v028 v029 v030 v031 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[8:15], a[80:87], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[8:15], a[88:95], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[8:11], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[12:15], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x200200 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[16:23], a[48:55], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[16:23], a[64:71], a[178:181] ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[16:23], a[72:79], a[182:185] ;.loc 1 209 0 + s_nop 10 + v_accvgpr_read_b32 v036, a178 + v_accvgpr_read_b32 v037, a179 + v_accvgpr_read_b32 v038, a180 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[16:23], a[80:87], a[186:189] ;.loc 1 214 0 + v_accvgpr_read_b32 v039, a181 + v_accvgpr_read_b32 v040, a182 + v_accvgpr_read_b32 v041, a183 + v_accvgpr_read_b32 v042, a184 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[16:23], a[88:95], a[190:193] ;.loc 1 215 0 + ds_read_b128 a[16:19], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[20:23], v006 offset:22528 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + scratch_load_dword v009, off, off offset:12 ;.loc 4 920 22 + v_accvgpr_read_b32 v043, a185 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + s_waitcnt lgkmcnt(4) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[0:7], a[32:39], v092 v093 v094 v095 + v_accvgpr_read_b32 v044, a186 + v_accvgpr_read_b32 v045, a187 + v_accvgpr_read_b32 v046, a188 + v_accvgpr_read_b32 v047, a189 + v_accvgpr_read_b32 v048, a190 + v_accvgpr_read_b32 v049, a191 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[0:7], a[48:55], v100 v101 v102 v103 ;.loc 1 202 0 + v_accvgpr_read_b32 v050, a192 + v_accvgpr_read_b32 v051, a193 + s_waitcnt lgkmcnt(2) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[8:15], a[32:39], v108 v109 v110 v111 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[8:15], a[48:55], v112 v113 v114 v115 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[8:15], a[56:63], v012 v013 v014 v015 ;.loc 1 215 0 + s_nop 6 ;.loc 4 920 22 + scratch_load_dword v012, off, off + v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[24:31], a[32:39], a[144:147] ;.loc 1 220 0 + v_accvgpr_read_b32 v013, a139 + v_accvgpr_read_b32 v014, a138 + v_accvgpr_read_b32 v015, a134 + v_accvgpr_write_b32 a134, v244 + v_accvgpr_write_b32 a139, v015 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[24:31], a[64:71], a[194:197] + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[24:31], a[72:79], a[198:201] ;.loc 1 221 0 + s_nop 10 + v_accvgpr_read_b32 v052, a194 + v_accvgpr_read_b32 v053, a195 + v_accvgpr_read_b32 v054, a196 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[24:31], a[80:87], a[202:205] ;.loc 1 226 0 + v_accvgpr_read_b32 v055, a197 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[24:31], a[88:95], a[206:209] ;.loc 1 227 0 + ds_read_b128 a[24:27], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[28:31], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200200 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[96:103], a[32:39], a[210:213] ;.loc 1 179 0 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[16:23], a[32:39], v116 v117 v118 v119 + ds_read_b128 a[32:35], v013 ;.loc 4 920 22 + ds_read_b128 a[36:39], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[96:103], a[40:47], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[0:7], a[40:47], v064 v065 v066 v067 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[8:15], a[40:47], v072 v073 v074 v075 ;.loc 1 209 0 + s_nop 5 + v_accvgpr_read_b32 v064, a206 + v_accvgpr_read_b32 v065, a207 + v_accvgpr_read_b32 v066, a208 + v_accvgpr_read_b32 v067, a209 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[16:23], a[40:47], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + s_waitcnt vmcnt(5) + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a131 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[0:7], a[56:63], v068 v069 v070 v071 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[0:7], a[64:71], v148 v149 v150 v151 ;.loc 1 196 0 + s_nop 5 + v_accvgpr_read_b32 v068, a210 + v_accvgpr_read_b32 v069, a211 + v_accvgpr_read_b32 v070, a212 + v_accvgpr_read_b32 v071, a213 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[0:7], a[72:79], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[0:7], a[80:87], v016 v017 v018 v019 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[0:7], a[88:95], v160 v161 v162 v163 ;.loc 1 203 0 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + v_accvgpr_read_b32 v012, a132 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x280 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a133 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[8:15], a[64:71], v164 v165 v166 v167 ;.loc 1 208 0 + v_accvgpr_read_b32 v016, a135 + v_accvgpr_read_b32 v017, a254 + v_accvgpr_write_b32 a135, v240 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[8:15], a[72:79], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[8:15], a[80:87], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[8:15], a[88:95], v176 v177 v178 v179 ;.loc 1 215 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + scratch_load_dword v009, off, off offset:16 + s_waitcnt vmcnt(0) + ds_read_b128 a[12:15], v009 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + scratch_load_dword v009, off, off offset:4 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[16:23], a[48:55], v124 v125 v126 v127 ;.loc 1 226 0 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[16:23], a[56:63], v128 v129 v130 v131 ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[16:23], a[64:71], v180 v181 v182 v183 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[16:23], a[72:79], v184 v185 v186 v187 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[16:23], a[80:87], v188 v189 v190 v191 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[16:23], a[88:95], a[218:221] ;.loc 1 227 0 + ds_read_b128 a[16:19], v012 ;.loc 4 920 22 + s_waitcnt vmcnt(1) + ds_read_b128 a[20:23], v009 + scratch_load_dword v009, off, off offset:8 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[96:103], a[64:71], v132 v133 v134 v135 ;.loc 1 179 0 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_mov_b32 a68, a144 + v_accvgpr_mov_b32 a69, a145 + v_accvgpr_mov_b32 a70, a146 + v_accvgpr_mov_b32 a71, a147 + v_accvgpr_mov_b32 a64, a140 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[96:103], a[48:55], v056 v057 v058 v059 ;.loc 1 186 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + v_accvgpr_mov_b32 a65, a141 + v_accvgpr_mov_b32 a66, a142 + v_accvgpr_mov_b32 a67, a143 + v_accvgpr_write_b32 a142, v243 + v_accvgpr_write_b32 a144, v241 + v_accvgpr_write_b32 a147, v246 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[96:103], a[72:79], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_accvgpr_mov_b32 a75, a161 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[96:103], a[56:63], v060 v061 v062 v063 ;.loc 1 191 0 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_read_b32 v056, a198 + v_accvgpr_read_b32 v057, a199 + v_accvgpr_read_b32 v058, a200 + v_accvgpr_read_b32 v059, a201 + v_accvgpr_write_b32 a143, v253 + v_accvgpr_write_b32 a145, v255 + s_waitcnt lgkmcnt(9) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[120:127], a[32:39], a[68:71] + v_accvgpr_read_b32 v060, a202 + v_accvgpr_read_b32 v061, a203 + v_accvgpr_read_b32 v062, a204 + v_accvgpr_read_b32 v063, a205 + v_accvgpr_write_b32 a140, v016 + s_waitcnt vmcnt(1) ;.loc 4 920 22 + ds_read_b128 a[52:55], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a130 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + s_mov_b32 m0, s41 ;.loc 3 94 8 + v_accvgpr_mov_b32 a68, a154 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds + v_accvgpr_mov_b32 a69, a155 + v_accvgpr_mov_b32 a70, a156 + v_accvgpr_mov_b32 a71, a157 + s_waitcnt lgkmcnt(8) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[0:7], a[72:75] + s_or_b32 s59, s36, 0x280 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_write_b32 a154, v000 + v_mov_b32_e32 v009, v013 + v_accvgpr_mov_b32 a155, a147 + s_nop 1 + v_accvgpr_mov_b32 a72, a162 + s_waitcnt lgkmcnt(6) ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[112:119], a[8:15], a[64:67] + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_accvgpr_mov_b32 a75, a165 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v017 + v_accvgpr_read_b32 v017, a136 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[24:31], a[32:39], a[222:225] ;.loc 1 179 0 + v_accvgpr_write_b32 a141, v017 + v_accvgpr_write_b32 a136, v012 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[120:127], a[40:47], a[68:71] ;.loc 1 221 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v017 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[8:15], a[72:75] ;.loc 1 227 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_nop 4 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_accvgpr_mov_b32 a75, a169 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[24:31], a[56:63], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[24:31], a[48:55], a[72:75] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:49152 + ds_read_b128 a[72:75], v005 offset:49152 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[96:103], a[80:87], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_mov_b32 a80, a174 + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[24:31], a[40:47], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[24:31], a[0:7], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[24:31], a[8:15], a[226:229] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[24:31], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[24:31], a[64:71], a[80:83] + ds_read_b128 a[24:27], v005 offset:51200 ;.loc 4 920 22 + ds_read_b128 a[28:31], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 1 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[96:103], a[88:95], v144 v145 v146 v147 ;.loc 1 191 0 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200280 ;.loc 1 345 0 + v_accvgpr_mov_b32 a96, a214 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_accvgpr_mov_b32 a97, a215 + v_accvgpr_mov_b32 a98, a216 + v_accvgpr_mov_b32 a99, a217 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + s_waitcnt lgkmcnt(6) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[72:79], a[40:47], a[96:99] + ds_read_b128 a[100:103], v006 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[96:99], v005 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[242:245], a[104:111], a[32:39], a[242:245] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[104:111], a[40:47], a[246:249] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[104:111], a[0:7], a[250:253] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[8:15], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v018 v019 v020 v021, a[104:111], a[16:23], v020 v021 v022 v023 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[48:55], v024 v025 v026 v027 ;.loc 1 197 0 + s_nop 5 + v_accvgpr_read_b32 v023, a143 + v_accvgpr_read_b32 v022, a142 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[56:63], v028 v029 v030 v031 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[64:71], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[32:39], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[40:47], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[0:7], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[48:55], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[56:63], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[64:71], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200280 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[48:55], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[56:63], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[64:71], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[72:79], a[0:7], v076 v077 v078 v079 ;.loc 1 186 0 + s_waitcnt lgkmcnt(12) ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[24:31], a[0:7], v092 v093 v094 v095 + s_waitcnt lgkmcnt(10) ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[0:7], v108 v109 v110 v111 + s_waitcnt lgkmcnt(8) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[0:7], v124 v125 v126 v127 + ds_read_b128 a[0:3], v254 ;.loc 4 920 22 + ds_read_b128 a[4:7], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mov_b32_e32 v007, v242 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[72:79], a[8:15], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[24:31], a[8:15], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[8:15], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[8:15], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[8:11], v253 ;.loc 4 920 22 + ds_read_b128 a[12:15], v252 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[24:31], a[32:39], v084 v085 v086 v087 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[24:31], a[40:47], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[24:31], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[24:31], a[48:55], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[24:31], a[56:63], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[24:31], a[64:71], v160 v161 v162 v163 ;.loc 1 203 0 + ds_read_b128 a[24:27], v246 ;.loc 4 920 22 + ds_read_b128 a[28:31], v244 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x300 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[72:79], a[32:39], v068 v069 v070 v071 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[32:39], v100 v101 v102 v103 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[32:39], v116 v117 v118 v119 ;.loc 1 220 0 + ds_read_b128 a[32:35], v243 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v000, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[72:79], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v245 ;.loc 4 920 22 + ds_read_b128 a[20:23], v247 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v247, a221 + v_accvgpr_read_b32 v246, a220 + v_accvgpr_read_b32 v245, a219 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[40:47], v104 v105 v106 v107 ;.loc 1 209 0 + v_accvgpr_read_b32 v244, a218 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[40:47], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[40:43], v255 ;.loc 4 920 22 + ds_read_b128 a[44:47], v240 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v255, a225 + v_accvgpr_read_b32 v254, a224 + v_accvgpr_read_b32 v253, a223 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[72:79], a[64:71], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_read_b32 v252, a222 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[64:71], v176 v177 v178 v179 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[88:95], a[64:71], a[230:233] ;.loc 1 227 0 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[72:79], a[48:55], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_mov_b32 a71, a171 + v_accvgpr_mov_b32 a157, a148 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[48:55], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[48:55], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[48:51], v241 ;.loc 4 920 22 + ds_read_b128 a[52:55], v242 + v_accvgpr_read_b32 v243, a131 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v242, a130 + v_accvgpr_read_b32 v241, a129 + v_accvgpr_read_b32 v240, a128 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[72:79], a[56:63], v140 v141 v142 v143 ;.loc 1 186 0 + s_or_b32 s59, s36, 0x300 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_write_b32 a79, v021 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_accvgpr_mov_b32 a75, a175 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[56:63], v172 v173 v174 v175 ;.loc 1 214 0 + v_accvgpr_write_b32 a78, v020 + v_accvgpr_write_b32 a77, v019 + v_accvgpr_write_b32 a76, v018 + v_accvgpr_read_b32 v020, a137 + v_accvgpr_read_b32 v021, a255 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[56:63], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v011 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_mov_b32_e32 v008, v011 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 + s_nop 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] + s_nop 4 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + s_nop 0 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + scratch_load_dword v011, off, off + s_or_b32 s59, s36, 0x200300 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[0:7], a[234:237] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[238:241] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[242:245] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[246:249] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[250:253] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[40:47], v024 v025 v026 v027 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200300 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v013 ;.loc 4 920 22 + ds_read_b128 a[4:7], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + scratch_load_dword v013, off, off offset:16 + v_mov_b32_e32 v010, v014 + s_waitcnt vmcnt(0) + v_accvgpr_write_b32 a137, v013 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[184:187] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v014 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a153 + ds_read_b128 a[28:31], v000 + scratch_load_dword v000, off, off offset:12 + s_waitcnt vmcnt(0) + v_accvgpr_write_b32 a156, v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + s_or_b32 s59, s33, 0x380 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v013 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + scratch_load_dword v014, off, off offset:4 + v_accvgpr_read_b32 v000, a151 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + s_waitcnt vmcnt(1) + v_accvgpr_write_b32 a138, v014 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v012 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v012, a148 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v015 ;.loc 4 920 22 + scratch_load_dword v015, off, off offset:8 + s_waitcnt vmcnt(0) + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a254 + s_or_b32 s59, s36, 0x380 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a71, a169 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_accvgpr_mov_b32 a75, a173 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[176:179] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v017 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(4) ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[104:111], a[40:47], v024 v025 v026 v027 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] ;.loc 1 226 0 + s_nop 5 + v_accvgpr_read_b32 v026, a149 + v_accvgpr_read_b32 v025, a145 + v_accvgpr_read_b32 v024, a144 + v_mov_b32_e32 v027, v007 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[180:183] ;.loc 1 179 0 + s_nop 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] + s_nop 4 + v_accvgpr_write_b32 a181, v019 + v_accvgpr_write_b32 a180, v018 + v_accvgpr_write_b32 a179, v017 + v_accvgpr_write_b32 a178, v016 + ds_read_b128 a[64:67], v005 offset:49152 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + ds_read_b128 a[76:79], v006 offset:51200 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[72:75], v005 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200380 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_accvgpr_read_b32 v029, a133 + s_nop 0 + v_accvgpr_write_b32 a185, v019 + v_accvgpr_write_b32 a184, v018 + v_accvgpr_write_b32 a183, v017 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_accvgpr_write_b32 a182, v016 + v_accvgpr_read_b32 v016, a150 + v_accvgpr_read_b32 v018, a134 + v_accvgpr_read_b32 v019, a135 + v_accvgpr_write_b32 a134, v010 + v_accvgpr_write_b32 a135, v011 + v_accvgpr_read_b32 v017, a151 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[218:221] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200380 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a147 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v012 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a154 + s_or_b32 s59, s33, 0x400 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v012, a156 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a132 + s_or_b32 s59, s36, 0x400 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a173 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v008, a133 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[142:145], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200400 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200400 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v010 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a152 + v_accvgpr_read_b32 v011, a153 + s_mov_b32 m0, s43 + v_accvgpr_write_b32 a153, v009 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v010 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x480 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v013 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a136 + s_mov_b32 m0, s40 + v_accvgpr_mov_b32 a136, a156 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a139 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a139, v015 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a140 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x480 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a80, a174 + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a141 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_write_b32 a156, v000 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a142 + v_accvgpr_mov_b32 a65, a143 + v_accvgpr_mov_b32 a66, a144 + v_accvgpr_mov_b32 a67, a145 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a145, v020 + v_accvgpr_write_b32 a143, v018 + v_accvgpr_write_b32 a142, v007 + v_accvgpr_write_b32 a144, v019 + v_accvgpr_read_b32 v028, a142 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + s_nop 1 + v_accvgpr_mov_b32 a64, a146 + v_accvgpr_mov_b32 a65, a147 + v_accvgpr_mov_b32 a66, a148 + v_accvgpr_mov_b32 a67, a149 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200480 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200480 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a157 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a155 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a154 + s_or_b32 s59, s33, 0x500 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v018 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x500 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a132 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_mov_b32 a132, a133 + v_accvgpr_mov_b32 a133, a135 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200500 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200500 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a134 + v_accvgpr_read_b32 v009, a135 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a135, v011 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v010 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x580 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + v_accvgpr_read_b32 v012, a137 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_write_b32 a137, v013 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + v_accvgpr_read_b32 v013, a138 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_write_b32 a138, v014 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + v_accvgpr_read_b32 v014, a139 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_mov_b32 a139, a140 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a254 + s_or_b32 s59, s36, 0x580 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a155 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_write_b32 a155, v007 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a154 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 v018 v019 v020 v021, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200580 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + s_nop 1 + v_accvgpr_write_b32 a189, v021 + v_accvgpr_write_b32 a188, v020 + v_accvgpr_write_b32 a187, v019 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_accvgpr_write_b32 a186, v018 + v_accvgpr_read_b32 v020, a145 + v_accvgpr_read_b32 v018, a157 + v_accvgpr_read_b32 v021, a255 + v_accvgpr_read_b32 v019, a144 + v_accvgpr_mov_b32 a157, a132 + v_accvgpr_mov_b32 a132, a134 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_accvgpr_mov_b32 a134, a152 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[222:225] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[182:185] ;.loc 1 202 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200580 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v016, a143 + v_accvgpr_write_b32 a140, v016 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x600 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x600 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_accvgpr_mov_b32 a75, a165 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v007, a153 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[142:145], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s12 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a186 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200600 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200600 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v008, a137 + v_accvgpr_read_b32 v009, a138 + v_accvgpr_write_b32 a138, v014 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v010 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a136 + s_or_b32 s59, s33, 0x680 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a136, v012 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v011 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v012, a156 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a151 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + ds_read_b128 a[52:55], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x680 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a174 + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + v_accvgpr_mov_b32 a75, a165 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v015, a150 + v_mov_b32_e32 v012, v013 + v_accvgpr_write_b32 a150, v026 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a142 + v_accvgpr_mov_b32 a65, a143 + v_accvgpr_mov_b32 a66, a144 + v_accvgpr_mov_b32 a67, a145 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a143, v019 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 4 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a146 + v_accvgpr_mov_b32 a65, a147 + v_accvgpr_mov_b32 a66, a148 + v_accvgpr_mov_b32 a67, a149 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_accvgpr_write_b32 a148, v024 + v_accvgpr_write_b32 a149, v025 + v_accvgpr_mov_b32 a141, a149 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 2 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + s_nop 2 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s37 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a178 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a179 + v_accvgpr_mov_b32 a82, a180 + v_accvgpr_mov_b32 a83, a181 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200680 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200680 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v015 ;.loc 4 920 22 + ds_read_b128 a[4:7], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x700 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a141 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v000, a132 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v026, a254 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_accvgpr_write_b32 a160, v011 + v_accvgpr_mov_b32 a158, a133 + v_accvgpr_mov_b32 a159, a134 + v_accvgpr_mov_b32 a152, a158 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v025, a154 + v_mov_b32_e32 v019, v020 + v_accvgpr_write_b32 a147, v025 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_read_b32 v030, a147 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + v_mov_b32_e32 v024, v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a155 + s_or_b32 s59, s36, 0x700 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a80, a174 + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + v_accvgpr_write_b32 a145, v024 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v027 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a186 + v_accvgpr_mov_b32 a65, a187 + v_accvgpr_mov_b32 a66, a188 + v_accvgpr_mov_b32 a67, a189 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200700 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200700 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a157 + ds_read_b128 a[4:7], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_mov_b32 a157, a132 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a133 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a134 + s_mov_b32 m0, s43 + v_accvgpr_mov_b32 a134, a139 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_mov_b32 a139, a151 + v_accvgpr_write_b32 a151, v027 + v_accvgpr_write_b32 a133, v009 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a135 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x780 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a140 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a140, v019 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v011 ;.loc 4 920 22 + v_accvgpr_read_b32 v011, a136 + ds_read_b128 a[36:39], v011 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a138 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v008, a150 + v_accvgpr_write_b32 a138, v015 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a186 + v_accvgpr_mov_b32 a69, a187 + v_accvgpr_mov_b32 a70, a188 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a189 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a135 + v_accvgpr_mov_b32 a135, a136 + v_accvgpr_write_b32 a136, v012 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + ds_read_b128 a[52:55], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a156 + s_or_b32 s59, s36, 0x780 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a160 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a169 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v026 ;.loc 4 920 22 + ds_read_b128 a[60:63], v014 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200780 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[222:225] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200780 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v015 ;.loc 4 920 22 + ds_read_b128 a[4:7], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v020, a143 + v_accvgpr_read_b32 v015, a139 + v_accvgpr_write_b32 a139, v018 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_accvgpr_write_b32 a141, v020 + v_accvgpr_write_b32 a143, v022 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x800 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a149 + s_mov_b32 m0, s28 + v_accvgpr_write_b32 a149, v007 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a178 + v_accvgpr_mov_b32 a69, a179 + v_accvgpr_mov_b32 a70, a180 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a181 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a148 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v024 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x800 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a158 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a80, a186 + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v027 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v027, a153 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200800 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200800 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a157 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a153, v007 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v007 ;.loc 4 920 22 + ds_read_b128 a[12:15], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a159 + s_mov_b32 m0, s43 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v008 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x880 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v011 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a137 + s_mov_b32 m0, s40 + v_accvgpr_write_b32 a137, v013 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v011 ;.loc 4 920 22 + ds_read_b128 a[20:23], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a133 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a133, v009 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a178 + v_accvgpr_mov_b32 a69, a179 + v_accvgpr_mov_b32 a70, a180 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a181 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v012 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a134 + s_mov_b32 m0, s41 + v_accvgpr_write_b32 a134, v010 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x880 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a80, a186 + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v026 ;.loc 4 920 22 + ds_read_b128 a[60:63], v014 + v_accvgpr_read_b32 v026, a156 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v014, a138 + v_accvgpr_write_b32 a138, v017 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a146, a138 + s_nop 5 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 + v_accvgpr_mov_b32 a76, a166 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200880 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200880 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v014 ;.loc 4 920 22 + ds_read_b128 a[4:7], v019 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v019, a150 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v018, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x900 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a140 + v_accvgpr_mov_b32 a140, a150 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v022, a149 + v_accvgpr_write_b32 a144, v022 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a149, v014 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v019 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mov_b32_e32 v021, v000 + v_mov_b32_e32 v029, v021 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a170 + v_accvgpr_mov_b32 a69, a171 + v_accvgpr_mov_b32 a70, a172 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a173 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v016 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v020, a151 + v_accvgpr_mov_b32 a151, a134 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v024 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x900 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a138 + v_accvgpr_mov_b32 a138, a143 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v020 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200900 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200900 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v022 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[186:189] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a152 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_write_b32 a152, v015 + v_accvgpr_write_b32 a142, v007 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v008 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a135 + s_or_b32 s59, s33, 0x980 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a137 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a135, v012 + v_accvgpr_write_b32 a137, v016 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_mov_b32_e32 v010, v011 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v011 ;.loc 4 920 22 + v_accvgpr_read_b32 v011, a136 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a136, v013 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a170 + v_accvgpr_mov_b32 a69, a171 + v_accvgpr_mov_b32 a70, a172 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a173 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v012 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v012, a139 + v_accvgpr_mov_b32 a139, a148 + v_accvgpr_mov_b32 a148, a133 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a254 + s_or_b32 s59, s36, 0x980 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a143 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_write_b32 a143, v020 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[178:181] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a154, v023 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 4 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200980 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[182:185] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200980 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v014 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mov_b32_e32 v023, v028 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xa00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v013 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v019 ;.loc 4 920 22 + v_accvgpr_read_b32 v019, a255 + ds_read_b128 a[20:23], v019 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v016 ;.loc 4 920 22 + v_accvgpr_read_b32 v016, a141 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a170 + v_accvgpr_mov_b32 a69, a171 + v_accvgpr_mov_b32 a70, a172 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a173 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + v_accvgpr_read_b32 v018, a145 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xa00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v020 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200a00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200a00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v022 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v022, a153 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v022 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_read_b32 v022, a133 + s_mov_b32 m0, s43 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v022, a134 + s_or_b32 s59, s33, 0xa80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_write_b32 a134, v011 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v008, a152 + v_mov_b32_e32 v022, v026 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v010 ;.loc 4 920 22 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a135 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v011, a136 + v_accvgpr_write_b32 a136, v012 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_write_b32 a135, v009 + v_accvgpr_mov_b32 a155, a135 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a134 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + ds_read_b128 a[52:55], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xa80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a151 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v015, a154 + v_accvgpr_read_b32 v026, a142 + v_accvgpr_write_b32 a154, v007 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a142, a140 + s_nop 5 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200a80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200a80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v014 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v014, a150 + v_accvgpr_mov_b32 a150, a133 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v015 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v012, a139 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xb00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v024, v027 + v_accvgpr_read_b32 v000, a132 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v013 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v013, a137 + v_accvgpr_read_b32 v025, a144 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_mov_b32 a137, a141 + v_accvgpr_write_b32 a144, v022 + v_accvgpr_write_b32 a140, v013 + v_accvgpr_write_b32 a141, v015 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v014 ;.loc 4 920 22 + ds_read_b128 a[20:23], v019 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v019, a137 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v016, a152 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xb00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a254 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v028 ;.loc 4 920 22 + ds_read_b128 a[60:63], v020 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v028, a146 + v_accvgpr_read_b32 v020, a255 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200b00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[180:183] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200b00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a153 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a148 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xb80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_mov_b32 a148, a132 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a151, v007 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a133 + s_mov_b32 m0, s40 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a135 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a135, v011 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v010, a149 + v_accvgpr_read_b32 v000, a136 + v_accvgpr_mov_b32 a136, a139 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a139, v017 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xb80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mov_b32_e32 v011, v023 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v022 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v022, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200b80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200b80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v015 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v015, a135 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v028 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v021, a138 + s_or_b32 s59, s33, 0xc00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_mov_b32 a138, a152 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a152, a145 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v021 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v014 ;.loc 4 920 22 + ds_read_b128 a[20:23], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v014, a155 + v_accvgpr_write_b32 a155, v011 + v_accvgpr_write_b32 a135, v014 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v013, a133 + v_accvgpr_mov_b32 a133, a148 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xc00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a154 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v023 ;.loc 4 920 22 + v_accvgpr_read_b32 v023, a143 + ds_read_b128 a[60:63], v023 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200c00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200c00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v024 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v012 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a148 + s_or_b32 s59, s33, 0xc80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a150 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v008, a141 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + ds_read_b128 a[20:23], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v009, a153 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xc80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a140 + v_accvgpr_write_b32 a140, v019 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + v_accvgpr_read_b32 v018, a144 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_write_b32 a144, v000 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_accvgpr_mov_b32 a157, a141 + v_accvgpr_write_b32 a141, v021 + v_accvgpr_mov_b32 a156, a143 + v_accvgpr_mov_b32 a143, a151 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 1 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + s_nop 3 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200c80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200c80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v017, a142 + v_mov_b32_e32 v010, v025 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v000, a154 + v_accvgpr_read_b32 v008, a132 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v028 ;.loc 4 920 22 + ds_read_b128 a[28:31], v029 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xd00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + s_waitcnt lgkmcnt(0) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v021 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + ds_read_b128 a[20:23], v020 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v016 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a136 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a136, v015 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v019 ;.loc 4 920 22 + ds_read_b128 a[52:55], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xd00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a161 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v023 + v_accvgpr_read_b32 v020, a64 + v_accvgpr_read_b32 v021, a65 + v_accvgpr_read_b32 v022, a66 + v_accvgpr_read_b32 v023, a67 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + v_mov_b32_e32 v011, v024 + s_nop 5 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a162 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200d00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200d00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v024 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v024, a254 + v_accvgpr_read_b32 v025, a150 + v_accvgpr_write_b32 a150, v011 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a151 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xd80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a157 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a151, a153 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v012, a149 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a134 + ds_read_b128 a[20:23], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a134, v013 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a138 + s_mov_b32 m0, s41 + v_accvgpr_write_b32 a138, v018 + v_accvgpr_read_b32 v014, a145 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_write_b32 a145, v010 + v_accvgpr_write_b32 a137, v013 + v_accvgpr_read_b32 v027, a145 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xd80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a139 + v_accvgpr_write_b32 a139, v016 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a71, a169 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a74, a160 + v_accvgpr_mov_b32 a75, a161 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 + ds_read_b128 a[56:59], v024 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v018, a141 + v_accvgpr_mov_b32 a141, a142 + v_accvgpr_write_b32 a142, v019 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + v_accvgpr_write_b32 a183, v023 + v_accvgpr_write_b32 a182, v022 + v_accvgpr_write_b32 a181, v021 + v_accvgpr_write_b32 a180, v020 + v_accvgpr_read_b32 v021, a144 + v_accvgpr_read_b32 v023, a154 + v_mov_b32_e32 v022, v028 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mov_b32_e32 v020, v029 + v_accvgpr_write_b32 a145, v023 + v_accvgpr_write_b32 a154, v025 + s_nop 3 + v_accvgpr_mov_b32 a76, a162 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200d80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[184:187] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200d80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[180:183] ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v028 ;.loc 4 920 22 + ds_read_b128 a[28:31], v029 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xe00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v018 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + v_accvgpr_read_b32 v017, a255 + ds_read_b128 a[20:23], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v016 ;.loc 4 920 22 + v_accvgpr_read_b32 v016, a140 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a140, v018 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v019 ;.loc 4 920 22 + ds_read_b128 a[52:55], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a155 + s_or_b32 s59, s36, 0xe00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a143 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a161 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_accvgpr_write_b32 a143, v020 + v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v014 ;.loc 4 920 22 + v_accvgpr_read_b32 v014, a156 + ds_read_b128 a[60:63], v014 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200e00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200e00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v010, a135 + v_accvgpr_read_b32 v011, a136 + v_accvgpr_write_b32 a136, v012 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v009, a134 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v023 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xe80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a133 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_write_b32 a133, v007 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v025 ;.loc 4 920 22 + ds_read_b128 a[20:23], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v007, a138 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xe80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a139 + v_accvgpr_write_b32 a139, v016 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a161 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[146:149] ;.loc 1 227 0 + ds_read_b128 a[56:59], v024 ;.loc 4 920 22 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_read_b32 v024, a154 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a149, a138 + v_accvgpr_write_b32 a138, v015 + v_accvgpr_write_b32 a147, v021 + v_accvgpr_mov_b32 a148, a157 + v_accvgpr_read_b32 v014, a149 + v_accvgpr_read_b32 v029, a148 + v_accvgpr_read_b32 v028, a147 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a144, v007 + v_accvgpr_mov_b32 a146, a138 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 3 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200e80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200e80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v015, a141 + v_accvgpr_read_b32 v012, a142 + v_accvgpr_write_b32 a142, v026 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v021, a155 + v_accvgpr_read_b32 v000, a156 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v022 ;.loc 4 920 22 + ds_read_b128 a[28:31], v020 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xf00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v020, v022 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v018 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v017, a254 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a152 + s_mov_b32 m0, s15 + v_accvgpr_mov_b32 a152, a156 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xf00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a161 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 + ds_read_b128 a[56:59], v021 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v000, a150 + v_accvgpr_read_b32 v021, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x200f00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[186:189] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200f00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + ds_read_b128 a[4:7], v027 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a153 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a153, v019 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v026, a133 + v_accvgpr_mov_b32 a133, a134 + v_accvgpr_mov_b32 a134, a135 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_write_b32 a135, v011 + v_accvgpr_read_b32 v000, a136 + v_accvgpr_write_b32 a145, v000 + v_accvgpr_write_b32 a136, v012 + v_accvgpr_write_b32 a148, v026 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v023 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0xf80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a143 + v_accvgpr_read_b32 v023, a150 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a150, a147 + v_accvgpr_write_b32 a147, v019 + v_accvgpr_write_b32 a143, v021 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v007 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v008, a138 + v_accvgpr_mov_b32 a138, a141 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v025 ;.loc 4 920 22 + ds_read_b128 a[20:23], v026 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v025, a142 + v_accvgpr_write_b32 a142, v030 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a134 + v_accvgpr_read_b32 v010, a135 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + v_accvgpr_read_b32 v011, a137 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0xf80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_write_b32 a137, v013 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a156 + v_accvgpr_mov_b32 a73, a157 + v_accvgpr_mov_b32 a74, a158 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a159 + v_accvgpr_write_b32 a135, v011 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 + ds_read_b128 a[56:59], v017 ;.loc 4 920 22 + ds_read_b128 a[60:63], v014 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x200f80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x200f80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v008, a255 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v029 ;.loc 4 920 22 + ds_read_b128 a[12:15], v028 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v022 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1000 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v022, v027 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v018 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v018, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mov_b32_e32 v015, v016 + v_accvgpr_read_b32 v008, a153 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + v_accvgpr_read_b32 v013, a139 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a155 + s_or_b32 s59, s36, 0x1000 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a140 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a168 + v_accvgpr_mov_b32 a77, a169 + v_accvgpr_mov_b32 a78, a170 + v_accvgpr_mov_b32 a79, a171 + v_accvgpr_mov_b32 a72, a156 + v_accvgpr_mov_b32 a73, a157 + v_accvgpr_mov_b32 a74, a158 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a159 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201000 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201000 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v023 ;.loc 4 920 22 + ds_read_b128 a[4:7], v027 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a151 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v021 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a132 + s_or_b32 s59, s33, 0x1080 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v007 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v007, a133 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v026 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v026, a149 + v_accvgpr_write_b32 a149, v023 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v007 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1080 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a141 + v_accvgpr_mov_b32 a141, a152 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a168 + v_accvgpr_mov_b32 a77, a169 + v_accvgpr_mov_b32 a78, a170 + v_accvgpr_mov_b32 a79, a171 + v_accvgpr_mov_b32 a72, a156 + v_accvgpr_mov_b32 a73, a157 + v_accvgpr_mov_b32 a74, a158 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_accvgpr_mov_b32 a75, a159 + v_accvgpr_write_b32 a152, v025 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v017 ;.loc 4 920 22 + ds_read_b128 a[60:63], v014 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v014, a137 + v_accvgpr_read_b32 v017, a150 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s37 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a186 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201080 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201080 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a146 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v029 ;.loc 4 920 22 + ds_read_b128 a[12:15], v028 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v028, a149 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1100 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v019, v020 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v011 ;.loc 4 920 22 + v_accvgpr_read_b32 v011, a255 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a136 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1100 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a168 + v_accvgpr_mov_b32 a77, a169 + v_accvgpr_mov_b32 a78, a170 + v_accvgpr_mov_b32 a79, a171 + v_accvgpr_mov_b32 a72, a154 + v_accvgpr_mov_b32 a73, a155 + v_accvgpr_mov_b32 a74, a156 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a157 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v018, a141 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201100 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201100 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v023 ;.loc 4 920 22 + ds_read_b128 a[4:7], v022 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mov_b32_e32 v023, v022 + v_accvgpr_read_b32 v022, a153 + v_accvgpr_mov_b32 a153, a133 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_accvgpr_mov_b32 a133, a134 + v_accvgpr_write_b32 a134, v010 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v025, a144 + v_accvgpr_read_b32 v027, a145 + v_accvgpr_write_b32 a145, v000 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_write_b32 a144, v024 + v_mov_b32_e32 v031, v025 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v021 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1180 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v021, a151 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a148 + s_mov_b32 m0, s40 + v_accvgpr_write_b32 a148, v026 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a141, v008 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mov_b32_e32 v024, v029 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v007 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a254 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_mov_b32 a132, a153 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_write_b32 a140, v007 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + v_accvgpr_read_b32 v010, a135 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1180 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_mov_b32 a135, a136 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a154 + v_accvgpr_mov_b32 a73, a155 + v_accvgpr_mov_b32 a74, a156 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a157 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v026, a147 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201180 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201180 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v000, a138 + v_accvgpr_write_b32 a138, v014 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v029 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v029, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1200 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a143 + v_accvgpr_mov_b32 a143, a133 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v030 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v030, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a139 + s_mov_b32 m0, s28 + v_accvgpr_write_b32 a139, v020 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v014, a142 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1200 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a138 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a154 + v_accvgpr_mov_b32 a73, a155 + v_accvgpr_mov_b32 a74, a156 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a157 + v_accvgpr_write_b32 a154, v023 + v_accvgpr_write_b32 a155, v024 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201200 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201200 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v028 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v023, a144 + v_accvgpr_write_b32 a144, v028 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v030 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1280 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v007 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v025, a145 + v_accvgpr_mov_b32 a145, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v023 ;.loc 4 920 22 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a153 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a153, v027 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a133 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a134 + s_mov_b32 m0, s41 + v_accvgpr_write_b32 a133, v000 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_write_b32 a134, v012 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1280 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_mov_b32 a72, a178 + v_accvgpr_mov_b32 a73, a179 + v_accvgpr_mov_b32 a74, a180 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a181 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a156 + v_accvgpr_mov_b32 a77, a157 + v_accvgpr_mov_b32 a78, a158 + v_accvgpr_mov_b32 a79, a159 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201280 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201280 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v017, a152 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1300 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v014 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a255 + ds_read_b128 a[20:23], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a146 + v_accvgpr_mov_b32 a65, a147 + v_accvgpr_mov_b32 a66, a148 + v_accvgpr_mov_b32 a67, a149 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_accvgpr_write_b32 a148, v022 + v_accvgpr_write_b32 a146, v023 + v_accvgpr_write_b32 a147, v019 + v_accvgpr_mov_b32 a152, a147 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a136 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a136, v015 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1300 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_mov_b32 a80, a178 + v_accvgpr_mov_b32 a81, a179 + v_accvgpr_mov_b32 a82, a180 + v_accvgpr_mov_b32 a83, a181 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a156 + v_accvgpr_mov_b32 a77, a157 + v_accvgpr_mov_b32 a78, a158 + v_accvgpr_mov_b32 a79, a159 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201300 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201300 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v028 ;.loc 4 920 22 + v_accvgpr_read_b32 v028, a154 + ds_read_b128 a[4:7], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v030 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v021, a141 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1380 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a132 + v_accvgpr_read_b32 v022, a150 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v007 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v007, a143 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v023 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mov_b32_e32 v023, v010 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1380 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a136 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_accvgpr_mov_b32 a80, a176 + v_accvgpr_mov_b32 a81, a177 + v_accvgpr_mov_b32 a82, a178 + v_accvgpr_mov_b32 a83, a179 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v009, a133 + v_accvgpr_write_b32 a133, v011 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a156 + v_accvgpr_mov_b32 a77, a157 + v_accvgpr_mov_b32 a78, a158 + v_accvgpr_mov_b32 a79, a159 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201380 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201380 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1400 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a140 + v_accvgpr_mov_b32 a140, a150 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v014 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mov_b32_e32 v012, v016 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + ds_read_b128 a[20:23], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a138 + s_mov_b32 m0, s28 + v_accvgpr_write_b32 a138, v020 + v_accvgpr_read_b32 v014, a138 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v011, a144 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1400 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a139 + v_accvgpr_mov_b32 a139, a141 + s_waitcnt lgkmcnt(8) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + v_mov_b32_e32 v015, v025 + v_accvgpr_write_b32 a141, v019 + v_accvgpr_write_b32 a137, v015 + s_nop 3 + v_accvgpr_mov_b32 a64, a128 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + s_waitcnt lgkmcnt(6) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v016 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v016, a154 + v_accvgpr_write_b32 a154, v000 + v_accvgpr_write_b32 a136, v016 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a156 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a157 + v_accvgpr_mov_b32 a78, a158 + v_accvgpr_mov_b32 a79, a159 + v_accvgpr_mov_b32 a156, a144 + v_accvgpr_write_b32 a144, v023 + v_accvgpr_write_b32 a158, v009 + v_accvgpr_mov_b32 a157, a133 + ds_read_b128 a[64:67], v005 offset:16384 ;.loc 4 920 22 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201400 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + s_waitcnt lgkmcnt(8) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[220:223] + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201400 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v016 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a151 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v011 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a148 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v013 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1480 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a146 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v019 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v011 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v011, a254 + v_accvgpr_read_b32 v021, a255 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mov_b32_e32 v007, v008 + v_mov_b32_e32 v020, v027 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1480 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a147 + v_accvgpr_read_b32 v008, a134 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_write_b32 a134, v012 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_write_b32 a147, v010 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_mov_b32_e32 v011, v026 + v_accvgpr_write_b32 a138, v011 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201480 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201480 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v027 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mov_b32_e32 v025, v013 + v_mov_b32_e32 v027, v007 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v022, a142 + v_accvgpr_read_b32 v024, a151 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v023 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1500 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v026, a143 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v022 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v009, a135 + v_accvgpr_write_b32 a135, v018 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a133 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a133, v009 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1500 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v012 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v012, a156 + v_accvgpr_read_b32 v018, a254 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201500 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201500 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v016 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v016, a139 + v_accvgpr_mov_b32 a139, a153 + v_accvgpr_read_b32 v012, a147 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_accvgpr_mov_b32 a153, a148 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a148 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v013 ;.loc 4 920 22 + ds_read_b128 a[28:31], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1580 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a146 + v_accvgpr_write_b32 a146, v025 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v019 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v019, a140 + v_accvgpr_mov_b32 a140, a151 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v016 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a144 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1580 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201580 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201580 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v020 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a155 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v020, a154 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v015 ;.loc 4 920 22 + ds_read_b128 a[12:15], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v015, a141 + v_accvgpr_write_b32 a141, v026 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v023 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1600 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a156 + v_mov_b32_e32 v023, v014 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v022 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a158 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a154 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v021, a155 + v_accvgpr_mov_b32 a155, a137 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v008, a134 + v_accvgpr_read_b32 v000, a145 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a135 + s_or_b32 s59, s36, 0x1600 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a136 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_write_b32 a135, v016 + v_accvgpr_write_b32 a148, v010 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v010 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201600 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201600 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v000, a152 + v_accvgpr_read_b32 v024, a255 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v025 ;.loc 4 920 22 + ds_read_b128 a[28:31], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1680 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mov_b32_e32 v017, v019 + v_mov_b32_e32 v025, v022 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v015 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v016 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v016, a139 + v_accvgpr_mov_b32 a139, a156 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v026, a146 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1680 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a158 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v018, a137 + v_accvgpr_mov_b32 a137, a154 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_accvgpr_mov_b32 a128, a158 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 4 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201680 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201680 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a138 + s_mov_b32 m0, s51 + v_accvgpr_write_b32 a138, v021 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a132 + s_or_b32 s59, s33, 0x1700 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_mov_b32 a132, a134 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a150, v000 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v022 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mov_b32_e32 v022, v013 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + ds_read_b128 a[20:23], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a157 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a133 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a134, v007 + v_accvgpr_write_b32 a133, v025 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + ds_read_b128 a[52:55], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1700 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v010 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v010, a145 + v_accvgpr_read_b32 v008, a153 + v_accvgpr_write_b32 a145, v015 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201700 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201700 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a151 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v011, a152 + v_accvgpr_write_b32 a152, v010 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_accvgpr_mov_b32 a151, a141 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v026 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1780 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a144 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v015 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v015, a141 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + v_accvgpr_read_b32 v013, a135 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a135, v016 + v_accvgpr_write_b32 a154, v013 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_accvgpr_write_b32 a158, v019 + v_accvgpr_mov_b32 a149, a158 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a254 + s_or_b32 s59, s36, 0x1780 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201780 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201780 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v016, a128 + v_accvgpr_read_b32 v018, a136 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mov_b32_e32 v021, v017 + v_accvgpr_read_b32 v017, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v011 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1800 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a156 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v000, a132 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v016 ;.loc 4 920 22 + ds_read_b128 a[20:23], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + v_accvgpr_read_b32 v020, a157 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + v_accvgpr_mov_b32 a68, a192 + v_accvgpr_mov_b32 a69, a193 + v_accvgpr_mov_b32 a70, a194 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a195 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a147 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1800 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[88:95], a[56:63], a[196:199] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v017 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v017, a145 + v_accvgpr_mov_b32 a145, a136 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201800 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201800 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v019 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a153 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v010, a135 + v_accvgpr_mov_b32 a153, a138 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_write_b32 a135, v016 + v_accvgpr_write_b32 a156, v010 + v_accvgpr_mov_b32 a143, a135 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v026 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1880 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v017 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v022 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a184 + v_accvgpr_mov_b32 a69, a185 + v_accvgpr_mov_b32 a70, a186 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a187 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a144 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v014, a134 + v_accvgpr_write_b32 a134, v009 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a142, v015 + v_accvgpr_mov_b32 a144, a137 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1880 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a177 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[196:199] ;.loc 1 227 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v008, a155 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201880 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201880 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a138 + s_mov_b32 m0, s52 + v_accvgpr_write_b32 a138, v011 + v_accvgpr_read_b32 v024, a138 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 + v_accvgpr_write_b32 a138, v014 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a158 + s_mov_b32 m0, s51 + v_accvgpr_write_b32 a158, v007 + v_accvgpr_read_b32 v026, a158 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v011 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a150 + s_or_b32 s59, s33, 0x1900 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a255 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v008, a137 + v_accvgpr_write_b32 a137, v017 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_read_b32 v012, a137 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v016 ;.loc 4 920 22 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v016, a146 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a182 + v_accvgpr_mov_b32 a69, a183 + v_accvgpr_mov_b32 a70, a184 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a185 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v008, a148 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v014 ;.loc 4 920 22 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1900 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a254 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v000, a140 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201900 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201900 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v019 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mov_b32_e32 v018, v023 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a152 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v000, a141 + v_accvgpr_write_b32 a141, v021 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1980 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a155 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v017 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mov_b32_e32 v017, v022 + v_accvgpr_write_b32 a147, v017 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v022 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v013, a135 + v_accvgpr_read_b32 v022, a152 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v023 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v023, a154 + v_accvgpr_read_b32 v000, a156 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1980 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a150 + v_accvgpr_mov_b32 a150, a158 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201980 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201980 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a153 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v009, a149 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v010 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v021, a151 + v_accvgpr_mov_b32 a151, a157 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1a00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v025 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v025, a132 + v_accvgpr_mov_b32 a132, a148 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a148, v018 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a144 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v011 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v020, a140 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v014 ;.loc 4 920 22 + ds_read_b128 a[52:55], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1a00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a134 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v025 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v008, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201a00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201a00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v008, a133 + v_accvgpr_mov_b32 a133, a139 + v_accvgpr_mov_b32 a139, a154 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1a80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a149 + v_accvgpr_write_b32 a149, v015 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a140, v016 + v_accvgpr_read_b32 v019, a149 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v017, a155 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a142 + s_mov_b32 m0, s41 + v_accvgpr_mov_b32 a142, a153 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1a80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v007, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201a80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201a80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v000, a255 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v010 ;.loc 4 920 22 + v_accvgpr_read_b32 v010, a141 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_write_b32 a135, v010 + v_accvgpr_mov_b32 a141, a155 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1b00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v015, a138 + v_accvgpr_write_b32 a154, v015 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v000, a150 + v_mov_b32_e32 v013, v025 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v011 ;.loc 4 920 22 + v_accvgpr_read_b32 v011, a157 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a132 + s_or_b32 s59, s36, 0x1b00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_accvgpr_write_b32 a157, v000 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v025 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v025, a143 + v_accvgpr_mov_b32 a143, a142 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201b00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201b00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v009, a146 + v_accvgpr_write_b32 a138, v009 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v022, a134 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v009 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1b80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mov_b32_e32 v014, v024 + v_accvgpr_write_b32 a136, v014 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a147 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v012 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a148 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v023, a150 + v_accvgpr_write_b32 a150, v013 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v012 ;.loc 4 920 22 + ds_read_b128 a[44:47], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v012, a254 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1b80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_accvgpr_mov_b32 a75, a173 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a161 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v012 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v012, a156 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201b80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201b80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a153 + s_mov_b32 m0, s52 + v_mov_b32_e32 v012, v020 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v017 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v010, a149 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1c00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a144 + v_accvgpr_read_b32 v016, a152 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a255 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v010, a137 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v025 ;.loc 4 920 22 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v008, a133 + v_accvgpr_mov_b32 a133, a145 + v_accvgpr_mov_b32 a146, a133 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_write_b32 a133, v012 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v024 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v011, a148 + v_accvgpr_mov_b32 a148, a141 + v_accvgpr_write_b32 a141, v023 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a149, v011 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1c00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mov_b32_e32 v015, v021 + v_accvgpr_write_b32 a134, v015 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_accvgpr_mov_b32 a75, a173 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a158, a149 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v000, a139 + v_accvgpr_read_b32 v013, a156 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201c00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[178:181] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201c00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + ds_read_b128 a[4:7], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v007, a140 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mov_b32_e32 v020, v018 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v009 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1c80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a147 + v_accvgpr_mov_b32 a147, a152 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a152, a156 + v_accvgpr_write_b32 a156, v019 + v_accvgpr_read_b32 v028, a152 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v010 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + ds_read_b128 a[20:23], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v000, a155 + v_accvgpr_mov_b32 a155, a140 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v011 ;.loc 4 920 22 + ds_read_b128 a[44:47], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v021, a254 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1c80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a173 + v_accvgpr_mov_b32 a80, a186 + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v021 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201c80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201c80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v013 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_write_b32 a159, v000 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_accvgpr_read_b32 v033, a159 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v017 ;.loc 4 920 22 + v_accvgpr_read_b32 v017, a135 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_mov_b32 a135, a137 + v_accvgpr_write_b32 a137, v027 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v014 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1d00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a255 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v025 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v024 ;.loc 4 920 22 + v_accvgpr_read_b32 v024, a151 + ds_read_b128 a[44:47], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a154 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a150 + s_or_b32 s59, s36, 0x1d00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a151 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a72, a170 + v_accvgpr_mov_b32 a73, a171 + v_accvgpr_mov_b32 a74, a172 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a173 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v023 ;.loc 4 920 22 + v_accvgpr_read_b32 v023, a157 + ds_read_b128 a[60:63], v023 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v023, a135 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201d00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201d00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a145 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a145, v009 + v_mov_b32_e32 v008, v025 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_accvgpr_read_b32 v026, a145 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v012 ;.loc 4 920 22 + ds_read_b128 a[12:15], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a138 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v012, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1d80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v010 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v010, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + v_accvgpr_read_b32 v009, a139 + ds_read_b128 a[20:23], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v011 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v015, a154 + v_accvgpr_read_b32 v011, a141 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v027 ;.loc 4 920 22 + ds_read_b128 a[52:55], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1d80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a136 + v_accvgpr_read_b32 v027, a146 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a168 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a73, a169 + v_accvgpr_mov_b32 a74, a170 + v_accvgpr_mov_b32 a75, a171 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a136, a147 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v021 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_mov_b32_e32 v021, v022 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] + v_accvgpr_write_b32 a160, v017 + v_accvgpr_mov_b32 a161, a138 + v_accvgpr_mov_b32 a152, a160 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201d80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201d80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v013 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a153 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v017, a147 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1e00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a138, v007 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v019, a150 + v_accvgpr_read_b32 v000, a133 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a133, v012 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v025 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a144 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v025, a157 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1e00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a72, a168 + v_accvgpr_mov_b32 a73, a169 + v_accvgpr_mov_b32 a74, a170 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a171 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v019 ;.loc 4 920 22 + ds_read_b128 a[60:63], v025 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a186 + v_accvgpr_mov_b32 a77, a187 + v_accvgpr_mov_b32 a78, a188 + v_accvgpr_mov_b32 a79, a189 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201e00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201e00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v027 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v017, a134 + v_accvgpr_write_b32 a134, v000 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v022 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1e80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v022, a254 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v023 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a149 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a137 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v020 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1e80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a184 + v_accvgpr_mov_b32 a77, a185 + v_accvgpr_mov_b32 a78, a186 + v_accvgpr_mov_b32 a79, a187 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201e80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[148:151], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[226:229] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201e80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v028 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a160 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v028, a139 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a140 + s_mov_b32 m0, s51 + v_accvgpr_mov_b32 a140, a137 + v_accvgpr_mov_b32 a137, a141 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a156 + s_or_b32 s59, s33, 0x1f00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + v_accvgpr_read_b32 v012, a159 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v012, a133 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a255 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v008, a132 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a170 + v_accvgpr_mov_b32 a69, a171 + v_accvgpr_mov_b32 a70, a172 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a173 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1f00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a161 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v019 ;.loc 4 920 22 + ds_read_b128 a[60:63], v025 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a184 + v_accvgpr_mov_b32 a77, a185 + v_accvgpr_mov_b32 a78, a186 + v_accvgpr_mov_b32 a79, a187 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x201f00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[144:147] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + s_nop 1 + v_accvgpr_write_b32 a145, v024 + v_mov_b32_e32 v024, v025 + v_accvgpr_read_b32 v025, a155 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[148:151] ;.loc 1 196 0 + v_accvgpr_write_b32 a144, v014 + v_accvgpr_read_b32 v014, a255 + v_accvgpr_read_b32 v013, a145 + v_accvgpr_write_b32 a147, v010 + v_accvgpr_mov_b32 a146, a155 + v_accvgpr_write_b32 a153, v013 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_accvgpr_write_b32 a150, v026 + v_accvgpr_mov_b32 a149, a154 + v_accvgpr_write_b32 a151, v027 + v_accvgpr_read_b32 v032, a149 + v_accvgpr_write_b32 a148, v029 + v_accvgpr_write_b32 a154, v021 + v_accvgpr_read_b32 v030, a148 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 + v_accvgpr_mov_b32 a148, a138 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[226:229] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201f00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v027 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a136 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v027, a144 + v_accvgpr_write_b32 a136, v017 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 + v_accvgpr_write_b32 a155, v007 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a161 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x1f80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v023 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v023, a151 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v026 ;.loc 4 920 22 + ds_read_b128 a[20:23], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a158 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v026, a142 + v_accvgpr_mov_b32 a142, a149 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_mov_b32 a139, a142 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + ds_read_b128 a[44:47], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v000, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v020 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x1f80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a156 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v029 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + ds_read_b128 a[68:71], v006 offset:49152 ;.loc 4 920 22 + v_accvgpr_read_b32 v022, a138 + v_accvgpr_read_b32 v029, a135 + s_waitcnt lgkmcnt(11) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a135, a136 + s_nop 5 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(7) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x201f80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[230:233] ;.loc 1 186 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[226:229] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x201f80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v026 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mov_b32_e32 v000, v018 + v_accvgpr_write_b32 a145, v000 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v025 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2000 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v009 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a182 + v_accvgpr_mov_b32 a69, a183 + v_accvgpr_mov_b32 a70, a184 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a185 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v027 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v032 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2000 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mov_b32_e32 v011, v019 + v_accvgpr_write_b32 a149, v011 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a80, a174 + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v019 ;.loc 4 920 22 + ds_read_b128 a[60:63], v024 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202000 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + s_nop 0 ;.loc 3 94 8 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + s_nop 1 + v_accvgpr_write_b32 a197, v019 + v_accvgpr_write_b32 a196, v018 + v_accvgpr_write_b32 a195, v017 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[0:7], a[210:213] ;.loc 1 196 0 + v_accvgpr_write_b32 a194, v016 + v_accvgpr_read_b32 v017, a134 + v_accvgpr_read_b32 v016, a136 + v_accvgpr_read_b32 v018, a140 + v_mov_b32_e32 v019, v020 + v_accvgpr_read_b32 v034, a194 + v_accvgpr_mov_b32 a134, a161 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 + v_accvgpr_read_b32 v035, a195 + v_accvgpr_read_b32 v036, a196 + v_accvgpr_read_b32 v037, a197 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[238:241] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[104:111], a[48:55], a[230:233] ;.loc 1 202 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202000 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v022 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v017 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v015 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2080 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v021, a150 + v_mov_b32_e32 v015, v031 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v031 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v031, a158 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v021 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a182 + v_accvgpr_mov_b32 a69, a183 + v_accvgpr_mov_b32 a70, a184 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a185 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v020 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a254 + s_or_b32 s59, s36, 0x2080 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a186 + v_accvgpr_mov_b32 a77, a187 + v_accvgpr_mov_b32 a78, a188 + v_accvgpr_mov_b32 a79, a189 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a190 + v_accvgpr_mov_b32 a81, a191 + v_accvgpr_mov_b32 a82, a192 + v_accvgpr_mov_b32 a83, a193 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[88:95], a[56:63], a[198:201] ;.loc 1 227 0 + ds_read_b128 a[56:59], v020 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s37 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a174 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202080 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[0:7], a[202:205] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[96:103], a[32:39], a[206:209] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[0:7], a[210:213] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v034 v035 v036 v037 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202080 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v010 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a152 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v012, a144 + v_accvgpr_mov_b32 a144, a151 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 + v_accvgpr_write_b32 a151, v017 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v026 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v026, a139 + v_accvgpr_mov_b32 a139, a149 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v025 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2100 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a141 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v009 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v009, a255 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v008, a147 + v_accvgpr_read_b32 v014, a145 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a182 + v_accvgpr_mov_b32 a69, a183 + v_accvgpr_mov_b32 a70, a184 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a185 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v027 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v013, a143 + v_accvgpr_read_b32 v027, a154 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v032 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2100 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a154 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a186 + v_accvgpr_mov_b32 a77, a187 + v_accvgpr_mov_b32 a78, a188 + v_accvgpr_mov_b32 a79, a189 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a190 + v_accvgpr_mov_b32 a81, a191 + v_accvgpr_mov_b32 a82, a192 + v_accvgpr_mov_b32 a83, a193 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[198:201] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v024 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v011, a142 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s12 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a174 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a175 + v_accvgpr_mov_b32 a82, a176 + v_accvgpr_mov_b32 a83, a177 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202100 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[202:205] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[206:209] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[158:161] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + s_nop 5 + v_accvgpr_mov_b32 a160, a137 + v_accvgpr_write_b32 a158, v012 + v_accvgpr_mov_b32 a159, a148 + v_accvgpr_read_b32 v025, a159 + v_accvgpr_mov_b32 a148, a154 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202100 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v022 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v023, a144 + v_accvgpr_read_b32 v022, a153 + v_accvgpr_write_b32 a141, v023 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_accvgpr_mov_b32 a144, a156 + v_accvgpr_write_b32 a142, v022 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v017 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a134 + s_mov_b32 m0, s43 + v_accvgpr_mov_b32 a134, a143 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2180 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v021 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a182 + v_accvgpr_mov_b32 a69, a183 + v_accvgpr_mov_b32 a70, a184 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a185 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v016 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mov_b32_e32 v016, v018 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2180 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a76, a186 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a77, a187 + v_accvgpr_mov_b32 a78, a188 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a189 + v_accvgpr_mov_b32 a80, a170 + v_accvgpr_mov_b32 a81, a171 + v_accvgpr_mov_b32 a82, a172 + v_accvgpr_mov_b32 a83, a173 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 + ds_read_b128 a[56:59], v020 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v020, a149 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 + s_nop 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] + s_nop 4 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + s_nop 0 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202180 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[222:225] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[226:229] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202180 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a133 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_mov_b32 a133, a152 + v_accvgpr_write_b32 a152, v007 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a146 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v014 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a156 + s_or_b32 s59, s33, 0x2200 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a132 + s_mov_b32 m0, s29 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v010 ;.loc 4 920 22 + ds_read_b128 a[20:23], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a153 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a178 + v_accvgpr_mov_b32 a69, a179 + v_accvgpr_mov_b32 a70, a180 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a181 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v012 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a160 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v012, a138 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + ds_read_b128 a[52:55], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a149 + s_or_b32 s59, s36, 0x2200 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v024 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_mov_b32_e32 v009, v024 + v_accvgpr_read_b32 v024, a147 + v_accvgpr_write_b32 a153, v009 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_accvgpr_write_b32 a147, v010 + v_accvgpr_write_b32 a143, v024 + v_accvgpr_mov_b32 a149, a143 + s_nop 3 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 + s_nop 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] + s_nop 4 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + s_nop 0 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202200 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[230:233] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[182:185] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202200 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a155 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v017 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mov_b32_e32 v012, v015 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2280 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a133 + v_accvgpr_write_b32 a138, v000 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a133, a135 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v015, a136 + v_accvgpr_mov_b32 a136, a145 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v021 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v021, a255 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a254 + s_or_b32 s59, s36, 0x2280 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202280 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202280 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v024 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v008, a156 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v013, a160 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v014 ;.loc 4 920 22 + v_accvgpr_read_b32 v014, a146 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2300 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v008, a158 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v010 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v008, a134 + v_accvgpr_write_b32 a134, v013 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v011 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2300 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a144 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v020 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v009, a132 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202300 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202300 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a151 + v_accvgpr_read_b32 v025, a155 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a144, v025 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_accvgpr_mov_b32 a151, a146 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2380 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a150 + v_mov_b32_e32 v017, v027 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v027 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v015, a148 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2380 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v018, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 + v_accvgpr_mov_b32 a76, a182 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202380 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202380 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v024 ;.loc 4 920 22 + ds_read_b128 a[4:7], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v000, a153 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2400 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a146 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v011 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v010 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a158 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v021, a138 + v_accvgpr_write_b32 a150, v010 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_write_b32 a145, v021 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v022, a159 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v026 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2400 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a141 + v_accvgpr_write_b32 a141, v023 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_write_b32 a138, v013 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v020 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_mov_b32_e32 v000, v012 + v_accvgpr_read_b32 v020, a254 + v_accvgpr_write_b32 a137, v000 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202400 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[180:183] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202400 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v022 ;.loc 4 920 22 + ds_read_b128 a[4:7], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v025, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2480 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v012 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v012, a135 + v_accvgpr_write_b32 a135, v019 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v027 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2480 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v020 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v020, a142 + v_accvgpr_write_b32 a142, v022 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_accvgpr_mov_b32 a154, a153 + v_accvgpr_read_b32 v023, a154 + v_accvgpr_mov_b32 a155, a151 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 2 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202480 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[8:15], a[200:203] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[204:207] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202480 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v024 ;.loc 4 920 22 + ds_read_b128 a[4:7], v009 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v009, a139 + v_accvgpr_write_b32 a151, v009 + v_accvgpr_mov_b32 a139, a154 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_accvgpr_write_b32 a154, v017 + v_accvgpr_mov_b32 a143, a151 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a146 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2500 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a147 + v_accvgpr_read_b32 v018, a255 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a147, v026 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v011 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a134 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a134, v016 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v026 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v026, a153 + s_or_b32 s59, s36, 0x2500 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_write_b32 a153, v010 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v026, a145 + v_accvgpr_mov_b32 a145, a153 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202500 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[200:203] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202500 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v022 ;.loc 4 920 22 + ds_read_b128 a[4:7], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a141 + v_accvgpr_read_b32 v022, a144 + s_mov_b32 m0, s44 + v_accvgpr_mov_b32 a144, a152 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_accvgpr_mov_b32 a152, a148 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2580 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a149 + v_accvgpr_read_b32 v015, a136 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a149, v025 + v_accvgpr_read_b32 v024, a149 + v_accvgpr_write_b32 a149, v022 + v_accvgpr_write_b32 a140, v024 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v027 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v012, a254 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2580 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a138 + v_accvgpr_read_b32 v016, a144 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v012 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202580 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202580 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mov_b32_e32 v025, v011 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v021, a147 + v_accvgpr_mov_b32 a147, a141 + v_accvgpr_write_b32 a138, v021 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v015 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2600 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a254 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v011 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v011, a142 + v_accvgpr_write_b32 a142, v000 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v008 ;.loc 4 920 22 + ds_read_b128 a[20:23], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a150 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v018, a155 + v_accvgpr_write_b32 a155, v026 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v008, a148 + v_accvgpr_write_b32 a148, v018 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v021 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2600 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a135 + v_accvgpr_mov_b32 a135, a136 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a136, a144 + v_accvgpr_write_b32 a146, v010 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v023 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v009, a134 + v_accvgpr_write_b32 a134, v007 + v_accvgpr_write_b32 a144, v009 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202600 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202600 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v019 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v013, a137 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2680 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a133 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v013 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v027 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v027, a150 + v_accvgpr_write_b32 a150, v011 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2680 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v012 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v012, a255 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202680 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202680 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v007, a153 + v_accvgpr_mov_b32 a153, a137 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_mov_b32 a132, a133 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v015 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2700 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v015, v020 + v_accvgpr_write_b32 a141, v015 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v027 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v020, a142 + v_accvgpr_write_b32 a142, v000 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v021 ;.loc 4 920 22 + ds_read_b128 a[52:55], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a151 + s_or_b32 s59, s36, 0x2700 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v021, a152 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_accvgpr_write_b32 a151, v019 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v023 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v007, a147 + v_accvgpr_read_b32 v023, a145 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202700 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202700 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v019 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mov_b32_e32 v019, v025 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v007 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v022, a143 + v_accvgpr_read_b32 v007, a155 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2780 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a135 + v_accvgpr_mov_b32 a135, a140 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v013 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v013, a141 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v017, a134 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2780 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a147 + v_accvgpr_read_b32 v010, a136 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v014 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202780 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202780 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v017 ;.loc 4 920 22 + ds_read_b128 a[4:7], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v026 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2800 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v018, v027 + v_accvgpr_write_b32 a157, v018 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + s_waitcnt lgkmcnt(0) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v012, a138 + v_accvgpr_read_b32 v000, a151 + v_accvgpr_write_b32 a138, v031 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_write_b32 a133, v012 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v027 ;.loc 4 920 22 + ds_read_b128 a[44:47], v015 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v015, a139 + v_accvgpr_read_b32 v024, a64 + v_accvgpr_read_b32 v025, a65 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_read_b32 v026, a66 + v_accvgpr_read_b32 v027, a67 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_write_b32 a183, v027 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_accvgpr_write_b32 a182, v026 + v_accvgpr_write_b32 a181, v025 + v_accvgpr_write_b32 a180, v024 + v_accvgpr_read_b32 v025, a150 + v_accvgpr_read_b32 v026, a151 + v_accvgpr_read_b32 v024, a149 + v_accvgpr_read_b32 v027, a153 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2800 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_mov_b32 a151, a147 + v_accvgpr_write_b32 a139, v019 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a150, a136 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v015 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a176 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202800 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202800 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v011 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a149 + s_mov_b32 m0, s44 + v_mov_b32_e32 v011, v028 + v_accvgpr_write_b32 a149, v011 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v000, a137 + v_accvgpr_write_b32 a137, v015 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v010 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2880 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a154 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v000, a144 + v_accvgpr_read_b32 v028, a154 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v031 ;.loc 4 920 22 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mov_b32_e32 v031, v029 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a146 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2880 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a140 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a71, a171 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a73, a165 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a74, a166 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_write_b32 a140, v021 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v014 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v014, a148 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a176 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202880 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[180:183] ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202880 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v017 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a148 + s_mov_b32 m0, s51 + v_accvgpr_mov_b32 a148, a138 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2900 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a142 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v019, a155 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a255 + ds_read_b128 a[20:23], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mov_b32_e32 v013, v016 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2900 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a141 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_accvgpr_mov_b32 a75, a167 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a175 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v015 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v015, a142 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[232:235], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202900 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202900 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v026 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v009, a146 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v010 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2980 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mov_b32_e32 v010, v030 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v027 ;.loc 4 920 22 + ds_read_b128 a[36:39], v029 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v029, a138 + v_accvgpr_write_b32 a138, v019 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v028 ;.loc 4 920 22 + ds_read_b128 a[20:23], v011 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v011, a254 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v029 ;.loc 4 920 22 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a144 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2980 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + s_waitcnt lgkmcnt(8) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + s_waitcnt lgkmcnt(6) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v030 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v030, a139 + v_accvgpr_write_b32 a139, v020 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a172 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202980 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + s_waitcnt lgkmcnt(8) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[232:235] + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[56:63], a[222:225] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202980 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v017 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v000, a151 + v_accvgpr_read_b32 v017, a150 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v016 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2a00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a133 + v_accvgpr_write_b32 a133, v009 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v030 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v007 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mov_b32_e32 v007, v031 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a144 + v_accvgpr_mov_b32 a65, a145 + v_accvgpr_mov_b32 a66, a146 + v_accvgpr_mov_b32 a67, a147 + v_accvgpr_mov_b32 a68, a168 + v_accvgpr_mov_b32 a69, a169 + v_accvgpr_mov_b32 a70, a170 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a171 + v_accvgpr_write_b32 a147, v028 + v_accvgpr_write_b32 a146, v027 + v_accvgpr_mov_b32 a144, a146 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v018, a137 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2a00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_accvgpr_mov_b32 a75, a179 + v_mfma_f32_16x16x128_f8f6f4 a[152:155], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s12 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a184 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202a00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202a00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v026 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a136 + s_mov_b32 m0, s43 + v_accvgpr_write_b32 a136, v016 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v021 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2a80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_read_b32 v021, a134 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a150, v000 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v027 ;.loc 4 920 22 + ds_read_b128 a[36:39], v031 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v027, a140 + v_accvgpr_read_b32 v031, a142 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a142, v023 + v_accvgpr_write_b32 a140, v007 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v028 ;.loc 4 920 22 + v_accvgpr_read_b32 v028, a149 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a149, v030 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a188 + v_accvgpr_mov_b32 a65, a189 + v_accvgpr_mov_b32 a66, a190 + v_accvgpr_mov_b32 a67, a191 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v029 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v029, a135 + v_accvgpr_mov_b32 a135, a141 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2a80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a148 + v_accvgpr_mov_b32 a148, a151 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[152:155] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v010 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[24:31], a[64:67] + s_nop 0 + v_accvgpr_write_b32 a154, v013 + v_accvgpr_write_b32 a155, v014 + v_accvgpr_write_b32 a152, v010 + v_accvgpr_read_b32 v010, a133 + v_accvgpr_mov_b32 a141, a154 + v_accvgpr_mov_b32 a153, a140 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202a80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202a80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v021 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v020, a157 + v_accvgpr_read_b32 v019, a151 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v013 ;.loc 4 920 22 + ds_read_b128 a[28:31], v014 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2b00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + s_waitcnt lgkmcnt(0) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a71, a169 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v030 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v030, a255 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v030 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v012, a64 + v_accvgpr_read_b32 v013, a65 + v_accvgpr_read_b32 v014, a66 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_read_b32 v015, a67 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_write_b32 a185, v015 + v_accvgpr_write_b32 a184, v014 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_accvgpr_write_b32 a183, v013 + v_accvgpr_write_b32 a182, v012 + v_accvgpr_read_b32 v013, a255 + v_accvgpr_read_b32 v012, a136 + v_accvgpr_read_b32 v015, a142 + v_accvgpr_read_b32 v014, a143 + v_accvgpr_write_b32 a151, v013 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2b00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mov_b32_e32 v016, v026 + v_accvgpr_read_b32 v023, a138 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a76, a162 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a165 + v_accvgpr_mov_b32 a80, a170 + v_accvgpr_mov_b32 a81, a171 + v_accvgpr_mov_b32 a82, a172 + v_accvgpr_mov_b32 a83, a173 + v_accvgpr_mov_b32 a142, a148 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v018 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_mov_b32_e32 v018, v024 + v_accvgpr_read_b32 v022, a139 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202b00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[226:229] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202b00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v026 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v026, a146 + v_accvgpr_write_b32 a146, v009 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v019 ;.loc 4 920 22 + ds_read_b128 a[12:15], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v024, a147 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2b80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v026 ;.loc 4 920 22 + ds_read_b128 a[36:39], v007 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v007, a135 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v000, a152 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2b80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a166 + v_accvgpr_mov_b32 a69, a167 + v_accvgpr_mov_b32 a70, a168 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a71, a169 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a74, a176 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_mov_b32 a80, a170 + v_accvgpr_mov_b32 a81, a171 + v_accvgpr_mov_b32 a82, a172 + v_accvgpr_mov_b32 a83, a173 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v000 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a154 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a178 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202b80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[56:63], a[222:225] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[182:185] ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202b80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v021 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v021, a149 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v022 ;.loc 4 920 22 + ds_read_b128 a[12:15], v023 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a155 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2c00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v000, v020 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a147, v000 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v021 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v020, a137 + v_accvgpr_write_b32 a137, v016 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2c00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a80, a168 + v_accvgpr_mov_b32 a81, a169 + v_accvgpr_mov_b32 a82, a170 + v_accvgpr_mov_b32 a83, a171 + v_accvgpr_mov_b32 a75, a177 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v014 ;.loc 4 920 22 + ds_read_b128 a[60:63], v020 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_accvgpr_write_b32 a156, v018 + v_accvgpr_mov_b32 a158, a150 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + s_nop 1 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + s_mov_b32 m0, s12 ;.loc 3 94 8 + s_nop 5 + v_accvgpr_mov_b32 a80, a186 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + v_accvgpr_mov_b32 a81, a187 + v_accvgpr_mov_b32 a82, a188 + v_accvgpr_mov_b32 a83, a189 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202c00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202c00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v016 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v016, a140 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v019 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mov_b32_e32 v019, v017 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2c80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v026 ;.loc 4 920 22 + ds_read_b128 a[36:39], v016 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + v_accvgpr_read_b32 v009, a150 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a152 + v_accvgpr_mov_b32 a152, a139 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_mov_b32 a139, a138 + v_accvgpr_write_b32 a138, v020 + v_accvgpr_mov_b32 a150, a149 + v_accvgpr_mov_b32 a149, a135 + v_accvgpr_mov_b32 a135, a143 + v_accvgpr_mov_b32 a143, a158 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2c80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a134 + v_accvgpr_write_b32 a134, v012 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_accvgpr_mov_b32 a80, a168 + v_accvgpr_mov_b32 a81, a169 + v_accvgpr_mov_b32 a82, a170 + v_accvgpr_mov_b32 a83, a171 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v011, a155 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a190 + v_accvgpr_mov_b32 a65, a191 + v_accvgpr_mov_b32 a66, a192 + v_accvgpr_mov_b32 a67, a193 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202c80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202c80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v022 ;.loc 4 920 22 + ds_read_b128 a[12:15], v023 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v022, a154 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v023, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v022 ;.loc 4 920 22 + ds_read_b128 a[28:31], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2d00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a138 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v021 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v021, a142 + v_accvgpr_mov_b32 a142, a151 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v013 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v013, a254 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + ds_read_b128 a[44:47], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v000, a158 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a157, v007 + v_accvgpr_mov_b32 a154, a157 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2d00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a137 + v_accvgpr_write_b32 a137, v009 + s_waitcnt lgkmcnt(8) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a145, a137 + s_nop 5 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + s_waitcnt lgkmcnt(6) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 + ds_read_b128 a[56:59], v014 ;.loc 4 920 22 + ds_read_b128 a[60:63], v020 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v020, a146 + v_accvgpr_write_b32 a146, v024 + v_accvgpr_write_b32 a136, v020 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] + v_accvgpr_read_b32 v014, a149 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202d00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + s_waitcnt lgkmcnt(8) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[226:229] + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[230:233] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202d00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v018, a140 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v017 ;.loc 4 920 22 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a144 + s_or_b32 s59, s33, 0x2d80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v018 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a133 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2d80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a160 + v_accvgpr_mov_b32 a77, a161 + v_accvgpr_mov_b32 a78, a162 + v_accvgpr_mov_b32 a79, a163 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v013, a139 + v_accvgpr_read_b32 v009, a135 + v_accvgpr_write_b32 a135, v027 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] + v_accvgpr_read_b32 v010, a135 + v_accvgpr_write_b32 a148, v009 + s_nop 4 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202d80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202d80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a152 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a155 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v022 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a150 + s_or_b32 s59, s33, 0x2e00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v022, a156 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a156, a133 + v_accvgpr_write_b32 a133, v015 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a151 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a147 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + v_accvgpr_read_b32 v008, a149 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a134 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a134, v012 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + v_accvgpr_mov_b32 a68, a164 + v_accvgpr_mov_b32 a69, a165 + v_accvgpr_mov_b32 a70, a166 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a167 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2e00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a179 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v011 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202e00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202e00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v012 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v012, a143 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v023 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v023, a151 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2e80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v018 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v018, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mov_b32_e32 v016, v018 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v024 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v024, a152 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v020 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v020, a141 + v_accvgpr_read_b32 v012, a155 + v_accvgpr_mov_b32 a141, a138 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a138, a149 + v_accvgpr_mov_b32 a149, a135 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a254 + v_accvgpr_read_b32 v007, a137 + s_or_b32 s59, s36, 0x2e80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a176 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a73, a177 + v_accvgpr_mov_b32 a74, a178 + v_accvgpr_mov_b32 a75, a179 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a137, a147 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a150 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a172 + v_accvgpr_mov_b32 a65, a173 + v_accvgpr_mov_b32 a66, a174 + v_accvgpr_mov_b32 a67, a175 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202e80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[230:233] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202e80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v018 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v013, a147 + v_accvgpr_mov_b32 a147, a141 + v_accvgpr_read_b32 v026, a147 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2f00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x2f00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a134 + v_mov_b32_e32 v015, v025 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_write_b32 a134, v012 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v011 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v009, a144 + v_mov_b32_e32 v011, v022 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x202f00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202f00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v025 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v025, a157 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v022, a143 + v_accvgpr_mov_b32 a143, a152 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x2f80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v009 ;.loc 4 920 22 + v_accvgpr_read_b32 v009, a140 + ds_read_b128 a[36:39], v009 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a146 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a140, v020 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a136 + s_mov_b32 m0, s39 + v_accvgpr_mov_b32 a136, a150 + v_accvgpr_read_b32 v017, a136 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_write_b32 a152, v009 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v025 ;.loc 4 920 22 + v_accvgpr_read_b32 v025, a156 + ds_read_b128 a[52:55], v025 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v025, a254 + s_or_b32 s59, s36, 0x2f80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a158 + v_accvgpr_mov_b32 a77, a159 + v_accvgpr_mov_b32 a78, a160 + v_accvgpr_mov_b32 a79, a161 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v025 ;.loc 4 920 22 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_write_b32 a136, v007 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x202f80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x202f80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v018 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v024 ;.loc 4 920 22 + ds_read_b128 a[12:15], v027 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v027, a156 + v_mov_b32_e32 v024, v019 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3000 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a148 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v000, a133 + v_accvgpr_write_b32 a133, v015 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v023, a153 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v014, a143 + v_mov_b32_e32 v013, v020 + v_accvgpr_write_b32 a143, v024 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + v_accvgpr_mov_b32 a68, a162 + v_accvgpr_mov_b32 a69, a163 + v_accvgpr_mov_b32 a70, a164 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a165 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3000 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a186 + v_accvgpr_mov_b32 a77, a187 + v_accvgpr_mov_b32 a78, a188 + v_accvgpr_mov_b32 a79, a189 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a177 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v012 ;.loc 4 920 22 + v_accvgpr_read_b32 v012, a141 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_write_b32 a141, v021 + v_accvgpr_read_b32 v012, a134 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203000 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203000 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v015 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v008, a157 + v_accvgpr_read_b32 v015, a142 + v_accvgpr_mov_b32 a142, a133 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v021 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v021, a146 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a144 + s_or_b32 s59, s33, 0x3080 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a138 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a138, v000 + v_accvgpr_write_b32 a155, v019 + v_accvgpr_write_b32 a151, v010 + v_accvgpr_mov_b32 a144, a151 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v023 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v021 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a133 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3080 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a139 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a174 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a73, a175 + v_accvgpr_mov_b32 a74, a176 + v_accvgpr_mov_b32 a75, a177 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a185 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v025 ;.loc 4 920 22 + v_accvgpr_read_b32 v025, a145 + ds_read_b128 a[60:63], v025 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203080 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203080 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v018 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v018, a137 + v_accvgpr_write_b32 a137, v017 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v014 ;.loc 4 920 22 + ds_read_b128 a[12:15], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v008, a132 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3100 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a141 + v_accvgpr_mov_b32 a141, a146 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v007 ;.loc 4 920 22 + ds_read_b128 a[52:55], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a148 + s_or_b32 s59, s36, 0x3100 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a135 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a72, a172 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a73, a173 + v_accvgpr_mov_b32 a74, a174 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a175 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_accvgpr_write_b32 a135, v016 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a180 + v_accvgpr_mov_b32 a77, a181 + v_accvgpr_mov_b32 a78, a182 + v_accvgpr_mov_b32 a79, a183 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203100 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203100 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v024 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3180 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a152 + v_mov_b32_e32 v024, v011 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v023 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v023, a154 + v_accvgpr_write_b32 a154, v018 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a148, v023 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v021 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v021, a140 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v000, a254 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v023 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3180 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a168 + v_accvgpr_mov_b32 a73, a169 + v_accvgpr_mov_b32 a74, a170 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a171 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v025 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v025, a152 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a128, v014 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 4 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203180 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203180 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v016, a153 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v014 ;.loc 4 920 22 + v_accvgpr_read_b32 v014, a139 + ds_read_b128 a[12:15], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_write_b32 a139, v015 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v013 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3200 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a136 + v_mov_b32_e32 v013, v022 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a150, v012 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v017, a138 + v_accvgpr_write_b32 a152, v017 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v015, a146 + v_accvgpr_mov_b32 a146, a147 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a156 + v_accvgpr_mov_b32 a65, a157 + v_accvgpr_mov_b32 a66, a158 + v_accvgpr_mov_b32 a67, a159 + v_accvgpr_mov_b32 a68, a160 + v_accvgpr_mov_b32 a69, a161 + v_accvgpr_mov_b32 a70, a162 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a163 + v_accvgpr_mov_b32 a157, a154 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v019 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v018, a143 + v_accvgpr_read_b32 v019, a149 + v_accvgpr_mov_b32 a143, a128 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3200 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a72, a168 + v_accvgpr_mov_b32 a73, a169 + v_accvgpr_mov_b32 a74, a170 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a171 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + ds_read_b128 a[60:63], v026 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v026, a157 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203200 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203200 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v008 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v009, a135 + v_accvgpr_write_b32 a135, v013 + v_accvgpr_read_b32 v008, a157 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3280 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v016 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v010, a134 + v_accvgpr_mov_b32 a134, a155 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v022, a145 + v_accvgpr_write_b32 a145, v014 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v023 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3280 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a139 + v_accvgpr_write_b32 a139, v022 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a72, a168 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a73, a169 + v_accvgpr_mov_b32 a74, a170 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a171 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v022 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a128 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a164 + v_accvgpr_mov_b32 a65, a165 + v_accvgpr_mov_b32 a66, a166 + v_accvgpr_mov_b32 a67, a167 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203280 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203280 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v014, a137 + v_accvgpr_read_b32 v000, a154 + v_accvgpr_write_b32 a154, v007 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v021 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3300 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v014 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a155 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v000, a133 + v_accvgpr_mov_b32 a155, a141 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_accvgpr_write_b32 a141, v025 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a180 + v_accvgpr_mov_b32 a65, a181 + v_accvgpr_mov_b32 a66, a182 + v_accvgpr_mov_b32 a67, a183 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3300 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a151 + v_accvgpr_write_b32 a151, v009 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a188 + v_accvgpr_mov_b32 a81, a189 + v_accvgpr_mov_b32 a82, a190 + v_accvgpr_mov_b32 a83, a191 + v_mov_b32_e32 v012, v020 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a147 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203300 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203300 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a132 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v020 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v020, a134 + v_accvgpr_write_b32 a134, v012 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v019 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3380 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v019, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v016 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v015 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mov_b32_e32 v015, v018 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v025 ;.loc 4 920 22 + ds_read_b128 a[44:47], v013 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a148 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v025, a144 + v_accvgpr_mov_b32 a144, a140 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a157, a144 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v013 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a254 + s_or_b32 s59, s36, 0x3380 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v022 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v022, a145 + v_accvgpr_read_b32 v013, a141 + v_accvgpr_write_b32 a141, v020 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_mov_b32_e32 v011, v022 + v_accvgpr_write_b32 a140, v011 + s_nop 4 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203380 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203380 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v009 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a143 + s_mov_b32 m0, s52 + v_accvgpr_write_b32 a143, v023 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v021 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3400 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mov_b32_e32 v010, v024 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v014 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mov_b32_e32 v014, v016 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v023, a150 + v_accvgpr_mov_b32 a150, a151 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v008 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a152 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v023 ;.loc 4 920 22 + ds_read_b128 a[52:55], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a154 + s_or_b32 s59, s36, 0x3400 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a173 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v008 ;.loc 4 920 22 + ds_read_b128 a[60:63], v007 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v007, a142 + v_accvgpr_read_b32 v008, a133 + v_accvgpr_write_b32 a133, v010 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203400 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[182:185] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203400 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v000 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v000, a149 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v012 ;.loc 4 920 22 + ds_read_b128 a[12:15], v024 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v012, a135 + v_accvgpr_read_b32 v024, a143 + v_accvgpr_write_b32 a143, v007 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_accvgpr_write_b32 a135, v015 + v_mov_b32_e32 v017, v024 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v018 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3480 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a155 + v_accvgpr_read_b32 v018, a148 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a148, v014 + v_accvgpr_write_b32 a138, v018 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v016 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mov_b32_e32 v016, v027 + v_accvgpr_write_b32 a136, v016 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v000 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v000, a254 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3480 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v027, a147 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + ds_read_b128 a[60:63], v019 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a151 + v_accvgpr_write_b32 a151, v009 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203480 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203480 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v000 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v000, a137 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v022, a154 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v021 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3500 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v021, a132 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v000 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v000, a148 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v026 ;.loc 4 920 22 + ds_read_b128 a[44:47], v020 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_mov_b32_e32 v020, v023 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v023 ;.loc 4 920 22 + v_accvgpr_read_b32 v023, a152 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3500 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v027 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203500 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203500 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a134 + s_mov_b32 m0, s44 + v_accvgpr_write_b32 a134, v012 + v_accvgpr_write_b32 a147, v007 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v007 ;.loc 4 920 22 + ds_read_b128 a[12:15], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a149 + s_mov_b32 m0, s43 + v_accvgpr_mov_b32 a149, a152 + v_accvgpr_write_b32 a152, v021 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v015 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3580 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mov_b32_e32 v015, v013 + v_accvgpr_write_b32 a153, v015 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v014 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v014, a155 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v014 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v013 ;.loc 4 920 22 + ds_read_b128 a[44:47], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v013, a254 + v_accvgpr_read_b32 v012, a150 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v018 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3580 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a141 + v_mov_b32_e32 v016, v026 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v019 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v019, a137 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203580 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203580 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v012 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v012, a135 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v009 ;.loc 4 920 22 + ds_read_b128 a[12:15], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a144 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v009, a155 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v011 ;.loc 4 920 22 + ds_read_b128 a[28:31], v008 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3600 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a133 + v_accvgpr_read_b32 v011, a136 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a136, a141 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v026 ;.loc 4 920 22 + ds_read_b128 a[44:47], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v026, a150 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v020 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3600 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a143 + v_accvgpr_write_b32 a143, v010 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v027 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v027, a151 + v_mov_b32_e32 v022, v025 + v_accvgpr_write_b32 a137, v022 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203600 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[186:189] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203600 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v023 ;.loc 4 920 22 + ds_read_b128 a[4:7], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v021, a140 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v007 ;.loc 4 920 22 + ds_read_b128 a[12:15], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v007, a144 + v_accvgpr_mov_b32 a144, a143 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v012 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3680 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a134 + v_accvgpr_write_b32 a134, v016 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a156, v010 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v025 ;.loc 4 920 22 + ds_read_b128 a[36:39], v000 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_read_b32 v025, a152 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_mov_b32 a132, a133 + v_accvgpr_mov_b32 a133, a135 + v_accvgpr_write_b32 a135, v017 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v014 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v014, a135 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v015 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a138 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3680 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + v_accvgpr_read_b32 v013, a139 + ds_read_b128 a[60:63], v013 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203680 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203680 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3700 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v024 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v024, a146 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v016 ;.loc 4 920 22 + ds_read_b128 a[44:47], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a149 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v018, a154 + v_accvgpr_write_b32 a149, v013 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v020 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3700 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v024 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[138:141], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a178 + v_accvgpr_mov_b32 a77, a179 + v_accvgpr_mov_b32 a78, a180 + v_accvgpr_mov_b32 a79, a181 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203700 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203700 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v023 ;.loc 4 920 22 + ds_read_b128 a[4:7], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v025, a147 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v025 ;.loc 4 920 22 + ds_read_b128 a[12:15], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v008, a148 + v_accvgpr_write_b32 a148, v000 + v_accvgpr_mov_b32 a150, a148 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v012 ;.loc 4 920 22 + v_accvgpr_read_b32 v012, a143 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3780 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_mov_b32 a143, a155 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v022 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v022, a155 + v_accvgpr_write_b32 a155, v028 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v009 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a153 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v009, a254 + v_accvgpr_read_b32 v010, a136 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3780 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a178 + v_accvgpr_mov_b32 a81, a179 + v_accvgpr_mov_b32 a82, a180 + v_accvgpr_mov_b32 a83, a181 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v013 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a138 + v_accvgpr_mov_b32 a65, a139 + v_accvgpr_mov_b32 a66, a140 + v_accvgpr_mov_b32 a67, a141 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_accvgpr_mov_b32 a141, a151 + v_accvgpr_write_b32 a151, v023 + v_accvgpr_mov_b32 a139, a146 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 2 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203780 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203780 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v027, a157 + v_accvgpr_write_b32 a157, v019 + v_accvgpr_write_b32 a146, v027 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v007 ;.loc 4 920 22 + ds_read_b128 a[28:31], v000 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3800 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a132 + v_accvgpr_read_b32 v000, a133 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a132, v008 + v_accvgpr_write_b32 a140, v007 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v019 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v019, a141 + v_accvgpr_write_b32 a136, v019 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_mov_b32 a141, a147 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v017 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a134 + s_mov_b32 m0, s28 + v_accvgpr_write_b32 a134, v016 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v017 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v020 ;.loc 4 920 22 + ds_read_b128 a[52:55], v016 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3800 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v016, a137 + v_accvgpr_write_b32 a137, v017 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_write_b32 a135, v016 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v018 ;.loc 4 920 22 + ds_read_b128 a[60:63], v024 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v018, a153 + v_mov_b32_e32 v024, v015 + v_accvgpr_mov_b32 a153, a157 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a182 + v_accvgpr_mov_b32 a65, a183 + v_accvgpr_mov_b32 a66, a184 + v_accvgpr_mov_b32 a67, a185 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203800 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203800 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v023 ;.loc 4 920 22 + v_accvgpr_read_b32 v023, a152 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_mov_b32 a152, a139 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v025 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mov_b32_e32 v025, v021 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3880 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mov_b32_e32 v012, v020 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v016 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v008, a156 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v022 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v008 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v008, a157 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v015 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3880 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v015, a154 + v_mov_b32_e32 v022, v015 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v009 ;.loc 4 920 22 + ds_read_b128 a[60:63], v013 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v013, a134 + v_accvgpr_read_b32 v009, a156 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203880 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203880 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v019 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v027 ;.loc 4 920 22 + v_accvgpr_read_b32 v027, a148 + ds_read_b128 a[28:31], v027 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3900 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_write_b32 a148, v018 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_read_b32 v027, a141 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v008 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v008, a139 + v_accvgpr_write_b32 a139, v023 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v017 ;.loc 4 920 22 + ds_read_b128 a[44:47], v010 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_accvgpr_read_b32 v017, a143 + v_accvgpr_mov_b32 a143, a156 + v_accvgpr_read_b32 v010, a150 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v020 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3900 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v020, a146 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v008, a151 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203900 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203900 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v008 ;.loc 4 920 22 + ds_read_b128 a[4:7], v023 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a147 + s_mov_b32 m0, s44 + v_mov_b32_e32 v023, v011 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v007 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a144 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v008, a132 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3980 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v016 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v016, a149 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a158 + v_accvgpr_mov_b32 a69, a159 + v_accvgpr_mov_b32 a70, a160 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a161 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v018 ;.loc 4 920 22 + ds_read_b128 a[44:47], v009 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mov_b32_e32 v009, v024 + v_accvgpr_read_b32 v018, a140 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a254 + s_or_b32 s59, s36, 0x3980 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a133 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a184 + v_accvgpr_mov_b32 a81, a185 + v_accvgpr_mov_b32 a82, a186 + v_accvgpr_mov_b32 a83, a187 + v_accvgpr_write_b32 a133, v012 + v_accvgpr_write_b32 a138, v011 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v024 ;.loc 4 920 22 + ds_read_b128 a[60:63], v016 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203980 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203980 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v019 ;.loc 4 920 22 + ds_read_b128 a[12:15], v021 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mov_b32_e32 v021, v014 + v_mov_b32_e32 v019, v000 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v010 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a153 + s_or_b32 s59, s33, 0x3a00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v010 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v010, a137 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v014 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_accvgpr_read_b32 v014, a151 + v_accvgpr_write_b32 a151, v009 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a156 + v_accvgpr_mov_b32 a69, a157 + v_accvgpr_mov_b32 a70, a158 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a159 + v_accvgpr_write_b32 a157, v017 + v_accvgpr_mov_b32 a156, a144 + v_accvgpr_write_b32 a144, v019 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v013 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a152 + s_or_b32 s59, s36, 0x3a00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v013, a147 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a170 + v_accvgpr_mov_b32 a72, a166 + v_accvgpr_mov_b32 a77, a171 + v_accvgpr_mov_b32 a78, a172 + v_accvgpr_mov_b32 a79, a173 + v_accvgpr_mov_b32 a73, a167 + v_accvgpr_mov_b32 a74, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a169 + v_accvgpr_mov_b32 a80, a182 + v_accvgpr_mov_b32 a81, a183 + v_accvgpr_mov_b32 a82, a184 + v_accvgpr_mov_b32 a83, a185 + v_accvgpr_write_b32 a152, v023 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v015 ;.loc 4 920 22 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v015, a139 + v_accvgpr_mov_b32 a139, a146 + v_accvgpr_write_b32 a146, v022 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a174 + v_accvgpr_mov_b32 a77, a175 + v_accvgpr_mov_b32 a78, a176 + v_accvgpr_mov_b32 a79, a177 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203a00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203a00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v014 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v000 ;.loc 4 920 22 + ds_read_b128 a[28:31], v007 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a135 + s_or_b32 s59, s33, 0x3a80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a148 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a145, v007 + v_accvgpr_write_b32 a135, v029 + v_accvgpr_read_b32 v030, a145 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v007 ;.loc 4 920 22 + ds_read_b128 a[36:39], v008 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_read_b32 v008, a136 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v017 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a143 + s_mov_b32 m0, s39 + v_accvgpr_write_b32 a136, v017 + v_accvgpr_write_b32 a143, v015 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a186 + v_accvgpr_mov_b32 a69, a187 + v_accvgpr_mov_b32 a70, a188 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a189 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v000 ;.loc 4 920 22 + ds_read_b128 a[44:47], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v009 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3a80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a150 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a168 + v_accvgpr_mov_b32 a72, a164 + v_accvgpr_mov_b32 a77, a169 + v_accvgpr_mov_b32 a78, a170 + v_accvgpr_mov_b32 a79, a171 + v_accvgpr_mov_b32 a73, a165 + v_accvgpr_mov_b32 a74, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a167 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v024 ;.loc 4 920 22 + ds_read_b128 a[60:63], v016 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v024, a151 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a172 + v_accvgpr_mov_b32 a77, a173 + v_accvgpr_mov_b32 a78, a174 + v_accvgpr_mov_b32 a79, a175 + v_accvgpr_mov_b32 a64, a160 + v_accvgpr_mov_b32 a65, a161 + v_accvgpr_mov_b32 a66, a162 + v_accvgpr_mov_b32 a67, a163 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203a80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203a80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v009, a153 + s_or_b32 s59, s33, 0x3b00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_write_b32 a154, v009 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a153, v025 + v_mov_b32_e32 v020, v033 + v_accvgpr_mov_b32 a255, a153 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v009 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a180 + v_accvgpr_mov_b32 a69, a181 + v_accvgpr_mov_b32 a70, a182 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a183 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v010 ;.loc 4 920 22 + ds_read_b128 a[44:47], v011 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a133 + v_accvgpr_read_b32 v011, a134 + s_mov_b32 m0, s15 + v_accvgpr_write_b32 a133, v012 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a134, v014 + v_accvgpr_read_b32 v016, a134 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3b00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a169 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 + ds_read_b128 a[56:59], v022 ;.loc 4 920 22 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v012, a156 + v_accvgpr_read_b32 v022, a137 + v_accvgpr_write_b32 a137, v020 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a176 + v_accvgpr_mov_b32 a65, a177 + v_accvgpr_mov_b32 a66, a178 + v_accvgpr_mov_b32 a67, a179 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203b00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203b00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v014 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v014, a148 + v_accvgpr_write_b32 a134, v014 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v013 ;.loc 4 920 22 + ds_read_b128 a[12:15], v018 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_accvgpr_read_b32 v013, a254 + v_accvgpr_read_b32 v018, a150 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3b80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a157 + v_accvgpr_read_b32 v019, a139 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_write_b32 a139, v011 + v_accvgpr_write_b32 a142, v019 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v007 ;.loc 4 920 22 + v_accvgpr_read_b32 v007, a132 + ds_read_b128 a[36:39], v007 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_accvgpr_write_b32 a132, v008 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_read_b32 v000, a132 + v_accvgpr_write_b32 a132, v021 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v012 ;.loc 4 920 22 + ds_read_b128 a[20:23], v028 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v012, a151 + v_accvgpr_read_b32 v028, a140 + v_accvgpr_write_b32 a140, v007 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + ds_read_b128 a[44:47], v017 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_mov_b32_e32 v017, v026 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v012 ;.loc 4 920 22 + ds_read_b128 a[52:55], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a149 + s_or_b32 s59, s36, 0x3b80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_read_b32 v023, a138 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a72, a162 + v_accvgpr_mov_b32 a76, a166 + v_accvgpr_mov_b32 a73, a163 + v_accvgpr_mov_b32 a74, a164 + v_accvgpr_mov_b32 a75, a165 + v_accvgpr_mov_b32 a77, a167 + v_accvgpr_mov_b32 a78, a168 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a169 + v_accvgpr_write_b32 a138, v031 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + s_waitcnt lgkmcnt(1) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + v_accvgpr_write_b32 a158, v010 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203b80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203b80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v026 ;.loc 4 920 22 + ds_read_b128 a[4:7], v029 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v029, a144 + v_accvgpr_read_b32 v026, a156 + v_accvgpr_write_b32 a144, v028 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_accvgpr_write_b32 a145, v029 + v_accvgpr_read_b32 v075, a144 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v008 ;.loc 4 920 22 + ds_read_b128 a[12:15], v025 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v025, a155 + v_accvgpr_read_b32 v008, a158 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3c00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v009 ;.loc 4 920 22 + ds_read_b128 a[36:39], v033 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v009, a133 + v_accvgpr_write_b32 a133, v012 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a174 + v_accvgpr_mov_b32 a69, a175 + v_accvgpr_mov_b32 a70, a176 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a177 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v022 ;.loc 4 920 22 + ds_read_b128 a[44:47], v023 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v010 ;.loc 4 920 22 + ds_read_b128 a[52:55], v011 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v011, a146 + s_or_b32 s59, s36, 0x3c00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v010, a135 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_write_b32 a135, v016 + v_accvgpr_read_b32 v072, a135 + v_accvgpr_mov_b32 a135, a137 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a170 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a182 + v_accvgpr_mov_b32 a77, a183 + v_accvgpr_mov_b32 a78, a184 + v_accvgpr_mov_b32 a79, a185 + v_accvgpr_mov_b32 a64, a178 + v_accvgpr_mov_b32 a65, a179 + v_accvgpr_mov_b32 a66, a180 + v_accvgpr_mov_b32 a67, a181 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203c00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + s_nop 6 + v_accvgpr_read_b32 v032, a184 + v_accvgpr_read_b32 v033, a185 + v_accvgpr_read_b32 v034, a186 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_accvgpr_read_b32 v035, a187 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203c00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v015 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v015, a152 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v028 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v029 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3c80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v030 ;.loc 4 920 22 + ds_read_b128 a[36:39], v007 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a157 + s_mov_b32 m0, s40 + scratch_store_dword off, v015, off offset:20 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + ds_read_b128 a[20:23], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v014 ;.loc 4 920 22 + v_accvgpr_read_b32 v014, a136 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_write_b32 a136, v017 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3c80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v012 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v012, a153 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a146 + v_accvgpr_mov_b32 a65, a147 + v_accvgpr_mov_b32 a66, a148 + v_accvgpr_mov_b32 a67, a149 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_accvgpr_write_b32 a149, v009 + v_accvgpr_write_b32 a147, v022 + v_accvgpr_write_b32 a148, v023 + v_accvgpr_write_b32 a146, v030 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 1 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + s_nop 0 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203c80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203c80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v017 ;.loc 4 920 22 + ds_read_b128 a[4:7], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v017, a154 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v012 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v012, a150 + v_accvgpr_mov_b32 a150, a157 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v019 ;.loc 4 920 22 + ds_read_b128 a[28:31], v018 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3d00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_read_b32 v018, a143 + v_accvgpr_read_b32 v019, a140 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_accvgpr_mov_b32 a143, a141 + v_accvgpr_mov_b32 a141, a156 + v_accvgpr_mov_b32 a140, a155 + v_accvgpr_read_b32 v073, a143 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v017 ;.loc 4 920 22 + ds_read_b128 a[36:39], v020 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_accvgpr_read_b32 v017, a139 + scratch_store_dword off, v017, off offset:24 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_mov_b32 a139, a151 + v_accvgpr_mov_b32 a151, a254 + v_accvgpr_write_b32 a254, v019 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v031 ;.loc 4 920 22 + ds_read_b128 a[20:23], v021 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v022 ;.loc 4 920 22 + ds_read_b128 a[44:47], v023 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v008 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s36, 0x3d00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_accvgpr_read_b32 v008, a133 + v_accvgpr_write_b32 a133, v010 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a75, a163 + v_accvgpr_mov_b32 a80, a180 + v_accvgpr_mov_b32 a81, a181 + v_accvgpr_mov_b32 a82, a182 + v_accvgpr_mov_b32 a83, a183 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v009 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + v_accvgpr_read_b32 v009, a134 + v_accvgpr_write_b32 a134, v014 + v_accvgpr_read_b32 v074, a134 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] + v_accvgpr_write_b32 a134, v072 + s_nop 5 + v_accvgpr_mov_b32 a64, a188 + v_accvgpr_mov_b32 a65, a189 + v_accvgpr_mov_b32 a66, a190 + v_accvgpr_mov_b32 a67, a191 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + ds_read_b128 a[64:67], v005 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 + ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 + s_nop 5 + ds_read_b128 a[80:83], v005 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203d00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + scratch_store_dword off, v018, off offset:32 ;.loc 4 920 22 + v_accvgpr_read_b32 v020, a180 + v_accvgpr_read_b32 v021, a181 + v_accvgpr_read_b32 v022, a182 + v_accvgpr_read_b32 v023, a183 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203d00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v016 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_accvgpr_read_b32 v016, a158 + v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v027 ;.loc 4 920 22 + ds_read_b128 a[12:15], v028 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v029 ;.loc 4 920 22 + ds_read_b128 a[28:31], v026 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3d80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + s_waitcnt lgkmcnt(0) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v030 ;.loc 4 920 22 + ds_read_b128 a[36:39], v019 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + scratch_store_dword off, v009, off offset:28 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v007 ;.loc 4 920 22 + ds_read_b128 a[20:23], v025 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_accvgpr_read_b32 v007, a136 + v_accvgpr_write_b32 a136, v000 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s41 + v_accvgpr_read_b32 v014, a153 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v024 ;.loc 4 920 22 + ds_read_b128 a[52:55], v015 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v024, a64 + v_accvgpr_read_b32 v025, a65 + v_accvgpr_read_b32 v026, a66 + v_accvgpr_read_b32 v027, a67 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a64, a184 + v_accvgpr_mov_b32 a65, a185 + v_accvgpr_mov_b32 a66, a186 + v_accvgpr_mov_b32 a67, a187 + v_accvgpr_mov_b32 a76, a164 + s_or_b32 s59, s36, 0x3d80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_accvgpr_mov_b32 a75, a163 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v013 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v015, a154 + v_accvgpr_read_b32 v013, a138 + v_accvgpr_write_b32 a157, v027 + s_waitcnt lgkmcnt(8) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + v_accvgpr_write_b32 a156, v026 + v_accvgpr_write_b32 a155, v025 + v_accvgpr_write_b32 a154, v024 + v_accvgpr_write_b32 a138, v008 + s_nop 2 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] + s_nop 6 + v_accvgpr_mov_b32 a76, a176 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:49152 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s31 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + s_or_b32 s59, s36, 0x203d80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v020 v021 v022 v023 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + s_nop 1 + v_accvgpr_read_b32 v020, a142 + v_mov_b32_e32 v023, v012 + scratch_store_dword off, v020, off offset:60 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + scratch_store_dword off, v023, off offset:56 ;.loc 1 214 0 + v_accvgpr_read_b32 v021, a147 + v_accvgpr_read_b32 v022, a148 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203d80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_waitcnt lgkmcnt(14) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_accvgpr_read_b32 v010, a132 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v000 ;.loc 4 920 22 + ds_read_b128 a[12:15], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v000, a139 + v_accvgpr_write_b32 a139, v007 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v012 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v012, a137 + s_or_b32 s59, s33, 0x3e00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + v_accvgpr_write_b32 a137, v073 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v021 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s15 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + ds_read_b128 a[52:55], v017 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v017, a149 + s_or_b32 s59, s36, 0x3e00 ;.loc 1 332 0 + s_mov_b32 m0, s14 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + s_waitcnt lgkmcnt(6) ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] + v_accvgpr_mov_b32 a71, a175 + s_nop 5 + v_accvgpr_mov_b32 a64, a168 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + v_accvgpr_mov_b32 a76, a164 + v_accvgpr_mov_b32 a72, a160 + v_accvgpr_mov_b32 a77, a165 + v_accvgpr_mov_b32 a78, a166 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a79, a167 + v_accvgpr_mov_b32 a73, a161 + v_accvgpr_mov_b32 a74, a162 + v_accvgpr_mov_b32 a75, a163 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v017 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[64:67], v005 offset:16384 + s_waitcnt lgkmcnt(3) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:16384 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s12 + s_nop 4 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:18432 + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:20480 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:22528 + s_or_b32 s59, s36, 0x203e00 ;.loc 1 345 0 + s_mov_b32 m0, s50 ;.loc 3 94 8 + s_waitcnt lgkmcnt(6) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[64:71], a[24:31], v076 v077 v078 v079 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + s_nop 3 + v_accvgpr_read_b32 v076, a145 + v_accvgpr_read_b32 v078, a141 + v_accvgpr_read_b32 v079, a146 + v_accvgpr_read_b32 v077, a140 + s_nop 0 + v_accvgpr_write_b32 a187, v027 + v_accvgpr_write_b32 a186, v026 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + v_accvgpr_write_b32 a185, v025 + v_accvgpr_write_b32 a184, v024 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[100:103], v006 offset:32768 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 a[108:111], v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:36864 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203e00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[24:31], a[154:157] ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:38912 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 + s_waitcnt lgkmcnt(12) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 + s_waitcnt lgkmcnt(10) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 + s_waitcnt lgkmcnt(8) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[0:3], v072 ;.loc 4 920 22 + ds_read_b128 a[4:7], v018 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[64:71], a[8:15], a[180:183] ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v073 ;.loc 4 920 22 + ds_read_b128 a[12:15], v075 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v076 ;.loc 4 920 22 + ds_read_b128 a[28:31], v078 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3e80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + s_nop 5 + v_accvgpr_read_b32 v080, a150 + v_accvgpr_read_b32 v081, a151 + v_accvgpr_read_b32 v083, a133 + v_accvgpr_read_b32 v082, a136 + v_accvgpr_write_b32 a133, v076 + v_accvgpr_write_b32 a136, v077 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v079 ;.loc 4 920 22 + ds_read_b128 a[36:39], v019 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v080 ;.loc 4 920 22 + ds_read_b128 a[20:23], v077 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s39 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + ds_read_b128 a[40:43], v009 ;.loc 4 920 22 + ds_read_b128 a[44:47], v074 + scratch_load_dword v009, off, off offset:20 + s_nop 0 ;.loc 3 94 8 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds + s_mov_b32 m0, s41 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + v_accvgpr_mov_b32 a68, a172 + v_accvgpr_mov_b32 a69, a173 + v_accvgpr_mov_b32 a70, a174 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_mov_b32 a71, a175 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 a[48:51], v000 ;.loc 4 920 22 + s_waitcnt vmcnt(1) + ds_read_b128 a[52:55], v009 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_mov_b32 a76, a162 + s_or_b32 s59, s36, 0x3e80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + v_accvgpr_mov_b32 a72, a158 + v_accvgpr_mov_b32 a77, a163 + v_accvgpr_mov_b32 a78, a164 + v_accvgpr_mov_b32 a79, a165 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_mov_b32 a73, a159 + v_accvgpr_mov_b32 a74, a160 + v_accvgpr_mov_b32 a75, a161 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v081 ;.loc 4 920 22 + ds_read_b128 a[60:63], v008 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + s_waitcnt lgkmcnt(10) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[140:143], a[120:127], a[24:31], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 5 + v_accvgpr_mov_b32 a76, a176 + v_accvgpr_mov_b32 a77, a177 + v_accvgpr_mov_b32 a78, a178 + v_accvgpr_mov_b32 a79, a179 + v_accvgpr_mov_b32 a64, a168 + v_accvgpr_mov_b32 a65, a169 + v_accvgpr_mov_b32 a66, a170 + v_accvgpr_mov_b32 a67, a171 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[148:151], a[96:103], a[48:55], a[68:71] + v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[68:71], v006 offset:49152 + ds_read_b128 a[64:67], v005 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_waitcnt lgkmcnt(2) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] + s_mov_b32 m0, s37 ;.loc 3 94 8 + s_nop 5 ;.loc 4 920 22 + ds_read_b128 a[72:75], v005 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[76:79], v006 offset:51200 + v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 a[84:87], v006 offset:53248 + s_mov_b32 m0, s31 ;.loc 3 94 8 + s_nop 0 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds + ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 a[92:95], v006 offset:55296 + v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 + s_or_b32 s59, s36, 0x203e80 ;.loc 1 345 0 + s_mov_b32 m0, s58 ;.loc 3 94 8 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + s_nop 0 ;.loc 3 94 8 + buffer_load_dwordx4 v003, s[8:11], s59 offen lds + s_mov_b32 m0, s57 + v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 + v_accvgpr_write_b32 a107, v027 + v_accvgpr_write_b32 a106, v026 + v_accvgpr_write_b32 a105, v025 + v_accvgpr_write_b32 a104, v024 + s_waitcnt lgkmcnt(4) ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[8:15], v088 v089 v090 v091 + v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + s_nop 10 + v_accvgpr_write_b32 a213, v027 + v_accvgpr_write_b32 a212, v026 + v_accvgpr_write_b32 a211, v025 + v_accvgpr_write_b32 a210, v024 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + s_nop 10 + v_accvgpr_write_b32 a217, v027 + v_accvgpr_write_b32 a216, v026 + v_accvgpr_write_b32 a215, v025 + v_accvgpr_write_b32 a214, v024 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 + s_nop 10 + v_accvgpr_write_b32 a221, v027 + v_accvgpr_write_b32 a220, v026 + v_accvgpr_write_b32 a219, v025 + v_accvgpr_write_b32 a218, v024 + s_waitcnt lgkmcnt(2) ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[0:7], v100 v101 v102 v103 + v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 + s_nop 10 + v_accvgpr_write_b32 a225, v027 + v_accvgpr_write_b32 a224, v026 + v_accvgpr_write_b32 a223, v025 + v_accvgpr_write_b32 a222, v024 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + v_accvgpr_mov_b32 a96, a180 + v_accvgpr_mov_b32 a100, a184 + v_accvgpr_mov_b32 a97, a181 + v_accvgpr_mov_b32 a98, a182 + s_nop 6 + v_accvgpr_write_b32 a229, v027 + v_accvgpr_write_b32 a228, v026 + v_accvgpr_write_b32 a227, v025 + v_accvgpr_write_b32 a226, v024 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 + v_accvgpr_mov_b32 a99, a183 + v_accvgpr_mov_b32 a101, a185 + v_accvgpr_mov_b32 a102, a186 + v_accvgpr_mov_b32 a103, a187 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[64:71], a[8:15], a[96:99] ;.loc 1 180 0 + s_nop 6 + v_accvgpr_write_b32 a233, v027 + v_accvgpr_write_b32 a232, v026 + v_accvgpr_write_b32 a231, v025 + v_accvgpr_write_b32 a230, v024 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 + ds_read_b128 a[96:99], v005 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[64:71], a[24:31], a[100:103] ;.loc 1 186 0 + s_nop 9 + v_accvgpr_write_b32 a237, v027 + v_accvgpr_write_b32 a236, v026 + v_accvgpr_write_b32 a235, v025 + v_accvgpr_write_b32 a234, v024 + s_waitcnt lgkmcnt(1) ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[88:95], a[0:7], v116 v117 v118 v119 + ds_read_b128 a[100:103], v006 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + ds_read_b128 a[108:111], v006 offset:2048 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[64:71], a[32:39], a[104:107] ;.loc 1 191 0 + s_nop 6 + v_accvgpr_write_b32 a241, v027 + v_accvgpr_write_b32 a240, v026 + v_accvgpr_write_b32 a239, v025 + ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 + buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + v_accvgpr_write_b32 a238, v024 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 + ds_read_b128 a[116:119], v006 offset:4096 + buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x203e80 ;.loc 1 356 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[124:127], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 ;.loc 1 196 0 + ds_read_b128 a[0:3], v007 ;.loc 4 920 22 + ds_read_b128 a[4:7], v083 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s52 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 + ds_read_b128 a[8:11], v082 ;.loc 4 920 22 + ds_read_b128 a[12:15], v014 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 + ds_read_b128 a[24:27], v020 ;.loc 4 920 22 + ds_read_b128 a[28:31], v023 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_or_b32 s59, s33, 0x3f00 ;.loc 1 320 0 + s_mov_b32 m0, s30 ;.loc 3 94 8 + s_nop 1 + v_accvgpr_write_b32 a245, v027 + v_accvgpr_write_b32 a244, v026 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + ds_read_b128 a[32:35], v015 ;.loc 4 920 22 + ds_read_b128 a[36:39], v012 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + scratch_load_dword v007, off, off offset:24 ;.loc 4 920 22 + v_accvgpr_write_b32 a243, v025 + buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s29 + v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_accvgpr_write_b32 a242, v024 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[44:47], a[104:111], a[0:7], a[204:207] + s_waitcnt lgkmcnt(0) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[40:43], a[96:103], a[32:39], a[200:203] + s_nop 9 + v_accvgpr_read_b32 v123, a47 + v_accvgpr_read_b32 v122, a46 + v_accvgpr_read_b32 v121, a45 + v_accvgpr_read_b32 v120, a44 + v_mfma_f32_16x16x128_f8f6f4 a[44:47], a[104:111], a[8:15], a[246:249] ;.loc 1 197 0 + v_accvgpr_read_b32 v107, a43 + v_accvgpr_read_b32 v106, a42 + v_accvgpr_read_b32 v105, a41 + v_accvgpr_read_b32 v104, a40 + v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + s_nop 6 + v_accvgpr_read_b32 v219, a47 + v_accvgpr_read_b32 v218, a46 + v_accvgpr_read_b32 v217, a45 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_read_b32 v216, a44 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 a[48:51], a[104:111], a[24:31], a[250:253] ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + s_nop 10 + v_accvgpr_read_b32 v099, a51 + v_accvgpr_read_b32 v098, a50 + v_accvgpr_read_b32 v097, a49 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_accvgpr_read_b32 v096, a48 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + ds_read_b128 a[16:19], v013 ;.loc 4 920 22 + ds_read_b128 a[20:23], v010 + buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s28 + ds_read_b128 a[40:43], v021 ;.loc 4 920 22 + ds_read_b128 a[44:47], v022 + buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 + ds_read_b128 a[48:51], v016 ;.loc 4 920 22 + s_waitcnt vmcnt(3) + ds_read_b128 a[52:55], v007 + s_waitcnt lgkmcnt(0) ;.loc 1 202 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[48:55], v028 v029 v030 v031 + s_mov_b32 m0, s15 ;.loc 3 94 8 + s_or_b32 s15, s36, 0x3f00 ;.loc 1 332 0 + buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s14 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_mov_b32 a64, a140 + v_accvgpr_mov_b32 a65, a141 + v_accvgpr_mov_b32 a66, a142 + v_accvgpr_mov_b32 a67, a143 + s_nop 2 + v_accvgpr_write_b32 a189, v027 + v_accvgpr_write_b32 a188, v026 + v_accvgpr_write_b32 a187, v025 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_write_b32 a186, v024 + v_accvgpr_write_b32 a69, v021 + v_accvgpr_mov_b32 a68, a132 + v_accvgpr_write_b32 a132, v080 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + v_accvgpr_write_b32 a87, v015 + v_accvgpr_write_b32 a86, v013 + v_accvgpr_write_b32 a82, v011 + v_accvgpr_write_b32 a83, v022 + v_accvgpr_write_b32 a85, v016 + v_accvgpr_write_b32 a84, v017 + v_mfma_f32_16x16x128_f8f6f4 a[88:91], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 + ds_read_b128 a[56:59], v011 ;.loc 4 920 22 + ds_read_b128 a[60:63], v017 + buffer_load_dwordx4 v003, s[8:11], s15 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s13 + ds_read_b128 v008 v009 v010 v011, v005 offset:16384 ;.loc 4 920 22 + ds_read_b128 v012 v013 v014 v015, v006 offset:16384 + buffer_load_dwordx4 v004, s[8:11], s15 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[74:77], a[120:127], a[24:31], a[64:67] ;.loc 1 226 0 + s_mov_b32 m0, s12 ;.loc 3 94 8 + ds_read_b128 v016 v017 v018 v019, v005 offset:18432 ;.loc 4 920 22 + ds_read_b128 v020 v021 v022 v023, v006 offset:18432 + buffer_load_dwordx4 v002, s[8:11], s15 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s1 + s_or_b32 s1, s36, 0x203f00 ;.loc 1 345 0 + s_nop 0 + v_accvgpr_mov_b32 a64, a128 + v_accvgpr_mov_b32 a65, a129 + v_accvgpr_mov_b32 a66, a130 + v_accvgpr_mov_b32 a67, a131 + s_waitcnt lgkmcnt(4) ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[56:63], v032 v033 v034 v035 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a144 + v_accvgpr_mov_b32 a65, a145 + v_accvgpr_mov_b32 a66, a146 + v_accvgpr_mov_b32 a67, a147 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 + v_accvgpr_write_b32 a147, v000 + v_accvgpr_write_b32 a145, v074 + v_accvgpr_write_b32 a144, v078 + v_accvgpr_write_b32 a146, v079 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a148 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 + v_accvgpr_mov_b32 a65, a149 + v_accvgpr_mov_b32 a66, a150 + v_accvgpr_mov_b32 a67, a151 + v_accvgpr_write_b32 a149, v075 + v_accvgpr_write_b32 a148, v081 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[64:67] ;.loc 1 186 0 + s_nop 6 + v_accvgpr_mov_b32 a64, a154 + v_accvgpr_mov_b32 a65, a155 + v_accvgpr_mov_b32 a66, a156 + v_accvgpr_mov_b32 a67, a157 + v_mfma_f32_16x16x128_f8f6f4 a[92:95], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 + s_nop 0 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[64:67] + s_nop 4 + v_accvgpr_write_b32 a197, v035 + v_accvgpr_write_b32 a196, v034 + v_accvgpr_write_b32 a195, v033 + v_accvgpr_write_b32 a194, v032 + v_accvgpr_mov_b32 a64, a158 + v_accvgpr_mov_b32 a65, a159 + v_accvgpr_mov_b32 a66, a160 + v_accvgpr_mov_b32 a67, a161 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 + s_nop 0 ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a162 + v_accvgpr_mov_b32 a65, a163 + v_accvgpr_mov_b32 a66, a164 + v_accvgpr_mov_b32 a67, a165 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 + s_nop 0 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[64:67] + v_accvgpr_write_b32 a111, v031 + v_accvgpr_write_b32 a110, v030 + v_accvgpr_write_b32 a109, v029 + v_accvgpr_write_b32 a108, v028 + v_accvgpr_write_b32 a107, v027 + v_accvgpr_write_b32 a106, v026 + v_accvgpr_write_b32 a105, v025 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 + v_accvgpr_write_b32 a104, v024 + ds_read_b128 v024 v025 v026 v027, v005 offset:20480 ;.loc 4 920 22 + v_accvgpr_mov_b32 a64, a166 + v_accvgpr_mov_b32 a65, a167 + v_accvgpr_mov_b32 a66, a168 + v_accvgpr_mov_b32 a67, a169 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 + v_accvgpr_write_b32 a119, v039 + v_accvgpr_write_b32 a118, v038 + v_accvgpr_write_b32 a117, v037 + v_accvgpr_write_b32 a116, v036 + s_nop 6 + v_accvgpr_write_b32 a193, v031 + v_accvgpr_write_b32 a192, v030 + v_accvgpr_write_b32 a191, v029 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 + v_accvgpr_write_b32 a190, v028 + ds_read_b128 v028 v029 v030 v031, v006 offset:20480 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[8:11], s15 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s50 + v_accvgpr_write_b32 a115, v035 + v_accvgpr_write_b32 a114, v034 + v_accvgpr_write_b32 a113, v033 + v_accvgpr_write_b32 a112, v032 + ds_read_b128 v032 v033 v034 v035, v005 offset:22528 ;.loc 4 920 22 + s_waitcnt lgkmcnt(5) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], v008 v009 v010 v011 v012 v013 v014 v015, a[8:15], a[64:67] + s_nop 0 + v_accvgpr_write_b32 a201, v039 + v_accvgpr_write_b32 a200, v038 + v_accvgpr_write_b32 a199, v037 + v_accvgpr_write_b32 a198, v036 + ds_read_b128 v036 v037 v038 v039, v006 offset:22528 ;.loc 4 920 22 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + scratch_load_dword v007, off, off offset:32 ;.loc 4 920 22 + v_accvgpr_mov_b32 a64, a170 + s_waitcnt lgkmcnt(4) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, v016 v017 v018 v019 v020 v021 v022 v023, a[0:7], v084 v085 v086 v087 + v_accvgpr_mov_b32 a65, a171 + v_accvgpr_mov_b32 a66, a172 + v_accvgpr_mov_b32 a67, a173 + buffer_load_dwordx4 v003, s[8:11], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s49 + ds_read_b128 v044 v045 v046 v047, v006 offset:32768 ;.loc 4 920 22 + s_waitcnt lgkmcnt(1) ;.loc 1 226 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v032 v033 v034 v035 v036 v037 v038 v039, a[24:31], v124 v125 v126 v127 + s_nop 3 + v_accvgpr_write_b32 a209, v055 + v_accvgpr_write_b32 a208, v054 + v_accvgpr_write_b32 a207, v053 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], v008 v009 v010 v011 v012 v013 v014 v015, a[24:31], a[64:67] ;.loc 1 186 0 + v_accvgpr_write_b32 a206, v052 + s_nop 5 + v_accvgpr_mov_b32 a64, a174 + v_accvgpr_mov_b32 a65, a175 + v_accvgpr_mov_b32 a66, a176 + v_accvgpr_mov_b32 a67, a177 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 + s_nop 0 ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], v008 v009 v010 v011 v012 v013 v014 v015, a[32:39], a[64:67] + s_nop 6 + v_accvgpr_mov_b32 a64, a222 + v_accvgpr_mov_b32 a65, a223 + v_accvgpr_mov_b32 a66, a224 + v_accvgpr_mov_b32 a67, a225 + v_accvgpr_mov_b32 a222, a226 + v_accvgpr_mov_b32 a223, a227 + v_accvgpr_mov_b32 a224, a228 + v_accvgpr_mov_b32 a225, a229 + v_accvgpr_mov_b32 a226, a230 + v_accvgpr_mov_b32 a227, a231 + v_accvgpr_mov_b32 a228, a232 + v_accvgpr_mov_b32 a229, a233 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], v016 v017 v018 v019 v020 v021 v022 v023, a[24:31], a[214:217] ;.loc 1 202 0 + v_accvgpr_mov_b32 a230, a234 + v_accvgpr_mov_b32 a231, a235 + v_accvgpr_mov_b32 a232, a236 + v_accvgpr_mov_b32 a233, a237 + v_accvgpr_mov_b32 a234, a238 + v_accvgpr_mov_b32 a235, a239 + v_accvgpr_mov_b32 a236, a240 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], v024 v025 v026 v027 v028 v029 v030 v031, a[24:31], a[226:229] ;.loc 1 214 0 + v_accvgpr_write_b32 a24, v084 + v_accvgpr_write_b32 a25, v085 + v_accvgpr_write_b32 a26, v086 + v_accvgpr_write_b32 a27, v087 + v_accvgpr_mov_b32 a237, a241 + v_accvgpr_mov_b32 a238, a242 + v_accvgpr_mov_b32 a239, a243 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v032 v033 v034 v035 v036 v037 v038 v039, a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 + v_accvgpr_mov_b32 a240, a244 + v_accvgpr_mov_b32 a241, a245 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 + s_nop 8 + v_accvgpr_write_b32 a28, v084 + v_accvgpr_write_b32 a29, v085 + v_accvgpr_write_b32 a30, v086 + v_accvgpr_write_b32 a31, v087 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 + v_accvgpr_write_b32 a205, v043 + v_accvgpr_write_b32 a204, v042 + v_accvgpr_write_b32 a203, v041 + v_accvgpr_write_b32 a202, v040 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], v016 v017 v018 v019 v020 v021 v022 v023, a[32:39], a[218:221] ;.loc 1 203 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], v024 v025 v026 v027 v028 v029 v030 v031, a[32:39], a[230:233] ;.loc 1 215 0 + s_nop 5 + v_accvgpr_write_b32 a32, v084 + v_accvgpr_write_b32 a33, v085 + v_accvgpr_write_b32 a34, v086 + v_accvgpr_write_b32 a35, v087 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 + s_nop 10 + v_accvgpr_write_b32 a36, v084 + v_accvgpr_write_b32 a37, v085 + v_accvgpr_write_b32 a38, v086 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 + v_accvgpr_write_b32 a123, v043 + v_accvgpr_write_b32 a122, v042 + v_accvgpr_write_b32 a121, v041 + v_accvgpr_write_b32 a120, v040 + v_accvgpr_write_b32 a39, v087 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, v008 v009 v010 v011 v012 v013 v014 v015, a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 + s_nop 10 + v_accvgpr_write_b32 a127, v043 + v_accvgpr_write_b32 a126, v042 + v_accvgpr_write_b32 a125, v041 + v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, v008 v009 v010 v011 v012 v013 v014 v015, a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 + v_accvgpr_write_b32 a124, v040 + ds_read_b128 v040 v041 v042 v043, v005 offset:32768 ;.loc 4 920 22 + buffer_load_dwordx4 v004, s[8:11], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s48 + v_accvgpr_write_b32 a245, v087 + v_accvgpr_write_b32 a244, v086 + v_accvgpr_write_b32 a243, v085 + v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v016 v017 v018 v019 v020 v021 v022 v023, a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 + v_accvgpr_write_b32 a242, v084 + ds_read_b128 v048 v049 v050 v051, v005 offset:34816 ;.loc 4 920 22 + ds_read_b128 v052 v053 v054 v055, v006 offset:34816 + buffer_load_dwordx4 v002, s[8:11], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s47 + ds_read_b128 v056 v057 v058 v059, v005 offset:36864 ;.loc 4 920 22 + ds_read_b128 v060 v061 v062 v063, v006 offset:36864 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], v016 v017 v018 v019 v020 v021 v022 v023, a[8:15], a[210:213] ;.loc 1 197 0 + buffer_load_dwordx4 v001, s[8:11], s1 offen lds ;.loc 3 94 8 + s_or_b32 s1, s33, 0x203f00 ;.loc 1 356 0 + s_mov_b32 m0, s46 ;.loc 3 94 8 + ds_read_b128 v064 v065 v066 v067, v005 offset:38912 ;.loc 4 920 22 + ds_read_b128 v068 v069 v070 v071, v006 offset:38912 + v_accvgpr_write_b32 a253, v015 + v_accvgpr_write_b32 a252, v014 + v_accvgpr_write_b32 a251, v013 + v_accvgpr_write_b32 a250, v012 + v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v016 v017 v018 v019 v020 v021 v022 v023, a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 + buffer_load_dwordx4 v003, s[4:7], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s45 + ds_read_b128 v128 v129 v130 v131, v072 ;.loc 4 920 22 + s_waitcnt vmcnt(5) + ds_read_b128 v132 v133 v134 v135, v007 + v_accvgpr_write_b32 a249, v011 + buffer_load_dwordx4 v004, s[4:7], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s44 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v016 v017 v018 v019 v020 v021 v022 v023, a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 + v_accvgpr_write_b32 a248, v010 + v_accvgpr_write_b32 a247, v009 + v_accvgpr_write_b32 a246, v008 + ds_read_b128 v008 v009 v010 v011, v073 ;.loc 4 920 22 + v_accvgpr_write_b32 a153, v015 + v_accvgpr_write_b32 a152, v014 + v_accvgpr_write_b32 a151, v013 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v016 v017 v018 v019 v020 v021 v022 v023, a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 + v_accvgpr_write_b32 a150, v012 + ds_read_b128 v012 v013 v014 v015, v075 ;.loc 4 920 22 + buffer_load_dwordx4 v002, s[4:7], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s43 + ds_read_b128 v136 v137 v138 v139, v076 ;.loc 4 920 22 + ds_read_b128 v140 v141 v142 v143, v078 + buffer_load_dwordx4 v001, s[4:7], s1 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v007, a254 + v_mfma_f32_16x16x128_f8f6f4 a[64:67], v024 v025 v026 v027 v028 v029 v030 v031, a[0:7], a[64:67] ;.loc 1 208 0 + ds_read_b128 v020 v021 v022 v023, v079 ;.loc 4 920 22 + s_or_b32 s1, s33, 0x3f80 ;.loc 1 320 0 + s_mov_b32 m0, s42 ;.loc 3 94 8 + v_accvgpr_write_b32 a73, v019 + v_accvgpr_write_b32 a72, v018 + v_accvgpr_write_b32 a71, v017 + v_accvgpr_write_b32 a70, v016 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v024 v025 v026 v027 v028 v029 v030 v031, a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 + s_or_b32 s33, s33, 0x203f80 ;.loc 1 356 0 + s_nop 2 + v_accvgpr_read_b32 v103, a67 + v_accvgpr_read_b32 v102, a66 + v_accvgpr_read_b32 v101, a65 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], v024 v025 v026 v027 v028 v029 v030 v031, a[8:15], a[222:225] ;.loc 1 209 0 + v_accvgpr_read_b32 v100, a64 + v_accvgpr_write_b32 a64, v084 + v_accvgpr_write_b32 a65, v085 + v_accvgpr_write_b32 a66, v086 + v_accvgpr_write_b32 a81, v019 + v_accvgpr_write_b32 a80, v018 + v_accvgpr_write_b32 a79, v017 + v_accvgpr_write_b32 a78, v016 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v024 v025 v026 v027 v028 v029 v030 v031, a[40:47], v168 v169 v170 v171 + v_accvgpr_write_b32 a67, v087 + v_mfma_f32_16x16x128_f8f6f4 v208 v209 v210 v211, v024 v025 v026 v027 v028 v029 v030 v031, a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 + s_nop 9 + v_accvgpr_write_b32 a143, v019 + v_accvgpr_write_b32 a142, v018 + v_accvgpr_write_b32 a141, v017 + v_mfma_f32_16x16x128_f8f6f4 v212 v213 v214 v215, v024 v025 v026 v027 v028 v029 v030 v031, a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 + ds_read_b128 v024 v025 v026 v027, v007 ;.loc 4 920 22 + s_waitcnt vmcnt(16) ;.loc 1 318 0 +s_barrier + scratch_load_dword v007, off, off offset:28 ;.loc 4 920 22 + v_accvgpr_write_b32 a140, v016 + buffer_load_dwordx4 v003, s[4:7], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s40 + ds_read_b128 v144 v145 v146 v147, v080 ;.loc 4 920 22 + ds_read_b128 v148 v149 v150 v151, v077 + buffer_load_dwordx4 v004, s[4:7], s1 offen lds ;.loc 3 94 8 + ds_read_b128 v156 v157 v158 v159, v074 ;.loc 4 920 22 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 + s_mov_b32 m0, s39 ;.loc 3 94 8 + v_accvgpr_read_b32 v028, a194 + v_accvgpr_read_b32 v029, a195 + v_accvgpr_read_b32 v030, a196 + v_accvgpr_read_b32 v031, a197 + s_waitcnt vmcnt(2) ;.loc 4 920 22 + ds_read_b128 v152 v153 v154 v155, v007 + scratch_load_dword v007, off, off offset:20 + s_waitcnt lgkmcnt(8) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v040 v041 v042 v043 v044 v045 v046 v047, v008 v009 v010 v011 v012 v013 v014 v015, v200 v201 v202 v203 + buffer_load_dwordx4 v002, s[4:7], s1 offen lds ;.loc 3 94 8 + ds_read_b128 v160 v161 v162 v163, v000 ;.loc 4 920 22 + s_mov_b32 m0, s41 ;.loc 3 94 8 + s_waitcnt vmcnt(1) ;.loc 4 920 22 + ds_read_b128 v164 v165 v166 v167, v007 + v_mfma_f32_16x16x128_f8f6f4 a[56:59], v032 v033 v034 v035 v036 v037 v038 v039, a[56:63], a[88:91] ;.loc 1 227 0 + buffer_load_dwordx4 v001, s[4:7], s1 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a138 + ds_read_b128 v168 v169 v170 v171, v081 ;.loc 4 920 22 + ds_read_b128 v172 v173 v174 v175, v000 + s_or_b32 s1, s36, 0x3f80 ;.loc 1 332 0 + s_mov_b32 m0, s38 ;.loc 3 94 8 + s_or_b32 s36, s36, 0x203f80 ;.loc 1 345 0 + v_mfma_f32_16x16x128_f8f6f4 a[88:91], v040 v041 v042 v043 v044 v045 v046 v047, v128 v129 v130 v131 v132 v133 v134 v135, a[92:95] ;.loc 1 179 0 + buffer_load_dwordx4 v003, s[8:11], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s34 + v_accvgpr_read_b32 v000, a139 + s_nop 3 + v_accvgpr_write_b32 a95, v019 + v_accvgpr_write_b32 a94, v018 + v_accvgpr_write_b32 a93, v017 + v_accvgpr_write_b32 a92, v016 + s_waitcnt lgkmcnt(10) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v040 v041 v042 v043 v044 v045 v046 v047, v136 v137 v138 v139 v140 v141 v142 v143, v204 v205 v206 v207 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 + v_accvgpr_write_b32 a100, v104 + v_accvgpr_write_b32 a101, v105 + v_accvgpr_write_b32 a102, v106 + v_accvgpr_write_b32 a103, v107 + s_nop 6 + v_accvgpr_write_b32 a99, v019 + v_accvgpr_write_b32 a98, v018 + v_accvgpr_write_b32 a97, v017 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], v032 v033 v034 v035 v036 v037 v038 v039, a[0:7], a[234:237] ;.loc 1 220 0 + v_accvgpr_mov_b32 a0, a178 + v_accvgpr_mov_b32 a1, a179 + v_accvgpr_mov_b32 a2, a180 + v_accvgpr_mov_b32 a3, a181 + v_accvgpr_write_b32 a96, v016 + v_accvgpr_read_b32 v016, a74 + v_accvgpr_read_b32 v017, a75 + s_waitcnt lgkmcnt(4) ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[178:181], v040 v041 v042 v043 v044 v045 v046 v047, v152 v153 v154 v155 v156 v157 v158 v159, a[0:3] + v_accvgpr_read_b32 v018, a76 + v_accvgpr_read_b32 v019, a77 + v_accvgpr_mov_b32 a4, a206 + v_accvgpr_mov_b32 a5, a207 + v_accvgpr_mov_b32 a6, a208 + v_accvgpr_mov_b32 a7, a209 + s_nop 0 + v_accvgpr_mov_b32 a0, a182 + v_accvgpr_mov_b32 a1, a183 + v_accvgpr_mov_b32 a2, a184 + v_accvgpr_mov_b32 a3, a185 + v_mfma_f32_16x16x128_f8f6f4 a[238:241], v032 v033 v034 v035 v036 v037 v038 v039, a[8:15], a[238:241] ;.loc 1 221 0 + v_accvgpr_mov_b32 a8, a214 + v_accvgpr_mov_b32 a9, a215 + v_accvgpr_mov_b32 a10, a216 + v_accvgpr_mov_b32 a11, a217 + s_waitcnt lgkmcnt(2) ;.loc 1 186 0 + v_mfma_f32_16x16x128_f8f6f4 a[182:185], v040 v041 v042 v043 v044 v045 v046 v047, v160 v161 v162 v163 v164 v165 v166 v167, a[0:3] + s_nop 6 + v_accvgpr_mov_b32 a0, a154 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, v032 v033 v034 v035 v036 v037 v038 v039, a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 + v_accvgpr_mov_b32 a1, a155 + v_accvgpr_mov_b32 a2, a156 + v_accvgpr_mov_b32 a3, a157 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, v032 v033 v034 v035 v036 v037 v038 v039, a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, v032 v033 v034 v035 v036 v037 v038 v039, a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 + ds_read_b128 v032 v033 v034 v035, v005 offset:49152 ;.loc 4 920 22 + ds_read_b128 v036 v037 v038 v039, v006 offset:49152 + buffer_load_dwordx4 v004, s[8:11], s1 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s37 + ds_read_b128 v176 v177 v178 v179, v005 offset:51200 ;.loc 4 920 22 + ds_read_b128 v180 v181 v182 v183, v006 offset:51200 + buffer_load_dwordx4 v002, s[8:11], s1 offen lds ;.loc 3 94 8 + s_waitcnt lgkmcnt(4) ;.loc 1 191 0 + v_mfma_f32_16x16x128_f8f6f4 a[154:157], v040 v041 v042 v043 v044 v045 v046 v047, v168 v169 v170 v171 v172 v173 v174 v175, a[0:3] + s_mov_b32 m0, s31 ;.loc 3 94 8 + ds_read_b128 v184 v185 v186 v187, v005 offset:53248 ;.loc 4 920 22 + ds_read_b128 v188 v189 v190 v191, v006 offset:53248 + buffer_load_dwordx4 v001, s[8:11], s1 offen lds ;.loc 3 94 8 + ds_read_b128 v192 v193 v194 v195, v005 offset:55296 ;.loc 4 920 22 + ds_read_b128 v196 v197 v198 v199, v006 offset:55296 + s_mov_b32 m0, s58 ;.loc 3 94 8 + v_accvgpr_mov_b32 a0, a158 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v056 v057 v058 v059 v060 v061 v062 v063, v020 v021 v022 v023 v024 v025 v026 v027, v092 v093 v094 v095 ;.loc 1 215 0 + v_accvgpr_mov_b32 a1, a159 + v_accvgpr_mov_b32 a2, a160 + v_accvgpr_mov_b32 a3, a161 + s_waitcnt vmcnt(16) ;.loc 1 343 0 +s_barrier + buffer_load_dwordx4 v003, s[8:11], s36 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s57 + ds_read_b128 v200 v201 v202 v203, v005 ;.loc 4 920 22 + ds_read_b128 v204 v205 v206 v207, v006 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, v064 v065 v066 v067 v068 v069 v070 v071, v136 v137 v138 v139 v140 v141 v142 v143, v016 v017 v018 v019 ;.loc 1 226 0 + buffer_load_dwordx4 v004, s[8:11], s36 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s56 + s_nop 4 + v_accvgpr_read_b32 v016, a128 + v_accvgpr_read_b32 v017, a129 + v_accvgpr_read_b32 v018, a130 + v_accvgpr_read_b32 v019, a131 + v_accvgpr_write_b32 a131, v119 + v_mfma_f32_16x16x128_f8f6f4 a[158:161], v048 v049 v050 v051 v052 v053 v054 v055, v144 v145 v146 v147 v148 v149 v150 v151, a[0:3] ;.loc 1 196 0 + v_accvgpr_write_b32 a130, v118 + v_accvgpr_write_b32 a129, v117 + v_accvgpr_write_b32 a128, v116 + s_nop 3 + v_accvgpr_mov_b32 a0, a162 + v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, v048 v049 v050 v051 v052 v053 v054 v055, v136 v137 v138 v139 v140 v141 v142 v143, v096 v097 v098 v099 ;.loc 1 202 0 + v_accvgpr_mov_b32 a1, a163 + v_accvgpr_mov_b32 a2, a164 + v_accvgpr_mov_b32 a3, a165 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, v064 v065 v066 v067 v068 v069 v070 v071, v020 v021 v022 v023 v024 v025 v026 v027, v016 v017 v018 v019 ;.loc 1 227 0 + s_nop 6 + v_accvgpr_read_b32 v016, a186 + v_mfma_f32_16x16x128_f8f6f4 a[100:103], v040 v041 v042 v043 v044 v045 v046 v047, v020 v021 v022 v023 v024 v025 v026 v027, a[100:103] ;.loc 1 191 0 + v_accvgpr_read_b32 v017, a187 + v_accvgpr_read_b32 v018, a188 + v_accvgpr_read_b32 v019, a189 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], v040 v041 v042 v043 v044 v045 v046 v047, v144 v145 v146 v147 v148 v149 v150 v151, a[128:131] ;.loc 1 179 0 + v_accvgpr_read_b32 v040, a198 + v_accvgpr_read_b32 v041, a199 + v_accvgpr_read_b32 v042, a200 + v_accvgpr_read_b32 v043, a201 + v_accvgpr_read_b32 v044, a226 + v_accvgpr_read_b32 v045, a227 + v_accvgpr_read_b32 v046, a228 + v_mfma_f32_16x16x128_f8f6f4 a[162:165], v048 v049 v050 v051 v052 v053 v054 v055, v152 v153 v154 v155 v156 v157 v158 v159, a[0:3] ;.loc 1 197 0 + v_accvgpr_read_b32 v047, a229 + s_nop 5 + v_accvgpr_mov_b32 a0, a104 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, v048 v049 v050 v051 v052 v053 v054 v055, v160 v161 v162 v163 v164 v165 v166 v167, v016 v017 v018 v019 ;.loc 1 202 0 + v_accvgpr_mov_b32 a1, a105 + v_accvgpr_mov_b32 a2, a106 + v_accvgpr_mov_b32 a3, a107 + s_nop 3 + v_accvgpr_read_b32 v016, a108 + v_mfma_f32_16x16x128_f8f6f4 a[186:189], v048 v049 v050 v051 v052 v053 v054 v055, v168 v169 v170 v171 v172 v173 v174 v175, a[0:3] ;.loc 1 203 0 + v_accvgpr_read_b32 v017, a109 + v_accvgpr_read_b32 v018, a110 + v_accvgpr_read_b32 v019, a111 + v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, v056 v057 v058 v059 v060 v061 v062 v063, v160 v161 v162 v163 v164 v165 v166 v167, v028 v029 v030 v031 ;.loc 1 214 0 + s_nop 2 + v_accvgpr_mov_b32 a0, a124 + v_accvgpr_mov_b32 a1, a125 + v_accvgpr_mov_b32 a2, a126 + v_accvgpr_mov_b32 a3, a127 + v_accvgpr_read_b32 v028, a112 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, v064 v065 v066 v067 v068 v069 v070 v071, v152 v153 v154 v155 v156 v157 v158 v159, v040 v041 v042 v043 ;.loc 1 221 0 + v_accvgpr_read_b32 v029, a113 + v_accvgpr_read_b32 v030, a114 + v_accvgpr_read_b32 v031, a115 + s_nop 3 + v_accvgpr_read_b32 v040, a202 + v_mfma_f32_16x16x128_f8f6f4 v220 v221 v222 v223, v056 v057 v058 v059 v060 v061 v062 v063, v008 v009 v010 v011 v012 v013 v014 v015, v108 v109 v110 v111 ;.loc 1 209 0 + v_accvgpr_read_b32 v041, a203 + v_accvgpr_read_b32 v042, a204 + v_accvgpr_read_b32 v043, a205 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, v056 v057 v058 v059 v060 v061 v062 v063, v144 v145 v146 v147 v148 v149 v150 v151, v016 v017 v018 v019 ;.loc 1 208 0 + s_nop 6 + v_accvgpr_read_b32 v016, a190 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v048 v049 v050 v051 v052 v053 v054 v055, v128 v129 v130 v131 v132 v133 v134 v135, v120 v121 v122 v123 ;.loc 1 196 0 + v_accvgpr_read_b32 v017, a191 + v_accvgpr_read_b32 v018, a192 + v_accvgpr_read_b32 v019, a193 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, v048 v049 v050 v051 v052 v053 v054 v055, v008 v009 v010 v011 v012 v013 v014 v015, v216 v217 v218 v219 ;.loc 1 197 0 + s_nop 7 + v_accvgpr_write_b32 a226, v248 + v_accvgpr_write_b32 a227, v249 + v_accvgpr_write_b32 a228, v250 + v_mfma_f32_16x16x128_f8f6f4 v216 v217 v218 v219, v048 v049 v050 v051 v052 v053 v054 v055, v020 v021 v022 v023 v024 v025 v026 v027, v088 v089 v090 v091 ;.loc 1 203 0 + v_accvgpr_read_b32 v052, a234 + v_accvgpr_read_b32 v053, a235 + v_accvgpr_read_b32 v054, a236 + v_accvgpr_read_b32 v055, a237 + v_accvgpr_write_b32 a237, v075 + v_accvgpr_write_b32 a236, v074 + v_accvgpr_write_b32 a235, v073 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, v064 v065 v066 v067 v068 v069 v070 v071, v128 v129 v130 v131 v132 v133 v134 v135, v112 v113 v114 v115 ;.loc 1 220 0 + v_accvgpr_write_b32 a234, v072 + v_accvgpr_read_b32 v048, a230 + v_accvgpr_read_b32 v049, a231 + v_accvgpr_read_b32 v050, a232 + v_accvgpr_read_b32 v051, a233 + v_accvgpr_write_b32 a229, v251 + v_accvgpr_write_b32 a230, v232 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, v056 v057 v058 v059 v060 v061 v062 v063, v168 v169 v170 v171 v172 v173 v174 v175, v028 v029 v030 v031 ;.loc 1 215 0 + v_accvgpr_write_b32 a231, v233 + v_accvgpr_write_b32 a232, v234 + v_accvgpr_write_b32 a233, v235 + s_nop 3 + v_accvgpr_read_b32 v028, a116 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, v064 v065 v066 v067 v068 v069 v070 v071, v160 v161 v162 v163 v164 v165 v166 v167, v040 v041 v042 v043 ;.loc 1 226 0 + v_accvgpr_read_b32 v029, a117 + v_accvgpr_read_b32 v030, a118 + v_accvgpr_read_b32 v031, a119 + s_nop 3 + v_accvgpr_read_b32 v040, a120 + s_waitcnt lgkmcnt(8) ;.loc 1 179 0 + v_mfma_f32_16x16x128_f8f6f4 a[190:193], v032 v033 v034 v035 v036 v037 v038 v039, v128 v129 v130 v131 v132 v133 v134 v135, a[0:3] + v_accvgpr_read_b32 v041, a121 + v_accvgpr_read_b32 v042, a122 + v_accvgpr_read_b32 v043, a123 + s_nop 3 + v_accvgpr_mov_b32 a0, a166 + v_accvgpr_mov_b32 a1, a167 + v_accvgpr_mov_b32 a2, a168 + v_accvgpr_mov_b32 a3, a169 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, v056 v057 v058 v059 v060 v061 v062 v063, v128 v129 v130 v131 v132 v133 v134 v135, v228 v229 v230 v231 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, v056 v057 v058 v059 v060 v061 v062 v063, v136 v137 v138 v139 v140 v141 v142 v143, v236 v237 v238 v239 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, v064 v065 v066 v067 v068 v069 v070 v071, v008 v009 v010 v011 v012 v013 v014 v015, v252 v253 v254 v255 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v056 v057 v058 v059 v060 v061 v062 v063, v152 v153 v154 v155 v156 v157 v158 v159, v016 v017 v018 v019 ;.loc 1 209 0 + v_accvgpr_read_b32 v056, a238 + v_accvgpr_read_b32 v057, a239 + v_accvgpr_read_b32 v058, a240 + v_accvgpr_read_b32 v059, a241 + v_accvgpr_read_b32 v060, a140 + v_accvgpr_read_b32 v061, a141 + v_accvgpr_read_b32 v062, a142 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, v064 v065 v066 v067 v068 v069 v070 v071, v144 v145 v146 v147 v148 v149 v150 v151, v028 v029 v030 v031 ;.loc 1 220 0 + v_accvgpr_read_b32 v063, a143 + v_accvgpr_write_b32 a241, v219 + v_accvgpr_write_b32 a240, v218 + v_accvgpr_write_b32 a239, v217 + v_accvgpr_write_b32 a238, v216 + v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, v064 v065 v066 v067 v068 v069 v070 v071, v168 v169 v170 v171 v172 v173 v174 v175, v040 v041 v042 v043 ;.loc 1 227 0 + v_mfma_f32_16x16x128_f8f6f4 a[166:169], v032 v033 v034 v035 v036 v037 v038 v039, v008 v009 v010 v011 v012 v013 v014 v015, a[0:3] ;.loc 1 180 0 + s_nop 5 + v_accvgpr_read_b32 v040, a222 + v_accvgpr_read_b32 v041, a223 + v_accvgpr_read_b32 v042, a224 + v_accvgpr_read_b32 v043, a225 + v_accvgpr_mov_b32 a0, a170 + s_waitcnt lgkmcnt(6) ;.loc 1 196 0 + v_mfma_f32_16x16x128_f8f6f4 a[194:197], v176 v177 v178 v179 v180 v181 v182 v183, v128 v129 v130 v131 v132 v133 v134 v135, a[4:7] + v_accvgpr_mov_b32 a1, a171 + v_accvgpr_mov_b32 a2, a172 + v_accvgpr_mov_b32 a3, a173 + s_nop 3 + v_accvgpr_mov_b32 a4, a210 + v_accvgpr_mov_b32 a5, a211 + v_accvgpr_mov_b32 a6, a212 + v_accvgpr_mov_b32 a7, a213 + v_mfma_f32_16x16x128_f8f6f4 a[170:173], v032 v033 v034 v035 v036 v037 v038 v039, v136 v137 v138 v139 v140 v141 v142 v143, a[0:3] ;.loc 1 186 0 + s_nop 6 + v_accvgpr_mov_b32 a0, a174 + v_mfma_f32_16x16x128_f8f6f4 a[198:201], v176 v177 v178 v179 v180 v181 v182 v183, v008 v009 v010 v011 v012 v013 v014 v015, a[4:7] ;.loc 1 197 0 + v_accvgpr_mov_b32 a1, a175 + v_accvgpr_mov_b32 a2, a176 + v_accvgpr_mov_b32 a3, a177 + s_waitcnt lgkmcnt(4) ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, v184 v185 v186 v187 v188 v189 v190 v191, v008 v009 v010 v011 v012 v013 v014 v015, v040 v041 v042 v043 + s_nop 1 ;.loc 4 920 22 + ds_read_b128 a[4:7], v006 offset:2048 + s_waitcnt lgkmcnt(3) ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, v192 v193 v194 v195 v196 v197 v198 v199, v008 v009 v010 v011 v012 v013 v014 v015, v056 v057 v058 v059 + v_accvgpr_read_b32 v008, a24 + v_accvgpr_read_b32 v009, a25 + v_accvgpr_read_b32 v010, a26 + v_accvgpr_read_b32 v011, a27 + v_accvgpr_mov_b32 a24, a32 + v_accvgpr_mov_b32 a25, a33 + v_accvgpr_mov_b32 a26, a34 + v_mfma_f32_16x16x128_f8f6f4 a[202:205], v176 v177 v178 v179 v180 v181 v182 v183, v136 v137 v138 v139 v140 v141 v142 v143, a[8:11] ;.loc 1 202 0 + v_accvgpr_mov_b32 a27, a35 + v_accvgpr_mov_b32 a32, a246 + v_accvgpr_mov_b32 a33, a247 + v_accvgpr_mov_b32 a34, a248 + v_accvgpr_mov_b32 a35, a249 + s_nop 1 + v_accvgpr_mov_b32 a8, a218 + v_mfma_f32_16x16x128_f8f6f4 a[174:177], v032 v033 v034 v035 v036 v037 v038 v039, v020 v021 v022 v023 v024 v025 v026 v027, a[0:3] ;.loc 1 191 0 + v_accvgpr_mov_b32 a9, a219 + v_accvgpr_mov_b32 a10, a220 + v_accvgpr_mov_b32 a11, a221 + s_nop 3 ;.loc 4 920 22 + ds_read_b128 a[0:3], v005 offset:2048 + buffer_load_dwordx4 v002, s[8:11], s36 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s55 + v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v192 v193 v194 v195 v196 v197 v198 v199, v136 v137 v138 v139 v140 v141 v142 v143, v008 v009 v010 v011 ;.loc 1 226 0 + ds_read_b128 a[12:15], v006 offset:4096 ;.loc 4 920 22 + s_nop 5 + v_accvgpr_read_b32 v008, a28 + v_mfma_f32_16x16x128_f8f6f4 a[206:209], v176 v177 v178 v179 v180 v181 v182 v183, v020 v021 v022 v023 v024 v025 v026 v027, a[8:11] ;.loc 1 203 0 + v_accvgpr_read_b32 v009, a29 + v_accvgpr_read_b32 v010, a30 + v_accvgpr_read_b32 v011, a31 + v_accvgpr_mov_b32 a28, a242 + v_accvgpr_mov_b32 a29, a243 + v_accvgpr_mov_b32 a30, a244 + v_accvgpr_mov_b32 a31, a245 + ds_read_b128 a[8:11], v005 offset:4096 ;.loc 4 920 22 + buffer_load_dwordx4 v001, s[8:11], s36 offen lds ;.loc 3 94 8 + v_mfma_f32_16x16x128_f8f6f4 a[210:213], v032 v033 v034 v035 v036 v037 v038 v039, v144 v145 v146 v147 v148 v149 v150 v151, a[24:27] ;.loc 1 179 0 + s_mov_b32 m0, s54 ;.loc 3 94 8 + ds_read_b128 a[16:19], v005 offset:6144 ;.loc 4 920 22 + ds_read_b128 a[20:23], v006 offset:6144 + buffer_load_dwordx4 v003, s[4:7], s33 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s53 + s_nop 1 + v_accvgpr_mov_b32 a24, a36 + v_accvgpr_mov_b32 a25, a37 + v_accvgpr_mov_b32 a26, a38 + v_accvgpr_mov_b32 a27, a39 + v_mfma_f32_16x16x128_f8f6f4 a[218:221], v032 v033 v034 v035 v036 v037 v038 v039, v160 v161 v162 v163 v164 v165 v166 v167, a[28:31] ;.loc 1 186 0 + s_nop 0 ;.loc 1 180 0 + v_mfma_f32_16x16x128_f8f6f4 a[214:217], v032 v033 v034 v035 v036 v037 v038 v039, v152 v153 v154 v155 v156 v157 v158 v159, a[24:27] + s_nop 4 ;.loc 4 920 22 + ds_read_b128 a[28:31], v083 + s_nop 0 + ds_read_b128 a[24:27], v000 + buffer_load_dwordx4 v004, s[4:7], s33 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a255 + v_mfma_f32_16x16x128_f8f6f4 a[222:225], v032 v033 v034 v035 v036 v037 v038 v039, v168 v169 v170 v171 v172 v173 v174 v175, a[32:35] ;.loc 1 191 0 + ds_read_b128 a[36:39], v000 ;.loc 4 920 22 + scratch_load_dword v000, off, off offset:60 + s_mov_b32 m0, s52 ;.loc 3 94 8 + v_accvgpr_read_b32 v004, a86 + v_accvgpr_read_b32 v032, a64 + v_accvgpr_read_b32 v033, a65 + v_accvgpr_read_b32 v034, a66 + ds_read_b128 a[32:35], v082 ;.loc 4 920 22 + buffer_load_dwordx4 v002, s[4:7], s33 offen lds ;.loc 3 94 8 + s_mov_b32 m0, s51 + v_accvgpr_read_b32 v083, a59 + v_accvgpr_read_b32 v082, a58 + v_accvgpr_read_b32 v081, a57 + v_accvgpr_read_b32 v080, a56 + v_accvgpr_read_b32 v035, a67 + v_accvgpr_read_b32 v036, a70 + v_accvgpr_read_b32 v037, a71 + v_accvgpr_read_b32 v038, a72 + v_accvgpr_read_b32 v039, a73 + s_waitcnt lgkmcnt(0) ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[8:15], a[32:39], v220 v221 v222 v223 + s_waitcnt vmcnt(1) ;.loc 4 920 22 + ds_read_b128 a[40:43], v000 + scratch_load_dword v000, off, off offset:56 + s_nop 8 + v_accvgpr_write_b32 a245, v075 + v_accvgpr_write_b32 a244, v074 + v_accvgpr_write_b32 a243, v073 + v_accvgpr_write_b32 a242, v072 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, v184 v185 v186 v187 v188 v189 v190 v191, v020 v021 v022 v023 v024 v025 v026 v027, v048 v049 v050 v051 ;.loc 1 215 0 + s_waitcnt vmcnt(0) ;.loc 4 920 22 + ds_read_b128 a[44:47], v000 + buffer_load_dwordx4 v001, s[4:7], s33 offen lds ;.loc 3 94 8 + v_accvgpr_read_b32 v000, a87 + ds_read_b128 a[48:51], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a135 + ds_read_b128 a[52:55], v000 + s_waitcnt vmcnt(16) ;.loc 1 374 0 +s_barrier + ds_read_b128 a[56:59], v004 ;.loc 4 920 22 + v_accvgpr_read_b32 v004, a68 + ds_read_b128 a[60:63], v004 + v_accvgpr_read_b32 v004, a69 + ds_read_b128 a[64:67], v004 + v_accvgpr_read_b32 v004, a83 + ds_read_b128 a[68:71], v004 + v_accvgpr_read_b32 v004, a85 + ds_read_b128 a[72:75], v004 + scratch_load_dword v004, off, off offset:24 + s_waitcnt lgkmcnt(7) ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[16:23], a[40:47], v092 v093 v094 v095 + v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, v192 v193 v194 v195 v196 v197 v198 v199, v020 v021 v022 v023 v024 v025 v026 v027, v008 v009 v010 v011 ;.loc 1 227 0 + v_accvgpr_read_b32 v020, a250 + v_accvgpr_read_b32 v021, a251 + v_accvgpr_read_b32 v022, a252 + v_accvgpr_read_b32 v023, a253 + s_nop 6 + v_accvgpr_write_b32 a249, v075 + v_accvgpr_write_b32 a248, v074 + v_accvgpr_write_b32 a247, v073 + v_accvgpr_write_b32 a246, v072 + s_waitcnt lgkmcnt(5) ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[16:23], a[48:55], v096 v097 v098 v099 + v_accvgpr_read_b32 v024, a150 + v_accvgpr_read_b32 v025, a151 + v_accvgpr_read_b32 v026, a152 + v_accvgpr_read_b32 v027, a153 + v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, v176 v177 v178 v179 v180 v181 v182 v183, v168 v169 v170 v171 v172 v173 v174 v175, v036 v037 v038 v039 ;.loc 1 203 0 + s_nop 6 + v_accvgpr_write_b32 a253, v075 + v_accvgpr_write_b32 a252, v074 + v_accvgpr_write_b32 a251, v073 + v_accvgpr_read_b32 v036, a78 + v_accvgpr_write_b32 a250, v072 + v_accvgpr_read_b32 v072, a128 + v_accvgpr_read_b32 v037, a79 + v_accvgpr_read_b32 v038, a80 + v_accvgpr_read_b32 v039, a81 + v_accvgpr_read_b32 v073, a129 + v_accvgpr_read_b32 v074, a130 + v_accvgpr_read_b32 v075, a131 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, v184 v185 v186 v187 v188 v189 v190 v191, v128 v129 v130 v131 v132 v133 v134 v135, v100 v101 v102 v103 ;.loc 1 208 0 + v_accvgpr_mov_b32 a128, a190 + v_accvgpr_mov_b32 a129, a191 + v_accvgpr_mov_b32 a130, a192 + v_accvgpr_mov_b32 a131, a193 + s_waitcnt vmcnt(0) ;.loc 4 920 22 + ds_read_b128 a[76:79], v004 + v_accvgpr_read_b32 v004, a82 + ds_read_b128 a[80:83], v004 + v_accvgpr_read_b32 v004, a84 + s_waitcnt lgkmcnt(5) ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v200 v201 v202 v203 v204 v205 v206 v207, a[56:63], v072 v073 v074 v075 + ds_read_b128 a[84:87], v004 ;.loc 4 920 22 + v_accvgpr_read_b32 v004, a134 + s_nop 4 + v_accvgpr_read_b32 v072, a178 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, v192 v193 v194 v195 v196 v197 v198 v199, v128 v129 v130 v131 v132 v133 v134 v135, v052 v053 v054 v055 ;.loc 1 220 0 + v_accvgpr_read_b32 v131, a91 + v_accvgpr_read_b32 v073, a179 + v_accvgpr_read_b32 v074, a180 + v_accvgpr_read_b32 v075, a181 + v_accvgpr_read_b32 v130, a90 + v_accvgpr_read_b32 v129, a89 + v_accvgpr_read_b32 v128, a88 + v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, v176 v177 v178 v179 v180 v181 v182 v183, v144 v145 v146 v147 v148 v149 v150 v151, v020 v021 v022 v023 ;.loc 1 196 0 + v_accvgpr_mov_b32 a88, a96 + v_accvgpr_mov_b32 a89, a97 + v_accvgpr_mov_b32 a90, a98 + v_accvgpr_mov_b32 a91, a99 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, v184 v185 v186 v187 v188 v189 v190 v191, v144 v145 v146 v147 v148 v149 v150 v151, v036 v037 v038 v039 ;.loc 1 208 0 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, v184 v185 v186 v187 v188 v189 v190 v191, v152 v153 v154 v155 v156 v157 v158 v159, v060 v061 v062 v063 ;.loc 1 209 0 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, v184 v185 v186 v187 v188 v189 v190 v191, v160 v161 v162 v163 v164 v165 v166 v167, v208 v209 v210 v211 ;.loc 1 214 0 + v_mfma_f32_16x16x128_f8f6f4 v208 v209 v210 v211, v184 v185 v186 v187 v188 v189 v190 v191, v168 v169 v170 v171 v172 v173 v174 v175, v212 v213 v214 v215 ;.loc 1 215 0 + v_mfma_f32_16x16x128_f8f6f4 v212 v213 v214 v215, v192 v193 v194 v195 v196 v197 v198 v199, v144 v145 v146 v147 v148 v149 v150 v151, v224 v225 v226 v227 ;.loc 1 220 0 + s_waitcnt lgkmcnt(4) ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, v200 v201 v202 v203 v204 v205 v206 v207, a[64:71], v072 v073 v074 v075 + s_nop 6 + v_accvgpr_read_b32 v072, a182 + v_accvgpr_read_b32 v073, a183 + v_accvgpr_read_b32 v074, a184 + v_accvgpr_read_b32 v075, a185 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, v176 v177 v178 v179 v180 v181 v182 v183, v152 v153 v154 v155 v156 v157 v158 v159, v024 v025 v026 v027 ;.loc 1 197 0 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, v192 v193 v194 v195 v196 v197 v198 v199, v152 v153 v154 v155 v156 v157 v158 v159, v244 v245 v246 v247 ;.loc 1 221 0 + v_mfma_f32_16x16x128_f8f6f4 a[140:143], v200 v201 v202 v203 v204 v205 v206 v207, a[40:47], a[88:91] ;.loc 1 376 0 + s_nop 6 + v_accvgpr_mov_b32 a88, a100 + s_waitcnt lgkmcnt(2) ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, v200 v201 v202 v203 v204 v205 v206 v207, a[72:79], v072 v073 v074 v075 + v_accvgpr_mov_b32 a89, a101 + v_accvgpr_mov_b32 a90, a102 + v_accvgpr_mov_b32 a91, a103 + s_nop 3 + v_accvgpr_read_b32 v072, a154 + v_mfma_f32_16x16x128_f8f6f4 v000 v001 v002 v003, v192 v193 v194 v195 v196 v197 v198 v199, v160 v161 v162 v163 v164 v165 v166 v167, v240 v241 v242 v243 ;.loc 1 226 0 + v_accvgpr_read_b32 v073, a155 + v_accvgpr_read_b32 v074, a156 + v_accvgpr_read_b32 v075, a157 + v_accvgpr_mov_b32 a154, a218 + v_accvgpr_mov_b32 a155, a219 + v_accvgpr_mov_b32 a156, a220 + v_accvgpr_mov_b32 a157, a221 + v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, v200 v201 v202 v203 v204 v205 v206 v207, a[24:31], v128 v129 v130 v131 ;.loc 1 376 0 + s_nop 6 + v_accvgpr_read_b32 v131, a95 + v_accvgpr_read_b32 v130, a94 + v_accvgpr_read_b32 v129, a93 + v_accvgpr_read_b32 v128, a92 + v_mfma_f32_16x16x128_f8f6f4 a[150:153], v200 v201 v202 v203 v204 v205 v206 v207, a[48:55], a[88:91] + s_nop 6 ;.loc 4 920 22 + ds_read_b128 a[88:91], v005 offset:16384 + ds_read_b128 a[92:95], v006 offset:16384 + ds_read_b128 a[96:99], v005 offset:18432 + ds_read_b128 a[100:103], v006 offset:18432 + ds_read_b128 a[104:107], v005 offset:20480 + ds_read_b128 a[108:111], v006 offset:20480 + ds_read_b128 a[112:115], v005 offset:22528 + ds_read_b128 a[116:119], v006 offset:22528 + s_waitcnt vmcnt(8) ;.loc 1 379 0 +s_barrier + s_waitcnt lgkmcnt(8) ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, v200 v201 v202 v203 v204 v205 v206 v207, a[80:87], v072 v073 v074 v075 + s_nop 6 + v_accvgpr_read_b32 v072, a158 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, v176 v177 v178 v179 v180 v181 v182 v183, v160 v161 v162 v163 v164 v165 v166 v167, v032 v033 v034 v035 ;.loc 1 202 0 + v_accvgpr_read_b32 v073, a159 + v_accvgpr_read_b32 v074, a160 + v_accvgpr_read_b32 v075, a161 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[8:15], a[64:71], v016 v017 v018 v019 ;.loc 1 378 0 + s_nop 6 + v_accvgpr_read_b32 v016, a174 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[0:7], a[56:63], v072 v073 v074 v075 + v_accvgpr_read_b32 v017, a175 + v_accvgpr_read_b32 v018, a176 + v_accvgpr_read_b32 v019, a177 + s_nop 3 + v_accvgpr_read_b32 v072, a162 + v_accvgpr_read_b32 v073, a163 + v_accvgpr_read_b32 v074, a164 + v_accvgpr_read_b32 v075, a165 + s_waitcnt lgkmcnt(6) ;.loc 1 381 0 + v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[88:95], a[48:55], v016 v017 v018 v019 + v_accvgpr_mov_b32 a160, a250 + v_accvgpr_mov_b32 a161, a251 + v_accvgpr_mov_b32 a162, a252 + v_accvgpr_mov_b32 a163, a253 + s_nop 2 + v_accvgpr_read_b32 v016, a194 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[0:7], a[64:71], v072 v073 v074 v075 ;.loc 1 378 0 + v_accvgpr_read_b32 v017, a195 + v_accvgpr_read_b32 v018, a196 + v_accvgpr_read_b32 v019, a197 + s_nop 3 + v_accvgpr_read_b32 v072, a186 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, v192 v193 v194 v195 v196 v197 v198 v199, v168 v169 v170 v171 v172 v173 v174 v175, v080 v081 v082 v083 ;.loc 1 227 0 + v_accvgpr_read_b32 v073, a187 + v_accvgpr_read_b32 v074, a188 + v_accvgpr_read_b32 v075, a189 + v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[0:7], a[24:31], a[226:229] ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[8:15], a[24:31], v228 v229 v230 v231 + v_mfma_f32_16x16x128_f8f6f4 v220 v221 v222 v223, a[8:15], a[48:55], v084 v085 v086 v087 + v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[16:23], a[24:31], v088 v089 v090 v091 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[0:7], a[72:79], v116 v117 v118 v119 ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[24:31], a[128:131] ;.loc 1 381 0 + s_waitcnt lgkmcnt(4) + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[96:103], a[24:31], v016 v017 v018 v019 + s_nop 4 + v_accvgpr_mov_b32 a128, a166 + v_accvgpr_mov_b32 a129, a167 + v_accvgpr_mov_b32 a130, a168 + v_accvgpr_mov_b32 a131, a169 + v_accvgpr_mov_b32 a164, a246 + v_accvgpr_mov_b32 a165, a247 + v_accvgpr_mov_b32 a166, a248 + s_waitcnt lgkmcnt(2) + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[104:111], a[24:31], v100 v101 v102 v103 + v_accvgpr_read_b32 v016, a198 + v_accvgpr_read_b32 v017, a199 + v_accvgpr_read_b32 v018, a200 + v_accvgpr_read_b32 v019, a201 + v_accvgpr_mov_b32 a167, a249 + s_waitcnt lgkmcnt(0) + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[112:119], a[24:31], v052 v053 v054 v055 + ds_read_b128 a[24:27], v004 ;.loc 4 920 22 + scratch_load_dword v004, off, off offset:32 + s_waitcnt vmcnt(0) + ds_read_b128 a[28:31], v004 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, v184 v185 v186 v187 v188 v189 v190 v191, v136 v137 v138 v139 v140 v141 v142 v143, v044 v045 v046 v047 ;.loc 1 214 0 + v_accvgpr_read_b32 v004, a137 + v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, v200 v201 v202 v203 v204 v205 v206 v207, a[32:39], v128 v129 v130 v131 ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[0:7], a[32:39], a[230:233] + v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[16:23], a[32:39], v252 v253 v254 v255 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[8:15], a[80:87], v120 v121 v122 v123 ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v196 v197 v198 v199, a[16:23], a[64:71], v104 v105 v106 v107 + v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[32:39], a[128:131] ;.loc 1 381 0 + s_nop 6 + v_accvgpr_mov_b32 a128, a170 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[96:103], a[32:39], v016 v017 v018 v019 + v_accvgpr_mov_b32 a129, a171 + v_accvgpr_mov_b32 a130, a172 + v_accvgpr_mov_b32 a131, a173 + v_accvgpr_mov_b32 a168, a242 + v_accvgpr_mov_b32 a169, a243 + v_accvgpr_mov_b32 a170, a244 + v_accvgpr_mov_b32 a171, a245 + v_accvgpr_read_b32 v016, a202 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[104:111], a[32:39], v040 v041 v042 v043 + v_accvgpr_read_b32 v017, a203 + v_accvgpr_read_b32 v018, a204 + v_accvgpr_read_b32 v019, a205 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[112:119], a[32:39], v056 v057 v058 v059 + ds_read_b128 a[32:35], v004 ;.loc 4 920 22 + v_accvgpr_read_b32 v004, a149 + ds_read_b128 a[36:39], v004 + v_accvgpr_read_b32 v004, a133 + v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[0:7], a[40:47], a[234:237] ;.loc 1 376 0 + v_mfma_f32_16x16x128_f8f6f4 v216 v217 v218 v219, a[8:15], a[40:47], v124 v125 v126 v127 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[8:15], a[56:63], v108 v109 v110 v111 ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[40:47], a[128:131] ;.loc 1 381 0 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[96:103], a[40:47], v016 v017 v018 v019 + s_nop 5 + v_accvgpr_mov_b32 a128, a210 + v_accvgpr_mov_b32 a129, a211 + v_accvgpr_mov_b32 a130, a212 + v_accvgpr_mov_b32 a131, a213 + v_accvgpr_read_b32 v016, a206 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[40:47], v044 v045 v046 v047 + v_accvgpr_read_b32 v017, a207 + v_accvgpr_read_b32 v018, a208 + v_accvgpr_read_b32 v019, a209 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[112:119], a[40:47], v012 v013 v014 v015 + ds_read_b128 a[40:43], v004 ;.loc 4 920 22 + v_accvgpr_read_b32 v004, a144 + ds_read_b128 a[44:47], v004 + v_accvgpr_read_b32 v004, a146 + v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[0:7], a[48:55], a[238:241] ;.loc 1 376 0 + s_nop 1 + v_accvgpr_read_b32 v012, a150 + v_accvgpr_read_b32 v013, a151 + v_accvgpr_read_b32 v014, a152 + v_accvgpr_read_b32 v015, a153 + v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[16:23], a[72:79], v112 v113 v114 v115 ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[96:103], a[48:55], v016 v017 v018 v019 ;.loc 1 381 0 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[104:111], a[48:55], v048 v049 v050 v051 + v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[112:119], a[48:55], v008 v009 v010 v011 + ds_read_b128 a[48:51], v004 ;.loc 4 920 22 + v_accvgpr_read_b32 v004, a254 + ds_read_b128 a[52:55], v004 + v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[104:111], a[72:79], v060 v061 v062 v063 ;.loc 1 383 0 + s_nop 2 + v_accvgpr_read_b32 v008, a222 + v_accvgpr_read_b32 v009, a223 + v_accvgpr_read_b32 v010, a224 + v_accvgpr_read_b32 v011, a225 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[112:119], a[72:79], v000 v001 v002 v003 + s_nop 6 + v_accvgpr_read_b32 v000, a132 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[0:7], a[80:87], v072 v073 v074 v075 ;.loc 1 378 0 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[8:15], a[72:79], v076 v077 v078 v079 + v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[16:23], a[56:63], v028 v029 v030 v031 + v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[16:23], a[80:87], v068 v069 v070 v071 + ds_read_b128 a[0:3], v005 offset:32768 ;.loc 4 920 22 + ds_read_b128 a[4:7], v006 offset:32768 + ds_read_b128 a[8:11], v005 offset:34816 + ds_read_b128 a[12:15], v006 offset:34816 + ds_read_b128 a[16:19], v005 offset:36864 + ds_read_b128 a[20:23], v006 offset:36864 + ds_read_b128 a[120:123], v005 offset:38912 + ds_read_b128 a[124:127], v006 offset:38912 + s_waitcnt vmcnt(0) ;.loc 1 393 0 +s_barrier + v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[88:95], a[56:63], a[128:131] ;.loc 1 383 0 + v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[96:103], a[56:63], v020 v021 v022 v023 + s_nop 5 + v_accvgpr_mov_b32 a128, a214 + v_accvgpr_mov_b32 a129, a215 + v_accvgpr_mov_b32 a130, a216 + v_accvgpr_mov_b32 a131, a217 + v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[104:111], a[56:63], v036 v037 v038 v039 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[112:119], a[56:63], v212 v213 v214 v215 + ds_read_b128 a[56:59], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a136 + ds_read_b128 a[60:63], v000 + scratch_load_dword v000, off, off offset:28 + v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[88:95], a[64:71], a[128:131] ;.loc 1 383 0 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[96:103], a[64:71], v024 v025 v026 v027 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[96:103], a[72:79], v032 v033 v034 v035 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[96:103], a[80:87], v236 v237 v238 v239 + v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[104:111], a[64:71], v064 v065 v066 v067 + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[112:119], a[64:71], v224 v225 v226 v227 + s_waitcnt vmcnt(0) ;.loc 4 920 22 + ds_read_b128 a[64:67], v000 + v_accvgpr_read_b32 v000, a145 + ds_read_b128 a[68:71], v000 + v_accvgpr_read_b32 v000, a147 + v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[72:79], a[154:157] ;.loc 1 383 0 + ds_read_b128 a[72:75], v000 ;.loc 4 920 22 + ds_read_b128 a[76:79], v007 + v_accvgpr_read_b32 v000, a148 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[88:95], a[80:87], v008 v009 v010 v011 ;.loc 1 383 0 + v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[104:111], a[80:87], v208 v209 v210 v211 + s_nop 5 + v_accvgpr_read_b32 v008, a140 + v_accvgpr_read_b32 v009, a141 + v_accvgpr_read_b32 v010, a142 + v_accvgpr_read_b32 v011, a143 + v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[112:119], a[80:87], v080 v081 v082 v083 + ds_read_b128 a[80:83], v000 ;.loc 4 920 22 + v_accvgpr_read_b32 v000, a138 + ds_read_b128 a[84:87], v000 + ds_read_b128 a[88:91], v005 offset:49152 + ds_read_b128 a[92:95], v006 offset:49152 + ds_read_b128 a[96:99], v005 offset:51200 + ds_read_b128 a[100:103], v006 offset:51200 + ds_read_b128 a[104:107], v005 offset:53248 + ds_read_b128 a[108:111], v006 offset:53248 + ds_read_b128 a[112:115], v005 offset:55296 + ds_read_b128 a[116:119], v006 offset:55296 + v_accvgpr_read_b32 v208, a230 + v_accvgpr_read_b32 v209, a231 + v_accvgpr_read_b32 v210, a232 + v_accvgpr_read_b32 v211, a233 + s_waitcnt lgkmcnt(4) ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[96:103], a[80:87], v032 v033 v034 v035 + v_accvgpr_read_b32 v080, a226 + v_accvgpr_read_b32 v081, a227 + v_accvgpr_read_b32 v082, a228 + v_accvgpr_read_b32 v083, a229 + v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[16:23], a[24:31], v228 v229 v230 v231 ;.loc 1 396 0 + v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[16:23], a[32:39], a[168:171] + s_nop 10 + v_accvgpr_write_b32 a172, v224 + v_accvgpr_write_b32 a173, v225 + v_accvgpr_write_b32 a174, v226 + v_mfma_f32_16x16x128_f8f6f4 v214 v215 v216 v217, a[16:23], a[40:47], v216 v217 v218 v219 + v_accvgpr_write_b32 a175, v227 + v_mfma_f32_16x16x128_f8f6f4 v218 v219 v220 v221, a[16:23], a[48:55], v220 v221 v222 v223 + v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[16:23], a[56:63], v176 v177 v178 v179 ;.loc 1 397 0 + v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[16:23], a[64:71], v180 v181 v182 v183 + v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[16:23], a[72:79], v184 v185 v186 v187 + v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[16:23], a[80:87], v188 v189 v190 v191 + v_accvgpr_write_b32 a16, v032 + v_accvgpr_write_b32 a17, v033 + v_accvgpr_write_b32 a18, v034 + v_accvgpr_write_b32 a19, v035 + s_waitcnt lgkmcnt(2) ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v036 v037 v038 v039 + v_mfma_f32_16x16x128_f8f6f4 v000 v001 v002 v003, a[0:7], a[24:31], v240 v241 v242 v243 ;.loc 1 396 0 + s_nop 5 ;.loc 3 194 45 + v_mov_b32_e32 v038, s0 + v_mfma_f32_16x16x128_f8f6f4 v004 v005 v006 v007, a[0:7], a[32:39], v244 v245 v246 v247 ;.loc 1 396 0 + v_mfma_f32_16x16x128_f8f6f4 v242 v243 v244 v245, a[8:15], a[32:39], v208 v209 v210 v211 + s_nop 6 + v_accvgpr_read_b32 v208, a234 + v_accvgpr_read_b32 v209, a235 + v_accvgpr_read_b32 v210, a236 + v_accvgpr_read_b32 v211, a237 + v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[8:15], a[24:31], v080 v081 v082 v083 + s_nop 0 + v_mfma_f32_16x16x128_f8f6f4 v238 v239 v240 v241, a[8:15], a[40:47], v208 v209 v210 v211 + s_nop 6 + v_accvgpr_read_b32 v208, a238 + v_accvgpr_read_b32 v209, a239 + v_accvgpr_read_b32 v210, a240 + v_accvgpr_read_b32 v211, a241 + v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[8:15], a[56:63], v160 v161 v162 v163 ;.loc 1 397 0 + s_nop 0 ;.loc 1 396 0 + v_mfma_f32_16x16x128_f8f6f4 v210 v211 v212 v213, a[8:15], a[48:55], v208 v209 v210 v211 + v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[8:15], a[64:71], v164 v165 v166 v167 ;.loc 1 397 0 + v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[8:15], a[72:79], v168 v169 v170 v171 + v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[8:15], a[80:87], v172 v173 v174 v175 + v_accvgpr_write_b32 a12, v032 + v_accvgpr_write_b32 a13, v033 + v_accvgpr_write_b32 a14, v034 + v_accvgpr_write_b32 a15, v035 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[64:71], v040 v041 v042 v043 ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, a[0:7], a[40:47], v008 v009 v010 v011 ;.loc 1 396 0 + s_nop 10 + v_accvgpr_write_b32 a8, v032 + v_accvgpr_write_b32 a9, v033 + v_accvgpr_write_b32 a10, v034 + v_accvgpr_write_b32 a11, v035 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[72:79], v044 v045 v046 v047 ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, a[0:7], a[48:55], v012 v013 v014 v015 ;.loc 1 396 0 + v_mfma_f32_16x16x128_f8f6f4 v226 v227 v228 v229, a[0:7], a[56:63], v248 v249 v250 v251 ;.loc 1 397 0 + v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[0:7], a[64:71], v148 v149 v150 v151 + s_nop 10 + v_accvgpr_write_b32 a156, v226 + v_accvgpr_write_b32 a157, v227 + v_accvgpr_write_b32 a158, v228 + v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[0:7], a[72:79], v152 v153 v154 v155 + v_accvgpr_write_b32 a159, v229 + v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[0:7], a[80:87], v156 v157 v158 v159 + v_accvgpr_write_b32 a4, v032 + v_accvgpr_write_b32 a5, v033 + v_accvgpr_write_b32 a6, v034 + v_accvgpr_write_b32 a7, v035 + v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[80:87], v048 v049 v050 v051 ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v222 v223 v224 v225, a[120:127], a[24:31], v232 v233 v234 v235 ;.loc 1 396 0 + s_nop 10 + v_accvgpr_write_b32 a0, v032 + v_accvgpr_write_b32 a1, v033 + v_accvgpr_write_b32 a2, v034 + v_accvgpr_write_b32 a3, v035 + scratch_load_dword v032, off, off offset:48 ;.loc 1 401 0 + scratch_load_dword v033, off, off offset:40 + scratch_load_dword v034, off, off offset:36 + scratch_load_dword v035, off, off offset:44 + v_mfma_f32_16x16x128_f8f6f4 v234 v235 v236 v237, a[120:127], a[32:39], v252 v253 v254 v255 ;.loc 1 396 0 + s_waitcnt vmcnt(3) ;.loc 1 401 0 + v_lshrrev_b32_e32 v032, 2, v032 + v_and_b32_e32 v032, 12, v032 + s_waitcnt vmcnt(2) + s_nop 2 + v_or3_b32 v253, s3, v033, v032 + s_waitcnt vmcnt(0) + v_or3_b32 v254, s2, v035, v034 + v_lshlrev_b32_e32 v032, 2, v253 ;.loc 3 166 8 + v_lshlrev_b32_e32 v051, 2, v254 ;.loc 3 170 8 + buffer_load_dwordx4 v040 v041 v042 v043, v032, s[20:23], 0 offen ;.loc 3 166 8 + buffer_load_dword v047, v051, s[24:27], 0 offen ;.loc 3 170 8 + v_or_b32_e32 v252, 16, v254 ;.loc 1 401 0 + v_mfma_f32_16x16x128_f8f6f4 v138 v139 v140 v141, a[88:95], a[48:55], v144 v145 v146 v147 ;.loc 1 398 0 + v_or_b32_e32 v251, 32, v254 ;.loc 1 401 0 + v_or_b32_e32 v250, 48, v254 + v_lshlrev_b32_e32 v255, 2, v250 ;.loc 3 170 8 + buffer_load_dword v050, v255, s[24:27], 0 offen + v_or_b32_e32 v033, 16, v253 ;.loc 1 401 0 + v_lshlrev_b32_e32 v037, 2, v033 ;.loc 3 166 8 + buffer_load_dwordx4 v246 v247 v248 v249, v037, s[20:23], 0 offen + s_waitcnt lgkmcnt(0) ;.loc 1 399 0 + v_mfma_f32_16x16x128_f8f6f4 v142 v143 v144 v145, a[112:119], a[64:71], v056 v057 v058 v059 + v_mul_lo_u32 v035, v253, s35 ;.loc 1 401 0 + v_cmp_gt_i32_e64 s[2:3], s35, v254 + v_or_b32_e32 v039, 32, v253 + v_or_b32_e32 v045, 48, v253 + v_lshlrev_b32_e32 v044, 2, v039 ;.loc 3 166 8 + v_lshlrev_b32_e32 v046, 2, v045 + buffer_load_dwordx4 v226 v227 v228 v229, v044, s[20:23], 0 offen + v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[112:119], a[72:79], v060 v061 v062 v063 ;.loc 1 399 0 + v_cmp_gt_i32_e64 s[4:5], s35, v252 ;.loc 1 401 0 + v_cmp_gt_i32_e64 s[6:7], s35, v251 + v_cmp_gt_i32_e64 s[8:9], s35, v250 + s_waitcnt vmcnt(3) + v_mul_f32_e32 v034, v040, v047 + v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[112:119], a[80:87], v064 v065 v066 v067 ;.loc 1 399 0 + v_mul_f32_e32 v000, v000, v034 ;.loc 1 401 0 + v_add_u32_e32 v034, v254, v035 + v_cndmask_b32_e64 v034, v038, v034, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v034, 1, v034 ;.loc 3 175 8 + s_nop 1 ;.loc 3 170 8 + v_lshlrev_b32_e32 v064, 2, v252 + buffer_load_dword v048, v064, s[24:27], 0 offen + v_lshlrev_b32_e32 v065, 2, v251 + buffer_load_dword v049, v065, s[24:27], 0 offen + v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[56:63], v192 v193 v194 v195 ;.loc 1 397 0 + v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[40:47], a[164:167] ;.loc 1 396 0 + s_nop 10 + v_accvgpr_write_b32 a152, v192 + v_accvgpr_write_b32 a153, v193 + v_accvgpr_write_b32 a154, v194 + v_accvgpr_write_b32 a155, v195 + v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[64:71], v196 v197 v198 v199 ;.loc 1 397 0 + v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[48:55], a[160:163] ;.loc 1 396 0 + s_nop 10 + v_accvgpr_write_b32 a148, v192 + v_accvgpr_write_b32 a149, v193 + v_accvgpr_write_b32 a150, v194 + v_accvgpr_write_b32 a151, v195 + v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[72:79], v200 v201 v202 v203 ;.loc 1 397 0 + s_nop 6 ;.loc 1 402 0 + v_or_b32_e32 v203, 0x90, v254 + v_or_b32_e32 v202, 0xa0, v254 + v_cmp_gt_i32_e64 s[12:13], s35, v203 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[40:47], v108 v109 v110 v111 ;.loc 1 398 0 + s_nop 0 + v_accvgpr_write_b32 a144, v192 + v_accvgpr_write_b32 a145, v193 + v_accvgpr_write_b32 a146, v194 + v_accvgpr_write_b32 a147, v195 + v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[80:87], v204 v205 v206 v207 ;.loc 1 397 0 + s_nop 5 + v_accvgpr_write_b32 a123, v111 + v_accvgpr_write_b32 a122, v110 + v_accvgpr_write_b32 a121, v109 + buffer_load_dwordx4 v206 v207 v208 v209, v046, s[20:23], 0 offen ;.loc 3 166 8 + v_or_b32_e32 v204, 0x80, v254 ;.loc 1 402 0 + buffer_store_short v000, v034, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v000, v041, v047 ;.loc 1 401 0 + v_mul_f32_e32 v000, v001, v000 + v_or_b32_e32 v001, 1, v253 + v_mul_lo_u32 v036, v001, s35 + v_add_u32_e32 v001, v254, v036 + v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_or_b32_e32 v001, 2, v253 ;.loc 1 401 0 + v_mul_lo_u32 v034, v001, s35 + v_mul_f32_e32 v000, v042, v047 + v_add_u32_e32 v001, v254, v034 + v_mul_f32_e32 v000, v002, v000 + v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_or_b32_e32 v001, 3, v253 ;.loc 1 401 0 + v_mul_lo_u32 v002, v001, s35 + v_mul_f32_e32 v000, v043, v047 + v_add_u32_e32 v001, v254, v002 + v_mul_f32_e32 v000, v003, v000 + v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + s_waitcnt vmcnt(6) ;.loc 1 401 0 + v_mul_f32_e32 v000, v040, v048 + v_add_u32_e32 v001, v252, v035 + v_mul_f32_e32 v000, v004, v000 + v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v048 ;.loc 1 401 0 + v_add_u32_e32 v001, v252, v036 + v_mul_f32_e32 v000, v005, v000 + v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v048 ;.loc 1 401 0 + v_add_u32_e32 v001, v252, v034 + v_mul_f32_e32 v000, v006, v000 + v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v048 ;.loc 1 401 0 + v_add_u32_e32 v001, v252, v002 + v_mul_f32_e32 v000, v007, v000 + v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + s_waitcnt vmcnt(9) ;.loc 1 401 0 + v_mul_f32_e32 v000, v040, v049 + v_add_u32_e32 v001, v251, v035 + v_mul_f32_e32 v000, v008, v000 + v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v049 ;.loc 1 401 0 + v_add_u32_e32 v001, v251, v036 + v_mul_f32_e32 v000, v009, v000 + v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v049 ;.loc 1 401 0 + v_add_u32_e32 v001, v251, v034 + v_mul_f32_e32 v000, v010, v000 + v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v049 ;.loc 1 401 0 + v_add_u32_e32 v001, v251, v002 + v_mul_f32_e32 v000, v011, v000 + v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v040, v050 ;.loc 1 401 0 + v_add_u32_e32 v001, v250, v035 + v_mul_f32_e32 v000, v012, v000 + v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v050 ;.loc 1 401 0 + v_add_u32_e32 v001, v250, v036 + v_mul_f32_e32 v000, v013, v000 + v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v050 ;.loc 1 401 0 + v_add_u32_e32 v001, v250, v034 + v_mul_f32_e32 v000, v014, v000 + v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v050 ;.loc 1 401 0 + v_add_u32_e32 v001, v250, v002 + v_mul_f32_e32 v000, v015, v000 + v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_lo_u32 v001, v033, s35 ;.loc 1 401 0 + v_mul_f32_e32 v000, v246, v047 + v_add_u32_e32 v003, v254, v001 + v_mul_f32_e32 v000, v080, v000 + v_cndmask_b32_e64 v003, v038, v003, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 3 175 8 + buffer_store_short v000, v003, s[16:19], 0 offen + v_mul_f32_e32 v000, v247, v047 ;.loc 1 401 0 + v_mul_f32_e32 v000, v081, v000 + v_cvt_pk_bf16_f32 v003, v000, s0 + v_or_b32_e32 v000, 17, v253 + v_mul_lo_u32 v000, v000, s35 + v_add_u32_e32 v004, v254, v000 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 18, v253 ;.loc 1 401 0 + v_mul_lo_u32 v011, v004, s35 + v_mul_f32_e32 v003, v248, v047 + v_add_u32_e32 v004, v254, v011 + v_mul_f32_e32 v003, v082, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 19, v253 ;.loc 1 401 0 + v_mul_lo_u32 v012, v004, s35 + v_mul_f32_e32 v003, v249, v047 + v_add_u32_e32 v004, v254, v012 + v_mul_f32_e32 v003, v083, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v246, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v001 + v_mul_f32_e32 v003, v242, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v247, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v000 + v_mul_f32_e32 v003, v243, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v248, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v011 + v_mul_f32_e32 v003, v244, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v249, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v012 + v_mul_f32_e32 v003, v245, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v246, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v001 + v_mul_f32_e32 v003, v238, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v247, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v000 + v_mul_f32_e32 v003, v239, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v248, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v011 + v_mul_f32_e32 v003, v240, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v249, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v012 + v_mul_f32_e32 v003, v241, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v246, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v001 + v_mul_f32_e32 v003, v210, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v247, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v000 + v_mul_f32_e32 v003, v211, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v248, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v011 + v_mul_f32_e32 v003, v212, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v249, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v012 + v_mul_f32_e32 v003, v213, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v226, v047 ;.loc 1 401 0 + v_accvgpr_read_b32 v004, a172 + v_mul_lo_u32 v013, v039, s35 + v_mul_f32_e32 v003, v004, v003 + v_add_u32_e32 v004, v254, v013 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 33, v253 ;.loc 1 401 0 + v_mul_lo_u32 v230, v004, s35 + v_accvgpr_read_b32 v005, a173 + v_mul_f32_e32 v003, v227, v047 + v_add_u32_e32 v004, v254, v230 + v_mul_f32_e32 v003, v005, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 34, v253 ;.loc 1 401 0 + v_mul_lo_u32 v231, v004, s35 + v_accvgpr_read_b32 v006, a174 + v_mul_f32_e32 v003, v228, v047 + v_add_u32_e32 v004, v254, v231 + v_mul_f32_e32 v003, v006, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 35, v253 ;.loc 1 401 0 + v_mul_lo_u32 v232, v004, s35 + v_accvgpr_read_b32 v007, a175 + v_mul_f32_e32 v003, v229, v047 + v_add_u32_e32 v004, v254, v232 + v_mul_f32_e32 v003, v007, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v226, v048 ;.loc 1 401 0 + v_accvgpr_read_b32 v004, a168 + v_mul_f32_e32 v003, v004, v003 + v_add_u32_e32 v004, v252, v013 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a169 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v227, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v230 + v_mul_f32_e32 v003, v005, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v006, a170 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v228, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v231 + v_mul_f32_e32 v003, v006, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v007, a171 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v229, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v232 + v_mul_f32_e32 v003, v007, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v226, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v013 + v_mul_f32_e32 v003, v214, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v227, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v230 + v_mul_f32_e32 v003, v215, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v228, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v231 + v_mul_f32_e32 v003, v216, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v229, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v232 + v_mul_f32_e32 v003, v217, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v226, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v013 + v_mul_f32_e32 v003, v218, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v227, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v230 + v_mul_f32_e32 v003, v219, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v228, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v231 + v_mul_f32_e32 v003, v220, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v229, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v232 + v_mul_f32_e32 v003, v221, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_mul_lo_u32 v210, v045, s35 ;.loc 1 401 0 + buffer_store_short v003, v004, s[16:19], 0 offen ;.loc 3 175 8 + s_waitcnt vmcnt(48) ;.loc 1 401 0 + v_mul_f32_e32 v003, v206, v047 + v_add_u32_e32 v004, v254, v210 + v_mul_f32_e32 v003, v222, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 49, v253 ;.loc 1 401 0 + v_mul_lo_u32 v211, v004, s35 + v_mul_f32_e32 v003, v207, v047 + v_add_u32_e32 v004, v254, v211 + v_mul_f32_e32 v003, v223, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 50, v253 ;.loc 1 401 0 + v_mul_lo_u32 v212, v004, s35 + v_mul_f32_e32 v003, v208, v047 + v_add_u32_e32 v004, v254, v212 + v_mul_f32_e32 v003, v224, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_or_b32_e32 v004, 51, v253 ;.loc 1 401 0 + v_mul_lo_u32 v213, v004, s35 + v_mul_f32_e32 v003, v209, v047 + v_add_u32_e32 v004, v254, v213 + v_mul_f32_e32 v003, v225, v003 + v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v206, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v210 + v_mul_f32_e32 v003, v234, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v207, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v211 + v_mul_f32_e32 v003, v235, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v208, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v212 + v_mul_f32_e32 v003, v236, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v209, v048 ;.loc 1 401 0 + v_add_u32_e32 v004, v252, v213 + v_mul_f32_e32 v003, v237, v003 + v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v206, v049 ;.loc 1 401 0 + v_accvgpr_read_b32 v004, a164 + v_mul_f32_e32 v003, v004, v003 + v_add_u32_e32 v004, v251, v210 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a165 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v207, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v211 + v_mul_f32_e32 v003, v005, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v006, a166 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v208, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v212 + v_mul_f32_e32 v003, v006, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v007, a167 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v209, v049 ;.loc 1 401 0 + v_add_u32_e32 v004, v251, v213 + v_mul_f32_e32 v003, v007, v003 + v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v206, v050 ;.loc 1 401 0 + v_accvgpr_read_b32 v004, a160 + v_mul_f32_e32 v003, v004, v003 + v_add_u32_e32 v004, v250, v210 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a161 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v207, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v211 + v_mul_f32_e32 v003, v005, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v006, a162 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v208, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v212 + v_mul_f32_e32 v003, v006, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + v_accvgpr_read_b32 v007, a163 + buffer_store_short v003, v004, s[16:19], 0 offen + v_mul_f32_e32 v003, v209, v050 ;.loc 1 401 0 + v_add_u32_e32 v004, v250, v213 + v_mul_f32_e32 v003, v007, v003 + v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v003, v004, s[16:19], 0 offen + v_lshlrev_b32_e32 v209, 2, v204 ;.loc 3 170 8 + buffer_load_dword v003, v209, s[24:27], 0 offen + v_accvgpr_write_b32 a140, v192 + v_accvgpr_write_b32 a141, v193 + v_accvgpr_write_b32 a142, v194 + v_accvgpr_write_b32 a143, v195 + buffer_load_dwordx4 v004 v005 v006 v007, v032, s[20:23], 0 offen ;.loc 3 166 8 + buffer_load_dwordx4 v040 v041 v042 v043, v037, s[20:23], 0 offen + buffer_load_dwordx4 v198 v199 v200 v201, v044, s[20:23], 0 offen + buffer_load_dwordx4 v194 v195 v196 v197, v046, s[20:23], 0 offen + v_lshlrev_b32_e32 v208, 2, v203 ;.loc 3 170 8 + buffer_load_dword v008, v208, s[24:27], 0 offen + v_lshlrev_b32_e32 v206, 2, v202 + buffer_load_dword v009, v206, s[24:27], 0 offen + v_or_b32_e32 v205, 0xb0, v254 ;.loc 1 402 0 + v_lshlrev_b32_e32 v207, 2, v205 ;.loc 3 170 8 + buffer_load_dword v010, v207, s[24:27], 0 offen + v_cmp_gt_i32_e64 s[10:11], s35, v204 ;.loc 1 402 0 + v_accvgpr_read_b32 v044, a156 + v_add_u32_e32 v015, v204, v035 + v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + v_accvgpr_read_b32 v045, a157 + v_accvgpr_read_b32 v046, a158 + v_accvgpr_read_b32 v047, a159 + v_cmp_gt_i32_e32 vcc, s35, v205 ;.loc 1 402 0 + v_accvgpr_write_b32 a120, v108 + v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[48:55], v112 v113 v114 v115 ;.loc 1 398 0 + s_waitcnt vmcnt(6) ;.loc 1 402 0 + v_mul_f32_e32 v014, v004, v003 + v_mul_f32_e32 v014, v044, v014 + v_cvt_pk_bf16_f32 v014, v014, s0 + buffer_store_short v014, v015, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v014, v005, v003 ;.loc 1 402 0 + v_add_u32_e32 v015, v204, v036 + v_mul_f32_e32 v014, v045, v014 + v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v006, v003 ;.loc 1 402 0 + v_add_u32_e32 v015, v204, v034 + v_mul_f32_e32 v014, v046, v014 + v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v007, v003 ;.loc 1 402 0 + v_add_u32_e32 v015, v204, v002 + v_mul_f32_e32 v014, v047, v014 + v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + s_waitcnt vmcnt(6) ;.loc 1 402 0 + v_mul_f32_e32 v014, v004, v008 + v_add_u32_e32 v015, v203, v035 + v_mul_f32_e32 v014, v148, v014 + v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v005, v008 ;.loc 1 402 0 + v_add_u32_e32 v015, v203, v036 + v_mul_f32_e32 v014, v149, v014 + v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v006, v008 ;.loc 1 402 0 + v_add_u32_e32 v015, v203, v034 + v_mul_f32_e32 v014, v150, v014 + v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v007, v008 ;.loc 1 402 0 + v_add_u32_e32 v015, v203, v002 + v_mul_f32_e32 v014, v151, v014 + v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_cmp_gt_i32_e64 s[0:1], s35, v202 ;.loc 1 402 0 + s_waitcnt vmcnt(9) + v_mul_f32_e32 v014, v004, v009 + v_add_u32_e32 v015, v202, v035 + v_mul_f32_e32 v014, v152, v014 + v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v005, v009 ;.loc 1 402 0 + v_add_u32_e32 v015, v202, v036 + v_mul_f32_e32 v014, v153, v014 + v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v006, v009 ;.loc 1 402 0 + v_add_u32_e32 v015, v202, v034 + v_mul_f32_e32 v014, v154, v014 + v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + v_mul_f32_e32 v014, v007, v009 ;.loc 1 402 0 + v_add_u32_e32 v015, v202, v002 + v_mul_f32_e32 v014, v155, v014 + v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 + buffer_store_short v014, v015, s[16:19], 0 offen + s_waitcnt vmcnt(12) ;.loc 1 402 0 + v_mul_f32_e32 v004, v004, v010 + v_add_u32_e32 v014, v205, v035 + v_mul_f32_e32 v004, v156, v004 + v_cndmask_b32_e32 v014, v038, v014, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + buffer_store_short v004, v014, s[16:19], 0 offen + v_mul_f32_e32 v004, v005, v010 ;.loc 1 402 0 + v_add_u32_e32 v005, v205, v036 + v_mul_f32_e32 v004, v157, v004 + v_cndmask_b32_e32 v005, v038, v005, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 + buffer_store_short v004, v005, s[16:19], 0 offen + v_mul_f32_e32 v004, v006, v010 ;.loc 1 402 0 + v_add_u32_e32 v005, v205, v034 + v_mul_f32_e32 v004, v158, v004 + v_cndmask_b32_e32 v005, v038, v005, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 + buffer_store_short v004, v005, s[16:19], 0 offen + v_mul_f32_e32 v004, v007, v010 ;.loc 1 402 0 + v_add_u32_e32 v002, v205, v002 + v_mul_f32_e32 v004, v159, v004 + v_cndmask_b32_e32 v002, v038, v002, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 3 175 8 + buffer_store_short v004, v002, s[16:19], 0 offen + v_mul_f32_e32 v002, v040, v003 ;.loc 1 402 0 + v_add_u32_e32 v004, v204, v001 + v_mul_f32_e32 v002, v160, v002 + v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v041, v003 ;.loc 1 402 0 + v_add_u32_e32 v004, v204, v000 + v_mul_f32_e32 v002, v161, v002 + v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v042, v003 ;.loc 1 402 0 + v_add_u32_e32 v004, v204, v011 + v_mul_f32_e32 v002, v162, v002 + v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v043, v003 ;.loc 1 402 0 + v_add_u32_e32 v004, v204, v012 + v_mul_f32_e32 v002, v163, v002 + v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v040, v008 ;.loc 1 402 0 + v_add_u32_e32 v004, v203, v001 + v_mul_f32_e32 v002, v164, v002 + v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v041, v008 ;.loc 1 402 0 + v_add_u32_e32 v004, v203, v000 + v_mul_f32_e32 v002, v165, v002 + v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v042, v008 ;.loc 1 402 0 + v_add_u32_e32 v004, v203, v011 + v_mul_f32_e32 v002, v166, v002 + v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v043, v008 ;.loc 1 402 0 + v_add_u32_e32 v004, v203, v012 + v_mul_f32_e32 v002, v167, v002 + v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v040, v009 ;.loc 1 402 0 + v_add_u32_e32 v004, v202, v001 + v_mul_f32_e32 v002, v168, v002 + v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v041, v009 ;.loc 1 402 0 + v_add_u32_e32 v004, v202, v000 + v_mul_f32_e32 v002, v169, v002 + v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v042, v009 ;.loc 1 402 0 + v_add_u32_e32 v004, v202, v011 + v_mul_f32_e32 v002, v170, v002 + v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v043, v009 ;.loc 1 402 0 + v_add_u32_e32 v004, v202, v012 + v_mul_f32_e32 v002, v171, v002 + v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 + buffer_store_short v002, v004, s[16:19], 0 offen + v_mul_f32_e32 v002, v040, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v001 + v_mul_f32_e32 v002, v172, v002 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v002, v001, s[16:19], 0 offen + v_mul_f32_e32 v001, v041, v010 ;.loc 1 402 0 + v_add_u32_e32 v000, v205, v000 + v_mul_f32_e32 v001, v173, v001 + v_cndmask_b32_e32 v000, v038, v000, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v000, 1, v000 ;.loc 3 175 8 + buffer_store_short v001, v000, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v011 + v_mul_f32_e32 v000, v174, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v012 + v_mul_f32_e32 v000, v175, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v198, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v013 + v_mul_f32_e32 v000, v176, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v199, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v230 + v_mul_f32_e32 v000, v177, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v200, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v231 + v_mul_f32_e32 v000, v178, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v201, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v232 + v_mul_f32_e32 v000, v179, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v198, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v013 + v_mul_f32_e32 v000, v180, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v199, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v230 + v_mul_f32_e32 v000, v181, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v200, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v231 + v_mul_f32_e32 v000, v182, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v201, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v232 + v_mul_f32_e32 v000, v183, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v198, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v013 + v_mul_f32_e32 v000, v184, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v199, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v230 + v_mul_f32_e32 v000, v185, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v200, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v231 + v_mul_f32_e32 v000, v186, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v201, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v232 + v_mul_f32_e32 v000, v187, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v198, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v013 + v_mul_f32_e32 v000, v188, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v199, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v230 + v_mul_f32_e32 v000, v189, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v200, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v231 + v_mul_f32_e32 v000, v190, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v201, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v232 + v_mul_f32_e32 v000, v191, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v194, v003 ;.loc 1 402 0 + v_accvgpr_read_b32 v004, a152 + v_add_u32_e32 v001, v204, v210 + v_mul_f32_e32 v000, v004, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a153 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v195, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v211 + v_mul_f32_e32 v000, v005, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v006, a154 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v196, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v212 + v_mul_f32_e32 v000, v006, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v007, a155 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v197, v003 ;.loc 1 402 0 + v_add_u32_e32 v001, v204, v213 + v_mul_f32_e32 v000, v007, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v194, v008 ;.loc 1 402 0 + v_accvgpr_read_b32 v002, a148 + v_add_u32_e32 v001, v203, v210 + v_mul_f32_e32 v000, v002, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v003, a149 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v195, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v211 + v_mul_f32_e32 v000, v003, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v004, a150 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v196, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v212 + v_mul_f32_e32 v000, v004, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a151 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v197, v008 ;.loc 1 402 0 + v_add_u32_e32 v001, v203, v213 + v_mul_f32_e32 v000, v005, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v194, v009 ;.loc 1 402 0 + v_accvgpr_read_b32 v002, a144 + v_add_u32_e32 v001, v202, v210 + v_mul_f32_e32 v000, v002, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v003, a145 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v195, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v211 + v_mul_f32_e32 v000, v003, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v004, a146 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v196, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v212 + v_mul_f32_e32 v000, v004, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a147 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v197, v009 ;.loc 1 402 0 + v_add_u32_e32 v001, v202, v213 + v_mul_f32_e32 v000, v005, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v194, v010 ;.loc 1 402 0 + v_accvgpr_read_b32 v002, a140 + v_add_u32_e32 v001, v205, v210 + v_mul_f32_e32 v000, v002, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v003, a141 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v195, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v211 + v_mul_f32_e32 v000, v003, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v004, a142 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v196, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v212 + v_mul_f32_e32 v000, v004, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v005, a143 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v197, v010 ;.loc 1 402 0 + v_add_u32_e32 v001, v205, v213 + v_mul_f32_e32 v000, v005, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_or_b32_e32 v000, 0x80, v253 ;.loc 1 403 0 + v_lshlrev_b32_e32 v008, 2, v000 ;.loc 3 166 8 + buffer_load_dwordx4 v004 v005 v006 v007, v008, s[20:23], 0 offen + v_or_b32_e32 v015, 0xb0, v253 ;.loc 1 403 0 + v_lshlrev_b32_e32 v039, 2, v015 ;.loc 3 166 8 + v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[112:119], a[24:31], v116 v117 v118 v119 ;.loc 1 398 0 + v_or_b32_e32 v009, 0x90, v253 ;.loc 1 403 0 + v_lshlrev_b32_e32 v010, 2, v009 ;.loc 3 166 8 + buffer_load_dwordx4 v032 v033 v034 v035, v010, s[20:23], 0 offen + v_mul_lo_u32 v000, v000, s35 ;.loc 1 403 0 + v_add_u32_e32 v002, v254, v000 + v_or_b32_e32 v013, 0xa0, v253 + v_cndmask_b32_e64 v002, v038, v002, s[2:3] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[112:119], a[32:39], v120 v121 v122 v123 ;.loc 1 398 0 + v_lshlrev_b32_e32 v014, 2, v013 ;.loc 3 166 8 + v_lshlrev_b32_e32 v002, 1, v002 ;.loc 3 175 8 + buffer_load_dwordx4 v134 v135 v136 v137, v014, s[20:23], 0 offen ;.loc 3 166 8 + v_mul_lo_u32 v013, v013, s35 ;.loc 1 403 0 + v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[112:119], a[40:47], v124 v125 v126 v127 ;.loc 1 398 0 + v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[112:119], a[48:55], v128 v129 v130 v131 + s_nop 6 ;.loc 3 166 8 + buffer_load_dwordx4 v130 v131 v132 v133, v039, s[20:23], 0 offen + buffer_load_dword v036, v051, s[24:27], 0 offen ;.loc 3 170 8 + buffer_load_dword v037, v064, s[24:27], 0 offen + buffer_load_dword v040, v065, s[24:27], 0 offen + buffer_load_dword v041, v255, s[24:27], 0 offen + s_waitcnt vmcnt(3) ;.loc 1 403 0 + v_mul_f32_e32 v001, v004, v036 + v_mfma_f32_16x16x128_f8f6f4 a[136:139], a[88:95], a[24:31], a[188:191] ;.loc 1 398 0 + v_mfma_f32_16x16x128_f8f6f4 a[132:135], a[88:95], a[32:39], a[184:187] + s_nop 10 + v_accvgpr_read_b32 v042, a136 + v_mul_f32_e32 v001, v042, v001 ;.loc 1 403 0 + v_cvt_pk_bf16_f32 v001, v001, s0 + v_accvgpr_read_b32 v043, a137 + buffer_store_short v001, v002, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v001, v005, v036 ;.loc 1 403 0 + v_mul_f32_e32 v001, v043, v001 + v_cvt_pk_bf16_f32 v002, v001, s0 + v_or_b32_e32 v001, 0x81, v253 + v_mul_lo_u32 v001, v001, s35 + v_add_u32_e32 v003, v254, v001 + v_cndmask_b32_e64 v003, v038, v003, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v003, 1, v003 ;.loc 3 175 8 + v_accvgpr_read_b32 v044, a138 + buffer_store_short v002, v003, s[16:19], 0 offen + v_mul_f32_e32 v002, v006, v036 ;.loc 1 403 0 + v_mul_f32_e32 v002, v044, v002 + v_cvt_pk_bf16_f32 v003, v002, s0 + v_or_b32_e32 v002, 0x82, v253 + v_mul_lo_u32 v002, v002, s35 + v_add_u32_e32 v011, v254, v002 + v_cndmask_b32_e64 v011, v038, v011, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v011, 1, v011 ;.loc 3 175 8 + v_accvgpr_read_b32 v045, a139 + buffer_store_short v003, v011, s[16:19], 0 offen + v_mul_f32_e32 v003, v007, v036 ;.loc 1 403 0 + v_mul_f32_e32 v003, v045, v003 + v_cvt_pk_bf16_f32 v011, v003, s0 + v_or_b32_e32 v003, 0x83, v253 + v_mul_lo_u32 v003, v003, s35 + v_add_u32_e32 v012, v254, v003 + v_cndmask_b32_e64 v012, v038, v012, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + buffer_store_short v011, v012, s[16:19], 0 offen + s_waitcnt vmcnt(6) ;.loc 1 403 0 + v_mul_f32_e32 v011, v004, v037 + v_accvgpr_read_b32 v042, a132 + v_add_u32_e32 v012, v252, v000 + v_mul_f32_e32 v011, v042, v011 + v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v043, a133 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v005, v037 ;.loc 1 403 0 + v_add_u32_e32 v012, v252, v001 + v_mfma_f32_16x16x128_f8f6f4 a[124:127], a[88:95], a[40:47], a[180:183] ;.loc 1 398 0 + v_mul_f32_e32 v011, v043, v011 ;.loc 1 403 0 + v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v044, a134 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v006, v037 ;.loc 1 403 0 + v_add_u32_e32 v012, v252, v002 + v_mul_f32_e32 v011, v044, v011 + v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v045, a135 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v007, v037 ;.loc 1 403 0 + v_add_u32_e32 v012, v252, v003 + v_mul_f32_e32 v011, v045, v011 + v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + buffer_store_short v011, v012, s[16:19], 0 offen + s_waitcnt vmcnt(9) ;.loc 1 403 0 + v_mul_f32_e32 v011, v004, v040 + v_accvgpr_read_b32 v042, a124 + v_add_u32_e32 v012, v251, v000 + v_mul_f32_e32 v011, v042, v011 + v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v043, a125 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v005, v040 ;.loc 1 403 0 + v_add_u32_e32 v012, v251, v001 + v_mul_f32_e32 v011, v043, v011 + v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v044, a126 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v006, v040 ;.loc 1 403 0 + v_add_u32_e32 v012, v251, v002 + v_mul_f32_e32 v011, v044, v011 + v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + v_accvgpr_read_b32 v045, a127 + buffer_store_short v011, v012, s[16:19], 0 offen + v_mul_f32_e32 v011, v007, v040 ;.loc 1 403 0 + v_add_u32_e32 v012, v251, v003 + v_mul_f32_e32 v011, v045, v011 + v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 + buffer_store_short v011, v012, s[16:19], 0 offen + s_waitcnt vmcnt(12) ;.loc 1 403 0 + v_mul_f32_e32 v004, v004, v041 + v_add_u32_e32 v011, v250, v000 + v_mul_f32_e32 v004, v138, v004 + v_cndmask_b32_e64 v011, v038, v011, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v011, 1, v011 ;.loc 3 175 8 + buffer_store_short v004, v011, s[16:19], 0 offen + v_mul_f32_e32 v004, v005, v041 ;.loc 1 403 0 + v_add_u32_e32 v005, v250, v001 + v_mul_f32_e32 v004, v139, v004 + v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[96:103], a[24:31], v084 v085 v086 v087 ;.loc 1 398 0 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 + buffer_store_short v004, v005, s[16:19], 0 offen + v_mul_f32_e32 v004, v006, v041 ;.loc 1 403 0 + v_add_u32_e32 v005, v250, v002 + v_mul_f32_e32 v004, v140, v004 + v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 + buffer_store_short v004, v005, s[16:19], 0 offen + v_mul_f32_e32 v004, v007, v041 ;.loc 1 403 0 + v_add_u32_e32 v005, v250, v003 + v_mul_f32_e32 v004, v141, v004 + v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 + buffer_store_short v004, v005, s[16:19], 0 offen + v_mul_f32_e32 v004, v032, v036 ;.loc 1 403 0 + v_mul_f32_e32 v004, v084, v004 + v_cvt_pk_bf16_f32 v005, v004, s0 + v_mul_lo_u32 v004, v009, s35 + v_add_u32_e32 v006, v254, v004 + v_cndmask_b32_e64 v006, v038, v006, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v006, 1, v006 ;.loc 3 175 8 + buffer_store_short v005, v006, s[16:19], 0 offen + v_mul_f32_e32 v005, v033, v036 ;.loc 1 403 0 + v_mul_f32_e32 v005, v085, v005 + v_cvt_pk_bf16_f32 v006, v005, s0 + v_or_b32_e32 v005, 0x91, v253 + v_mul_lo_u32 v005, v005, s35 + v_add_u32_e32 v007, v254, v005 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0x92, v253 ;.loc 1 403 0 + v_mul_lo_u32 v011, v007, s35 + v_mul_f32_e32 v006, v034, v036 + v_add_u32_e32 v007, v254, v011 + v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[96:103], a[32:39], v088 v089 v090 v091 ;.loc 1 398 0 + v_mul_f32_e32 v006, v086, v006 ;.loc 1 403 0 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0x93, v253 ;.loc 1 403 0 + v_mul_lo_u32 v012, v007, s35 + v_mul_f32_e32 v006, v035, v036 + v_add_u32_e32 v007, v254, v012 + v_mul_f32_e32 v006, v087, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v032, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v004 + v_mul_f32_e32 v006, v088, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v033, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v005 + v_mul_f32_e32 v006, v089, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[96:103], a[40:47], v092 v093 v094 v095 ;.loc 1 398 0 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v034, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v011 + v_mul_f32_e32 v006, v090, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v035, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v012 + v_mul_f32_e32 v006, v091, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v032, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v004 + v_mul_f32_e32 v006, v092, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v033, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v005 + v_mul_f32_e32 v006, v093, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[96:103], a[48:55], v096 v097 v098 v099 ;.loc 1 398 0 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v034, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v011 + v_mul_f32_e32 v006, v094, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v035, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v012 + v_mul_f32_e32 v006, v095, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v032, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v004 + v_mul_f32_e32 v006, v096, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v033, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v005 + v_mul_f32_e32 v006, v097, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[104:111], a[24:31], v100 v101 v102 v103 ;.loc 1 398 0 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v034, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v011 + v_mul_f32_e32 v006, v098, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v035, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v012 + v_mul_f32_e32 v006, v099, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v134, v036 ;.loc 1 403 0 + v_add_u32_e32 v007, v254, v013 + v_mul_f32_e32 v006, v100, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xa1, v253 ;.loc 1 403 0 + v_mul_lo_u32 v094, v007, s35 + v_mul_f32_e32 v006, v135, v036 + v_add_u32_e32 v007, v254, v094 + v_mul_f32_e32 v006, v101, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xa2, v253 ;.loc 1 403 0 + v_mul_lo_u32 v095, v007, s35 + v_mul_f32_e32 v006, v136, v036 + v_add_u32_e32 v007, v254, v095 + v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[104:111], a[32:39], v104 v105 v106 v107 ;.loc 1 398 0 + v_mul_f32_e32 v006, v102, v006 ;.loc 1 403 0 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xa3, v253 ;.loc 1 403 0 + v_mul_lo_u32 v096, v007, s35 + v_mul_f32_e32 v006, v137, v036 + v_add_u32_e32 v007, v254, v096 + v_mul_f32_e32 v006, v103, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v134, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v013 + v_mul_f32_e32 v006, v104, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v135, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v094 + v_mul_f32_e32 v006, v105, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v136, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v095 + v_mul_f32_e32 v006, v106, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v137, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v096 + v_mul_f32_e32 v006, v107, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v134, v040 ;.loc 1 403 0 + v_accvgpr_read_b32 v032, a120 + v_add_u32_e32 v007, v251, v013 + v_mul_f32_e32 v006, v032, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + v_accvgpr_read_b32 v033, a121 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v135, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v094 + v_mul_f32_e32 v006, v033, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + v_accvgpr_read_b32 v034, a122 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v136, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v095 + v_mul_f32_e32 v006, v034, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + v_accvgpr_read_b32 v035, a123 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v137, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v096 + v_mul_f32_e32 v006, v035, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v134, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v013 + v_mul_f32_e32 v006, v108, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v135, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v094 + v_mul_f32_e32 v006, v109, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v136, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v095 + v_mul_f32_e32 v006, v110, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v137, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v096 + v_mul_f32_e32 v006, v111, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + v_mul_lo_u32 v044, v015, s35 ;.loc 1 403 0 + buffer_store_short v006, v007, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v006, v130, v036 ;.loc 1 403 0 + v_add_u32_e32 v007, v254, v044 + v_mul_f32_e32 v006, v112, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xb1, v253 ;.loc 1 403 0 + v_mul_lo_u32 v045, v007, s35 + v_mul_f32_e32 v006, v131, v036 + v_add_u32_e32 v007, v254, v045 + v_mul_f32_e32 v006, v113, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xb2, v253 ;.loc 1 403 0 + v_mul_lo_u32 v080, v007, s35 + v_mul_f32_e32 v006, v132, v036 + v_add_u32_e32 v007, v254, v080 + v_mul_f32_e32 v006, v114, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_or_b32_e32 v007, 0xb3, v253 ;.loc 1 403 0 + v_mul_lo_u32 v081, v007, s35 + v_mul_f32_e32 v006, v133, v036 + v_add_u32_e32 v007, v254, v081 + v_mul_f32_e32 v006, v115, v006 + v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v130, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v044 + v_mul_f32_e32 v006, v116, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v131, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v045 + v_mul_f32_e32 v006, v117, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v132, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v080 + v_mul_f32_e32 v006, v118, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v133, v037 ;.loc 1 403 0 + v_add_u32_e32 v007, v252, v081 + v_mul_f32_e32 v006, v119, v006 + v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v130, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v044 + v_mul_f32_e32 v006, v120, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v131, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v045 + v_mul_f32_e32 v006, v121, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v132, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v080 + v_mul_f32_e32 v006, v122, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v133, v040 ;.loc 1 403 0 + v_add_u32_e32 v007, v251, v081 + v_mul_f32_e32 v006, v123, v006 + v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v130, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v044 + v_mul_f32_e32 v006, v124, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v131, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v045 + v_mul_f32_e32 v006, v125, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v132, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v080 + v_mul_f32_e32 v006, v126, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + v_mul_f32_e32 v006, v133, v041 ;.loc 1 403 0 + v_add_u32_e32 v007, v250, v081 + v_mul_f32_e32 v006, v127, v006 + v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 + v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 + buffer_store_short v006, v007, s[16:19], 0 offen + buffer_load_dwordx4 v006 v007 v008 v009, v008, s[20:23], 0 offen ;.loc 3 166 8 + s_nop 0 + buffer_load_dwordx4 v040 v041 v042 v043, v010, s[20:23], 0 offen + buffer_load_dwordx4 v070 v071 v072 v073, v014, s[20:23], 0 offen + buffer_load_dwordx4 v034 v035 v036 v037, v039, s[20:23], 0 offen + buffer_load_dword v015, v209, s[24:27], 0 offen ;.loc 3 170 8 + buffer_load_dword v032, v208, s[24:27], 0 offen + buffer_load_dword v033, v206, s[24:27], 0 offen + buffer_load_dword v046, v207, s[24:27], 0 offen + v_mfma_f32_16x16x128_f8f6f4 a[24:27], a[88:95], a[56:63], a[176:179] ;.loc 1 399 0 + v_add_u32_e32 v014, v204, v000 ;.loc 1 404 0 + v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + s_waitcnt vmcnt(3) ;.loc 1 404 0 + v_mul_f32_e32 v010, v006, v015 + s_nop 6 + v_accvgpr_read_b32 v051, a27 + v_accvgpr_read_b32 v048, a24 + v_mul_f32_e32 v010, v048, v010 + v_cvt_pk_bf16_f32 v010, v010, s0 + v_mfma_f32_16x16x128_f8f6f4 a[20:23], a[88:95], a[64:71], a[128:131] ;.loc 1 399 0 + v_accvgpr_read_b32 v049, a25 + buffer_store_short v010, v014, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v010, v007, v015 ;.loc 1 404 0 + v_add_u32_e32 v014, v204, v001 + v_mul_f32_e32 v010, v049, v010 + v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v050, a26 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v008, v015 ;.loc 1 404 0 + v_add_u32_e32 v014, v204, v002 + v_mul_f32_e32 v010, v050, v010 + v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v009, v015 ;.loc 1 404 0 + v_add_u32_e32 v014, v204, v003 + v_mul_f32_e32 v010, v051, v010 + v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v051, a23 + buffer_store_short v010, v014, s[16:19], 0 offen + s_waitcnt vmcnt(6) ;.loc 1 404 0 + v_mul_f32_e32 v010, v006, v032 + v_accvgpr_read_b32 v048, a20 + v_add_u32_e32 v014, v203, v000 + v_mul_f32_e32 v010, v048, v010 + v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_mfma_f32_16x16x128_f8f6f4 a[28:31], a[88:95], a[72:79], a[192:195] ;.loc 1 399 0 + v_accvgpr_read_b32 v049, a21 + buffer_store_short v010, v014, s[16:19], 0 offen ;.loc 3 175 8 + v_mul_f32_e32 v010, v007, v032 ;.loc 1 404 0 + v_add_u32_e32 v014, v203, v001 + v_mul_f32_e32 v010, v049, v010 + v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v050, a22 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v008, v032 ;.loc 1 404 0 + v_add_u32_e32 v014, v203, v002 + v_mul_f32_e32 v010, v050, v010 + v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v009, v032 ;.loc 1 404 0 + v_add_u32_e32 v014, v203, v003 + v_mul_f32_e32 v010, v051, v010 + v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a31 + buffer_store_short v010, v014, s[16:19], 0 offen + s_waitcnt vmcnt(9) ;.loc 1 404 0 + v_mul_f32_e32 v010, v006, v033 + v_accvgpr_read_b32 v074, a28 + v_add_u32_e32 v014, v202, v000 + v_mul_f32_e32 v010, v074, v010 + v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[88:95], a[80:87], v016 v017 v018 v019 ;.loc 1 399 0 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v075, a29 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v007, v033 ;.loc 1 404 0 + v_add_u32_e32 v014, v202, v001 + v_mul_f32_e32 v010, v075, v010 + v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_accvgpr_read_b32 v076, a30 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v008, v033 ;.loc 1 404 0 + v_add_u32_e32 v014, v202, v002 + v_mul_f32_e32 v010, v076, v010 + v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + buffer_store_short v010, v014, s[16:19], 0 offen + v_mul_f32_e32 v010, v009, v033 ;.loc 1 404 0 + v_add_u32_e32 v014, v202, v003 + s_waitcnt vmcnt(11) + v_mul_f32_e32 v006, v006, v046 + v_add_u32_e32 v000, v205, v000 + v_mul_f32_e32 v010, v077, v010 + v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 + v_mul_f32_e32 v006, v016, v006 ;.loc 1 404 0 + v_cndmask_b32_e32 v000, v038, v000, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 + v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v000, 1, v000 ;.loc 3 175 8 + buffer_store_short v010, v014, s[16:19], 0 offen + buffer_store_short v006, v000, s[16:19], 0 offen + v_mul_f32_e32 v000, v007, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v001 + v_mul_f32_e32 v000, v017, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[96:103], a[56:63], v020 v021 v022 v023 ;.loc 1 399 0 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v008, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v002 + v_mul_f32_e32 v000, v018, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v009, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v003 + v_mul_f32_e32 v000, v019, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v040, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v004 + v_mul_f32_e32 v000, v020, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v005 + v_mul_f32_e32 v000, v021, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[96:103], a[64:71], v024 v025 v026 v027 ;.loc 1 399 0 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v011 + v_mul_f32_e32 v000, v022, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v012 + v_mul_f32_e32 v000, v023, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v040, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v004 + v_mul_f32_e32 v000, v024, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v005 + v_mul_f32_e32 v000, v025, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[96:103], a[72:79], v028 v029 v030 v031 ;.loc 1 399 0 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v011 + v_mul_f32_e32 v000, v026, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v012 + v_mul_f32_e32 v000, v027, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v040, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v004 + v_mul_f32_e32 v000, v028, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v005 + v_mul_f32_e32 v000, v029, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v011 + v_mul_f32_e32 v000, v030, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v012 + v_mul_f32_e32 v000, v031, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a19 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v040, v046 ;.loc 1 404 0 + v_accvgpr_read_b32 v074, a16 + v_add_u32_e32 v001, v205, v004 + v_mul_f32_e32 v000, v074, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v075, a17 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v041, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v005 + v_mul_f32_e32 v000, v075, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v076, a18 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v042, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v011 + v_mul_f32_e32 v000, v076, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v043, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v012 + v_mul_f32_e32 v000, v077, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a15 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v070, v015 ;.loc 1 404 0 + v_accvgpr_read_b32 v074, a12 + v_add_u32_e32 v001, v204, v013 + v_mul_f32_e32 v000, v074, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v075, a13 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v071, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v094 + v_mul_f32_e32 v000, v075, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v076, a14 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v072, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v095 + v_mul_f32_e32 v000, v076, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v073, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v096 + v_mul_f32_e32 v000, v077, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a11 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v070, v032 ;.loc 1 404 0 + v_accvgpr_read_b32 v074, a8 + v_add_u32_e32 v001, v203, v013 + v_mul_f32_e32 v000, v074, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v075, a9 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v071, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v094 + v_mul_f32_e32 v000, v075, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v076, a10 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v072, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v095 + v_mul_f32_e32 v000, v076, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v073, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v096 + v_mul_f32_e32 v000, v077, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a7 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v070, v033 ;.loc 1 404 0 + v_accvgpr_read_b32 v074, a4 + v_add_u32_e32 v001, v202, v013 + v_mul_f32_e32 v000, v074, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v075, a5 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v071, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v094 + v_mul_f32_e32 v000, v075, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v076, a6 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v072, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v095 + v_mul_f32_e32 v000, v076, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v073, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v096 + v_mul_f32_e32 v000, v077, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v079, a3 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v070, v046 ;.loc 1 404 0 + v_accvgpr_read_b32 v076, a0 + v_add_u32_e32 v001, v205, v013 + v_mul_f32_e32 v000, v076, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v077, a1 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v071, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v094 + v_mul_f32_e32 v000, v077, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[112:119], a[56:63], v052 v053 v054 v055 ;.loc 1 399 0 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + v_accvgpr_read_b32 v078, a2 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v072, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v095 + v_mul_f32_e32 v000, v078, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v073, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v096 + v_mul_f32_e32 v000, v079, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v034, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v044 + v_mul_f32_e32 v000, v052, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v035, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v045 + v_mul_f32_e32 v000, v053, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v036, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v080 + v_mul_f32_e32 v000, v054, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v037, v015 ;.loc 1 404 0 + v_add_u32_e32 v001, v204, v081 + v_mul_f32_e32 v000, v055, v000 + v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v034, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v044 + v_mul_f32_e32 v000, v142, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v035, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v045 + v_mul_f32_e32 v000, v143, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v036, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v080 + v_mul_f32_e32 v000, v144, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v037, v032 ;.loc 1 404 0 + v_add_u32_e32 v001, v203, v081 + v_mul_f32_e32 v000, v145, v000 + v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v034, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v044 + v_mul_f32_e32 v000, v056, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v035, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v045 + v_mul_f32_e32 v000, v057, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v036, v033 ;.loc 1 404 0 + v_add_u32_e32 v001, v202, v080 + v_mul_f32_e32 v000, v058, v000 + v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v037, v033 ;.loc 1 404 0 + v_add_u32_e32 v011, v202, v081 + v_mul_f32_e32 v000, v059, v000 + v_cndmask_b32_e64 v001, v038, v011, s[0:1] ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v006, v034, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v044 + v_mul_f32_e32 v000, v060, v006 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v035, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v045 + v_mul_f32_e32 v000, v061, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v036, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v080 + v_mul_f32_e32 v000, v062, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + v_mul_f32_e32 v000, v037, v046 ;.loc 1 404 0 + v_add_u32_e32 v001, v205, v081 + v_mul_f32_e32 v000, v063, v000 + v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 + v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 + v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 + buffer_store_short v000, v001, s[16:19], 0 offen + s_endpgm ;.loc 1 110 0 +.Lfunc_end0: + .size kernel_gemm_0, .Lfunc_end0-kernel_gemm_0 + .cfi_endproc + .set kernel_gemm_0.num_vgpr, 256 + .set kernel_gemm_0.num_agpr, 256 + .set kernel_gemm_0.numbered_sgpr, 61 + .set kernel_gemm_0.num_named_barrier, 0 + .set kernel_gemm_0.private_seg_size, 68 + .set kernel_gemm_0.uses_vcc, 1 + .set kernel_gemm_0.uses_flat_scratch, 0 + .set kernel_gemm_0.has_dyn_sized_stack, 0 + .set kernel_gemm_0.has_recursion, 0 + .set kernel_gemm_0.has_indirect_call, 0 + .p2alignl 6, 3212836864 + .fill 256, 4, 3212836864 + .section .AMDGPU.gpr_maximums,"",@progbits + .set amdgpu.max_num_vgpr, 0 + .set amdgpu.max_num_agpr, 0 + .set amdgpu.max_num_sgpr, 0 + .set amdgpu.max_num_named_barrier, 0 + .text + .section .debug_abbrev,"",@progbits + .byte 1 + .byte 17 + .byte 0 + .byte 37 + .byte 14 + .byte 19 + .byte 5 + .byte 3 + .byte 14 + .byte 16 + .byte 23 + .byte 17 + .byte 1 + .byte 18 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .section .debug_info,"",@progbits +... + .end_amdgpu_metadata + .section .debug_line,"",@progbits +.Lline_table_start0: From a847939c10bb39054339bfef3b47603c6bd0fa53 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 09:49:17 +0000 Subject: [PATCH 082/118] Ride K-step on scalar soffset in preshuffle buffer_load (share vaddr VGPR) Split the preshuffle global offset into a per-lane vaddr part (loop-invariant) and the wave-uniform K-step term (tk*tile_row*TK). The K-step now rides the scalar soffset of buffer_load_dwordx4 (... s25 offen lds) via readfirstlane, instead of being recomputed into each lane's vaddr every K tile -- mirrors fp8_gemm_4wave's s33 usage. vaddr becomes loop-invariant and is shared across K tiles. Effect (8192x8192x8192): main loop 559->543 insts, the 16 v_add_lshl_u32 address calcs drop to 0, VGPR 424->416, ~1339->~1348 TFLOPS, cos 0.99999. Only affects the PRESHUFFLE path; plain path unchanged. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/hgemm_splitk.py | 47 +++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 6978676cf..db04b9e91 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -370,6 +370,21 @@ def preshuffle_off_split(row, k_offset, within, tile_row): tk = k_offset // _PRESH_TK invariant = (tm * _K_TILES_SH * tile_row + mi) * _PRESH_TK + within return invariant + tk * (tile_row * _PRESH_TK) + + def preshuffle_vaddr_soffset(row, k_offset, within, tile_row): + # Split the preshuffle offset into a per-lane vaddr part (loop-invariant) + # and a wave-uniform soffset part (the K-step term tk*tile_row*TK). The + # soffset is the same for all lanes (depends only on k_offset), so it can + # ride the scalar soffset of buffer_load instead of being recomputed into + # each lane's vaddr every K tile (mirrors fp8_gemm_4wave's s33 usage). + row = fx.Index(row) + within = fx.Index(within) + tm = row // tile_row + mi = row % tile_row + vaddr = (tm * _K_TILES_SH * tile_row + mi) * _PRESH_TK + within + tk = fx.Index(k_offset) // _PRESH_TK + soff = tk * (tile_row * _PRESH_TK) + return vaddr, soff C_ = GTensor(C, dtype=dtype_, shape=(-1, n)) if const_expr(HAS_BIAS): BIAS_ = GTensor(BIAS, dtype=dtype_, shape=(n,)) @@ -624,6 +639,20 @@ def buffer_load_lds_inline(rsrc, lds_ptr, global_offset): raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") llvm.InlineAsmOp(None, [lds_ptr, global_offset, rsrc], asm, "s,v,s", has_side_effects=True) + def buffer_load_lds_inline_soff(rsrc, lds_ptr, vaddr_off, soffset): + # Like buffer_load_lds_inline but the wave-uniform K-step rides the scalar + # soffset ($3) instead of being folded into the per-lane vaddr ($1). Lets + # vaddr stay loop-invariant (shared VGPR across K tiles). + if const_expr(DMA_BYTES == 16): + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, $3 offen lds" + elif const_expr(DMA_BYTES == 8): + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, $3 offen lds" + elif const_expr(DMA_BYTES == 4): + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, $3 offen lds" + else: + raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") + llvm.InlineAsmOp(None, [lds_ptr, vaddr_off, rsrc, soffset], asm, "s,v,s,s", has_side_effects=True) + def get_async_lds_ptr(lds_tensor, lds_stage, i): lds_offset = lds_tensor.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES lds_base = memref.extract_aligned_pointer_as_index(lds_tensor.memptr) + lds_offset @@ -668,11 +697,14 @@ def ldg_sts_a_async_one(k_offset, lds_stage, i): fx.Index(0), ) if const_expr(PRESHUFFLE): - global_offset = preshuffle_off_split(safe_row_idx, fx.Index(k_offset), a_within, BLOCK_M) * DTYPE_BYTES + vaddr_e, soff_e = preshuffle_vaddr_soffset(safe_row_idx, fx.Index(k_offset), a_within, BLOCK_M) + vaddr_i32 = arith.index_cast(T.i32, vaddr_e * DTYPE_BYTES) + soff_i32 = rocdl.readfirstlane(T.i32, arith.index_cast(T.i32, soff_e * DTYPE_BYTES)) + buffer_load_lds_inline_soff(A_.rsrc, lds_ptr, vaddr_i32, soff_i32) else: global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES - global_offset = arith.index_cast(T.i32, global_offset) - buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) + global_offset = arith.index_cast(T.i32, global_offset) + buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) def ldg_sts_a_async(k_offset, lds_stage): for i in range_constexpr(LDG_REG_A_COUNT_AS): @@ -706,11 +738,14 @@ def ldg_sts_b_async_one(k_offset, lds_stage, i): fx.Index(0), ) if const_expr(PRESHUFFLE): - global_offset = preshuffle_off_split(safe_row_idx, fx.Index(k_offset), b_within, BLOCK_N) * DTYPE_BYTES + vaddr_e, soff_e = preshuffle_vaddr_soffset(safe_row_idx, fx.Index(k_offset), b_within, BLOCK_N) + vaddr_i32 = arith.index_cast(T.i32, vaddr_e * DTYPE_BYTES) + soff_i32 = rocdl.readfirstlane(T.i32, arith.index_cast(T.i32, soff_e * DTYPE_BYTES)) + buffer_load_lds_inline_soff(B_.rsrc, lds_ptr, vaddr_i32, soff_i32) else: global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES - global_offset = arith.index_cast(T.i32, global_offset) - buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) + global_offset = arith.index_cast(T.i32, global_offset) + buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) def ldg_sts_b_async(k_offset, lds_stage): for i in range_constexpr(LDG_REG_B_COUNT_AS): From 6b0901de7b7c59de9e769da91ea98be85fa9c40e Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 18 Jun 2026 10:02:53 +0000 Subject: [PATCH 083/118] Fix preshuffle cache-line alignment: K32 sub-group as outer K axis (+8~16%) Root cause of bf16 hgemm's 2x L2 access vs fp8/HipKittens (same bytes, same HBM, same L1): the preshuffle layout was [.., tile_row, BLOCK_K(64 elem=128B)], but a single buffer_load only reads one K32 k_group = 32 elem = 64B per row -> each 128B L2 cache line was half-used, doubling L2 cache-line requests. Fix: make the K32 sub-group (K_CHUNK=32) an OUTER K axis in the preshuffle layout [R//tile_row, K//BLOCK_K, KG=2, tile_row, K_CHUNK] so one buffer_load's (k_group, row-block) reads a fully contiguous run and each 128B line is used in full. host preshuffle_rows_k reshape + kernel preshuffle_vaddr_soffset updated to match (K step still rides scalar soffset). Measured 8192^2: L2 access 1.37e8 -> 6.95e7 (halved, matching fp8/HK), MISS & HBM unchanged, L2 hit 90%->80% (fewer total accesses). Perf: 8192x8192x8192 1348 -> 1454 (+7.9%) 8192x8192x16320 1315 -> 1485 8192x8192x16384 1284 -> 1496 (+16.5%) cos 0.99999. This bf16 4wave now matches/exceeds HipKittens bf16 8wave (~1439). Co-Authored-By: Claude Opus 4 (1M context) --- experiments/bf16_gemm_single_block.py | 21 +++++++--- kernels/hgemm_splitk.py | 57 ++++++++++----------------- 2 files changed, 35 insertions(+), 43 deletions(-) diff --git a/experiments/bf16_gemm_single_block.py b/experiments/bf16_gemm_single_block.py index c3cb1a4c0..0ac96e296 100644 --- a/experiments/bf16_gemm_single_block.py +++ b/experiments/bf16_gemm_single_block.py @@ -110,13 +110,22 @@ def assert_no_spills() -> None: print(f"spill_check=ok isa={isa_path}") -def preshuffle_rows_k(t: torch.Tensor, tile_row: int, tile_k: int) -> torch.Tensor: - """Permute a row-major [R, K] tensor so each [tile_row, tile_k] block is - physically contiguous: [R, K] -> [R//tr, K//tk, tr, tk] -> flat. Matches the - kernel's preshuffle_off mapping (PRESHUFFLE=True).""" +def preshuffle_rows_k(t: torch.Tensor, tile_row: int, tile_k: int, k_chunk: int = 32) -> torch.Tensor: + """Permute a row-major [R, K] tensor so each [tile_row, k_chunk] sub-block is + physically contiguous and the K32 sub-group (k_chunk) is the outer K axis: + [R, K] -> [R//tr, K//tk, tk//kc, tr, kc] -> flat. + This makes one buffer_load (a k_chunk = 32 elems = 64B per row, tile_row rows) + read a fully contiguous run, so each 128B L2 cache line is used in full instead + of half (which doubled L2 accesses). Matches kernel preshuffle_vaddr_soffset.""" r, k = t.shape[-2:] - assert r % tile_row == 0 and k % tile_k == 0, f"need R%{tile_row}==0 K%{tile_k}==0, got R={r} K={k}" - return t.reshape(r // tile_row, tile_row, k // tile_k, tile_k).permute(0, 2, 1, 3).contiguous().view(r, k) + assert r % tile_row == 0 and k % tile_k == 0 and tile_k % k_chunk == 0 + kg = tile_k // k_chunk + return ( + t.reshape(r // tile_row, tile_row, k // tile_k, kg, k_chunk) + .permute(0, 2, 3, 1, 4) # [R//tr, K//tk, kg, tr, kc] + .contiguous() + .view(r, k) + ) def make_inputs(m: int, n: int, k: int, *, skip_init: bool) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index db04b9e91..9ea5ccced 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -341,49 +341,32 @@ def hgemm_kernel( A_ = GTensor(A, dtype=dtype_, shape=(-1, k)) B_ = GTensor(B, dtype=dtype_, shape=(n, k)) - # Preshuffle: A/B are pre-permuted on the host so each [TILE_ROW, BLOCK_K] - # tile is physically contiguous in global memory. A row-major load of a - # tile then hits one contiguous run instead of TILE_ROW strided segments, - # improving L1/L2 line utilization. Map a logical (row, col) coordinate to - # the shuffled linear element offset. - _PRESH_TK = BLOCK_K # K granularity of a contiguous tile - _K_TILES_SH = k // _PRESH_TK - - def preshuffle_off(row, col, tile_row): - tm = row // tile_row - mi = row % tile_row - tk = col // _PRESH_TK - ki = col % _PRESH_TK - return ((tm * _K_TILES_SH + tk) * tile_row + mi) * _PRESH_TK + ki - - def preshuffle_off_split(row, k_offset, within, tile_row): - # Same mapping as preshuffle_off but with the K coordinate pre-split into - # the loop-variant tile index (k_offset // TK) and the loop-invariant - # within-tile column (within in [0, TK)). The row/tm/mi term and `within` - # are per-thread constants, so only `tk * tile_row * TK` steps per K iter: - # off = (tm*K_TILES*tile_row + mi)*TK + within + tk*(tile_row*TK) - row = fx.Index(row) - k_offset = fx.Index(k_offset) - within = fx.Index(within) - tm = row // tile_row - mi = row % tile_row - tk = k_offset // _PRESH_TK - invariant = (tm * _K_TILES_SH * tile_row + mi) * _PRESH_TK + within - return invariant + tk * (tile_row * _PRESH_TK) + # Preshuffle layout (host preshuffle_rows_k): A/B are pre-permuted to + # [R//tile_row, K//BLOCK_K, KG, tile_row, K_CHUNK] + # i.e. the K32 sub-group (K_CHUNK=32 elems = 64B) is an OUTER K axis, so the + # tile_row rows of one k_group are contiguous. One buffer_load (one k_group, + # one row-block) then reads a fully contiguous run and each 128B L2 line is + # used in full -- halves L2 accesses vs a [.., tile_row, BLOCK_K] layout where + # a load only touched 64B of each 128B line. + _PRESH_KC = WARP_ATOM_K # K_CHUNK = 32 (matches A/B_LDS_K_CHUNK) + _PRESH_KG = BLOCK_K // _PRESH_KC # 2 + _K_TILES_SH = k // BLOCK_K def preshuffle_vaddr_soffset(row, k_offset, within, tile_row): - # Split the preshuffle offset into a per-lane vaddr part (loop-invariant) - # and a wave-uniform soffset part (the K-step term tk*tile_row*TK). The - # soffset is the same for all lanes (depends only on k_offset), so it can - # ride the scalar soffset of buffer_load instead of being recomputed into - # each lane's vaddr every K tile (mirrors fp8_gemm_4wave's s33 usage). + # within in [0, BLOCK_K): kg = which K32 sub-group, wc = within-chunk col. + # off = (((tm*K_TILES + ktile)*KG + kg)*tile_row + mi)*K_CHUNK + wc + # Split into a lane-constant vaddr part and a wave-uniform soffset (K step): + # vaddr = (tm*K_TILES*KG*tile_row + kg*tile_row + mi)*K_CHUNK + wc + # soff = ktile*(KG*tile_row*K_CHUNK), ktile = k_offset // BLOCK_K row = fx.Index(row) within = fx.Index(within) tm = row // tile_row mi = row % tile_row - vaddr = (tm * _K_TILES_SH * tile_row + mi) * _PRESH_TK + within - tk = fx.Index(k_offset) // _PRESH_TK - soff = tk * (tile_row * _PRESH_TK) + kg = within // _PRESH_KC + wc = within % _PRESH_KC + vaddr = (tm * _K_TILES_SH * _PRESH_KG * tile_row + kg * tile_row + mi) * _PRESH_KC + wc + ktile = fx.Index(k_offset) // BLOCK_K + soff = ktile * (_PRESH_KG * tile_row * _PRESH_KC) return vaddr, soff C_ = GTensor(C, dtype=dtype_, shape=(-1, n)) if const_expr(HAS_BIAS): From 6458b917f42059563b305df09039e3060286a59d Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 19 Jun 2026 15:09:49 +0000 Subject: [PATCH 084/118] Add fp8_gemm_4wave_opt: pin MFMA accumulator in AGPR (+8%: 2982->3226 TFLOPS) Copy of fp8_gemm_4wave for optimization/comparison. The ssa-lowered mma_atom_call_ssa let the compiler shuffle the 16 Vec4 f32 accumulators between AGPR slots, emitting v_accvgpr_mov/read + s_nop 10 after most MFMAs (842 s_nop in the main loop, the dominant ATT stall). Mfma16x16x128AGPR overrides _do_mma with inline asm `v_mfma_f32_16x16x128_f8f6f4 $0,$1,$2,$0` / `=a,v,v,0` (same trick as bf16 WmmaHalf use_agpr_inline), so each accumulator stays in-place in AGPR. s_nop 842 -> 2, no spill (VGPR 436 / AGPR 256). 8192x8192x16384 2982 -> 3226 TFLOPS, cos 0.99999; verify_output passes at 512x2112x7168, 5120x5120x8320, 8192x8192x8192, 8192x8192x16384. scale stays default(0); per-token scale still applied in StoreC epilogue. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp8_gemm_4wave_opt.py | 453 ++++++++++++++++++++++++++++++++++ 1 file changed, 453 insertions(+) create mode 100644 kernels/fp8_gemm_4wave_opt.py diff --git a/kernels/fp8_gemm_4wave_opt.py b/kernels/fp8_gemm_4wave_opt.py new file mode 100644 index 000000000..c2e6f5e2e --- /dev/null +++ b/kernels/fp8_gemm_4wave_opt.py @@ -0,0 +1,453 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) 2025 FlyDSL Project Contributors + +"""4-wave FP8 matmul with row-wise scaling for AMD CDNA4. + +Algorithm derived from HipKittens FP8_4wave +(https://github.com/HazyResearch/HipKittens/blob/7782744ba1fd259a377a99e2ea8f71384cc80e55/kernels/gemm/fp8fp32/FP8_4wave/4_wave.cu#L1). + +Global IO, scale loads, and bf16 stores go through the layout API +(``fx.rocdl.make_buffer_tensor`` + ``fx.copy`` with ``BufferCopyLDS128b`` +/ ``BufferCopy{16,32,128}b``). MFMAs use ``fly.mma_atom_call_ssa`` so +the chained Vec(4, f32) accumulator stays on AGPR. The XOR swizzle and +the 8-buffer LDS pipeline ping-pong are kept as direct arithmetic to +preserve the original kernel's interleaved-cluster scheduling. + +Optional B preshuffle uses the same on-disk layout as +``preshuffle_gemm_v2`` / ``shuffle_weight((16, 16))``. +""" + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl._mlir.dialects import llvm as _llvm +from flydsl.expr import arith, const_expr, range_constexpr +from flydsl.expr import vector as _vector +from flydsl.expr.typing import T as _T +from flydsl.expr.typing import Vector as Vec +from kernels.fp8_gemm_utils import ( + G2SLoader, + Mfma16x16x128, + S2RLoader, + StoreC, + ceildiv, + compute_global_swizzle, + divmod, + make_fp8_buffer_tensor, + pack_i32x4_i32x8, + swizzle_128, + wait_barrier, +) + + +class Mfma16x16x128AGPR(Mfma16x16x128): + """fp8 16x16x128 MFMA that pins the accumulator in AGPR via inline asm + (constraint `=a,v,v,0`), so the f32x4 accumulator accumulates in-place and + the compiler does not insert v_accvgpr_mov/read + s_nop to shuffle the + accumulator between AGPR slots (the dominant stall in the ssa-lowered path). + scale is left default (=0); the real per-token scale is applied in StoreC.""" + + def _do_mma(self, a, b, c): + a_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), a) + b_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), b) + res_ty = _T.vec(4, _T.f32) + return _llvm.inline_asm( + res_ty, + [arith._to_raw(a_i32x8), arith._to_raw(b_i32x8), arith._to_raw(c)], + "v_mfma_f32_16x16x128_f8f6f4 $0, $1, $2, $0", + "=a,v,v,0", + has_side_effects=True, + ) + + +def _min(a, b): + return arith.select(a < b, a, b) + + +def _xcd_swizzle(num_pid_m, num_pid_n): + NUM_XCDS = 8 + WGM = 4 + NUM_CUS = 32 * NUM_XCDS + SWIZZLE_THRESHOLD = 4 * NUM_CUS + + wgid = fx.block_idx.x + + num_wg = num_pid_m * num_pid_n + + # Simple path: no XCD remapping. + simple_m, simple_n = divmod(wgid, num_pid_n) + + # XCD-remapped path. + intra_xcd, xcd = divmod(wgid, NUM_XCDS) + wgid_remap = xcd * (num_wg // NUM_XCDS) + intra_xcd + num_wgid_in_group = WGM * num_pid_n + group_id, intra_group = divmod(wgid_remap, num_wgid_in_group) + first_pid_m = group_id * WGM + group_size_m = _min(num_pid_m - first_pid_m, WGM) + pid_n, intra_group_m = divmod(intra_group, group_size_m) + pid_m = first_pid_m + intra_group_m + + use_simple = (num_wg <= SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) + return (arith.select(use_simple, simple_m, pid_m), arith.select(use_simple, simple_n, pid_n)) + + +def compile_fp8_gemm_4w_opt( + *, + K: int, + BLOCK_M: int = 256, + BLOCK_N: int = 256, + use_xcd_remap: bool = True, + b_preshuffled: bool = False, +): + # MFMA atom is 16x16x128; 4 waves in a 2x2 config require BLOCK >= 64. + BLOCK_K = 128 + LDS_BLOCK_M = BLOCK_M // 2 + LDS_BLOCK_N = BLOCK_N // 2 + + assert BLOCK_M >= 64 and BLOCK_M % 64 == 0 and BLOCK_N >= 64 and BLOCK_N % 64 == 0 + assert K % BLOCK_K == 0 + + K_ITERS = K // BLOCK_K + # Number of 16-row 16x128 tiles per wave per A/B partition. + N_TILES_A = BLOCK_M // 4 // 16 + N_TILES_B = BLOCK_N // 4 // 16 + N_ACCUMS = N_TILES_A * N_TILES_B + assert N_ACCUMS > 0 + + N_LDS_ROUNDS = max(N_TILES_A, N_TILES_B) + + _use_interleaved_block = BLOCK_M == 256 and BLOCK_N == 256 + + a_lds_size = LDS_BLOCK_M * BLOCK_K + b_lds_size = LDS_BLOCK_N * BLOCK_K + + @fx.struct + class SharedStorage: + A_lds_cur_0: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] + A_lds_cur_1: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] + A_lds_next_0: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] + A_lds_next_1: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] + B_lds_cur_0: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] + B_lds_cur_1: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] + B_lds_next_0: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] + B_lds_next_1: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] + + @flyc.kernel + def kernel_gemm( + A: fx.Tensor, B_T: fx.Tensor, C: fx.Tensor, A_scale: fx.Tensor, B_scale: fx.Tensor, c_m: fx.Int32, c_n: fx.Int32 + ): + F8_IR_t = fx.Float8E4M3FN.ir_type + + lds = fx.SharedAllocator().allocate(SharedStorage).peek() + a_cur0 = lds.A_lds_cur_0 + a_cur1 = lds.A_lds_cur_1 + a_next0 = lds.A_lds_next_0 + a_next1 = lds.A_lds_next_1 + b_cur0 = lds.B_lds_cur_0 + b_cur1 = lds.B_lds_cur_1 + b_next0 = lds.B_lds_next_0 + b_next1 = lds.B_lds_next_1 + + lane_id = fx.thread_idx.x % 64 + wave_id = fx.thread_idx.x // 64 + + n_blocks = ceildiv(c_n, BLOCK_N) + if const_expr(use_xcd_remap): + tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M), n_blocks) + else: + tile_i, tile_j = divmod(fx.block_idx.x, n_blocks) + + wave_i = wave_id // 2 + wave_j = wave_id % 2 + A0_gl_offset = (tile_i * BLOCK_M) * K + A1_gl_offset = (tile_i * BLOCK_M + LDS_BLOCK_M) * K + A_K_STEP = BLOCK_K + B0_gl_offset = (tile_j * BLOCK_N) * K + B1_gl_offset = (tile_j * BLOCK_N + LDS_BLOCK_N) * K + B_K_STEP = (2 * 1024) if b_preshuffled else BLOCK_K + + gA = make_fp8_buffer_tensor(A, F8_IR_t) + gB = make_fp8_buffer_tensor(B_T, F8_IR_t) + ga_div = fx.logical_divide(gA, fx.make_layout(1, 1)) + gb_div = fx.logical_divide(gB, fx.make_layout(1, 1)) + + def _compute_lds_swizzle(s2r, preshuffled=False): + lds_swz = [] + for row_offset in range_constexpr(s2r.n_tiles): + row = s2r.wave_idx * (s2r.n_tiles * 16) + row_offset * 16 + lane_id % 16 + swz = [] + for i in range_constexpr(2): + col = (lane_id // 16) * 16 + i * 64 + if const_expr(preshuffled): + swz.append((row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128) + else: + r, c = swizzle_128(row, col) + swz.append(r * BLOCK_K + c) + lds_swz.append(swz) + return lds_swz + + mfma = Mfma16x16x128AGPR(N_TILES_A, N_TILES_B) + + def _interleaved_cluster( + lds_dst, + g2s, + k_offset, + s2r, + lds_src, + a, + b, + c, + lds_src_preshuffled=False, + ): + rt_dst = [] + + c[mfma.idx(0, 0)] = mfma.call_one(a, b, c, 0, 0) + c[mfma.idx(0, 1)] = mfma.call_one(a, b, c, 0, 1) + + lds_swz = _compute_lds_swizzle(s2r, preshuffled=lds_src_preshuffled) + g2s.load_one(lds_dst, k_offset, 0) + rt_dst_0 = s2r.load_one(lds_src, lds_swz[0][0]) + + c[mfma.idx(0, 2)] = mfma.call_one(a, b, c, 0, 2) + + rt_dst_1 = s2r.load_one(lds_src, lds_swz[0][1]) + rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) + + c[mfma.idx(0, 3)] = mfma.call_one(a, b, c, 0, 3) + + g2s.load_one(lds_dst, k_offset, 1) + rt_dst_0 = s2r.load_one(lds_src, lds_swz[1][0]) + + c[mfma.idx(1, 0)] = mfma.call_one(a, b, c, 1, 0) + c[mfma.idx(1, 1)] = mfma.call_one(a, b, c, 1, 1) + + rt_dst_1 = s2r.load_one(lds_src, lds_swz[1][1]) + rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) + + c[mfma.idx(1, 2)] = mfma.call_one(a, b, c, 1, 2) + c[mfma.idx(1, 3)] = mfma.call_one(a, b, c, 1, 3) + + g2s.load_one(lds_dst, k_offset, 2) + rt_dst_0 = s2r.load_one(lds_src, lds_swz[2][0]) + + c[mfma.idx(2, 0)] = mfma.call_one(a, b, c, 2, 0) + c[mfma.idx(2, 1)] = mfma.call_one(a, b, c, 2, 1) + + rt_dst_1 = s2r.load_one(lds_src, lds_swz[2][1]) + rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) + + c[mfma.idx(2, 2)] = mfma.call_one(a, b, c, 2, 2) + c[mfma.idx(2, 3)] = mfma.call_one(a, b, c, 2, 3) + + g2s.load_one(lds_dst, k_offset, 3) + rt_dst_0 = s2r.load_one(lds_src, lds_swz[3][0]) + + c[mfma.idx(3, 0)] = mfma.call_one(a, b, c, 3, 0) + c[mfma.idx(3, 1)] = mfma.call_one(a, b, c, 3, 1) + + rt_dst_1 = s2r.load_one(lds_src, lds_swz[3][1]) + rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) + + c[mfma.idx(3, 2)] = mfma.call_one(a, b, c, 3, 2) + c[mfma.idx(3, 3)] = mfma.call_one(a, b, c, 3, 3) + + return c, rt_dst + + def _compute_cluster( + lds_dst, + g2s, + k_offset, + s2r, + lds_src, + a, + b, + c, + lds_src_preshuffled=False, + ): + g2s.load(lds_dst, k_offset) + rt_dst = s2r.load(lds_src, preshuffled=lds_src_preshuffled) + c = mfma.call(a, b, c) + return c, rt_dst + + def _compute_block( + lds_dst, + g2s, + k_offset, + s2r, + lds_src, + a, + b, + c, + lds_src_preshuffled=False, + ): + if const_expr(_use_interleaved_block): + return _interleaved_cluster( + lds_dst, + g2s, + k_offset, + s2r, + lds_src, + a, + b, + c, + lds_src_preshuffled=lds_src_preshuffled, + ) + else: + return _compute_cluster( + lds_dst, + g2s, + k_offset, + s2r, + lds_src, + a, + b, + c, + lds_src_preshuffled=lds_src_preshuffled, + ) + + # Each wave handles 2x2 64x64 sub-tiles of the output. + c00_frag = [mfma.zero_value] * N_ACCUMS + c01_frag = [mfma.zero_value] * N_ACCUMS + c10_frag = [mfma.zero_value] * N_ACCUMS + c11_frag = [mfma.zero_value] * N_ACCUMS + + gl_off_a = compute_global_swizzle(lane_id, wave_id, K, N_LDS_ROUNDS, preshuffled=False) + gl_off_b = compute_global_swizzle(lane_id, wave_id, K, N_LDS_ROUNDS, preshuffled=b_preshuffled) + + a_g2s = G2SLoader(ga_div, gl_off_a, N_TILES_A, F8_IR_t, wave_id) + b_g2s = G2SLoader(gb_div, gl_off_b, N_TILES_B, F8_IR_t, wave_id) + a_s2r = S2RLoader(wave_i, N_TILES_A) + b_s2r = S2RLoader(wave_j, N_TILES_B) + store_c = StoreC(A_scale, B_scale, C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B) + + # Prologue: 8-buffer LDS pipeline pre-fill. + a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) + b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) + b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) + a_g2s.load(a_cur1, A1_gl_offset + 0 * A_K_STEP) + + a_g2s.load(a_next0, A0_gl_offset + 1 * A_K_STEP) + b_g2s.load(b_next0, B0_gl_offset + 1 * B_K_STEP) + b_g2s.load(b_next1, B1_gl_offset + 1 * B_K_STEP) + a_g2s.load(a_next1, A1_gl_offset + 1 * A_K_STEP) + + wait_barrier((3 * N_TILES_A) + (4 * N_TILES_B)) + + a0_frag = a_s2r.load(a_cur0) + + wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) + + b0_frag = b_s2r.load(b_cur0, preshuffled=b_preshuffled) + + for k in range_constexpr(K_ITERS - 2): + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + + c00_frag, b1_frag = _compute_block( + a_cur0, + a_g2s, + A0_gl_offset + (k + 2) * A_K_STEP, + b_s2r, + b_cur1, + a0_frag, + b0_frag, + c00_frag, + lds_src_preshuffled=b_preshuffled, + ) + + c01_frag, a1_frag = _compute_block( + b_cur0, + b_g2s, + B0_gl_offset + (k + 2) * B_K_STEP, + a_s2r, + a_cur1, + a0_frag, + b1_frag, + c01_frag, + ) + + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + + c10_frag, a0_frag = _compute_block( + b_cur1, + b_g2s, + B1_gl_offset + (k + 2) * B_K_STEP, + a_s2r, + a_next0, + a1_frag, + b0_frag, + c10_frag, + ) + + c11_frag, b0_frag = _compute_block( + a_cur1, + a_g2s, + A1_gl_offset + (k + 2) * A_K_STEP, + b_s2r, + b_next0, + a1_frag, + b1_frag, + c11_frag, + lds_src_preshuffled=b_preshuffled, + ) + + a_cur0, a_next0 = a_next0, a_cur0 + a_cur1, a_next1 = a_next1, a_cur1 + b_cur0, b_next0 = b_next0, b_cur0 + b_cur1, b_next1 = b_next1, b_cur1 + + # Tail step k_iters - 2. + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + b1_frag = b_s2r.load(b_cur1, preshuffled=b_preshuffled) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag) + a1_frag = a_s2r.load(a_cur1) + c01_frag = mfma.call(a0_frag, b1_frag, c01_frag) + wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) + a0_frag = a_s2r.load(a_next0) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag) + b0_frag = b_s2r.load(b_next0, preshuffled=b_preshuffled) + c11_frag = mfma.call(a1_frag, b1_frag, c11_frag) + + a_cur0, a_next0 = a_next0, a_cur0 + a_cur1, a_next1 = a_next1, a_cur1 + b_cur0, b_next0 = b_next0, b_cur0 + b_cur1, b_next1 = b_next1, b_cur1 + + # Tail step k_iters - 1. + base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) + base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) + wait_barrier(0) + b1_frag = b_s2r.load(b_cur1, preshuffled=b_preshuffled) + a1_frag = a_s2r.load(a_cur1) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag) + c01_frag = mfma.call(a0_frag, b1_frag, c01_frag) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag) + c11_frag = mfma.call(a1_frag, b1_frag, c11_frag) + + store_c.store(c00_frag, base_row + 0, base_col + 0) + store_c.store(c01_frag, base_row + 0, base_col + LDS_BLOCK_N) + store_c.store(c10_frag, base_row + LDS_BLOCK_M, base_col + 0) + store_c.store(c11_frag, base_row + LDS_BLOCK_M, base_col + LDS_BLOCK_N) + + @flyc.jit + def launch_gemm( + A: fx.Tensor, + B_T: fx.Tensor, + C: fx.Tensor, + A_scale: fx.Tensor, + B_scale: fx.Tensor, + c_m: fx.Int32, + c_n: fx.Int32, + stream: fx.Stream, + ): + grid_x = ceildiv(c_m, BLOCK_M) * ceildiv(c_n, BLOCK_N) + kernel_gemm( + A, + B_T, + C, + A_scale, + B_scale, + c_m, + c_n, + value_attrs={"rocdl.waves_per_eu": 1, "rocdl.flat_work_group_size": "256,256"}, + ).launch(grid=(grid_x, 1, 1), block=(256, 1, 1), stream=stream) + + return launch_gemm From 829de46c1d5694cd058a8f87dd18b8aef910e4a3 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Sun, 21 Jun 2026 08:16:43 +0000 Subject: [PATCH 085/118] fp8_opt: relax main-loop barrier vmcnt 16->32 (~+0.4%, 3226->~3240 TFLOPS) The 8-buffer pipeline reads buffers that were written many loads earlier, so the main-loop wait_barrier can allow more in-flight global loads (vmcnt 16 -> 32) without a read-before-write hazard, trimming a little barrier wait. FP8_VMARGIN env (default 16) controls the extra slack. 8192x8192x16384 ~3240 TFLOPS, verify_output passes on 512x2112x7168 / 5120x5120x8320 / 8192^3 / 8192x8192x16384. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp8_gemm_4wave_opt.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernels/fp8_gemm_4wave_opt.py b/kernels/fp8_gemm_4wave_opt.py index c2e6f5e2e..8bcc1ba4e 100644 --- a/kernels/fp8_gemm_4wave_opt.py +++ b/kernels/fp8_gemm_4wave_opt.py @@ -106,6 +106,13 @@ def compile_fp8_gemm_4w_opt( assert BLOCK_M >= 64 and BLOCK_M % 64 == 0 and BLOCK_N >= 64 and BLOCK_N % 64 == 0 assert K % BLOCK_K == 0 + import os as _osv + + # Extra vmcnt slack on the main-loop barriers. The 8-buffer pipeline keeps the + # read buffers many loads behind the write, so allowing more in-flight global + # loads (vmcnt 16 -> 32) at the barrier is safe and trims barrier wait a little. + _VMARGIN = int(_osv.environ.get("FP8_VMARGIN", "16")) + K_ITERS = K // BLOCK_K # Number of 16-row 16x128 tiles per wave per A/B partition. N_TILES_A = BLOCK_M // 4 // 16 @@ -339,7 +346,7 @@ def _compute_block( b0_frag = b_s2r.load(b_cur0, preshuffled=b_preshuffled) for k in range_constexpr(K_ITERS - 2): - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B) + _VMARGIN) c00_frag, b1_frag = _compute_block( a_cur0, @@ -364,7 +371,7 @@ def _compute_block( c01_frag, ) - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B) + _VMARGIN) c10_frag, a0_frag = _compute_block( b_cur1, From 24c142496798b5cd8f9769772098853cff941f83 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 22 Jun 2026 01:21:23 +0000 Subject: [PATCH 086/118] slower but not mlir --- kernels/fp8_gemm_4wave_opt.py | 7 +- .../hgemm_wave0_compact_schedule.txt | 21 +- .../hgemm_wave0_full_kernel_ops.txt | 379 +++++++++--------- 3 files changed, 213 insertions(+), 194 deletions(-) diff --git a/kernels/fp8_gemm_4wave_opt.py b/kernels/fp8_gemm_4wave_opt.py index 8bcc1ba4e..e9ac18ac9 100644 --- a/kernels/fp8_gemm_4wave_opt.py +++ b/kernels/fp8_gemm_4wave_opt.py @@ -65,7 +65,8 @@ def _min(a, b): def _xcd_swizzle(num_pid_m, num_pid_n): NUM_XCDS = 8 - WGM = 4 + import os as _osw + WGM = int(_osw.environ.get("FP8_WGM", "8")) NUM_CUS = 32 * NUM_XCDS SWIZZLE_THRESHOLD = 4 * NUM_CUS @@ -86,7 +87,7 @@ def _xcd_swizzle(num_pid_m, num_pid_n): pid_n, intra_group_m = divmod(intra_group, group_size_m) pid_m = first_pid_m + intra_group_m - use_simple = (num_wg <= SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) + use_simple = (num_wg < SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) return (arith.select(use_simple, simple_m, pid_m), arith.select(use_simple, simple_n, pid_n)) @@ -111,7 +112,7 @@ def compile_fp8_gemm_4w_opt( # Extra vmcnt slack on the main-loop barriers. The 8-buffer pipeline keeps the # read buffers many loads behind the write, so allowing more in-flight global # loads (vmcnt 16 -> 32) at the barrier is safe and trims barrier wait a little. - _VMARGIN = int(_osv.environ.get("FP8_VMARGIN", "16")) + _VMARGIN = int(_osv.environ.get("FP8_VMARGIN", "0")) K_ITERS = K // BLOCK_K # Number of 16-row 16x128 tiles per wave per A/B partition. diff --git a/resource_inspect/hgemm_wave0_compact_schedule.txt b/resource_inspect/hgemm_wave0_compact_schedule.txt index 94b550f7b..938992044 100644 --- a/resource_inspect/hgemm_wave0_compact_schedule.txt +++ b/resource_inspect/hgemm_wave0_compact_schedule.txt @@ -6,7 +6,10 @@ Block notation: A0[i,k] and B0[j,k] are current LDS buffer fragments, k=0 means K[0:32], k=1 means K[32:64]. A1/B1 is the other LDS buffer for the next outer-loop tile. dsrd reads one 16x32 fragment from LDS. - bfld writes CTA-wide global->LDS chunks into the other buffer. Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. + bfld writes CTA-wide global->LDS chunks into the other buffer. + B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. + With the experimental A_LDS_K32_BLOCKING path, A bfld chunks are [4 rows, 1 K-slice]. + Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. Ops --- @@ -59,30 +62,30 @@ mfma C[3,5]+=A0[3,0]*B0[5,0] mfma C[3,6]+=A0[3,0]*B0[6,0] mfma C[3,7]+=A0[3,0]*B0[7,0] mfma C[4,0]+=A0[4,0]*B0[0,0] -bfld A1[0:2,0:2] +bfld A1[0:4,0] mfma C[4,1]+=A0[4,0]*B0[1,0] dsrd A0[5,0] mfma C[4,2]+=A0[4,0]*B0[2,0] mfma C[4,3]+=A0[4,0]*B0[3,0] mfma C[4,4]+=A0[4,0]*B0[4,0] -bfld A1[2:4,0:2] +bfld A1[4:8,0] mfma C[4,5]+=A0[4,0]*B0[5,0] mfma C[4,6]+=A0[4,0]*B0[6,0] mfma C[4,7]+=A0[4,0]*B0[7,0] mfma C[5,0]+=A0[5,0]*B0[0,0] -bfld A1[4:6,0:2] +bfld A1[8:12,0] mfma C[5,1]+=A0[5,0]*B0[1,0] dsrd A0[6,0] mfma C[5,2]+=A0[5,0]*B0[2,0] mfma C[5,3]+=A0[5,0]*B0[3,0] mfma C[5,4]+=A0[5,0]*B0[4,0] -bfld A1[6:8,0:2] +bfld A1[12:16,0] mfma C[5,5]+=A0[5,0]*B0[5,0] mfma C[5,6]+=A0[5,0]*B0[6,0] mfma C[5,7]+=A0[5,0]*B0[7,0] mfma C[6,0]+=A0[6,0]*B0[0,0] dsrd B0[0,1] -bfld A1[8:10,0:2] +bfld A1[0:4,1] mfma C[6,1]+=A0[6,0]*B0[1,0] dsrd A0[7,0] dsrd B0[1,1] @@ -92,17 +95,17 @@ mfma C[6,3]+=A0[6,0]*B0[3,0] dsrd B0[3,1] mfma C[6,4]+=A0[6,0]*B0[4,0] dsrd A0[0,1] -bfld A1[10:12,0:2] +bfld A1[4:8,1] mfma C[6,5]+=A0[6,0]*B0[5,0] mfma C[6,6]+=A0[6,0]*B0[6,0] mfma C[6,7]+=A0[6,0]*B0[7,0] mfma C[7,0]+=A0[7,0]*B0[0,0] -bfld A1[12:14,0:2] +bfld A1[8:12,1] mfma C[7,1]+=A0[7,0]*B0[1,0] mfma C[7,2]+=A0[7,0]*B0[2,0] mfma C[7,3]+=A0[7,0]*B0[3,0] mfma C[7,4]+=A0[7,0]*B0[4,0] -bfld A1[14:16,0:2] +bfld A1[12:16,1] mfma C[7,5]+=A0[7,0]*B0[5,0] mfma C[7,6]+=A0[7,0]*B0[6,0] mfma C[7,7]+=A0[7,0]*B0[7,0] diff --git a/resource_inspect/hgemm_wave0_full_kernel_ops.txt b/resource_inspect/hgemm_wave0_full_kernel_ops.txt index d978df487..8cb2e3244 100644 --- a/resource_inspect/hgemm_wave0_full_kernel_ops.txt +++ b/resource_inspect/hgemm_wave0_full_kernel_ops.txt @@ -1,187 +1,202 @@ -Wave0 full steady-state BLOCK_K=64 schedule, current B4 tail-prefetch version -=========================================================================== +Wave0 full steady-state BLOCK_K=64 schedule, AK32 block notation +================================================================= This expands one steady-state tile for wave0 only. It does not repeat all 128 K tiles. -Layout: A is A[M,K], B is B[N,K], C is C[M,N]. -At loop entry, A0[ 0: 16, 0: 32] and B0[ 0: 64, 0: 32] are already live from the previous loop tail. +Layout: A is A[M,K], B is B[N,K] because the harness passes transposed B_T, C is C[M,N]. +Kernel: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32. +Last measured hot loop: about 2589 cycles per BLOCK_K tile on the ATT middle-window policy. + +Block notation: + C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. + A0[i,k] and B0[j,k] are current LDS fragments, k=0 means K[0:32], k=1 means K[32:64]. + A1/B1 is the other LDS buffer being filled for the next outer-loop tile. + dsrd reads one 16x32 fragment from LDS. + bfld writes CTA-wide global->LDS chunks into the other buffer. + B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. + A bfld chunks are [4 rows, 1 K-slice] in the AK32 LDS layout. + Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. + +At loop entry, these fragments were already prefetched by the previous loop tail: + A0[0,0] + B0[0:4,0] Ops --- -mfma C0[ 0: 16, 0: 16] += A0[ 0: 16, 0: 32] * B0[ 0: 16, 0: 32] -dsrd B0[ 64: 80, 0: 32] -bfld B2[ 0: 32, 0: 64] -mfma C0[ 0: 16, 16: 32] += A0[ 0: 16, 0: 32] * B0[ 16: 32, 0: 32] -dsrd B0[ 80: 96, 0: 32] -dsrd A0[ 16: 32, 0: 32] -mfma C0[ 0: 16, 32: 48] += A0[ 0: 16, 0: 32] * B0[ 32: 48, 0: 32] -dsrd B0[ 96:112, 0: 32] -mfma C0[ 0: 16, 48: 64] += A0[ 0: 16, 0: 32] * B0[ 48: 64, 0: 32] -dsrd B0[112:128, 0: 32] -mfma C0[ 0: 16, 64: 80] += A0[ 0: 16, 0: 32] * B0[ 64: 80, 0: 32] -bfld B2[ 32: 64, 0: 64] -mfma C0[ 0: 16, 80: 96] += A0[ 0: 16, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 0: 16, 96:112] += A0[ 0: 16, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 0: 16, 112:128] += A0[ 0: 16, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 16: 32, 0: 16] += A0[ 16: 32, 0: 32] * B0[ 0: 16, 0: 32] -bfld B2[ 64: 96, 0: 64] -mfma C0[ 16: 32, 16: 32] += A0[ 16: 32, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 32: 48, 0: 32] -mfma C0[ 16: 32, 32: 48] += A0[ 16: 32, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[ 16: 32, 48: 64] += A0[ 16: 32, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[ 16: 32, 64: 80] += A0[ 16: 32, 0: 32] * B0[ 64: 80, 0: 32] -bfld B2[ 96:128, 0: 64] -mfma C0[ 16: 32, 80: 96] += A0[ 16: 32, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 16: 32, 96:112] += A0[ 16: 32, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 16: 32, 112:128] += A0[ 16: 32, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 32: 48, 0: 16] += A0[ 32: 48, 0: 32] * B0[ 0: 16, 0: 32] -bfld B2[128:160, 0: 64] -mfma C0[ 32: 48, 16: 32] += A0[ 32: 48, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 48: 64, 0: 32] -mfma C0[ 32: 48, 32: 48] += A0[ 32: 48, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[ 32: 48, 48: 64] += A0[ 32: 48, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[ 32: 48, 64: 80] += A0[ 32: 48, 0: 32] * B0[ 64: 80, 0: 32] -bfld B2[160:192, 0: 64] -mfma C0[ 32: 48, 80: 96] += A0[ 32: 48, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 32: 48, 96:112] += A0[ 32: 48, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 32: 48, 112:128] += A0[ 32: 48, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 48: 64, 0: 16] += A0[ 48: 64, 0: 32] * B0[ 0: 16, 0: 32] -bfld B2[192:224, 0: 64] -mfma C0[ 48: 64, 16: 32] += A0[ 48: 64, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 64: 80, 0: 32] -mfma C0[ 48: 64, 32: 48] += A0[ 48: 64, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[ 48: 64, 48: 64] += A0[ 48: 64, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[ 48: 64, 64: 80] += A0[ 48: 64, 0: 32] * B0[ 64: 80, 0: 32] -bfld B2[224:256, 0: 64] -mfma C0[ 48: 64, 80: 96] += A0[ 48: 64, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 48: 64, 96:112] += A0[ 48: 64, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 48: 64, 112:128] += A0[ 48: 64, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 64: 80, 0: 16] += A0[ 64: 80, 0: 32] * B0[ 0: 16, 0: 32] -bfld A2[ 0: 32, 0: 64] -mfma C0[ 64: 80, 16: 32] += A0[ 64: 80, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 80: 96, 0: 32] -mfma C0[ 64: 80, 32: 48] += A0[ 64: 80, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[ 64: 80, 48: 64] += A0[ 64: 80, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[ 64: 80, 64: 80] += A0[ 64: 80, 0: 32] * B0[ 64: 80, 0: 32] -bfld A2[ 32: 64, 0: 64] -mfma C0[ 64: 80, 80: 96] += A0[ 64: 80, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 64: 80, 96:112] += A0[ 64: 80, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 64: 80, 112:128] += A0[ 64: 80, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 80: 96, 0: 16] += A0[ 80: 96, 0: 32] * B0[ 0: 16, 0: 32] -bfld A2[ 64: 96, 0: 64] -mfma C0[ 80: 96, 16: 32] += A0[ 80: 96, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 96:112, 0: 32] -mfma C0[ 80: 96, 32: 48] += A0[ 80: 96, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[ 80: 96, 48: 64] += A0[ 80: 96, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[ 80: 96, 64: 80] += A0[ 80: 96, 0: 32] * B0[ 64: 80, 0: 32] -bfld A2[ 96:128, 0: 64] -mfma C0[ 80: 96, 80: 96] += A0[ 80: 96, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 80: 96, 96:112] += A0[ 80: 96, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 80: 96, 112:128] += A0[ 80: 96, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 96:112, 0: 16] += A0[ 96:112, 0: 32] * B0[ 0: 16, 0: 32] -dsrd B1[ 0: 16, 32: 64] -bfld A2[128:160, 0: 64] -mfma C0[ 96:112, 16: 32] += A0[ 96:112, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[112:128, 0: 32] -dsrd B1[ 16: 32, 32: 64] -mfma C0[ 96:112, 32: 48] += A0[ 96:112, 0: 32] * B0[ 32: 48, 0: 32] -dsrd B1[ 32: 48, 32: 64] -mfma C0[ 96:112, 48: 64] += A0[ 96:112, 0: 32] * B0[ 48: 64, 0: 32] -dsrd B1[ 48: 64, 32: 64] -mfma C0[ 96:112, 64: 80] += A0[ 96:112, 0: 32] * B0[ 64: 80, 0: 32] -dsrd A1[ 0: 16, 32: 64] -bfld A2[160:192, 0: 64] -mfma C0[ 96:112, 80: 96] += A0[ 96:112, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 96:112, 96:112] += A0[ 96:112, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 96:112, 112:128] += A0[ 96:112, 0: 32] * B0[112:128, 0: 32] -mfma C0[112:128, 0: 16] += A0[112:128, 0: 32] * B0[ 0: 16, 0: 32] -bfld A2[192:224, 0: 64] -mfma C0[112:128, 16: 32] += A0[112:128, 0: 32] * B0[ 16: 32, 0: 32] -mfma C0[112:128, 32: 48] += A0[112:128, 0: 32] * B0[ 32: 48, 0: 32] -mfma C0[112:128, 48: 64] += A0[112:128, 0: 32] * B0[ 48: 64, 0: 32] -mfma C0[112:128, 64: 80] += A0[112:128, 0: 32] * B0[ 64: 80, 0: 32] -bfld A2[224:256, 0: 64] -mfma C0[112:128, 80: 96] += A0[112:128, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[112:128, 96:112] += A0[112:128, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[112:128, 112:128] += A0[112:128, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 0: 16, 0: 16] += A1[ 0: 16, 32: 64] * B1[ 0: 16, 32: 64] -dsrd B1[ 64: 80, 32: 64] -mfma C0[ 0: 16, 16: 32] += A1[ 0: 16, 32: 64] * B1[ 16: 32, 32: 64] -dsrd B1[ 80: 96, 32: 64] -dsrd A1[ 16: 32, 32: 64] -mfma C0[ 0: 16, 32: 48] += A1[ 0: 16, 32: 64] * B1[ 32: 48, 32: 64] -dsrd B1[ 96:112, 32: 64] -mfma C0[ 0: 16, 48: 64] += A1[ 0: 16, 32: 64] * B1[ 48: 64, 32: 64] -dsrd B1[112:128, 32: 64] -mfma C0[ 0: 16, 64: 80] += A1[ 0: 16, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 0: 16, 80: 96] += A1[ 0: 16, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 0: 16, 96:112] += A1[ 0: 16, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 0: 16, 112:128] += A1[ 0: 16, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 16: 32, 0: 16] += A1[ 16: 32, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 16: 32, 16: 32] += A1[ 16: 32, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[ 32: 48, 32: 64] -mfma C0[ 16: 32, 32: 48] += A1[ 16: 32, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 16: 32, 48: 64] += A1[ 16: 32, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 16: 32, 64: 80] += A1[ 16: 32, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 16: 32, 80: 96] += A1[ 16: 32, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 16: 32, 96:112] += A1[ 16: 32, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 16: 32, 112:128] += A1[ 16: 32, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 32: 48, 0: 16] += A1[ 32: 48, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 32: 48, 16: 32] += A1[ 32: 48, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[ 48: 64, 32: 64] -mfma C0[ 32: 48, 32: 48] += A1[ 32: 48, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 32: 48, 48: 64] += A1[ 32: 48, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 32: 48, 64: 80] += A1[ 32: 48, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 32: 48, 80: 96] += A1[ 32: 48, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 32: 48, 96:112] += A1[ 32: 48, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 32: 48, 112:128] += A1[ 32: 48, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 48: 64, 0: 16] += A1[ 48: 64, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 48: 64, 16: 32] += A1[ 48: 64, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[ 64: 80, 32: 64] -mfma C0[ 48: 64, 32: 48] += A1[ 48: 64, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 48: 64, 48: 64] += A1[ 48: 64, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 48: 64, 64: 80] += A1[ 48: 64, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 48: 64, 80: 96] += A1[ 48: 64, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 48: 64, 96:112] += A1[ 48: 64, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 48: 64, 112:128] += A1[ 48: 64, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 64: 80, 0: 16] += A1[ 64: 80, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 64: 80, 16: 32] += A1[ 64: 80, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[ 80: 96, 32: 64] -mfma C0[ 64: 80, 32: 48] += A1[ 64: 80, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 64: 80, 48: 64] += A1[ 64: 80, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 64: 80, 64: 80] += A1[ 64: 80, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 64: 80, 80: 96] += A1[ 64: 80, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 64: 80, 96:112] += A1[ 64: 80, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 64: 80, 112:128] += A1[ 64: 80, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 80: 96, 0: 16] += A1[ 80: 96, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 80: 96, 16: 32] += A1[ 80: 96, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[ 96:112, 32: 64] -mfma C0[ 80: 96, 32: 48] += A1[ 80: 96, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 80: 96, 48: 64] += A1[ 80: 96, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 80: 96, 64: 80] += A1[ 80: 96, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 80: 96, 80: 96] += A1[ 80: 96, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 80: 96, 96:112] += A1[ 80: 96, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 80: 96, 112:128] += A1[ 80: 96, 32: 64] * B1[112:128, 32: 64] -mfma C0[ 96:112, 0: 16] += A1[ 96:112, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[ 96:112, 16: 32] += A1[ 96:112, 32: 64] * B1[ 16: 32, 32: 64] -dsrd A1[112:128, 32: 64] -mfma C0[ 96:112, 32: 48] += A1[ 96:112, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[ 96:112, 48: 64] += A1[ 96:112, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[ 96:112, 64: 80] += A1[ 96:112, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[ 96:112, 80: 96] += A1[ 96:112, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[ 96:112, 96:112] += A1[ 96:112, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[ 96:112, 112:128] += A1[ 96:112, 32: 64] * B1[112:128, 32: 64] -mfma C0[112:128, 0: 16] += A1[112:128, 32: 64] * B1[ 0: 16, 32: 64] -mfma C0[112:128, 16: 32] += A1[112:128, 32: 64] * B1[ 16: 32, 32: 64] -mfma C0[112:128, 32: 48] += A1[112:128, 32: 64] * B1[ 32: 48, 32: 64] -mfma C0[112:128, 48: 64] += A1[112:128, 32: 64] * B1[ 48: 64, 32: 64] -mfma C0[112:128, 64: 80] += A1[112:128, 32: 64] * B1[ 64: 80, 32: 64] -mfma C0[112:128, 80: 96] += A1[112:128, 32: 64] * B1[ 80: 96, 32: 64] -mfma C0[112:128, 96:112] += A1[112:128, 32: 64] * B1[ 96:112, 32: 64] -mfma C0[112:128, 112:128] += A1[112:128, 32: 64] * B1[112:128, 32: 64] -barrier vmcnt(0) + s_barrier -dsrd B2[ 0: 16, 0: 32] -dsrd B2[ 16: 32, 0: 32] -dsrd B2[ 32: 48, 0: 32] -dsrd B2[ 48: 64, 0: 32] -dsrd A2[ 0: 16, 0: 32] -yield state: C0, A2[ 0: 16, 0: 32], B2[ 0: 64, 0: 32] +mfma C[0,0]+=A0[0,0]*B0[0,0] +dsrd B0[4,0] +bfld B1[0:2,0:2] +mfma C[0,1]+=A0[0,0]*B0[1,0] +dsrd B0[5,0] +dsrd A0[1,0] +mfma C[0,2]+=A0[0,0]*B0[2,0] +dsrd B0[6,0] +mfma C[0,3]+=A0[0,0]*B0[3,0] +dsrd B0[7,0] +mfma C[0,4]+=A0[0,0]*B0[4,0] +bfld B1[2:4,0:2] +mfma C[0,5]+=A0[0,0]*B0[5,0] +mfma C[0,6]+=A0[0,0]*B0[6,0] +mfma C[0,7]+=A0[0,0]*B0[7,0] +mfma C[1,0]+=A0[1,0]*B0[0,0] +bfld B1[4:6,0:2] +mfma C[1,1]+=A0[1,0]*B0[1,0] +dsrd A0[2,0] +mfma C[1,2]+=A0[1,0]*B0[2,0] +mfma C[1,3]+=A0[1,0]*B0[3,0] +mfma C[1,4]+=A0[1,0]*B0[4,0] +bfld B1[6:8,0:2] +mfma C[1,5]+=A0[1,0]*B0[5,0] +mfma C[1,6]+=A0[1,0]*B0[6,0] +mfma C[1,7]+=A0[1,0]*B0[7,0] +mfma C[2,0]+=A0[2,0]*B0[0,0] +bfld B1[8:10,0:2] +mfma C[2,1]+=A0[2,0]*B0[1,0] +dsrd A0[3,0] +mfma C[2,2]+=A0[2,0]*B0[2,0] +mfma C[2,3]+=A0[2,0]*B0[3,0] +mfma C[2,4]+=A0[2,0]*B0[4,0] +bfld B1[10:12,0:2] +mfma C[2,5]+=A0[2,0]*B0[5,0] +mfma C[2,6]+=A0[2,0]*B0[6,0] +mfma C[2,7]+=A0[2,0]*B0[7,0] +mfma C[3,0]+=A0[3,0]*B0[0,0] +bfld B1[12:14,0:2] +mfma C[3,1]+=A0[3,0]*B0[1,0] +dsrd A0[4,0] +mfma C[3,2]+=A0[3,0]*B0[2,0] +mfma C[3,3]+=A0[3,0]*B0[3,0] +mfma C[3,4]+=A0[3,0]*B0[4,0] +bfld B1[14:16,0:2] +mfma C[3,5]+=A0[3,0]*B0[5,0] +mfma C[3,6]+=A0[3,0]*B0[6,0] +mfma C[3,7]+=A0[3,0]*B0[7,0] +mfma C[4,0]+=A0[4,0]*B0[0,0] +bfld A1[0:4,0] +mfma C[4,1]+=A0[4,0]*B0[1,0] +dsrd A0[5,0] +mfma C[4,2]+=A0[4,0]*B0[2,0] +mfma C[4,3]+=A0[4,0]*B0[3,0] +mfma C[4,4]+=A0[4,0]*B0[4,0] +bfld A1[4:8,0] +mfma C[4,5]+=A0[4,0]*B0[5,0] +mfma C[4,6]+=A0[4,0]*B0[6,0] +mfma C[4,7]+=A0[4,0]*B0[7,0] +mfma C[5,0]+=A0[5,0]*B0[0,0] +bfld A1[8:12,0] +mfma C[5,1]+=A0[5,0]*B0[1,0] +dsrd A0[6,0] +mfma C[5,2]+=A0[5,0]*B0[2,0] +mfma C[5,3]+=A0[5,0]*B0[3,0] +mfma C[5,4]+=A0[5,0]*B0[4,0] +bfld A1[12:16,0] +mfma C[5,5]+=A0[5,0]*B0[5,0] +mfma C[5,6]+=A0[5,0]*B0[6,0] +mfma C[5,7]+=A0[5,0]*B0[7,0] +mfma C[6,0]+=A0[6,0]*B0[0,0] +dsrd B0[0,1] +bfld A1[0:4,1] +mfma C[6,1]+=A0[6,0]*B0[1,0] +dsrd A0[7,0] +dsrd B0[1,1] +mfma C[6,2]+=A0[6,0]*B0[2,0] +dsrd B0[2,1] +mfma C[6,3]+=A0[6,0]*B0[3,0] +dsrd B0[3,1] +mfma C[6,4]+=A0[6,0]*B0[4,0] +dsrd A0[0,1] +bfld A1[4:8,1] +mfma C[6,5]+=A0[6,0]*B0[5,0] +mfma C[6,6]+=A0[6,0]*B0[6,0] +mfma C[6,7]+=A0[6,0]*B0[7,0] +mfma C[7,0]+=A0[7,0]*B0[0,0] +bfld A1[8:12,1] +mfma C[7,1]+=A0[7,0]*B0[1,0] +mfma C[7,2]+=A0[7,0]*B0[2,0] +mfma C[7,3]+=A0[7,0]*B0[3,0] +mfma C[7,4]+=A0[7,0]*B0[4,0] +bfld A1[12:16,1] +mfma C[7,5]+=A0[7,0]*B0[5,0] +mfma C[7,6]+=A0[7,0]*B0[6,0] +mfma C[7,7]+=A0[7,0]*B0[7,0] +mfma C[0,0]+=A0[0,1]*B0[0,1] +dsrd B0[4,1] +mfma C[0,1]+=A0[0,1]*B0[1,1] +dsrd B0[5,1] +dsrd A0[1,1] +mfma C[0,2]+=A0[0,1]*B0[2,1] +dsrd B0[6,1] +mfma C[0,3]+=A0[0,1]*B0[3,1] +dsrd B0[7,1] +mfma C[0,4]+=A0[0,1]*B0[4,1] +mfma C[0,5]+=A0[0,1]*B0[5,1] +mfma C[0,6]+=A0[0,1]*B0[6,1] +mfma C[0,7]+=A0[0,1]*B0[7,1] +mfma C[1,0]+=A0[1,1]*B0[0,1] +mfma C[1,1]+=A0[1,1]*B0[1,1] +dsrd A0[2,1] +mfma C[1,2]+=A0[1,1]*B0[2,1] +mfma C[1,3]+=A0[1,1]*B0[3,1] +mfma C[1,4]+=A0[1,1]*B0[4,1] +mfma C[1,5]+=A0[1,1]*B0[5,1] +mfma C[1,6]+=A0[1,1]*B0[6,1] +mfma C[1,7]+=A0[1,1]*B0[7,1] +mfma C[2,0]+=A0[2,1]*B0[0,1] +mfma C[2,1]+=A0[2,1]*B0[1,1] +dsrd A0[3,1] +mfma C[2,2]+=A0[2,1]*B0[2,1] +mfma C[2,3]+=A0[2,1]*B0[3,1] +mfma C[2,4]+=A0[2,1]*B0[4,1] +mfma C[2,5]+=A0[2,1]*B0[5,1] +mfma C[2,6]+=A0[2,1]*B0[6,1] +mfma C[2,7]+=A0[2,1]*B0[7,1] +mfma C[3,0]+=A0[3,1]*B0[0,1] +mfma C[3,1]+=A0[3,1]*B0[1,1] +dsrd A0[4,1] +mfma C[3,2]+=A0[3,1]*B0[2,1] +mfma C[3,3]+=A0[3,1]*B0[3,1] +mfma C[3,4]+=A0[3,1]*B0[4,1] +mfma C[3,5]+=A0[3,1]*B0[5,1] +mfma C[3,6]+=A0[3,1]*B0[6,1] +mfma C[3,7]+=A0[3,1]*B0[7,1] +mfma C[4,0]+=A0[4,1]*B0[0,1] +mfma C[4,1]+=A0[4,1]*B0[1,1] +dsrd A0[5,1] +mfma C[4,2]+=A0[4,1]*B0[2,1] +mfma C[4,3]+=A0[4,1]*B0[3,1] +mfma C[4,4]+=A0[4,1]*B0[4,1] +mfma C[4,5]+=A0[4,1]*B0[5,1] +mfma C[4,6]+=A0[4,1]*B0[6,1] +mfma C[4,7]+=A0[4,1]*B0[7,1] +mfma C[5,0]+=A0[5,1]*B0[0,1] +mfma C[5,1]+=A0[5,1]*B0[1,1] +dsrd A0[6,1] +mfma C[5,2]+=A0[5,1]*B0[2,1] +mfma C[5,3]+=A0[5,1]*B0[3,1] +mfma C[5,4]+=A0[5,1]*B0[4,1] +mfma C[5,5]+=A0[5,1]*B0[5,1] +mfma C[5,6]+=A0[5,1]*B0[6,1] +mfma C[5,7]+=A0[5,1]*B0[7,1] +mfma C[6,0]+=A0[6,1]*B0[0,1] +mfma C[6,1]+=A0[6,1]*B0[1,1] +dsrd A0[7,1] +mfma C[6,2]+=A0[6,1]*B0[2,1] +mfma C[6,3]+=A0[6,1]*B0[3,1] +mfma C[6,4]+=A0[6,1]*B0[4,1] +mfma C[6,5]+=A0[6,1]*B0[5,1] +mfma C[6,6]+=A0[6,1]*B0[6,1] +mfma C[6,7]+=A0[6,1]*B0[7,1] +mfma C[7,0]+=A0[7,1]*B0[0,1] +mfma C[7,1]+=A0[7,1]*B0[1,1] +mfma C[7,2]+=A0[7,1]*B0[2,1] +mfma C[7,3]+=A0[7,1]*B0[3,1] +mfma C[7,4]+=A0[7,1]*B0[4,1] +mfma C[7,5]+=A0[7,1]*B0[5,1] +mfma C[7,6]+=A0[7,1]*B0[6,1] +mfma C[7,7]+=A0[7,1]*B0[7,1] +barrier vmcnt(0)+s_barrier +dsrd B1[0,0] +dsrd B1[1,0] +dsrd B1[2,0] +dsrd B1[3,0] +dsrd A1[0,0] +yield C,A1[0,0],B1[0:4,0] From 9bc116a12900ebba5777e27c88a4de03887702da Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 22 Jun 2026 06:20:05 +0000 Subject: [PATCH 087/118] fp8_gemm_4wave: pin MFMA accumulator in AGPR (+5~13% across medium-large shapes) Subclass Mfma16x16x128 with an inline-asm MFMA (constraint `=a,v,v,0`) that accumulates the f32x4 chain in-place on AGPR, so the compiler stops inserting v_accvgpr_mov/read + s_nop to shuffle the accumulator between AGPR slots (the dominant stall in the ssa-lowered path). Also tighten the XCD-swizzle threshold (`<=` -> `<`). Measured on gfx950 (MI355X), flydsl vs torch._scaled_mm: | shape (M,N,K) | layout | before | after | |--------------------|------------|---------|---------| | 5120,5120,8320 | rowmajor | 2165 | 2296 | | 5120,5120,8320 | preshuffle | 2133 | 2327 | | 8192,8192,8192 | rowmajor | 2675 | 2907 | | 8192,8192,8192 | preshuffle | 2570 | 2852 | | 9728,8192,8320 | rowmajor | 2707 | 2863 | | 9728,8192,8320 | preshuffle | 2666 | 2871 | | 16384,16384,16384 | rowmajor | 3216 | 3441 | | 16384,16384,16384 | preshuffle | 3158 | 3441 | (TFLOPS). Add the 16384^3 shape to the row-scale test for both 4wave/8wave. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp8_gemm_4wave.py | 27 +++++++++++++++++++++++-- tests/kernels/test_fp8_gemm_rowscale.py | 2 ++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/kernels/fp8_gemm_4wave.py b/kernels/fp8_gemm_4wave.py index 1f32a4356..b78e5aa32 100644 --- a/kernels/fp8_gemm_4wave.py +++ b/kernels/fp8_gemm_4wave.py @@ -19,7 +19,10 @@ import flydsl.compiler as flyc import flydsl.expr as fx +from flydsl._mlir.dialects import llvm as _llvm from flydsl.expr import arith, const_expr, range_constexpr +from flydsl.expr import vector as _vector +from flydsl.expr.typing import T as _T from kernels.fp8_gemm_utils import ( G2SLoader, Mfma16x16x128, @@ -35,6 +38,26 @@ ) +class Mfma16x16x128AGPR(Mfma16x16x128): + """fp8 16x16x128 MFMA that pins the accumulator in AGPR via inline asm + (constraint `=a,v,v,0`), so the f32x4 accumulator accumulates in-place and + the compiler does not insert v_accvgpr_mov/read + s_nop to shuffle the + accumulator between AGPR slots (the dominant stall in the ssa-lowered path). + scale is left default (=0); the real per-token scale is applied in StoreC.""" + + def _do_mma(self, a, b, c): + a_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), a) + b_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), b) + res_ty = _T.vec(4, _T.f32) + return _llvm.inline_asm( + res_ty, + [arith._to_raw(a_i32x8), arith._to_raw(b_i32x8), arith._to_raw(c)], + "v_mfma_f32_16x16x128_f8f6f4 $0, $1, $2, $0", + "=a,v,v,0", + has_side_effects=True, + ) + + def _min(a, b): return arith.select(a < b, a, b) @@ -62,7 +85,7 @@ def _xcd_swizzle(num_pid_m, num_pid_n): pid_n, intra_group_m = divmod(intra_group, group_size_m) pid_m = first_pid_m + intra_group_m - use_simple = (num_wg <= SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) + use_simple = (num_wg < SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) return (arith.select(use_simple, simple_m, pid_m), arith.select(use_simple, simple_n, pid_n)) @@ -161,7 +184,7 @@ def _compute_lds_swizzle(s2r, preshuffled=False): lds_swz.append(swz) return lds_swz - mfma = Mfma16x16x128(N_TILES_A, N_TILES_B) + mfma = Mfma16x16x128AGPR(N_TILES_A, N_TILES_B) def _interleaved_cluster( lds_dst, diff --git a/tests/kernels/test_fp8_gemm_rowscale.py b/tests/kernels/test_fp8_gemm_rowscale.py index c7f5d1ca8..f5bcf250a 100644 --- a/tests/kernels/test_fp8_gemm_rowscale.py +++ b/tests/kernels/test_fp8_gemm_rowscale.py @@ -204,6 +204,7 @@ def _launch(c, a, b, sa, sb): pytest.param(5120, 5120, 8320, 256, 256, id="5120x5120x8320"), pytest.param(8192, 8192, 8192, 256, 256, marks=pytest.mark.large_shape, id="8192x8192x8192"), pytest.param(9728, 8192, 8320, 256, 256, marks=pytest.mark.large_shape, id="9728x8192x8320"), + pytest.param(16384, 16384, 16384, 256, 256, marks=pytest.mark.large_shape, id="16384x16384x16384"), ], ) @pytest.mark.parametrize("preshuffle_b", [False, True], ids=["rowmajor", "preshuffle_b"]) @@ -226,6 +227,7 @@ def test_fp8_gemm_4wave(M, N, K, tile_m, tile_n, preshuffle_b): pytest.param(5120, 5120, 8320, 256, 256, id="5120x5120x8320"), pytest.param(8192, 8192, 8192, 256, 256, marks=pytest.mark.large_shape, id="8192x8192x8192"), pytest.param(9728, 8192, 8320, 256, 256, marks=pytest.mark.large_shape, id="9728x8192x8320"), + pytest.param(16384, 16384, 16384, 256, 256, marks=pytest.mark.large_shape, id="16384x16384x16384"), ], ) @pytest.mark.parametrize("preshuffle_b", [False, True], ids=["rowmajor", "preshuffle_b"]) From 9222112f60902272c172a3f2930aff46c999a49b Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 10:44:41 +0000 Subject: [PATCH 088/118] fp4_gemm_4wave: 4-wave MXFP4 GEMM (cos 0.999999, ~2455 TFLOPS @ 8192^3) New 4-wave/1-occupancy MXFP4 GEMM kernel ported from fp8_gemm_4wave, with fp4 mfma_scale (cbsz=4, per-32 e8m0 scale via compile-time opsel byte-select, shuffle_scale_w4 layout). Depth-0 scale load + direct i32x4 MFMA operands. Currently spill_v=47 / VMEM-wait bound; WIP toward beating the 4071 baseline. Also adds the kernel-dataflow-schedule skill (source-level compact pipeline schedules), att-hotloop-benchmark skill, and fp4/hgemm schedule docs. .gitignore now excludes ATT zips and profiler_traces/ rocprofv3 outputs. --- .claude/skills/att-hotloop-benchmark/SKILL.md | 199 +++++ .../att-hotloop-benchmark/agents/openai.yaml | 4 + .../scripts/att_hotloop_cycles.py | 198 +++++ .../skills/kernel-dataflow-schedule/SKILL.md | 93 +++ .gitignore | 13 + docs/kimi_fp4_moe_16384_mxfp4_flow.md | 782 ++++++++++++++++++ hgemm_wave0_compact_schedule.txt | 193 +++++ kernels/fp4_gemm_4wave.py | 477 +++++++++++ .../fp8_4wave_compact_schedule.txt | 195 +++++ .../hgemm_register_prefetch_pipeline_plan.md | 234 ++++++ 10 files changed, 2388 insertions(+) create mode 100644 .claude/skills/att-hotloop-benchmark/SKILL.md create mode 100644 .claude/skills/att-hotloop-benchmark/agents/openai.yaml create mode 100755 .claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py create mode 100644 .claude/skills/kernel-dataflow-schedule/SKILL.md create mode 100644 docs/kimi_fp4_moe_16384_mxfp4_flow.md create mode 100644 hgemm_wave0_compact_schedule.txt create mode 100644 kernels/fp4_gemm_4wave.py create mode 100644 resource_inspect/fp8_4wave_compact_schedule.txt create mode 100644 resource_inspect/hgemm_register_prefetch_pipeline_plan.md diff --git a/.claude/skills/att-hotloop-benchmark/SKILL.md b/.claude/skills/att-hotloop-benchmark/SKILL.md new file mode 100644 index 000000000..51a32a998 --- /dev/null +++ b/.claude/skills/att-hotloop-benchmark/SKILL.md @@ -0,0 +1,199 @@ +--- +name: att-hotloop-benchmark +description: Capture and analyze ROCm rocprofv3 Advanced Thread Trace (ATT) for FlyDSL or AMD GPU kernels, especially when the user asks to dump hot-loop cycles, compare kernel schedules using barrier-to-barrier cycle counts, inspect dispatch ATT traces, report MFMA utilization from hot-loop cycles, or use ATT rather than wall-clock TFLOPS as the benchmark. +--- + +# ATT Hotloop Benchmark + +## Goal + +Use ATT as the primary benchmark for scheduling work. Prefer cycle windows from the ATT UI output over wall-clock microbenchmarks when the user is optimizing hot loops, MFMA/VMEM/DSRD interleaving, waitcnt stalls, or barrier-to-barrier loop bodies. + +## Capture Workflow + +0. Pick an idle GPU first with `gpu_select.py` (repo root), then bind it for every + subsequent command. ATT capture is invalid if another process shares the CU. + +```bash +GPU=$(python3 -c "import gpu_select; print(gpu_select.select_empty_gpu().index)") +echo "selected GPU $GPU" +export HIP_VISIBLE_DEVICES=$GPU +``` + +Prefer a long-K shape so the steady-state hot loop dominates over prologue/tail +(e.g. fp8_gemm_4wave reaches ~3000 TFLOPS at 8192x8192x16384 vs ~2380 at +5120x5120x8320). Use the same shape for capture and for any before/after compare. + +1. Build or run the target once with debug info and dumps enabled so source lines and ISA are available: + +```bash +FLYDSL_RUNTIME_ENABLE_CACHE=0 \ +FLYDSL_DUMP_IR=1 \ +FLYDSL_DUMP_DIR=resource_inspect/ \ +FLYDSL_DEBUG_ENABLE_DEBUG_INFO=1 \ + +``` + +2. Capture ATT with `rocprofv3`. Use a narrow `kernel_include_regex`, keep only 1-2 iterations, and enable UI-compatible CSV output: + +```bash +cat >/tmp/att.yaml <<'YAML' +jobs: + - kernel_include_regex: + kernel_iteration_range: "[1, [1-2]]" + output_file: att + output_directory: profiler_traces_grid/ + output_format: [csv] + truncate_kernels: true + sys_trace: true + advanced_thread_trace: true + att_target_cu: 1 + att_shader_engine_mask: "0xf" + att_simd_select: "0xf" + att_buffer_size: "0x6000000" +YAML + +FLYDSL_RUNTIME_ENABLE_CACHE=0 \ +FLYDSL_DEBUG_ENABLE_DEBUG_INFO=1 \ +rocprofv3 -i /tmp/att.yaml -- +``` + +3. Locate the UI output directory: + +```bash +find profiler_traces_grid/ -maxdepth 2 -type d -name 'ui_output_agent_*_dispatch_*' +``` + +### Which dispatch to open + +There are usually several `dispatch_` dirs (one per kernel launch in the +`kernel_iteration_range`, e.g. `--iters 2` -> two dispatches). **They are +equivalent repeats of the same kernel** — pick any *valid* one and tell the user +exactly which you used. A dispatch is valid iff `--list-barriers` returns a +non-zero barrier count (and the same count across dispatches); skip any whose +`code.json` is empty/`null` (it yields 0 barriers / unparseable output). Default +to the lowest-numbered valid dispatch. When handing a zip to the user, name the +single dispatch+wave to open so they don't have to guess. + +## Hot-Loop Cycle Policy + +Use one wave JSON file from the selected dispatch directory, usually `se*_sm*_sl*_wv0.json` or the wave with the most instructions. Treat `s_barrier` timestamps as loop boundaries when the kernel synchronizes once per outer loop. + +For stable comparisons: + +- Prefer a middle barrier window, for example barrier 30 to barrier 50, instead of loop-top setup or tail loops. +- Report `total_cycles`, `cycles_per_loop`, start/end barrier ordinals, and start/end cycles. +- Also report instruction mix inside the same window: `v_mfma`, `ds_read`, `buffer_load`, `s_waitcnt`, `s_barrier`, and other instructions. +- For MFMA throughput sanity, compute `cycles_per_mfma16 = total_cycles / (mfma_count * 16)` when the window contains MFMA instructions. Lower is better; `1.0` means the selected window averages one 16-cycle MFMA issue slot per MFMA. + +### MFMA cycle cost depends on the instruction + +The script's `cycles_per_mfma16` assumes a 16-cycle MFMA. Many wide MFMAs cost +more. Pick the issue latency of the actual atom before computing utilization: + +- `MFMA_Scale 16x16x128` (fp8, e.g. fp8_gemm_4wave / Mfma16x16x128) issues every + **32 cycles**, not 16. + +For those, compute by hand from `total_cycles` and `mfma_count`: + +```text +mfma_cycle = 32 # the atom's issue latency +ideal_cycles = mfma_count * mfma_cycle +utilization = ideal_cycles / total_cycles # closer to 1.0 is better +cycles_per_mfma = total_cycles / mfma_count # compare against mfma_cycle +``` + +Example (fp8_gemm_4wave, 8192x8192x16384, barrier window 30:50): total 24916, +mfma_count 645 -> ideal 645*32=20640 -> utilization 20640/24916 = 0.83 (~83%). + +If the user gives explicit UI cycle coordinates, use a cycle range directly instead of barrier ordinals. + +### Isolating exactly one loop iteration + +A kernel that issues N `s_barrier` per outer-loop iteration spans N barrier +intervals per iteration (fp8_gemm_4wave issues 2: `wait -> block1+block2 -> +wait -> block3+block4`). To get the cycle->cycle bounds of a single iteration, +list barriers and take a window `N` apart starting on an even iteration boundary: + +```bash +python scripts/att_hotloop_cycles.py --list-barriers | sed -n '40,46p' +# pick barrier k that starts an iteration, window k:k+N (N=barriers per iter) +python scripts/att_hotloop_cycles.py --barrier-window 38:40 +``` + +Report it as `cycle_start -> cycle_end` with `total_cycles` = one iteration, and +name the exact wave file the numbers came from, e.g. +`se0_sm0_sl0_wv0.json`. The user jumps to `cycle_start` in the UI to land on the +iteration's first `s_barrier`. + +## Script + +Use `scripts/att_hotloop_cycles.py` for deterministic parsing of ATT UI output: + +```bash +python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ + profiler_traces_grid//ui_output_agent__dispatch_ \ + --list-barriers +``` + +```bash +python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ + profiler_traces_grid//ui_output_agent__dispatch_ \ + --barrier-window 30:50 \ + --per-interval +``` + +```bash +python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ + profiler_traces_grid//ui_output_agent__dispatch_ \ + --cycle-range 123552:125600 +``` + +Important output fields: + +- `cycle_start`, `cycle_end`: ATT cycle coordinates to jump to in the UI. +- `total_cycles`: `cycle_end - cycle_start`. +- `cycles_per_loop`: `total_cycles / number_of_barrier_intervals`. +- `mfma_count`: one-wave MFMA instruction count in the selected window. +- `cycles_per_mfma16`: `total_cycles / (mfma_count * 16)`. + +## Reporting + +When answering the user, lead with the cycle result and the exact dispatch/wave/window: + +```text +dispatch: ui_output_agent_123_dispatch_7 +wave: se0_sm0_sl0_wv0.json +barrier window: 30 -> 50 +cycle range: 123552 -> 176084 +hot-loop cycles: 52532 total, 2626.6 per loop +mfma_count: 1280 +cycles_per_mfma16: 2.565 +``` + +Then summarize the instruction mix and any obvious stall source. Avoid using wall-clock TFLOPS as the main comparison unless the user explicitly asks for it. + +## Packaging the trace for the user + +When asked to hand off the trace, zip the whole trace-name directory, keeping its +structure intact. The UI viewer needs the dispatch dir's `filenames.json` to sit +next to the sibling raw `.att` files and code-object `.out` files at the +trace-name level; do NOT zip only the `ui_output_*_dispatch_*` dir or only its +contents -- both break the viewer (`Invalid or inaccessible path: .../filenames.json`). + +```bash +zip -rq _att.zip profiler_traces_grid/ +# sanity: the dispatch dir + its filenames.json are nested under trace-name +unzip -l _att.zip | grep filenames.json +``` + +Always report the handoff in exactly this three-line format (nothing else needed): + +```text +1. /root/FlyDSL/_att.zip +2. ui_output_agent__dispatch_/se0_sm0_sl0_wv0.json +3. cycle -> (共 ) +``` + +Where line 3 is one complete for-loop iteration (the cycle range to jump to in +the UI, and its total cycle count). Keep this exact ordering and labels. diff --git a/.claude/skills/att-hotloop-benchmark/agents/openai.yaml b/.claude/skills/att-hotloop-benchmark/agents/openai.yaml new file mode 100644 index 000000000..d333a90a4 --- /dev/null +++ b/.claude/skills/att-hotloop-benchmark/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "ATT Hotloop Benchmark" + short_description: "Measure ATT barrier-window hot-loop cycles" + default_prompt: "Use $att-hotloop-benchmark to capture ATT and report hot-loop cycles for a FlyDSL kernel." diff --git a/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py b/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py new file mode 100755 index 000000000..f41cbde12 --- /dev/null +++ b/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +"""Summarize ATT UI hot-loop cycles from a dispatch directory. + +The script reads rocprofv3 ATT UI output directories containing code.json and +se*_sm*_sl*_wv*.json files. It measures either a barrier-to-barrier window or +an explicit cycle range for one wave. +""" + +from __future__ import annotations + +import argparse +import glob +import json +import re +from collections import Counter +from pathlib import Path + + +def load_code(ui_dir: Path) -> dict[int, str]: + code_path = ui_dir / "code.json" + with code_path.open("r", encoding="utf-8") as f: + payload = json.load(f) + code_by_id: dict[int, str] = {} + for entry in payload["code"]: + # Header is: ISA, _, LineNumber, Source, Codeobj, Vaddr, Hit, Latency, Stall, Idle + isa = entry[0] + code_id = int(entry[2]) + code_by_id[code_id] = isa + return code_by_id + + +def wave_files(ui_dir: Path, pattern: str) -> list[Path]: + return sorted(Path(p) for p in glob.glob(str(ui_dir / pattern))) + + +def choose_wave(ui_dir: Path, pattern: str, explicit: str | None) -> Path: + if explicit: + p = Path(explicit) + return p if p.is_absolute() else ui_dir / p + candidates = wave_files(ui_dir, pattern) + if not candidates: + raise SystemExit(f"no wave json files matching {pattern!r} under {ui_dir}") + + def num_insts(path: Path) -> int: + with path.open("r", encoding="utf-8") as f: + return int(json.load(f).get("num_insts", 0)) + + return max(candidates, key=num_insts) + + +def load_wave(path: Path) -> list[tuple[int, int]]: + with path.open("r", encoding="utf-8") as f: + payload = json.load(f) + out: list[tuple[int, int]] = [] + for inst in payload["wave"]["instructions"]: + cycle = int(inst[0]) + code_id = int(inst[-1]) + out.append((cycle, code_id)) + return out + + +def parse_range(text: str) -> tuple[int, int]: + m = re.fullmatch(r"\s*(\d+)\s*:\s*(\d+)\s*", text) + if not m: + raise argparse.ArgumentTypeError("expected START:END") + start, end = int(m.group(1)), int(m.group(2)) + if end <= start: + raise argparse.ArgumentTypeError("END must be greater than START") + return start, end + + +def classify(isa: str) -> str: + if "v_mfma" in isa: + return "v_mfma" + if "ds_read" in isa: + return "ds_read" + if "ds_write" in isa: + return "ds_write" + if "buffer_load" in isa: + if " lds" in isa: + return "buffer_load_lds" + return "buffer_load" + if "buffer_store" in isa: + return "buffer_store" + if isa.startswith("s_waitcnt"): + return "s_waitcnt" + if isa.startswith("s_barrier"): + return "s_barrier" + if isa.startswith("s_"): + return "salu" + if isa.startswith("v_"): + return "valu" + return "other" + + +def barrier_events(instructions: list[tuple[int, int]], code_by_id: dict[int, str]) -> list[tuple[int, int]]: + events = [] + for cycle, code_id in instructions: + if "s_barrier" in code_by_id.get(code_id, ""): + events.append((cycle, code_id)) + return events + + +def summarize_window( + instructions: list[tuple[int, int]], + code_by_id: dict[int, str], + start_cycle: int, + end_cycle: int, +) -> Counter[str]: + counts: Counter[str] = Counter() + for cycle, code_id in instructions: + if start_cycle <= cycle < end_cycle: + counts[classify(code_by_id.get(code_id, ""))] += 1 + return counts + + +def print_barriers(events: list[tuple[int, int]], code_by_id: dict[int, str]) -> None: + print(f"barriers={len(events)}") + for i, (cycle, code_id) in enumerate(events): + print(f"{i:4d} cycle={cycle} code_id={code_id} isa={code_by_id.get(code_id, '')}") + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("ui_dir", type=Path, help="ATT ui_output_agent_*_dispatch_* directory") + parser.add_argument("--wave-file", help="Wave JSON filename or absolute path") + parser.add_argument("--wave-glob", default="se*_sm*_sl*_wv*.json", help="Wave JSON glob under ui_dir") + parser.add_argument("--list-barriers", action="store_true", help="List s_barrier events and exit") + parser.add_argument("--barrier-window", type=parse_range, help="Barrier ordinal window START:END") + parser.add_argument("--cycle-range", type=parse_range, help="Explicit cycle window START:END") + parser.add_argument("--auto-middle", type=int, help="Use N middle barrier intervals") + parser.add_argument("--per-interval", action="store_true", help="Print cycles for each barrier interval") + args = parser.parse_args() + + ui_dir = args.ui_dir.resolve() + code_by_id = load_code(ui_dir) + wave_path = choose_wave(ui_dir, args.wave_glob, args.wave_file).resolve() + instructions = load_wave(wave_path) + barriers = barrier_events(instructions, code_by_id) + + print(f"ui_dir={ui_dir}") + print(f"wave={wave_path.name}") + + if args.list_barriers: + print_barriers(barriers, code_by_id) + return + + window_label = "cycle_range" + loops = 1 + if args.cycle_range: + start_cycle, end_cycle = args.cycle_range + else: + if len(barriers) < 2: + raise SystemExit("need at least two s_barrier events or pass --cycle-range") + if args.barrier_window: + b_start, b_end = args.barrier_window + else: + n = args.auto_middle or min(20, len(barriers) - 1) + if n <= 0: + raise SystemExit("--auto-middle must be positive") + b_start = max(0, (len(barriers) - 1 - n) // 2) + b_end = b_start + n + if b_start < 0 or b_end >= len(barriers) or b_end <= b_start: + raise SystemExit(f"invalid barrier window {b_start}:{b_end}; have {len(barriers)} barriers") + start_cycle = barriers[b_start][0] + end_cycle = barriers[b_end][0] + loops = b_end - b_start + window_label = f"barrier_window={b_start}:{b_end}" + + counts = summarize_window(instructions, code_by_id, start_cycle, end_cycle) + total_cycles = end_cycle - start_cycle + mfma_count = counts["v_mfma"] + + print(window_label) + print(f"cycle_start={start_cycle}") + print(f"cycle_end={end_cycle}") + print(f"total_cycles={total_cycles}") + print(f"loops={loops}") + print(f"cycles_per_loop={total_cycles / loops:.3f}") + print(f"mfma_count={mfma_count}") + if mfma_count: + print(f"cycles_per_mfma16={total_cycles / (mfma_count * 16):.6f}") + + print("instruction_mix:") + for key, value in counts.most_common(): + print(f" {key}: {value}") + + if args.per_interval and not args.cycle_range: + b_start, b_end = map(int, window_label.split("=")[1].split(":")) + print("interval_cycles:") + for i in range(b_start, b_end): + c0 = barriers[i][0] + c1 = barriers[i + 1][0] + print(f" {i:4d}->{i + 1:<4d} {c1 - c0}") + + +if __name__ == "__main__": + main() diff --git a/.claude/skills/kernel-dataflow-schedule/SKILL.md b/.claude/skills/kernel-dataflow-schedule/SKILL.md new file mode 100644 index 000000000..d59caf8b6 --- /dev/null +++ b/.claude/skills/kernel-dataflow-schedule/SKILL.md @@ -0,0 +1,93 @@ +--- +name: kernel-dataflow-schedule +description: Write a compact, source-derived steady-state SCHEDULE for one wave of a GEMM/attention kernel, by hand-reading the kernel source (NOT the ISA). Each line is one logical op (mfma / dsrd / bfld / barrier) in program order, with C blocks in GLOBAL coordinates, A/B operands as double-buffer positions (A0/A1/B0/B1), explicit vmcnt on every barrier, and an end-of-iteration count check. Use when the user asks to "describe/draw the data flow", "画数据流 / 流水排布", "compact schedule", "走一遍这个 kernel 的流水", or to explain how mfma/ds_read/buffer_load interleave and which buffer each load fills. This is the SOURCE-LEVEL companion to the ISA-level hotloop-table skill. +--- + +# Kernel Dataflow Schedule + +Produce a human-verifiable, source-level schedule of one wave's steady-state +main loop. The goal is a table the user can read line-by-line to (1) confirm +correctness of the pipeline (which buffer/block each load touches, which slice it +holds) and (2) reason about latency hiding (how dsrd/bfld are co-issued in the +MFMA shadow). This is NOT the ISA hotloop-table (that collapses real AMDGCN to +M/r/L/B); here we hand-derive from the Python/C++ kernel source and keep full +operand positions. + +Reference examples (read these first, match their style EXACTLY): +- `resource_inspect/hgemm_wave0_compact_schedule.txt` (bf16, K=32 mfma -> ops + carry a k-subtile index like `A0[5,1]`) +- `resource_inspect/fp8_4wave_compact_schedule.txt` (fp8, K=128 mfma -> one mfma + consumes a whole block, no k index on mfma) + +## The four ops (only these, one per line, in program order) + +| op | meaning | source it comes from | +|----|---------|----------------------| +| `mfma C[r,c] += A0[a]*B0[b]` | one MMA instruction | mfma.call_one / mma_atom_call | +| `dsrd [blk,h]` | LDS -> reg, one load granule | s2r.load_one / ds_read | +| `bfld [lo:hi]` | global -> LDS chunk | g2s.load_one / buffer_load_lds | +| `barrier vmcnt(N)+s_barrier` | wait_barrier(N) | wait_barrier / gpu.barrier | + +Drop everything else (address math, salu/valu, packing). Keep blank lines between +logical groups (e.g. per output quadrant) so the structure is scannable. + +## Notation conventions (the agreed style) + +- **One wave only** (wave0). Steady-state main-loop body = one outer K iteration. +- **C blocks: GLOBAL coordinates.** The output tile is a grid of 16x16 MFMA + blocks; `C[r,c]` uses the block's global (row,col) index over the whole + BLOCK_M x BLOCK_N tile (e.g. a 256x256 tile -> r,c in 0..15). If the wave owns a + strided set, say so in the header and use the real global indices (e.g. wave0 = + rows {0..3,8..11} x cols {0..3,8..11}). +- **A/B operands: double-buffer view `A0/A1/B0/B1`.** Merge the kernel's physical + sub-buffers into two logical buffers per operand: `A0`=current K-slice, + `A1`=next K-slice (prefetch), same for B. Each logical buffer is the full + BLOCK_M (or BLOCK_N) x BLOCK_K, indexed by block: `A0[blk]`. If the kernel + splits M/N into halves, map them into one block range (e.g. half0 -> blk 0..7, + half1 -> blk 8..15) so block numbers line up with the global C rows/cols. +- **mfma operand index has NO K subscript when one mfma eats the whole BLOCK_K** + (e.g. fp8 16x16x128). It DOES carry a k-subtile index when BLOCK_K needs + multiple mfma along K (e.g. bf16 16x16x32 -> `A0[5,1]` = block5, k-half1). +- **dsrd second index `h` is the LOAD granularity**, not necessarily a K subtile: + if one ds_read moves half a block, write `B0[8,0]` / `B0[8,1]` for the two + halves that pack into one mfma operand. State this in the header. +- **bfld writes a BLOCK RANGE** `[lo:hi]` (which row/col blocks of the K+P + prefetch slice this g2s step fills). Compute the range from the loader's + per-step row stride. Name the destination buffer explicitly (A0/B0 if the + kernel refills the current buffer in place + swaps, A1/B1 if it writes the + other buffer). Note which convention this kernel uses -- it is a real semantic + difference between kernels. +- **Every barrier shows its vmcnt** as `barrier vmcnt(N)+s_barrier`. N = max + outstanding VMEM allowed (smaller = waits for more to land). Derive N from the + wait_barrier argument symbolically AND give the number. +- **Ignore swizzle.** It relabels LDS addresses, not pipeline order. Say so once. + +## How to produce it (steps) + +1. Read the kernel source: launch config (threads, waves, BLOCK_M/N/K), the + per-wave tile ownership, the loader classes (G2S, S2R), the mma wrapper, and + the main loop body. Do NOT read ISA -- this is a source-derived schedule. +2. Fix the wave0 -> C-block mapping (compute it from store offsets / wave_i,j). +3. Define the logical A0/A1/B0/B1 merge and the block-index convention; write the + header block (layout, buffers, notation, K-slice bookkeeping) like the + examples. +4. Walk the main loop in program order. For each compute cluster emit mfma lines + interleaved with the exact dsrd/bfld the source issues between them. Put the + barriers where the source calls wait_barrier, with the resolved vmcnt. +5. Track K-slice bookkeeping: which slice each buffer holds on entry, what the + bfld writes (K+P), and the end-of-iter swap. State entry/exit so the user can + confirm the pipeline is consistent. +6. **Count check** at the end: mfma / dsrd / bfld counts per iteration, and + confirm bfld count == the main-loop vmcnt value (they usually match by + construction). List the barrier split points. + +## Output + +- Write to `resource_inspect/_wave0_compact_schedule.txt` (or answer + inline if the user only wants to read it). +- Keep the header explanatory but put NO inline comments on the op lines unless + asked -- the user reads the ops directly. Blank lines separate quadrants/groups. +- After writing, surface the 1-2 load-buffer-convention assumptions you made + (in-place refill+swap vs write-other-buffer; strided vs contiguous wave + footprint) and ask the user to confirm, since those are the easy things to get + backwards. diff --git a/.gitignore b/.gitignore index 29c9d6a27..6a65971ec 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,16 @@ core.gpu *.o *.stderr *.stdout + +# Profiler / ATT trace outputs and packaged traces +*.zip +profiler_traces/ +profiler_traces_grid/ +.rocprofv3/ +resource_inspect/*_dump/ +resource_inspect/aiter_*/ +resource_inspect/bm16_*/ + +# Agent / tooling scratch +.agents/ +codexhook.sh diff --git a/docs/kimi_fp4_moe_16384_mxfp4_flow.md b/docs/kimi_fp4_moe_16384_mxfp4_flow.md new file mode 100644 index 000000000..6f73ea4a8 --- /dev/null +++ b/docs/kimi_fp4_moe_16384_mxfp4_flow.md @@ -0,0 +1,782 @@ +# Kimi FP4 MoE 16384 MXFP4 Flow + +This note is a map for the current all-FlyDSL MXFP4 path in +`kimi_fp4_moe_16384_opt_simplify.py`, centered on: + +```python +run_kimi_fp4_mxfp4_moe_16384_all_flydsl(...) +``` + +It is meant as a reading guide. The detailed GEMM scheduling, MFMA tiling, and +LDS pipeline are still in the kernel code; this document focuses on which +buffers exist, how rows are rearranged, and why the final scatter/reduce is +needed. + +## Fixed Shape + +| name | value | +| --- | ---: | +| `TOKEN` | 16384 | +| `TOPK` | 9 | +| `EXPERTS` | 385 | +| `MODEL_DIM` | 7168 | +| `INTER_DIM` | 512 | +| `MXFP4_BLOCK_M` | 128 | +| routed pairs before padding | `TOKEN * TOPK = 147456` | +| worst-case padded sorted rows | `max_sorted = 196352` | +| sorted expert blocks | `max_sorted / 128 = 1534` | + +MXFP4 storage convention in this file: + +| logical data | packed value shape | scale shape | +| --- | --- | --- | +| hidden `[TOKEN, MODEL_DIM]` | `[16384, 3584]` uint8 | `[16384, 224]` uint8 | +| intermediate `[sorted, INTER_DIM]` | `[196352, 256]` uint8 | logical `[196352, 16]`, but stored in GEMM2 shuffled layout | +| output per routed row `[sorted, MODEL_DIM]` | `[196352, 3584]` uint8 | `[196352, 224]` uint8 | + +## Stage Count vs Kernel Count + +There are 6 high-level Python stages in `run_kimi_fp4_mxfp4_moe_16384_all_flydsl`, +but 8 actual GPU kernel launches. The difference is that the first stage, +`kimi_mxfp4_sort_16384`, launches three kernels internally. + +| high-level stage | actual GPU launches | +| --- | --- | +| 1. `kimi_mxfp4_sort_16384` | `sort_count`, `sort_cumsum`, `sort_place_pad` | +| 2. `kimi_mxfp4_quant_16384` | `quant` | +| 3. `kimi_mxfp4_sort_scales_16384` | `sort_scales` | +| 4. `kimi_mxfp4_gemm1_16384` | `gemm1` | +| 5. `kimi_mxfp4_gemm2_mxfp4out_16384` | `gemm2_mxfp4out` | +| 6. `kimi_mxfp4_scatter_reduce_q_16384` | `scatter_reduce_q` | + +So if "kernel" means Python wrapper stage, there are 6. If it means GPU launch, +there are 8. + +## Main Dataflow + +```mermaid +flowchart TD + HS["hidden_states
(16384, 7168) bf16"] --> Q["kimi_mxfp4_quant_16384
per 32 model values:
fp4x2 bytes + e8m0 scale"] + Q --> AQ["a_quant
(16384, 3584) uint8"] + Q --> AS["a_scale
(16384, 224) uint8"] + + TOPKID["topk_ids
(16384, 9) int32"] --> SORT + TOPKW["topk_weight
(16384, 9) f32"] --> SORT + + subgraph SORT["kimi_mxfp4_sort_16384
expert-major sort + BM128 padding"] + direction TB + SC["sort_count
count routed pairs per expert
block_offsets: (385, 16)"] + SP["sort_cumsum
sum counts, round each expert to BM128,
prefix starts, fill sorted_expert_ids"] + SPL["sort_place_pad
place real rows, write inverse map,
append padding rows"] + SC --> SP --> SPL + end + + SORT --> STI["sorted_token_ids
(196352) int32
packed token/topk; pad token = TOKEN"] + SORT --> SEI["sorted_expert_ids
(1534) int32
one expert id per BM128 block"] + SORT --> CS["cumsum_tensor(0)
actual padded sorted rows"] + SORT --> REV["reverse_sorted
(147456) int32
original token/topk pair -> sorted row"] + SORT --> SW["sorted_weights
(196352) f32
topk weight in sorted-row order"] + SORT --> MI["m_indices
(196352) int32
token id in sorted-row order"] + + AS --> SS["kimi_mxfp4_sort_scales_16384
gather hidden scales by sorted_token_ids
and swizzle for GEMM1"] + STI --> SS + CS --> SS + SS --> ASS["a_scale_sorted_shuffled
flat uint8
196352 * 224 * 2 bytes"] + + AQ --> G1["kimi_mxfp4_gemm1_16384
expert-major GEMM1:
hidden @ W_gate/up,
SiLU(gate) * up,
quantize intermediate to MXFP4"] + ASS --> G1 + W1["w1 packed
(385, 1024, 3584) uint8"] --> G1 + W1S["w1_scale
(385, 1024, 224) uint8"] --> G1 + SEI --> G1 + MI --> G1 + CS --> G1 + G1 --> IQ["inter_sorted_quant
(196352, 256) uint8"] + G1 --> IS["inter_sorted_shuffled_scale
GEMM2-ready scale layout
(785408, 16) uint8"] + + IQ --> G2["kimi_mxfp4_gemm2_mxfp4out_16384
expert-major GEMM2:
intermediate @ W_down,
quantize output rows to MXFP4"] + IS --> G2 + W2["w2 packed
(385, 7168, 256) uint8"] --> G2 + W2S["w2_scale
(385, 7168, 16) uint8"] --> G2 + SEI --> G2 + CS --> G2 + G2 --> OQ["flat_out_q
(196352, 3584) uint8"] + G2 --> OS["flat_out_scale
(196352, 224) uint8"] + + OQ --> SR["kimi_mxfp4_scatter_reduce_q_16384
for each token and topk slot:
reverse lookup sorted row,
dequantize, multiply topk weight,
sum 9 routes"] + OS --> SR + REV --> SR + SW --> SR + SR --> OUT["out
(16384, 7168) bf16"] +``` + +## Sort Internals + +The sort stage converts row order from token-major routing: + +```text +original pair index = token_id * TOPK + topk_slot +``` + +to expert-major, BM128-padded rows: + +```text +sorted rows = expert 0 rows, expert 0 padding, + expert 1 rows, expert 1 padding, + ... +``` + +```mermaid +flowchart LR + P["original routed pairs
147456 = 16384 * 9"] --> C["sort_count
per expert counts split over 16 CTAs"] + C --> BO["block_offsets
(385, 16) int32
temporary per-expert partial counts"] + BO --> X["sort_cumsum
total count per expert
padded = round_up(count, 128)
exclusive prefix"] + X --> RC["real_counts
(385) int32"] + X --> MM["masked_m
(385) int32
padded counts"] + X --> CS2["cumsum_tensor(0)
actual padded total"] + X --> EBLK["sorted_expert_ids
expert id per 128-row block"] + X --> P2["sort_place_pad
atomic local offset per expert"] + TOPKID2["topk_ids"] --> P2 + TOPKW2["topk_weight"] --> P2 + P2 --> STI2["sorted_token_ids(row)
low 24 bits: token id
high bits: topk slot"] + P2 --> MI2["m_indices(row)
token id only"] + P2 --> SW2["sorted_weights(row)
route weight"] + P2 --> REV2["reverse_sorted(token*TOPK+topk)
sorted row"] + P2 --> PAD["padding rows
token id = TOKEN
weight = 0"] +``` + +Three buffers are easy to confuse: + +| buffer | direction | used by | +| --- | --- | --- | +| `sorted_token_ids[row]` | sorted row -> packed `(token, topk)` | `sort_scales`, padding checks | +| `m_indices[row]` | sorted row -> token id | GEMM1 A-row lookup | +| `reverse_sorted[token * TOPK + topk]` | original routed pair -> sorted row | final scatter/reduce | + +## Kernel 1: `sort_count` + +The first actual GPU launch is: + +```python +sort_count(topk_ids, block_offsets).launch( + grid=(16, 1, 1), + block=(1024, 1, 1), +) +``` + +Its job is only to count how many routed pairs in each CTA chunk go to each +expert. It does not place rows yet. + +Fixed constants: + +| item | value | +| --- | ---: | +| total routed pairs | `16384 * 9 = 147456` | +| `sort_ctas` | 16 | +| threads per CTA | 1024 | +| routed pairs per CTA chunk | `147456 / 16 = 9216` | +| exact coverage check | `147456 % 16 == 0`, `9216 % 1024 == 0` | +| loop expression in code | `range_constexpr(div_up(per_cta, threads))` | +| loop iterations per thread, fixed shape | `ceil(9216 / 1024) = 9` | +| experts | 385 | +| output entries | `385 * 16 = 6160` | + +```mermaid +flowchart TD + IN["topk_ids flattened
(147456) int32
idx = token * 9 + topk"] --> CTA0 + + subgraph CTA["sort_count CTA work"] + direction TB + CTA0["one CTA
bx in 0..15
1024 threads"] + R["CTA range
start = bx * 9216
end = start + 9216
exactly covers valid idxs"] + Z["threads tx < 385
local_count(tx) = 0
shared memory: 385 x i32"] + B0["barrier"] + LOOP["for it in range_constexpr(div_up(per_cta, threads))
fixed shape: it = 0..8
idx = start + tx + it * 1024"] + LOAD["eid = topk_ids(idx)"] + ATOM["atomic_add
local_count(eid) += 1"] + B1["barrier"] + WR["threads tx < 385
cnt = local_count(tx)
block_offsets(tx * 16 + bx) = cnt"] + + CTA0 --> R --> Z --> B0 --> LOOP --> LOAD --> ATOM --> LOOP + LOOP --> B1 --> WR + end + + WR --> OUT["block_offsets
(385, 16) int32
partial count per expert per CTA"] +``` + +Equivalent scalar pseudocode: + +```python +for bx in parallel_range(16): + local_count = [0] * 385 + + start = bx * 9216 + end = start + 9216 + + for tx in parallel_range(1024): + for it in range_constexpr(div_up(per_cta, threads)): # 9 for this shape + idx = start + tx + it * 1024 + eid = topk_ids[idx] + atomic_add(local_count[eid], 1) + + for expert in parallel_range(385): + block_offsets[expert, bx] = local_count[expert] +``` + +The output layout is expert-major: + +```text +block_offsets[e, bx] = count of routes to expert e inside CTA chunk bx +flat offset = e * 16 + bx +``` + +## Kernel 2: `sort_cumsum` + +The second actual GPU launch is: + +```python +sort_cumsum( + block_offsets, + masked_m, + real_counts, + cumsum_tensor, + sorted_expert_ids, +).launch( + grid=(1, 1, 1), + block=(1024, 1, 1), +) +``` + +Its job is to turn the per-CTA partial counts from `sort_count` into global +row ranges for each expert. This is the kernel that decides the padded sorted +layout. + +Inputs and outputs: + +| buffer | before `sort_cumsum` | after `sort_cumsum` | +| --- | --- | --- | +| `block_offsets(e, c)` | count of expert `e` in CTA chunk `c` | absolute row start for expert `e`, CTA chunk `c` | +| `real_counts(e)` | uninitialized | true routed count for expert `e` | +| `masked_m(e)` | uninitialized | BM128-padded count for expert `e` | +| `cumsum_tensor(0)` | uninitialized | total padded sorted rows | +| `sorted_expert_ids(b)` | uninitialized | expert id for BM128 block `b` | + +```text +real_count(e) = sum(block_offsets(e, 0:16)) +padded(e) = round_up(real_count(e), 128) +start(e) = sum_{k < e} padded(k) +end(e) = start(e) + padded(e) +``` + +```mermaid +flowchart TD + BOIN["block_offsets
(385, 16) int32
partial counts from sort_count"] --> K2 + + subgraph K2["sort_cumsum single CTA"] + direction TB + T0["1024 threads
only tx < 385 are expert lanes"] + + SUM["per expert lane tx
load 16 partial counts
4 vector loads x 4 lanes
total = sum counts"] + PAD["padded = round_up(total, 128)
store s_total_count(tx)
store s_padded_count(tx)
real_counts(tx) = total
masked_m(tx) = padded"] + B0["barrier"] + + SCAN["tx == 0 serial prefix scan
for e = 0..384
s_expert_starts(e) = acc
acc += s_padded_count(e)"] + FINAL["s_expert_starts(385) = acc
cumsum_tensor(0) = acc"] + B1["barrier"] + + REWRITE["per expert lane tx
acc = s_expert_starts(tx)
for c = 0..15:
cnt = old block_offsets(tx, c)
block_offsets(tx, c) = acc
acc += cnt"] + FILL["fill sorted_expert_ids
start = s_expert_starts(tx)
end = s_expert_starts(tx + 1)
for b in start/128 .. end/128 - 1:
sorted_expert_ids(b) = tx"] + + T0 --> SUM --> PAD --> B0 --> SCAN --> FINAL --> B1 --> REWRITE --> FILL + end + + PAD --> RC["real_counts
(385) int32"] + PAD --> MM["masked_m
(385) int32"] + FINAL --> CS["cumsum_tensor(0)
actual padded sorted row count"] + REWRITE --> BOOUT["block_offsets
(385, 16) int32
now per-chunk absolute starts"] + FILL --> SEI["sorted_expert_ids
(1534) int32
one id per BM128 block"] +``` + +Equivalent scalar pseudocode: + +```python +# Parallel across expert lanes tx = 0..384. +for e in parallel_range(385): + total = 0 + for c in range_constexpr(16): + total += block_offsets[e, c] + + padded = round_up(total, 128) + s_total_count[e] = total + s_padded_count[e] = padded + real_counts[e] = total + masked_m[e] = padded + +barrier() + +# One thread computes the expert prefix ranges. +acc = 0 +for e in range(385): + s_expert_starts[e] = acc + acc += s_padded_count[e] +s_expert_starts[385] = acc +cumsum_tensor[0] = acc + +barrier() + +# Parallel across expert lanes again. +for e in parallel_range(385): + acc = s_expert_starts[e] + for c in range_constexpr(16): + cnt = block_offsets[e, c] + block_offsets[e, c] = acc + acc += cnt + + for b in range(s_expert_starts[e] // 128, s_expert_starts[e + 1] // 128): + sorted_expert_ids[b] = e +``` + +The key mutation is `block_offsets`: + +```text +before: block_offsets(e, c) = local count from sort_count CTA c +after: block_offsets(e, c) = absolute start row for sort_place_pad CTA c +``` + +## Kernel 3: `sort_place_pad` + +The third actual GPU launch is: + +```python +sort_place_pad( + topk_ids, + topk_weight, + block_offsets, + real_counts, + cumsum_tensor, + sorted_token_ids, + reverse_sorted, + sorted_weights, + m_indices, +).launch( + grid=(16, 1, 1), + block=(1024, 1, 1), +) +``` + +This is the kernel that actually writes the sorted row buffers. It consumes the +absolute starts produced by `sort_cumsum`, places all real routed pairs, then +fills each expert's BM128 padding rows. + +Fixed constants: + +| item | value | +| --- | ---: | +| `sort_ctas` | 16 | +| threads per CTA | 1024 | +| routed pairs per CTA chunk | 9216 | +| place-loop iterations per thread | 9 | +| `experts_per_cta` for padding | `ceil(385 / 16) = 25` | +| padding lanes | 128 | + +```mermaid +flowchart TD + TOPK["topk_ids
(147456) int32"] --> K3 + TOPKW["topk_weight
(147456) f32"] --> K3 + BO["block_offsets
(385, 16) int32
absolute starts from sort_cumsum"] --> K3 + RC["real_counts
(385) int32"] --> K3 + CS["cumsum_tensor(0)
total padded sorted rows"] --> K3 + + subgraph K3["sort_place_pad CTA work"] + direction TB + CTA0["one CTA
bx in 0..15
1024 threads"] + + INIT["init expert metadata
threads tx < 385:
local_offsets(tx) = block_offsets(tx, bx)
row_starts(tx) = block_offsets(tx, 0)
thread 0: row_starts(385) = cumsum_tensor(0)"] + B0["barrier"] + + PLACE["place real rows loop
for idx = bx*9216 + tx; idx < end; idx += 1024"] + EID["eid = topk_ids(idx)
sp = atomic_add(local_offsets(eid), 1)"] + PACK["token_id = idx / 9
topk_id = idx % 9
packed = token_id | topk_id << 24"] + STORE["sorted_token_ids(sp) = packed
m_indices(sp) = token_id
sorted_weights(sp) = topk_weight(idx)
reverse_sorted(idx) = sp"] + B1["barrier"] + + PADLANE["padding phase
only tx < 128"] + EXPLOOP["for ee = 0..24
e = bx * 25 + ee
skip if e >= 385"] + PADRANGE["real_end = row_starts(e) + real_counts(e)
padded_end = row_starts(e + 1)
for j = real_end + tx; j < padded_end; j += 1024"] + PADSTORE["sorted_token_ids(j) = TOKEN
m_indices(j) = TOKEN
sorted_weights(j) = 0"] + + CTA0 --> INIT --> B0 --> PLACE --> EID --> PACK --> STORE + STORE --> B1 --> PADLANE --> EXPLOOP --> PADRANGE --> PADSTORE + end + + STORE --> STI["sorted_token_ids
(196352) int32
real rows packed token/topk"] + STORE --> MI["m_indices
(196352) int32
real rows token id"] + STORE --> SW["sorted_weights
(196352) f32
real rows route weight"] + STORE --> REV["reverse_sorted
(147456) int32
original pair -> sorted row"] + PADSTORE --> PADOUT["padding rows
token id TOKEN
weight 0"] +``` + +Equivalent scalar pseudocode: + +```python +for bx in parallel_range(16): + # Shared state for this CTA. + for e in parallel_range(385): + local_offsets[e] = block_offsets[e, bx] + row_starts[e] = block_offsets[e, 0] + row_starts[385] = cumsum_tensor[0] + + barrier() + + # Place real routed pairs from this CTA chunk. + start = bx * 9216 + end = min(start + 9216, 147456) + for tx in parallel_range(1024): + for idx in range(start + tx, end, 1024): + eid = topk_ids[idx] + sp = atomic_add(local_offsets[eid], 1) + + token_id = idx // 9 + topk_id = idx % 9 + packed = (token_id & 0x00FFFFFF) | (topk_id << 24) + + sorted_token_ids[sp] = packed + m_indices[sp] = token_id + sorted_weights[sp] = topk_weight[idx] + reverse_sorted[idx] = sp + + barrier() + + # Fill padding rows for up to 25 experts assigned to this CTA. + for tx in parallel_range(128): + for ee in range_constexpr(25): + e = bx * 25 + ee + if e < 385: + real_end = row_starts[e] + real_counts[e] + padded_end = row_starts[e + 1] + for j in range(real_end + tx, padded_end, 1024): + sorted_token_ids[j] = TOKEN + m_indices[j] = TOKEN + sorted_weights[j] = 0.0 +``` + +After this kernel, the sort stage is complete: + +| output | meaning | +| --- | --- | +| `sorted_token_ids(row)` | sorted-row order, packed token/topk; padding rows use token `TOKEN` | +| `m_indices(row)` | sorted-row order token id, consumed by GEMM1 | +| `sorted_weights(row)` | sorted-row order route weight, consumed by scatter/reduce | +| `reverse_sorted(orig)` | token-major original route index -> sorted row, consumed by scatter/reduce | + +## Kernel 4: `quant` + +The fourth actual GPU launch is: + +```python +quant(hidden, a_quant, a_scale).launch( + grid=(512, 1, 1), + block=(1024, 1, 1), +) +``` + +This kernel quantizes the original bf16 hidden matrix into MXFP4. It does not +use the sorted row order yet. + +Work unit: + +```text +one MXFP4 block = 32 consecutive hidden values +one MXFP4 block produces 16 packed fp4 bytes + 1 e8m0 scale byte +``` + +Fixed constants: + +| item | value | +| --- | ---: | +| hidden shape | `(16384, 7168)` bf16 | +| blocks per token | `7168 / 32 = 224` | +| total MXFP4 blocks | `16384 * 224 = 3670016` | +| CTAs | 512 | +| threads per CTA | 1024 | +| waves per CTA | `1024 / 64 = 16` | +| MXFP4 blocks per wave | `64 / 4 = 16` | +| MXFP4 blocks per CTA iteration | `16 * 16 = 256` | +| CTA iterations | `3670016 / (512 * 256) = 28` | + +```mermaid +flowchart TD + HS["hidden_states
(16384, 7168) bf16"] --> K4 + + subgraph K4["quant CTA work"] + direction TB + CTA["one CTA
bx in 0..511
1024 threads"] + WILOOP["wi range for this CTA
wi = bx*28 .. bx*28+27"] + MAP["per thread mapping
wave_id = tx / 64
lane = tx % 64
block_in_wave = lane / 4
lane_in_block = lane % 4"] + BLOCK["my_block = wi*256 + wave_id*16 + block_in_wave
fixed shape covers every block exactly once"] + LOAD["4-lane group handles one 32-value MXFP4 block
each lane loads 8 bf16 values
as 4 i32 words"] + AMAX["compute abs max
local lane max over 8 values
quad reduce with shuffle_xor offsets 1 and 2"] + SCALE["derive e8m0 scale
bexp from max exponent
e8m0 = clamp(bexp - 2, 0, 254)
quant_scale = e8m0 as f32 power-of-two"] + PACK["pack 8 values for this lane
llvm.amdgcn.cvt.scalef32.pk.fp4.f32
4 pair conversions -> one i32"] + STOREQ["a_quant word store
q_word = my_block*4 + lane_in_block"] + STORES["lane_in_block == 0
a_scale byte store
a_scale(my_block) = e8m0"] + + CTA --> WILOOP --> MAP --> BLOCK --> LOAD --> AMAX --> SCALE --> PACK --> STOREQ + SCALE --> STORES + end + + STOREQ --> AQ["a_quant
(16384, 3584) uint8"] + STORES --> AS["a_scale
(16384, 224) uint8"] +``` + +Equivalent scalar pseudocode: + +```python +for bx in parallel_range(512): + for wi in range(bx * 28, bx * 28 + 28): + for tx in parallel_range(1024): + wave_id = tx // 64 + lane = tx % 64 + block_in_wave = lane // 4 + lane_in_block = lane % 4 + + my_block = wi * 256 + wave_id * 16 + block_in_wave + + # The code still has a my_block < total_blocks guard, but this + # fixed shape covers exactly 3670016 blocks. + base = my_block * 32 + lane_in_block * 8 + vals = load_8_bf16_values(hidden_states, base) + + local_amax = max(abs(vals)) + block_amax = quad_reduce_max(local_amax) + e8m0 = clamp(exponent(block_amax) - 2, 0, 254) + quant_scale = e8m0_to_f32_scale(e8m0) + + packed_i32 = pack_8_values_to_fp4(vals, quant_scale) + a_quant_words[my_block * 4 + lane_in_block] = packed_i32 + + if lane_in_block == 0: + a_scale[my_block] = e8m0 +``` + +Output layout: + +| output | meaning | +| --- | --- | +| `a_quant(token, model_byte)` | packed fp4 hidden values; two fp4 values per byte | +| `a_scale(token, model_block32)` | one e8m0 scale per 32 hidden values | + +## Kernel 5: `sort_scales` + +The fifth actual GPU launch is: + +```python +sort_scales( + a_scale, + sorted_token_ids, + cumsum_tensor, + a_scale_sorted_shuffled, +).launch( + grid=(512, 1, 1), + block=(1024, 1, 1), +) +``` + +This kernel gathers the token-major activation scales into the shuffled layout +that GEMM1 expects. `a_quant` itself is not sorted; GEMM1 uses `m_indices` to +load token rows. The scales are sorted and swizzled ahead of time because the +MFMA scale path consumes them in a compact packed order. + +Fixed constants: + +| item | value | +| --- | ---: | +| input `a_scale` | `(16384, 224)` uint8 | +| sorted chunks | `max_sorted / 128 = 1534` | +| scale columns per token | `7168 / 32 = 224` | +| row groups per BM128 chunk | `c_m1 = 4` | +| K groups | `c_k1 = 28` | +| output dwords per chunk | `4 * 28 * 4 * 16 = 7168` | +| total work dwords | `1534 * 7168 = 10995712` | +| launch threads | `512 * 1024 = 524288` | +| loop trips per thread upper bound | `ceil(10995712 / 524288) = 21` | +| output bytes | `196352 * 224 * 2 = 87965696` | + +```mermaid +flowchart TD + AS["a_scale
(16384, 224) uint8
token-major"] --> K5 + STI["sorted_token_ids
(196352) int32
sorted row -> packed token/topk"] --> K5 + CS["cumsum_tensor(0)
actual padded sorted rows"] --> K5 + + subgraph K5["sort_scales CTA work"] + direction TB + CTA["one thread owns a strided sequence of work dwords
global_tid = bx*1024 + tx
work += 512*1024"] + ZERO["zero output dword first
a_scale_sorted_shuffled(work) = 0"] + DECODE["decode flat work id
n_lane = work % 16
k_lane = work / 16 % 4
ku = work / 64 % 28
mi = work / 1792 % 4
chunk = work / 7168"] + VALID["valid chunk check
chunk < ceil(cumsum_tensor(0) / 128)"] + ROWS["select two sorted rows
row0 = chunk*128 + (mi*2 + 0)*16 + n_lane
row1 = chunk*128 + (mi*2 + 1)*16 + n_lane"] + TOK["load sorted_token_ids(row0,row1)
extract token id
padding token TOKEN maps to token 0 for safe scale load"] + GATHER["gather four scale bytes
two rows x two k-pack positions
k_idx = ku*8 + ikxdl*4 + k_lane"] + PACK["pack bytes into one i32
byte0 row0 k0
byte1 row1 k0
byte2 row0 k1
byte3 row1 k1"] + STORE["store packed dword
a_scale_sorted_shuffled(work) = packed"] + + CTA --> ZERO --> DECODE --> VALID --> ROWS --> TOK --> GATHER --> PACK --> STORE + end + + STORE --> ASS["a_scale_sorted_shuffled
flat uint8
GEMM1 scale layout"] +``` + +Equivalent scalar pseudocode: + +```python +actual_sorted = cumsum_tensor[0] +actual_n_chunks = ceil(actual_sorted / 128) + +for work in parallel_strided_range(total_work, stride=512 * 1024): + a_scale_sorted_shuffled_dwords[work] = 0 + + n_lane = work % 16 + k_lane = (work // 16) % 4 + ku = (work // 64) % 28 + mi = (work // (16 * 4 * 28)) % 4 + chunk = work // (16 * 4 * 28 * 4) + + if chunk < actual_n_chunks: + packed = 0 + + tok_ids = [] + for im_a in range_constexpr(2): + sorted_row = chunk * 128 + (mi * 2 + im_a) * 16 + n_lane + packed_token_topk = sorted_token_ids[sorted_row] + token = packed_token_topk & 0x00FFFFFF + token = token if token < TOKEN else 0 + tok_ids.append(token) + + for ikxdl in range_constexpr(2): + for im_a in range_constexpr(2): + k_idx = ku * 8 + ikxdl * 4 + k_lane + byte = a_scale[tok_ids[im_a], k_idx] + packed |= byte << ((ikxdl * 2 + im_a) * 8) + + a_scale_sorted_shuffled_dwords[work] = packed +``` + +The packed output is deliberately not a readable `(sorted_row, scale_col)` +matrix. It is a GEMM1 input stream arranged to match the later +`mfma_scale_f32_16x16x128_f8f6f4` scale operand pattern. + +## Stage Notes + +### 1. Quantize Hidden + +`kimi_mxfp4_quant_16384(hidden_states)` reads bf16 hidden states in original +token order and writes: + +```text +a_quant: (TOKEN, MODEL_DIM / 2) = (16384, 3584) +a_scale: (TOKEN, MODEL_DIM / 32) = (16384, 224) +``` + +Each scale covers 32 bf16 values. The data is still token-major at this point. + +### 2. Sort Scales + +`a_quant` is not physically sorted before GEMM1. GEMM1 uses `m_indices` to +lookup the source token row. The scale layout is different: GEMM1 expects a +GEMM-friendly shuffled scale stream, so `kimi_mxfp4_sort_scales_16384` gathers +`a_scale[token]` through `sorted_token_ids` and writes +`a_scale_sorted_shuffled`. + +The output is not a plain matrix. The wrapper allocates: + +```text +padded_rows * (MODEL_DIM / 32) * 2 += 196352 * 224 * 2 bytes +``` + +### 3. GEMM1 + +`kimi_mxfp4_gemm1_16384` works in sorted expert-major row order: + +```text +for each sorted BM128 block: + expert = sorted_expert_ids[block] + token rows = m_indices[sorted rows] + load hidden MXFP4 from a_quant[token] + load W_gate and W_up for expert + compute gate/up + compute SiLU(gate) * up + quantize intermediate to MXFP4 +``` + +Outputs: + +```text +inter_sorted_quant: (196352, 256) uint8 +inter_sorted_shuffled_scale: (785408, 16) uint8 +``` + +`inter_sorted_shuffled_scale` is already in the scale layout expected by GEMM2, +so it is larger than the logical `(196352, 16)` scale matrix. + +### 4. GEMM2 MXFP4OUT + +`kimi_mxfp4_gemm2_mxfp4out_16384` keeps the sorted row order: + +```text +inter_sorted_quant @ W_down[expert] +``` + +It does not reduce TOPK and it does not write bf16 staging. It writes an MXFP4 +output row per sorted routed row: + +```text +flat_out_q: (196352, 3584) uint8 +flat_out_scale: (196352, 224) uint8 +``` + +This is the important difference from the older bf16 staging path. The older +path materialized `[TOKEN, TOPK, MODEL_DIM]` bf16 and then called `torch.sum`. +This path keeps output packed and delays the weighted TOPK reduce to the next +kernel. + +### 5. Scatter/Reduce + +`kimi_mxfp4_scatter_reduce_q_16384` switches back to token-major output order. +For each token and output column group, it walks `TOPK=9` routes: + +```text +orig = token * TOPK + topk_slot +sorted_row = reverse_sorted[orig] +weight = sorted_weights[sorted_row] +value = dequant(flat_out_q[sorted_row], flat_out_scale[sorted_row]) +acc += value * weight +``` + +The final result is: + +```text +out: (16384, 7168) bf16 +``` + +## Reading Order In Code + +Use this order if you want to understand or edit the file: + +1. `run_kimi_fp4_mxfp4_moe_16384_all_flydsl` +2. `kimi_mxfp4_sort_16384` +3. `compile_kimi_mxfp4_sort_16384` +4. `kimi_mxfp4_quant_16384` +5. `kimi_mxfp4_sort_scales_16384` +6. `kimi_mxfp4_gemm1_16384` +7. `kimi_mxfp4_gemm2_mxfp4out_16384` +8. `kimi_mxfp4_scatter_reduce_q_16384` + +When debugging correctness, keep these invariants in mind: + +| invariant | why it matters | +| --- | --- | +| `cumsum_tensor[0] <= max_sorted` | actual padded rows must fit allocated buffers | +| `sorted_expert_ids` is per BM128 block | GEMM kernels pick expert weights by block | +| padding token id is `TOKEN` | GEMM kernels can guard invalid rows | +| `reverse_sorted` maps original pair to sorted row | scatter/reduce needs original token-major route order | +| `sorted_weights` is sorted-row aligned | final reduce multiplies each decoded row by the route weight | diff --git a/hgemm_wave0_compact_schedule.txt b/hgemm_wave0_compact_schedule.txt new file mode 100644 index 000000000..938992044 --- /dev/null +++ b/hgemm_wave0_compact_schedule.txt @@ -0,0 +1,193 @@ +Wave0 compact steady-state schedule +=================================== + +Block notation: + C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. + A0[i,k] and B0[j,k] are current LDS buffer fragments, k=0 means K[0:32], k=1 means K[32:64]. + A1/B1 is the other LDS buffer for the next outer-loop tile. + dsrd reads one 16x32 fragment from LDS. + bfld writes CTA-wide global->LDS chunks into the other buffer. + B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. + With the experimental A_LDS_K32_BLOCKING path, A bfld chunks are [4 rows, 1 K-slice]. + Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. + +Ops +--- +mfma C[0,0]+=A0[0,0]*B0[0,0] +dsrd B0[4,0] +bfld B1[0:2,0:2] +mfma C[0,1]+=A0[0,0]*B0[1,0] +dsrd B0[5,0] +dsrd A0[1,0] +mfma C[0,2]+=A0[0,0]*B0[2,0] +dsrd B0[6,0] +mfma C[0,3]+=A0[0,0]*B0[3,0] +dsrd B0[7,0] +mfma C[0,4]+=A0[0,0]*B0[4,0] +bfld B1[2:4,0:2] +mfma C[0,5]+=A0[0,0]*B0[5,0] +mfma C[0,6]+=A0[0,0]*B0[6,0] +mfma C[0,7]+=A0[0,0]*B0[7,0] +mfma C[1,0]+=A0[1,0]*B0[0,0] +bfld B1[4:6,0:2] +mfma C[1,1]+=A0[1,0]*B0[1,0] +dsrd A0[2,0] +mfma C[1,2]+=A0[1,0]*B0[2,0] +mfma C[1,3]+=A0[1,0]*B0[3,0] +mfma C[1,4]+=A0[1,0]*B0[4,0] +bfld B1[6:8,0:2] +mfma C[1,5]+=A0[1,0]*B0[5,0] +mfma C[1,6]+=A0[1,0]*B0[6,0] +mfma C[1,7]+=A0[1,0]*B0[7,0] +mfma C[2,0]+=A0[2,0]*B0[0,0] +bfld B1[8:10,0:2] +mfma C[2,1]+=A0[2,0]*B0[1,0] +dsrd A0[3,0] +mfma C[2,2]+=A0[2,0]*B0[2,0] +mfma C[2,3]+=A0[2,0]*B0[3,0] +mfma C[2,4]+=A0[2,0]*B0[4,0] +bfld B1[10:12,0:2] +mfma C[2,5]+=A0[2,0]*B0[5,0] +mfma C[2,6]+=A0[2,0]*B0[6,0] +mfma C[2,7]+=A0[2,0]*B0[7,0] +mfma C[3,0]+=A0[3,0]*B0[0,0] +bfld B1[12:14,0:2] +mfma C[3,1]+=A0[3,0]*B0[1,0] +dsrd A0[4,0] +mfma C[3,2]+=A0[3,0]*B0[2,0] +mfma C[3,3]+=A0[3,0]*B0[3,0] +mfma C[3,4]+=A0[3,0]*B0[4,0] +bfld B1[14:16,0:2] +mfma C[3,5]+=A0[3,0]*B0[5,0] +mfma C[3,6]+=A0[3,0]*B0[6,0] +mfma C[3,7]+=A0[3,0]*B0[7,0] +mfma C[4,0]+=A0[4,0]*B0[0,0] +bfld A1[0:4,0] +mfma C[4,1]+=A0[4,0]*B0[1,0] +dsrd A0[5,0] +mfma C[4,2]+=A0[4,0]*B0[2,0] +mfma C[4,3]+=A0[4,0]*B0[3,0] +mfma C[4,4]+=A0[4,0]*B0[4,0] +bfld A1[4:8,0] +mfma C[4,5]+=A0[4,0]*B0[5,0] +mfma C[4,6]+=A0[4,0]*B0[6,0] +mfma C[4,7]+=A0[4,0]*B0[7,0] +mfma C[5,0]+=A0[5,0]*B0[0,0] +bfld A1[8:12,0] +mfma C[5,1]+=A0[5,0]*B0[1,0] +dsrd A0[6,0] +mfma C[5,2]+=A0[5,0]*B0[2,0] +mfma C[5,3]+=A0[5,0]*B0[3,0] +mfma C[5,4]+=A0[5,0]*B0[4,0] +bfld A1[12:16,0] +mfma C[5,5]+=A0[5,0]*B0[5,0] +mfma C[5,6]+=A0[5,0]*B0[6,0] +mfma C[5,7]+=A0[5,0]*B0[7,0] +mfma C[6,0]+=A0[6,0]*B0[0,0] +dsrd B0[0,1] +bfld A1[0:4,1] +mfma C[6,1]+=A0[6,0]*B0[1,0] +dsrd A0[7,0] +dsrd B0[1,1] +mfma C[6,2]+=A0[6,0]*B0[2,0] +dsrd B0[2,1] +mfma C[6,3]+=A0[6,0]*B0[3,0] +dsrd B0[3,1] +mfma C[6,4]+=A0[6,0]*B0[4,0] +dsrd A0[0,1] +bfld A1[4:8,1] +mfma C[6,5]+=A0[6,0]*B0[5,0] +mfma C[6,6]+=A0[6,0]*B0[6,0] +mfma C[6,7]+=A0[6,0]*B0[7,0] +mfma C[7,0]+=A0[7,0]*B0[0,0] +bfld A1[8:12,1] +mfma C[7,1]+=A0[7,0]*B0[1,0] +mfma C[7,2]+=A0[7,0]*B0[2,0] +mfma C[7,3]+=A0[7,0]*B0[3,0] +mfma C[7,4]+=A0[7,0]*B0[4,0] +bfld A1[12:16,1] +mfma C[7,5]+=A0[7,0]*B0[5,0] +mfma C[7,6]+=A0[7,0]*B0[6,0] +mfma C[7,7]+=A0[7,0]*B0[7,0] +mfma C[0,0]+=A0[0,1]*B0[0,1] +dsrd B0[4,1] +mfma C[0,1]+=A0[0,1]*B0[1,1] +dsrd B0[5,1] +dsrd A0[1,1] +mfma C[0,2]+=A0[0,1]*B0[2,1] +dsrd B0[6,1] +mfma C[0,3]+=A0[0,1]*B0[3,1] +dsrd B0[7,1] +mfma C[0,4]+=A0[0,1]*B0[4,1] +mfma C[0,5]+=A0[0,1]*B0[5,1] +mfma C[0,6]+=A0[0,1]*B0[6,1] +mfma C[0,7]+=A0[0,1]*B0[7,1] +mfma C[1,0]+=A0[1,1]*B0[0,1] +mfma C[1,1]+=A0[1,1]*B0[1,1] +dsrd A0[2,1] +mfma C[1,2]+=A0[1,1]*B0[2,1] +mfma C[1,3]+=A0[1,1]*B0[3,1] +mfma C[1,4]+=A0[1,1]*B0[4,1] +mfma C[1,5]+=A0[1,1]*B0[5,1] +mfma C[1,6]+=A0[1,1]*B0[6,1] +mfma C[1,7]+=A0[1,1]*B0[7,1] +mfma C[2,0]+=A0[2,1]*B0[0,1] +mfma C[2,1]+=A0[2,1]*B0[1,1] +dsrd A0[3,1] +mfma C[2,2]+=A0[2,1]*B0[2,1] +mfma C[2,3]+=A0[2,1]*B0[3,1] +mfma C[2,4]+=A0[2,1]*B0[4,1] +mfma C[2,5]+=A0[2,1]*B0[5,1] +mfma C[2,6]+=A0[2,1]*B0[6,1] +mfma C[2,7]+=A0[2,1]*B0[7,1] +mfma C[3,0]+=A0[3,1]*B0[0,1] +mfma C[3,1]+=A0[3,1]*B0[1,1] +dsrd A0[4,1] +mfma C[3,2]+=A0[3,1]*B0[2,1] +mfma C[3,3]+=A0[3,1]*B0[3,1] +mfma C[3,4]+=A0[3,1]*B0[4,1] +mfma C[3,5]+=A0[3,1]*B0[5,1] +mfma C[3,6]+=A0[3,1]*B0[6,1] +mfma C[3,7]+=A0[3,1]*B0[7,1] +mfma C[4,0]+=A0[4,1]*B0[0,1] +mfma C[4,1]+=A0[4,1]*B0[1,1] +dsrd A0[5,1] +mfma C[4,2]+=A0[4,1]*B0[2,1] +mfma C[4,3]+=A0[4,1]*B0[3,1] +mfma C[4,4]+=A0[4,1]*B0[4,1] +mfma C[4,5]+=A0[4,1]*B0[5,1] +mfma C[4,6]+=A0[4,1]*B0[6,1] +mfma C[4,7]+=A0[4,1]*B0[7,1] +mfma C[5,0]+=A0[5,1]*B0[0,1] +mfma C[5,1]+=A0[5,1]*B0[1,1] +dsrd A0[6,1] +mfma C[5,2]+=A0[5,1]*B0[2,1] +mfma C[5,3]+=A0[5,1]*B0[3,1] +mfma C[5,4]+=A0[5,1]*B0[4,1] +mfma C[5,5]+=A0[5,1]*B0[5,1] +mfma C[5,6]+=A0[5,1]*B0[6,1] +mfma C[5,7]+=A0[5,1]*B0[7,1] +mfma C[6,0]+=A0[6,1]*B0[0,1] +mfma C[6,1]+=A0[6,1]*B0[1,1] +dsrd A0[7,1] +mfma C[6,2]+=A0[6,1]*B0[2,1] +mfma C[6,3]+=A0[6,1]*B0[3,1] +mfma C[6,4]+=A0[6,1]*B0[4,1] +mfma C[6,5]+=A0[6,1]*B0[5,1] +mfma C[6,6]+=A0[6,1]*B0[6,1] +mfma C[6,7]+=A0[6,1]*B0[7,1] +mfma C[7,0]+=A0[7,1]*B0[0,1] +mfma C[7,1]+=A0[7,1]*B0[1,1] +mfma C[7,2]+=A0[7,1]*B0[2,1] +mfma C[7,3]+=A0[7,1]*B0[3,1] +mfma C[7,4]+=A0[7,1]*B0[4,1] +mfma C[7,5]+=A0[7,1]*B0[5,1] +mfma C[7,6]+=A0[7,1]*B0[6,1] +mfma C[7,7]+=A0[7,1]*B0[7,1] +barrier vmcnt(0)+s_barrier +dsrd B1[0,0] +dsrd B1[1,0] +dsrd B1[2,0] +dsrd B1[3,0] +dsrd A1[0,0] +yield C,A1[0,0],B1[0:4,0] diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py new file mode 100644 index 000000000..d6e6c3ed7 --- /dev/null +++ b/kernels/fp4_gemm_4wave.py @@ -0,0 +1,477 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) 2025 FlyDSL Project Contributors + +"""4-wave MXFP4 matmul for AMD CDNA4 (gfx950 / MI355X). + +C[M,N] = A[M,K] @ B[N,K]^T with per-32-block E8M0 scales on both A and B, +bf16 output. + +Structure is copied from ``kernels/fp8_gemm_4wave.py``: 1 block = 256 threads = +4 waves in a 2x2 layout; each wave owns a 128x128 quadrant computed as a 2x2 of +64x64 (c00/c01/c10/c11); 8-buffer LDS ping-pong with a depth-2 K pipeline; an +``_interleaved_cluster`` interleaving MFMAs with global->LDS and LDS->reg loads. + +FP4 specifics: + * MFMA = ``mfma_scale_f32_16x16x128_f8f6f4`` cbsz=4 blgp=4; per-32-block E8M0 + scale applied INSIDE the MFMA (epilogue only converts acc->bf16). + * One LDS K-step row = 128 bytes = 256 fp4 = TWO MFMA K=128 blocks. The fp8 + data-movement (G2SLoader / swizzle / S2RLoader) is reused treating fp4 as + bytes; the S2R i32x8 (32 B/lane) is split into two 16-B fp4 operands. + * pack_M=pack_N=pack_K=2: per wave-quadrant there is exactly one M-pair and + one N-pair (n_tiles=2), so one A-scale i32 and one B-scale i32 hold the four + E8M0 sub-fields selected by opsel = k_sub*2 + tile_in_pair. + +A: row-major fp4 (uint8, 2 fp4/byte). B: ``shuffle_weight_w4(b_q, 16)``. +Scales: ``shuffle_scale_w4(scale, 1, False)``. +""" + +import flydsl.compiler as flyc +import flydsl.expr as fx +from flydsl.expr import arith, const_expr, range_constexpr +from flydsl.expr import buffer_ops as _buffer_ops +from flydsl.expr import rocdl as _rocdl +from flydsl.expr.typing import Vector as Vec +from kernels.fp8_gemm_utils import ( + G2SLoader, + ceildiv, + compute_global_swizzle, + divmod, + make_fp8_buffer_tensor, + swizzle_128, + wait_barrier, +) + + +class S2RLoaderFp4: + """fp4 S2R LDS->reg loader. Unlike the fp8 loader it does NOT pack the two + K=64 halves into an i32x8 fragment -- it returns the two i32x4 halves as-is, + one per fp4 MFMA K=128 sub-block. This avoids the pack_i32x4_i32x8 (S2R) + + _split_i32x8 + _pack_fp4_operand (MFMA) round-trip that the fp8-derived path + forced, which created ~64 VGPR of split temporaries on top of the i32x8 + fragments and pushed arch VGPR to 256 (full) -> scale spilled. Each tile's + value is [i32x4_ksub0, i32x4_ksub1].""" + + def __init__(self, wave_idx, n_tiles): + self.lane_id = fx.thread_idx.x % 64 + self.wave_idx = wave_idx + self.n_tiles = n_tiles + + def _vec_load_16xf8(self, lds_src, offset): + off_tup = fx.make_int_tuple(offset) + ptr_off = fx.add_offset(lds_src.ptr, off_tup) + i8_iter = fx.recast_iter(fx.Uint8, ptr_off) + view = fx.make_view(i8_iter, fx.make_layout(16, 1)) + return view.load() + + def load(self, lds_src, preshuffled=False): + frag = [] + for i in range_constexpr(self.n_tiles): + halves = [] + row = self.wave_idx * (self.n_tiles * 16) + i * 16 + self.lane_id % 16 + for step in range_constexpr(2): + col = (self.lane_id // 16) * 16 + step * 64 + if const_expr(preshuffled): + offset = (row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128 + else: + row_swz, col_swz = swizzle_128(row, col) + offset = row_swz * 128 + col_swz + v = self._vec_load_16xf8(lds_src, offset) + halves.append(v.bitcast(fx.Int32)) # i32x4, the K=128 MFMA operand + frag.append(halves) # [ksub0_i32x4, ksub1_i32x4] + return frag + + +def _min(a, b): + return arith.select(a < b, a, b) + + +def _xcd_swizzle(num_pid_m, num_pid_n): + NUM_XCDS = 8 + WGM = 4 + NUM_CUS = 32 * NUM_XCDS + SWIZZLE_THRESHOLD = 4 * NUM_CUS + + wgid = fx.block_idx.x + num_wg = num_pid_m * num_pid_n + simple_m, simple_n = divmod(wgid, num_pid_n) + + intra_xcd, xcd = divmod(wgid, NUM_XCDS) + wgid_remap = xcd * (num_wg // NUM_XCDS) + intra_xcd + num_wgid_in_group = WGM * num_pid_n + group_id, intra_group = divmod(wgid_remap, num_wgid_in_group) + first_pid_m = group_id * WGM + group_size_m = _min(num_pid_m - first_pid_m, WGM) + pid_n, intra_group_m = divmod(intra_group, group_size_m) + pid_m = first_pid_m + intra_group_m + + use_simple = (num_wg < SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) + return (arith.select(use_simple, simple_m, pid_m), arith.select(use_simple, simple_n, pid_n)) + + +# ── FP4 scaled MFMA ────────────────────────────────────────────────────────── +_FP4_CBSZ = 4 +_FP4_BLGP = 4 +_FP4_PACK = 2 # pack_M = pack_N = pack_K = 2 + + +def _split_i32x8(v): + return v.shuffle(v, [0, 1, 2, 3]), v.shuffle(v, [4, 5, 6, 7]) + + +def _pack_fp4_operand(i32x4): + """i32x4 (16 B = K=128 fp4) -> a128 i32x8 = (i64_0, i64_1, 0, 0).""" + i64x2 = i32x4.bitcast(fx.Int64) + z = fx.Int64(0) + return Vec.from_elements([i64x2[0], i64x2[1], z, z], fx.Int64).bitcast(fx.Int32) + + +class Mfma16x16x128Fp4: + """fp4 16x16x128 scaled MFMA. ``call_one`` runs the two K=128 fp4 sub-blocks + packed into the 32-byte S2R operand, accumulating into one f32x4 acc. + + a/b operands are i32x8 (the full 256-fp4 K-step, two K=128 sub-blocks). + sa/sb are i32 packed-E8M0 scales (4 e8m0 each); opsel selects the field + ``k_sub * pack + tile_in_pair`` where tile_in_pair = i % pack / j % pack. + """ + + def __init__(self, n_tiles_a, n_tiles_b): + assert n_tiles_a % _FP4_PACK == 0 and n_tiles_b % _FP4_PACK == 0 + self.accum_type = Vec.make_type(4, fx.Float32) + self.zero_value = Vec.filled(4, 0.0, fx.Float32) + self.n_tiles_a = n_tiles_a + self.n_tiles_b = n_tiles_b + self.res_ty = Vec.make_type(4, fx.Float32) + + def idx(self, i, j): + return i * self.n_tiles_b + j + + def call(self, a, b, c, sa, sb): + """``sa`` / ``sb`` are lists (len n_groups) of packed-E8M0 i32 scales + (4 sub-fields each, one full K=256 step for a 32-row pack-group). The + MFMA's opsel arg is a COMPILE-TIME byte-select: + ``opsel = ksub * pack + tile_in_pair`` (ksub = K_Pack high field, + tile_in_pair = N_Pack low field). Tile ``i`` uses group ``i // 2`` and + in-pair byte ``i % 2``; one i32 feeds 2x2x... MFMAs via opsel.""" + # a[i] / b[j] are [i32x4_ksub0, i32x4_ksub1] from S2RLoaderFp4 -- the fp4 + # MFMA K=128 operand IS i32x4, used directly (no split/pad round-trip). + for ksub in range_constexpr(_FP4_PACK): + for i in range_constexpr(self.n_tiles_a): + a_op = a[i][ksub] + sa_v = sa[i // _FP4_PACK] + opsel_a = ksub * _FP4_PACK + (i % _FP4_PACK) + for j in range_constexpr(self.n_tiles_b): + b_op = b[j][ksub] + sb_v = sb[j // _FP4_PACK] + opsel_b = ksub * _FP4_PACK + (j % _FP4_PACK) + c[self.idx(i, j)] = _rocdl.mfma_scale_f32_16x16x128_f8f6f4( + self.res_ty, + [a_op, b_op, c[self.idx(i, j)], _FP4_CBSZ, _FP4_BLGP, opsel_a, sa_v, opsel_b, sb_v], + ) + return c + + +class ScaleLoader: + """Loads ``shuffle_scale_w4``-PRESHUFFLED per-1x32 E8M0 scales. + + The shuffled layout (gate_up=False) packs the e8m0 as + ``[N1, K1, K_Lane, N_Lane, K_Pack, N_Pack]`` (K_Lane=4, N_Lane=16, + K_Pack=N_Pack=2), so the 4 e8m0 selected by a lane's opsel values 0..3 are + exactly the 4 contiguous bytes of one i32. Per lane the element offset is:: + + group * (K1 * 64) + kstep * 64 + lane_div_16 * 16 + lane_mod_16 (i32) + + where ``group = base_tile // 32`` is the N1 index (one pack-group = the 2 + tiles n_tiles=2), ``K1 = K // 256``, and the i32 holds [K_Pack, N_Pack]. + The MFMA opsel ``ksub*2 + tile_in_pair`` selects the byte at runtime-free. + One buffer_load per K-step feeds all (tile, ksub) MFMAs of the group. + """ + + def __init__(self, scale_arg, n_tiles, K, lane_id): + assert n_tiles % _FP4_PACK == 0 + self.n_tiles = n_tiles + self.n_groups = n_tiles // _FP4_PACK # pack-groups of 2 tiles (32 rows) + self.K1 = K // 256 + self.row_stride = self.K1 * 64 # i32 elems per N1 group + self.lane_off = (lane_id // 16) * 16 + (lane_id % 16) + self.rsrc = _buffer_ops.create_buffer_resource(scale_arg, max_size=True) + + def load_step(self, kstep, base_tile): + """list[n_groups] of packed i32 (K=256 step for each 32-row pack-group).""" + base_group = base_tile // 32 + out = [] + for g in range_constexpr(self.n_groups): + i32_off = (base_group + g) * self.row_stride + kstep * 64 + self.lane_off + out.append(_buffer_ops.buffer_load(self.rsrc, i32_off, vec_width=1, dtype=fx.Int32)) + return out + + +class StoreCFp4: + """Epilogue: acc(f32x4) -> bf16, no scale mul (scale was applied in MFMA).""" + + def __init__(self, C, c_rows, c_cols, c_idx_fn, n_tiles_a, n_tiles_b): + self.c_rows = c_rows + self.c_cols = c_cols + self.lane_id = fx.thread_idx.x % 64 + self.c_idx_fn = c_idx_fn + self.n_tiles_a = n_tiles_a + self.n_tiles_b = n_tiles_b + c_nbytes = c_rows * c_cols * 2 + gC = fx.rocdl.make_buffer_tensor(C, max_size=False, num_records_bytes=c_nbytes) + self.c_div = fx.logical_divide(gC, fx.make_layout(1, 1)) + self.out_atom_1 = fx.make_copy_atom(fx.rocdl.BufferCopy16b(), fx.BFloat16) + self.reg_bf16_1 = fx.make_rmem_tensor(fx.make_layout(1, 1), fx.BFloat16) + + def _store_bf16(self, value_bf16, c_index): + fx.memref_store_vec(Vec.filled(1, value_bf16, fx.BFloat16), self.reg_bf16_1) + fx.copy(self.out_atom_1, self.reg_bf16_1, fx.slice(self.c_div, (None, fx.Int32(c_index)))) + + def store(self, c_frag, base_row, base_col): + for ti in range_constexpr(self.n_tiles_a): + row = base_row + ti * 16 + (self.lane_id // 16) * 4 + for tj in range_constexpr(self.n_tiles_b): + col = base_col + tj * 16 + self.lane_id % 16 + col_valid = col < self.c_cols + oob = fx.Int32(self.c_rows * self.c_cols) + vec_f32 = Vec(c_frag[self.c_idx_fn(ti, tj)]) + for i in range_constexpr(4): + scaled = vec_f32[i].to(fx.BFloat16) + c_index = (row + i) * self.c_cols + col + self._store_bf16(scaled, arith.select(col_valid, c_index, oob)) + + +def compile_fp4_gemm_4w( + *, + K: int, + BLOCK_M: int = 256, + BLOCK_N: int = 256, + use_xcd_remap: bool = True, +): + # 256 fp4 per LDS K-step row = 128 bytes; reuse fp8's 128-byte LDS layout. + BLOCK_K = 256 # fp4 elements + BLOCK_K_BYTES = BLOCK_K // 2 # 128 bytes / row + LDS_BLOCK_M = BLOCK_M // 2 + LDS_BLOCK_N = BLOCK_N // 2 + + assert BLOCK_M % 64 == 0 and BLOCK_N % 64 == 0 + assert K % BLOCK_K == 0 + + K_ITERS = K // BLOCK_K + N_TILES_A = BLOCK_M // 4 // 16 + N_TILES_B = BLOCK_N // 4 // 16 + N_ACCUMS = N_TILES_A * N_TILES_B + assert N_ACCUMS > 0 + + N_LDS_ROUNDS = max(N_TILES_A, N_TILES_B) + + a_lds_size = LDS_BLOCK_M * BLOCK_K_BYTES + b_lds_size = LDS_BLOCK_N * BLOCK_K_BYTES + + @fx.struct + class SharedStorage: + A_lds_cur_0: fx.Array[fx.Int8, a_lds_size, 16] + A_lds_cur_1: fx.Array[fx.Int8, a_lds_size, 16] + A_lds_next_0: fx.Array[fx.Int8, a_lds_size, 16] + A_lds_next_1: fx.Array[fx.Int8, a_lds_size, 16] + B_lds_cur_0: fx.Array[fx.Int8, b_lds_size, 16] + B_lds_cur_1: fx.Array[fx.Int8, b_lds_size, 16] + B_lds_next_0: fx.Array[fx.Int8, b_lds_size, 16] + B_lds_next_1: fx.Array[fx.Int8, b_lds_size, 16] + + @flyc.kernel + def kernel_gemm( + A: fx.Tensor, B_T: fx.Tensor, C: fx.Tensor, A_scale: fx.Tensor, B_scale: fx.Tensor, c_m: fx.Int32, c_n: fx.Int32 + ): + I8_IR_t = fx.Int8.ir_type + + lds = fx.SharedAllocator().allocate(SharedStorage).peek() + a_cur0 = lds.A_lds_cur_0 + a_cur1 = lds.A_lds_cur_1 + a_next0 = lds.A_lds_next_0 + a_next1 = lds.A_lds_next_1 + b_cur0 = lds.B_lds_cur_0 + b_cur1 = lds.B_lds_cur_1 + b_next0 = lds.B_lds_next_0 + b_next1 = lds.B_lds_next_1 + + lane_id = fx.thread_idx.x % 64 + wave_id = fx.thread_idx.x // 64 + + n_blocks = ceildiv(c_n, BLOCK_N) + if const_expr(use_xcd_remap): + tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M), n_blocks) + else: + tile_i, tile_j = divmod(fx.block_idx.x, n_blocks) + + wave_i = wave_id // 2 + wave_j = wave_id % 2 + + # Global byte offsets (fp4 packed: K bytes = K // 2). + K_BYTES = K // 2 + A0_gl_offset = (tile_i * BLOCK_M) * K_BYTES + A1_gl_offset = (tile_i * BLOCK_M + LDS_BLOCK_M) * K_BYTES + A_K_STEP = BLOCK_K_BYTES + B0_gl_offset = (tile_j * BLOCK_N) * K_BYTES + B1_gl_offset = (tile_j * BLOCK_N + LDS_BLOCK_N) * K_BYTES + # B is preshuffled (16,16): one N-16 row-block spans 2*1024 bytes per + # K-step (same constant fp8_gemm_4wave uses for b_preshuffled). + B_K_STEP = 2 * 1024 + + gA = make_fp8_buffer_tensor(A, I8_IR_t) + gB = make_fp8_buffer_tensor(B_T, I8_IR_t) + ga_div = fx.logical_divide(gA, fx.make_layout(1, 1)) + gb_div = fx.logical_divide(gB, fx.make_layout(1, 1)) + + mfma = Mfma16x16x128Fp4(N_TILES_A, N_TILES_B) + + # One i32 scale per K-step (256 fp4) per M/N-pair; K-step index = k. + a_scale_ld = ScaleLoader(A_scale, N_TILES_A, K, lane_id) + b_scale_ld = ScaleLoader(B_scale, N_TILES_B, K, lane_id) + + base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) + base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) + sa_R0 = base_row + sa_R1 = base_row + LDS_BLOCK_M + sb_C0 = base_col + sb_C1 = base_col + LDS_BLOCK_N + + def _a_sc(k, base): + return a_scale_ld.load_step(k, base) + + def _b_sc(k, base): + return b_scale_ld.load_step(k, base) + + def _load_scales(k): + """All four packed-i32 scales for K-step ``k`` (prefetchable).""" + return ( + _a_sc(k, sa_R0), + _a_sc(k, sa_R1), + _b_sc(k, sb_C0), + _b_sc(k, sb_C1), + ) + + # Accumulators: 2x2 64x64 quadrants per wave. + c00_frag = [mfma.zero_value] * N_ACCUMS + c01_frag = [mfma.zero_value] * N_ACCUMS + c10_frag = [mfma.zero_value] * N_ACCUMS + c11_frag = [mfma.zero_value] * N_ACCUMS + + gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=False) + gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=True) + + a_g2s = G2SLoader(ga_div, gl_off_a, N_TILES_A, I8_IR_t, wave_id) + b_g2s = G2SLoader(gb_div, gl_off_b, N_TILES_B, I8_IR_t, wave_id) + a_s2r = S2RLoaderFp4(wave_i, N_TILES_A) + b_s2r = S2RLoaderFp4(wave_j, N_TILES_B) + store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B) + + # Prologue. + a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) + b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) + b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) + a_g2s.load(a_cur1, A1_gl_offset + 0 * A_K_STEP) + + a_g2s.load(a_next0, A0_gl_offset + 1 * A_K_STEP) + b_g2s.load(b_next0, B0_gl_offset + 1 * B_K_STEP) + b_g2s.load(b_next1, B1_gl_offset + 1 * B_K_STEP) + a_g2s.load(a_next1, A1_gl_offset + 1 * A_K_STEP) + + def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): + return mfma.call(a_frag, b_frag, c_frag, sa_ksub, sb_ksub) + + wait_barrier((3 * N_TILES_A) + (4 * N_TILES_B)) + a0_frag = a_s2r.load(a_cur0) + wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) + b0_frag = b_s2r.load(b_cur0, preshuffled=True) + + for k in range_constexpr(K_ITERS - 2): + # Depth-0 scale: load this step's scales inside the iter (no carried + # prefetch). Carrying step k+1 kept 8 scale i32 live; arch VGPR is + # already full from fp4 data, so those 8 spilled to scratch and were + # reloaded per-MFMA (ISA: 348 scratch-loads fed MFMA scale operands). + # 4 live instead of 8 -> less spill; scale is L2-hot so the un-hidden + # load latency is cheap. + saR0, saR1, sbC0, sbC1 = _load_scales(k) + + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + a_g2s.load(a_cur0, A0_gl_offset + (k + 2) * A_K_STEP) + b1_frag = b_s2r.load(b_cur1, preshuffled=True) + c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) + + b_g2s.load(b_cur0, B0_gl_offset + (k + 2) * B_K_STEP) + a1_frag = a_s2r.load(a_cur1) + c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) + + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + b_g2s.load(b_cur1, B1_gl_offset + (k + 2) * B_K_STEP) + a0n_frag = a_s2r.load(a_next0) + c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) + + a_g2s.load(a_cur1, A1_gl_offset + (k + 2) * A_K_STEP) + b0n_frag = b_s2r.load(b_next0, preshuffled=True) + c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + + a0_frag = a0n_frag + b0_frag = b0n_frag + + a_cur0, a_next0 = a_next0, a_cur0 + a_cur1, a_next1 = a_next1, a_cur1 + b_cur0, b_next0 = b_next0, b_cur0 + b_cur1, b_next1 = b_next1, b_cur1 + + # Tail step K_ITERS - 2. + saR0, saR1, sbC0, sbC1 = _load_scales(K_ITERS - 2) + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + b1_frag = b_s2r.load(b_cur1, preshuffled=True) + c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) + a1_frag = a_s2r.load(a_cur1) + c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) + wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) + a0_frag = a_s2r.load(a_next0) + c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) + b0_frag = b_s2r.load(b_next0, preshuffled=True) + c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + + a_cur0, a_next0 = a_next0, a_cur0 + a_cur1, a_next1 = a_next1, a_cur1 + b_cur0, b_next0 = b_next0, b_cur0 + b_cur1, b_next1 = b_next1, b_cur1 + + # Tail step K_ITERS - 1. + saR0, saR1, sbC0, sbC1 = _load_scales(K_ITERS - 1) + wait_barrier(0) + b1_frag = b_s2r.load(b_cur1, preshuffled=True) + a1_frag = a_s2r.load(a_cur1) + c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) + c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) + c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) + c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + + store_c.store(c00_frag, sa_R0, sb_C0) + store_c.store(c01_frag, sa_R0, sb_C1) + store_c.store(c10_frag, sa_R1, sb_C0) + store_c.store(c11_frag, sa_R1, sb_C1) + + @flyc.jit + def launch_gemm( + A: fx.Tensor, + B_T: fx.Tensor, + C: fx.Tensor, + A_scale: fx.Tensor, + B_scale: fx.Tensor, + c_m: fx.Int32, + c_n: fx.Int32, + stream: fx.Stream, + ): + grid_x = ceildiv(c_m, BLOCK_M) * ceildiv(c_n, BLOCK_N) + kernel_gemm( + A, + B_T, + C, + A_scale, + B_scale, + c_m, + c_n, + value_attrs={"rocdl.waves_per_eu": 1, "rocdl.flat_work_group_size": "256,256"}, + ).launch(grid=(grid_x, 1, 1), block=(256, 1, 1), stream=stream) + + return launch_gemm diff --git a/resource_inspect/fp8_4wave_compact_schedule.txt b/resource_inspect/fp8_4wave_compact_schedule.txt new file mode 100644 index 000000000..5803a15b8 --- /dev/null +++ b/resource_inspect/fp8_4wave_compact_schedule.txt @@ -0,0 +1,195 @@ +fp8_gemm_4wave wave0 compact steady-state schedule +================================================== + +Source: kernels/fp8_gemm_4wave.py (BLOCK_M=BLOCK_N=256, BLOCK_K=128, 4 waves). +Swizzle ignored (only relabels LDS addresses, not pipeline order), like +hgemm_wave0_compact_schedule.txt. + +Block / wave layout +------------------- + 256x256 output = 16x16 grid of 16x16 C blocks. C[r,c], r,c in 0..15. + wave0 computes a STRIDED 8x8 set: C rows {0..3, 8..11} x cols {0..3, 8..11}. + 4 quadrants (each 4x4 MFMA blocks): + c00 -> C[0:4 , 0:4 ] c01 -> C[0:4 , 8:12] + c10 -> C[8:12, 0:4 ] c11 -> C[8:12, 8:12] + One MFMA is 16x16x128 = a whole K-slice (BLOCK_K=128) in ONE instruction, + so mfma has NO k-half index (unlike hgemm's K=32 mfma which has k=0/1). + +Buffers (double-buffer view, like hgemm A0/A1/B0/B1) + A0 = current K-slice of A (the kernel's a_cur0 + a_cur1 merged). + A1 = next K-slice of A (a_next0 + a_next1). + B0 = current K-slice of B (b_cur0 + b_cur1). B1 = next (b_next0 + b_next1). + Each is one logical 256-row(M) or 256-col(N) x 128-K fp8 buffer = 16 blocks. + A0[blk], blk 0..15 : blk 0..7 = M-half0 (a_cur0), blk 8..15 = M-half1 (a_cur1). + B0[blk], blk 0..15 : blk 0..7 = N-half0 (b_cur0), blk 8..15 = N-half1 (b_cur1). + wave0 touches blocks {0..3, 8..11} of each. + +Position notation (like hgemm A0[i,k]) + A0[blk,h] / B0[blk,h] : block blk (0..15), load-half h (0/1). + h is the LDS->reg load granularity (each dsrd = one 16x64 half); two halves + h=0,1 are packed into one 16x128 mfma operand. (In hgemm the second index was + a real K-subtile; here mfma eats both halves at once, so h is just load order.) + mfma operand A0[blk] means the full block (halves h=0,1 already packed in regs). + dsrd A0[blk,h] : LDS->reg one half. + bfld A0[lo:hi] : g2s.load_one step s -> writes row-blocks [2s:2s+2] (32 rows, + full K=128 slice) of the K+2 data. 4 steps cover the 8 blocks of one half + buffer. NOTE fp8 overwrites the CURRENT buffer in place: that half was already + drained to regs one quad earlier, so bfld refills it with K+2; the end-of-iter + swap then makes it the "next" buffer. (hgemm instead writes A1 because its A0 + stays live the whole tile.) Block range is GLOBAL (c00 fills A0[0:8], + c11 fills A0[8:16]); since the buffer holds one K-slice there is no k index. + +Ops: mfma | dsrd | bfld | barrier vmcnt(N)+s_barrier (=wait_barrier(N)). + N = max outstanding VMEM allowed (smaller = wait for more to land). s_barrier + syncs the 4 waves so a wave may read LDS a sibling wave bfld'd. Main loop N=16. + +K-slice bookkeeping (steady iter processes slice K, prefetches slice K+2) + entry : A0,B0 = slice K ; A1,B1 = slice K+1 + mfma operand a0/b0 (in regs) = slice K, half0 of A0/B0 (dsrd'd last iter) + the 4 bfld write slice K+2 into A0/B0; end swap A0<->A1, B0<->B1 + exit : A0,B0 = slice K+1 ; A1,B1 = slice K+2 (consistent) + +Prologue (once) +--------------- + bfld A0,B0 (slice 0) ; bfld A1,B1 (slice 1) + barrier vmcnt(28)+s_barrier (3*N_TILES_A + 4*N_TILES_B) + dsrd A0[0..3, 0..1] -> a0_frag + barrier vmcnt(24)+s_barrier (3*N_TILES_A + 3*N_TILES_B) + dsrd B0[0..3, 0..1] -> b0_frag + + +Steady-state outer iteration (one K-slice; repeats K_ITERS-2 times) +================================================================== + +barrier vmcnt(16)+s_barrier + +mfma C[0,0] += A0[0]*B0[0] +mfma C[0,1] += A0[0]*B0[1] +bfld A0[0:2] +dsrd B0[8,0] +mfma C[0,2] += A0[0]*B0[2] +dsrd B0[8,1] +mfma C[0,3] += A0[0]*B0[3] +bfld A0[2:4] +dsrd B0[9,0] +mfma C[1,0] += A0[1]*B0[0] +mfma C[1,1] += A0[1]*B0[1] +dsrd B0[9,1] +mfma C[1,2] += A0[1]*B0[2] +mfma C[1,3] += A0[1]*B0[3] +bfld A0[4:6] +dsrd B0[10,0] +mfma C[2,0] += A0[2]*B0[0] +mfma C[2,1] += A0[2]*B0[1] +dsrd B0[10,1] +mfma C[2,2] += A0[2]*B0[2] +mfma C[2,3] += A0[2]*B0[3] +bfld A0[6:8] +dsrd B0[11,0] +mfma C[3,0] += A0[3]*B0[0] +mfma C[3,1] += A0[3]*B0[1] +dsrd B0[11,1] +mfma C[3,2] += A0[3]*B0[2] +mfma C[3,3] += A0[3]*B0[3] + +mfma C[0, 8] += A0[0]*B0[8] +mfma C[0, 9] += A0[0]*B0[9] +bfld B0[0:2] +dsrd A0[8,0] +mfma C[0,10] += A0[0]*B0[10] +dsrd A0[8,1] +mfma C[0,11] += A0[0]*B0[11] +bfld B0[2:4] +dsrd A0[9,0] +mfma C[1, 8] += A0[1]*B0[8] +mfma C[1, 9] += A0[1]*B0[9] +dsrd A0[9,1] +mfma C[1,10] += A0[1]*B0[10] +mfma C[1,11] += A0[1]*B0[11] +bfld B0[4:6] +dsrd A0[10,0] +mfma C[2, 8] += A0[2]*B0[8] +mfma C[2, 9] += A0[2]*B0[9] +dsrd A0[10,1] +mfma C[2,10] += A0[2]*B0[10] +mfma C[2,11] += A0[2]*B0[11] +bfld B0[6:8] +dsrd A0[11,0] +mfma C[3, 8] += A0[3]*B0[8] +mfma C[3, 9] += A0[3]*B0[9] +dsrd A0[11,1] +mfma C[3,10] += A0[3]*B0[10] +mfma C[3,11] += A0[3]*B0[11] + +barrier vmcnt(16)+s_barrier + +mfma C[ 8,0] += A0[8]*B0[0] +mfma C[ 8,1] += A0[8]*B0[1] +bfld B0[8:10] +dsrd A1[0,0] +mfma C[ 8,2] += A0[8]*B0[2] +dsrd A1[0,1] +mfma C[ 8,3] += A0[8]*B0[3] +bfld B0[10:12] +dsrd A1[1,0] +mfma C[ 9,0] += A0[9]*B0[0] +mfma C[ 9,1] += A0[9]*B0[1] +dsrd A1[1,1] +mfma C[ 9,2] += A0[9]*B0[2] +mfma C[ 9,3] += A0[9]*B0[3] +bfld B0[12:14] +dsrd A1[2,0] +mfma C[10,0] += A0[10]*B0[0] +mfma C[10,1] += A0[10]*B0[1] +dsrd A1[2,1] +mfma C[10,2] += A0[10]*B0[2] +mfma C[10,3] += A0[10]*B0[3] +bfld B0[14:16] +dsrd A1[3,0] +mfma C[11,0] += A0[11]*B0[0] +mfma C[11,1] += A0[11]*B0[1] +dsrd A1[3,1] +mfma C[11,2] += A0[11]*B0[2] +mfma C[11,3] += A0[11]*B0[3] + +mfma C[ 8, 8] += A0[8]*B0[8] +mfma C[ 8, 9] += A0[8]*B0[9] +bfld A0[8:10] +dsrd B1[0,0] +mfma C[ 8,10] += A0[8]*B0[10] +dsrd B1[0,1] +mfma C[ 8,11] += A0[8]*B0[11] +bfld A0[10:12] +dsrd B1[1,0] +mfma C[ 9, 8] += A0[9]*B0[8] +mfma C[ 9, 9] += A0[9]*B0[9] +dsrd B1[1,1] +mfma C[ 9,10] += A0[9]*B0[10] +mfma C[ 9,11] += A0[9]*B0[11] +bfld A0[12:14] +dsrd B1[2,0] +mfma C[10, 8] += A0[10]*B0[8] +mfma C[10, 9] += A0[10]*B0[9] +dsrd B1[2,1] +mfma C[10,10] += A0[10]*B0[10] +mfma C[10,11] += A0[10]*B0[11] +bfld A0[14:16] +dsrd B1[3,0] +mfma C[11, 8] += A0[11]*B0[8] +mfma C[11, 9] += A0[11]*B0[9] +dsrd B1[3,1] +mfma C[11,10] += A0[11]*B0[10] +mfma C[11,11] += A0[11]*B0[11] + +swap: A0<->A1, B0<->B1 +# next iter: A0,B0 = slice K+1 (a0/b0_frag already dsrd'd); A1,B1 = slice K+2. + +Counts per iteration (verify) +----------------------------- + mfma : 4 quad x 16 = 64 + dsrd : 4 quad x (4 blocks x 2 halves) = 32 + bfld : 4 quad x 4 chunks = 16 -> wait_barrier(16) matches + barrier : 2 (vmcnt 16), splitting {c00,c01} | {c10,c11} + +Tail (last 2 K-slices) drains with NO bfld (lines 396-422), then StoreC applies +acc * A_scale[row] * B_scale[col] -> bf16 (lines 424-427). diff --git a/resource_inspect/hgemm_register_prefetch_pipeline_plan.md b/resource_inspect/hgemm_register_prefetch_pipeline_plan.md new file mode 100644 index 000000000..2f2d47fe8 --- /dev/null +++ b/resource_inspect/hgemm_register_prefetch_pipeline_plan.md @@ -0,0 +1,234 @@ +HGEMM register-prefetch / K32-slice pipeline idea +================================================= + +Goal +---- + +Use extra VGPRs to keep a whole K32 slice in registers, then reuse the just-read +LDS stage earlier. The current AK32 kernel is at about 2589 cycles per BLOCK_K=64 +tile. It uses 380 VGPR, 256 AGPR, no spill: + + vgpr_count=380 + agpr_count=256 + private_segment_fixed_size=0 + vgpr_spill_count=0 + +So for this specific kernel it is reasonable to spend more VGPR if we stay below +the no-spill limit. + + +Current naming +-------------- + +Use logical block coordinates: + + C[i,j] one 16x16 output block + A0[i,k] current LDS stage, A block i, K32 slice k + B0[j,k] current LDS stage, B block j, K32 slice k + A1/B1 the other LDS stage + k=0 K[0:32] + k=1 K[32:64] + +Current loop entry already carries: + + A0[0,0] + B0[0:4,0] + +Current loop then mostly does: + + compute A0[:,0] * B0[:,0] + prefetch A0[:,1] / B0[:,1] from LDS late in the first K32 half + issue all next-tile bfld in the first half + compute A0[:,1] * B0[:,1] + barrier + tail-prefetch A1[0,0] and B1[0:4,0] + + +Proposed high-level schedule +---------------------------- + +The idea is to make each K32 half a scheduling block. Inside one block, dsrd, +bfld, and mfma are independent enough to interleave, as long as the data hazards +below are respected. + +Sketch, normalized to stage names: + + Block A, current stage S, write stage W: + + s_waitcnt vmcnt(N) # ideally N=4, only if safe by VMEM order + dsrd S.A[0,1] + dsrd S.B[0:8,1] + dsrd S.A[1:8,1] + bfld W.A[:,1] + bfld W.B[:,1] + mfma S.A[:,0] * S.B[:,0] + + s_waitcnt lgkmcnt(0) + s_barrier # all waves finished reading S.K1 from LDS + + Block B: + + bfld S.A[:,0] # S can now be reused for tile t+2 + bfld S.B[:,0] + mfma S.A[:,1] * S.B[:,1] # uses VGPR-resident K1, not LDS + + s_waitcnt vmcnt(N) + s_barrier # next current stage W is readable + dsrd W.B[0:4,0] + dsrd W.A[0,0] + yield current=W, write=S + +Then the next loop flips S/W. + +This is the main conceptual change: before overwriting S with future data, we +must have copied all S.K1 fragments needed by all waves into VGPRs. + + +Safety rules +------------ + +1. Do not overwrite an LDS stage while another wave may still read it. + + If we want to `bfld S.A[:,0]` / `bfld S.B[:,0]` while computing `S.K1`, + every wave must first finish all `dsrd S.A[:,1]` and `dsrd S.B[:,1]`. + That needs: + + s_waitcnt lgkmcnt(0) + s_barrier + + A wave-local data dependency is not enough, because another wave in the CTA + may still be behind and reading the same LDS stage. + +2. `vmcnt(4)` is only safe if the last 4 outstanding VMEM ops are not for the + fragments about to be read from LDS. + + For a first implementation, use `vmcnt(0)` at the stage handoff. After the + schedule is correct, we can order bfld so the final outstanding copies belong + to future slices that are not read yet, then relax to `vmcnt(4)`. + +3. Inside a block, operations can be interleaved if they target independent + resources: + + - `mfma S.K0` can overlap with `dsrd S.K1` because MFMA consumes K0 regs. + - `mfma S.K0` can overlap with `bfld W.K1` because W is the other LDS stage. + - `mfma S.K1` can overlap with `bfld S.K0` only after the mid-block + `lgkmcnt(0)+s_barrier`, because S.K1 is then in VGPR. + +4. Register pressure increases. + + To free S early, a wave needs to hold a full K1 slice: + + A K1 fragments: A[0:8,1] -> 8 vector fragments + B K1 fragments: B[0:8,1] -> 8 vector fragments + + On gfx950 BF16 K32, `WMMA_A_FRAG_VALUES = 8` and `WMMA_B_FRAG_VALUES = 8`. + The current 380 VGPR count gives room to try this, but the kernel must keep + the existing no-spill assertion. + + +LDS layout implications +----------------------- + +A is already mostly in the shape we want when `A_LDS_K32_BLOCKING=True`. + +Current A AK32 LDS view: + + as_k32_: (stage, k_group, M, K32) + +So one async copy chunk can logically fill: + + bfld A1[0:4,0] + bfld A1[4:8,0] + bfld A1[8:12,0] + bfld A1[12:16,0] + bfld A1[0:4,1] + bfld A1[4:8,1] + bfld A1[8:12,1] + bfld A1[12:16,1] + +That part is already aligned with the proposed schedule. + +B is not yet K32-blocked. Current B LDS view is: + + bs_: (stage, N, K64) + +So one async copy chunk currently fills a 32x64 logical region: + + bfld B1[0:2,0:2] + bfld B1[2:4,0:2] + ... + +If we want true `bfld B1[:,1]` independent from `bfld B1[:,0]`, we need a B +K32-blocked LDS view too: + + bs_k32_: (stage, k_group, N, K32) + +Then B chunks can become symmetric with A: + + bfld B1[0:4,0] + bfld B1[4:8,0] + bfld B1[8:12,0] + bfld B1[12:16,0] + bfld B1[0:4,1] + bfld B1[4:8,1] + bfld B1[8:12,1] + bfld B1[12:16,1] + +This would make the proposed `bfld A1[:,1] * B1[:,1]` schedule much easier to +express and reason about. + + +Implementation route +-------------------- + +Step 1: Register-prefetch K1, keep current B layout. + + - Add a variant of `ldmatrix_compute_tile_streaming` that can load all + `A[:,1]` and `B[:,1]` fragments into Python lists before the K0 MFMAs finish. + - Add a mid-loop `s_waitcnt lgkmcnt(0); s_barrier`. + - After that barrier, allow bfld into the just-freed current stage while K1 + MFMAs consume VGPR-resident fragments. + - Keep B bfld as `[row_pair,0:2]` chunks for this first pass. + - Benchmark with ATT; check no spill. + +Step 2: Add `B_LDS_K32_BLOCKING`. + + - Add `bs_k32_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, 2, BLOCK_N, 32))`. + - Change `ldg_sts_b_async_one` to map `i` as `(k_group, row_group)` like A. + - Change `load_b_frag_from` to read through `bs_k32_` when enabled. + - Recheck correctness, bank conflicts, and spills. + +Step 3: Tune waitcnt. + + - Start with conservative `vmcnt(0)` at stage handoff. + - Once correctness is stable, order VMEM issues so the last outstanding copies + are future-stage data not read immediately. + - Try `vmcnt(4)` and validate in ATT by checking the exact cycle window and + `s_waitcnt vmcnt` stalls. + + +Expected win / risk +------------------- + +Expected win: + + - Less exposed VMEM wait at loop boundary. + - More useful MFMA distance between bfld issue and LDS read. + - Ability to launch future-stage global->LDS copies while K1 compute is still + running, instead of clustering all bfld in the first K32 half. + +Main risks: + + - Extra mid-loop barrier may cost cycles, although 4-wave CTA barrier should be + relatively cheap compared with long vmcnt stalls. + - Extra VGPR may push register allocation over a cliff if address temporaries + also grow. + - B K32 layout may change LDS bank behavior; ATT must check `ds_read` and + `lgkmcnt` stalls, not just total cycles. + +Success criterion: + + - Correctness unchanged. + - `private_segment_fixed_size=0`, `vgpr_spill_count=0`, `sgpr_spill_count=0`. + - ATT hot-loop cycles below the current AK32 ~2589 cycles/tile. + - Ideally beat the older tail-prefetch baseline around 2493 cycles/tile. From 1b7db95bad96571a479ee4927a78eec84e864a54 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 10:52:03 +0000 Subject: [PATCH 089/118] fp4_gemm_4wave: pin MFMA accumulator in AGPR via inline asm (+58%, 2455->3870 TFLOPS) The ssa-lowered mfma_scale let the compiler spill f32x4 accumulators to arch VGPR and shuffle them with 1679 v_accvgpr_mov/read ops, pushing arch VGPR to 256 (full) and spilling 47 dwords. Emitting the scale-MFMA as inline asm with the =a,...,0 constraint pins the accumulator in AGPR in-place (like fp8's Mfma16x16x128AGPR). opsel is baked compile-time into the asm string: op_sel=[i%2,j%2,0], op_sel_hi=[ksub,ksub,0]. Result @ 8192^3: spill 47->0, arch VGPR 256->212, accvgpr 1679->512, 2455->~3870 TFLOPS (95% of the 4071 preshuffle_gemm baseline). cos=0.999999. --- kernels/fp4_gemm_4wave.py | 53 ++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index d6e6c3ed7..13fb93e92 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -27,9 +27,11 @@ import flydsl.compiler as flyc import flydsl.expr as fx +from flydsl._mlir.dialects import llvm as _llvm from flydsl.expr import arith, const_expr, range_constexpr from flydsl.expr import buffer_ops as _buffer_ops from flydsl.expr import rocdl as _rocdl +from flydsl.expr.typing import T as _T from flydsl.expr.typing import Vector as Vec from kernels.fp8_gemm_utils import ( G2SLoader, @@ -147,28 +149,55 @@ def idx(self, i, j): def call(self, a, b, c, sa, sb): """``sa`` / ``sb`` are lists (len n_groups) of packed-E8M0 i32 scales - (4 sub-fields each, one full K=256 step for a 32-row pack-group). The - MFMA's opsel arg is a COMPILE-TIME byte-select: - ``opsel = ksub * pack + tile_in_pair`` (ksub = K_Pack high field, - tile_in_pair = N_Pack low field). Tile ``i`` uses group ``i // 2`` and - in-pair byte ``i % 2``; one i32 feeds 2x2x... MFMAs via opsel.""" - # a[i] / b[j] are [i32x4_ksub0, i32x4_ksub1] from S2RLoaderFp4 -- the fp4 - # MFMA K=128 operand IS i32x4, used directly (no split/pad round-trip). + (4 sub-fields each, one full K=256 step for a 32-row pack-group). + + The accumulator is PINNED IN AGPR via inline asm (constraint ``=a,...,0``), + mirroring fp8's Mfma16x16x128AGPR. The plain ssa-lowered mfma_scale let the + compiler spill accumulators to arch VGPR and shuffle them with + v_accvgpr_mov/read (ISA: 1679 such ops, arch VGPR -> 256, scale spilled). + Pinning keeps the f32x4 acc in-place in AGPR -> arch VGPR drops, no spill. + + opsel is a COMPILE-TIME byte-select baked into the asm string: + opsel_a = ksub*2 + (i%2), opsel_b = ksub*2 + (j%2). + AMD encoding: low bit -> op_sel[lane], high bit (=ksub) -> op_sel_hi[lane]. + So op_sel=[i%2, j%2, 0], op_sel_hi=[ksub, ksub, 0].""" + # a[i] / b[j] are [i32x4_ksub0, i32x4_ksub1] from S2RLoaderFp4. for ksub in range_constexpr(_FP4_PACK): for i in range_constexpr(self.n_tiles_a): a_op = a[i][ksub] sa_v = sa[i // _FP4_PACK] - opsel_a = ksub * _FP4_PACK + (i % _FP4_PACK) + ia = i % _FP4_PACK for j in range_constexpr(self.n_tiles_b): b_op = b[j][ksub] sb_v = sb[j // _FP4_PACK] - opsel_b = ksub * _FP4_PACK + (j % _FP4_PACK) - c[self.idx(i, j)] = _rocdl.mfma_scale_f32_16x16x128_f8f6f4( - self.res_ty, - [a_op, b_op, c[self.idx(i, j)], _FP4_CBSZ, _FP4_BLGP, opsel_a, sa_v, opsel_b, sb_v], + jb = j % _FP4_PACK + c[self.idx(i, j)] = self._mfma_agpr( + a_op, b_op, c[self.idx(i, j)], sa_v, sb_v, ksub, ia, jb ) return c + def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): + # Build the op_sel / op_sel_hi suffix (compile-time). op_sel[2]/hi[2]=0. + opsel = f"op_sel:[{ia},{jb},0]" + opsel_hi = f"op_sel_hi:[{ksub},{ksub},0]" + asm = ( + "v_mfma_scale_f32_16x16x128_f8f6f4 $0, $1, $2, $0, $3, $4 " + f"{opsel} {opsel_hi} cbsz:4 blgp:4" + ) + return _llvm.inline_asm( + self.res_ty, + [ + arith._to_raw(a_op), + arith._to_raw(b_op), + arith._to_raw(sa_v), + arith._to_raw(sb_v), + arith._to_raw(acc), + ], + asm, + "=a,v,v,v,v,0", + has_side_effects=True, + ) + class ScaleLoader: """Loads ``shuffle_scale_w4``-PRESHUFFLED per-1x32 E8M0 scales. From 6781e5560a2781a16f35ca14c99453a0dac7d49b Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 11:05:23 +0000 Subject: [PATCH 090/118] fp4_gemm_4wave: depth-1 scale prefetch -> 4109 TFLOPS (beats 4071 baseline) With the accumulator now AGPR-pinned (spill 0, VGPR headroom ~44), restore depth-1 scale prefetch: each K-iter consumes the carried step-k scale and prefetches k+1. The scale buffer_load lands before its MFMA consumer, so the compiler keeps vmcnt(16) instead of dropping to vmcnt(8-13) waiting on scale (the small-vmcnt waits that dominated the per-MFMA stalls are gone). @ 8192^3: 3870 -> 4109 TFLOPS (vs 4071 preshuffle_gemm baseline), spill still 0, arch VGPR 220, cos=0.999999. --- kernels/fp4_gemm_4wave.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 13fb93e92..931e4da3b 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -412,14 +412,16 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) + # Step-0 scale (consumed in iter 0); each iter prefetches step k+1. + saR0, saR1, sbC0, sbC1 = _load_scales(0) + for k in range_constexpr(K_ITERS - 2): - # Depth-0 scale: load this step's scales inside the iter (no carried - # prefetch). Carrying step k+1 kept 8 scale i32 live; arch VGPR is - # already full from fp4 data, so those 8 spilled to scratch and were - # reloaded per-MFMA (ISA: 348 scratch-loads fed MFMA scale operands). - # 4 live instead of 8 -> less spill; scale is L2-hot so the un-hidden - # load latency is cheap. - saR0, saR1, sbC0, sbC1 = _load_scales(k) + # Depth-1 scale prefetch: consume this step's carried scale, prefetch + # k+1. Now that the accumulator is AGPR-pinned (spill gone, VGPR + # headroom ~44) the +4 scale VGPR fit, and prefetching one step ahead + # lets the scale buffer_load land before its MFMA so the compiler keeps + # vmcnt(16) instead of dropping to vmcnt(8-13) waiting on scale. + saR0_n, saR1_n, sbC0_n, sbC1_n = _load_scales(k + 1) wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) a_g2s.load(a_cur0, A0_gl_offset + (k + 2) * A_K_STEP) @@ -441,14 +443,14 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): a0_frag = a0n_frag b0_frag = b0n_frag + saR0, saR1, sbC0, sbC1 = saR0_n, saR1_n, sbC0_n, sbC1_n a_cur0, a_next0 = a_next0, a_cur0 a_cur1, a_next1 = a_next1, a_cur1 b_cur0, b_next0 = b_next0, b_cur0 b_cur1, b_next1 = b_next1, b_cur1 - # Tail step K_ITERS - 2. - saR0, saR1, sbC0, sbC1 = _load_scales(K_ITERS - 2) + # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) b1_frag = b_s2r.load(b_cur1, preshuffled=True) c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) From ea98e292d034f1d97a8c827a76b5d55c77a35fe8 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 11:23:20 +0000 Subject: [PATCH 091/118] fp4_gemm_4wave: interleave ds_read/buffer_load into MFMA shadow -> 4310 TFLOPS Previously each quad issued all g2s buffer_loads + s2r ds_reads up front, then 16 MFMA back-to-back. fp4 MFMA is ~16-cyc execute / 4-cyc issue, so a ds_read or buffer_load co-issues for free in the execute shadow between MFMAs. Thread the NEXT quad's data movement as per-step thunks issued one-after-each-MFMA (mirrors fp8 _interleaved_cluster); results land in holders the next quad consumes. @ 8192^3: 4109 -> 4310 TFLOPS (5.9% over the 4071 baseline), spill 0, cos 0.999999. --- kernels/fp4_gemm_4wave.py | 98 ++++++++++++++++++++++++++++++--------- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 931e4da3b..2972ba71f 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -65,23 +65,50 @@ def _vec_load_16xf8(self, lds_src, offset): view = fx.make_view(i8_iter, fx.make_layout(16, 1)) return view.load() + def _offset(self, i, step, preshuffled): + row = self.wave_idx * (self.n_tiles * 16) + i * 16 + self.lane_id % 16 + col = (self.lane_id // 16) * 16 + step * 64 + if const_expr(preshuffled): + return (row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128 + row_swz, col_swz = swizzle_128(row, col) + return row_swz * 128 + col_swz + def load(self, lds_src, preshuffled=False): frag = [] for i in range_constexpr(self.n_tiles): halves = [] - row = self.wave_idx * (self.n_tiles * 16) + i * 16 + self.lane_id % 16 for step in range_constexpr(2): - col = (self.lane_id // 16) * 16 + step * 64 - if const_expr(preshuffled): - offset = (row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128 - else: - row_swz, col_swz = swizzle_128(row, col) - offset = row_swz * 128 + col_swz - v = self._vec_load_16xf8(lds_src, offset) + v = self._vec_load_16xf8(lds_src, self._offset(i, step, preshuffled)) halves.append(v.bitcast(fx.Int32)) # i32x4, the K=128 MFMA operand frag.append(halves) # [ksub0_i32x4, ksub1_i32x4] return frag + def load_one(self, lds_src, i, ksub, preshuffled=False): + """One i32x4 (tile i, K=128 sub-block ksub) -- the interleave granularity.""" + v = self._vec_load_16xf8(lds_src, self._offset(i, ksub, preshuffled)) + return v.bitcast(fx.Int32) + + +def _g2s_thunks(g2s, dst, gl_off, n_steps): + """Module-level (so the @kernel AST rewriter doesn't turn the `range` into + scf.for): list of thunks, each issuing one g2s.load_one step.""" + return [lambda s=s: g2s.load_one(dst, gl_off, s) for s in range(n_steps)] + + +def _s2r_thunks(s2r, src, holder, n, pre): + """List of thunks, each issuing one s2r.load_one (tile i, ksub) into holder[i].""" + ts = [] + for i in range(n): + for ks in range(_FP4_PACK): + + def f(i=i, ks=ks): + if holder[i] is None: + holder[i] = [None, None] + holder[i][ks] = s2r.load_one(src, i, ks, preshuffled=pre) + + ts.append(f) + return ts + def _min(a, b): return arith.select(a < b, a, b) @@ -147,7 +174,7 @@ def __init__(self, n_tiles_a, n_tiles_b): def idx(self, i, j): return i * self.n_tiles_b + j - def call(self, a, b, c, sa, sb): + def call(self, a, b, c, sa, sb, interleave=None): """``sa`` / ``sb`` are lists (len n_groups) of packed-E8M0 i32 scales (4 sub-fields each, one full K=256 step for a 32-row pack-group). @@ -162,6 +189,12 @@ def call(self, a, b, c, sa, sb): AMD encoding: low bit -> op_sel[lane], high bit (=ksub) -> op_sel_hi[lane]. So op_sel=[i%2, j%2, 0], op_sel_hi=[ksub, ksub, 0].""" # a[i] / b[j] are [i32x4_ksub0, i32x4_ksub1] from S2RLoaderFp4. + # ``interleave`` is an optional list of zero-arg thunks (ds_read / buffer_load + # for the NEXT quad); one is issued after each MFMA so the load co-issues in + # the MFMA's execute shadow (fp4 MFMA: 4-cyc issue, ~16-cyc execute -> a + # ds_read/buffer_load fits free between MFMAs). Mirrors fp8 _interleaved_cluster. + thunks = list(interleave) if interleave else [] + nth = [0] # python-level counter (compile-time), not loop-carried for ksub in range_constexpr(_FP4_PACK): for i in range_constexpr(self.n_tiles_a): a_op = a[i][ksub] @@ -174,6 +207,12 @@ def call(self, a, b, c, sa, sb): c[self.idx(i, j)] = self._mfma_agpr( a_op, b_op, c[self.idx(i, j)], sa_v, sb_v, ksub, ia, jb ) + if nth[0] < len(thunks): + thunks[nth[0]]() + nth[0] += 1 + while nth[0] < len(thunks): + thunks[nth[0]]() + nth[0] += 1 return c def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): @@ -423,23 +462,40 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): # vmcnt(16) instead of dropping to vmcnt(8-13) waiting on scale. saR0_n, saR1_n, sbC0_n, sbC1_n = _load_scales(k + 1) + # Interleave each quad's MFMA with the data movement feeding the NEXT + # quad: thunks (g2s buffer_load + s2r ds_read) issued one-after-each-MFMA + # so they co-issue in the MFMA execute shadow (fp4 MFMA ~16-cyc execute / + # 4-cyc issue). Results land in holders consumed by the next quad. + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A + _a0n = [None] * N_TILES_A + _b0n = [None] * N_TILES_B + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - a_g2s.load(a_cur0, A0_gl_offset + (k + 2) * A_K_STEP) - b1_frag = b_s2r.load(b_cur1, preshuffled=True) - c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) + il = _g2s_thunks(a_g2s, a_cur0, A0_gl_offset + (k + 2) * A_K_STEP, N_TILES_A) + _s2r_thunks( + b_s2r, b_cur1, _b1, N_TILES_B, True + ) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) + b1_frag = _b1 - b_g2s.load(b_cur0, B0_gl_offset + (k + 2) * B_K_STEP) - a1_frag = a_s2r.load(a_cur1) - c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) + il = _g2s_thunks(b_g2s, b_cur0, B0_gl_offset + (k + 2) * B_K_STEP, N_TILES_A) + _s2r_thunks( + a_s2r, a_cur1, _a1, N_TILES_A, False + ) + c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1, interleave=il) + a1_frag = _a1 wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - b_g2s.load(b_cur1, B1_gl_offset + (k + 2) * B_K_STEP) - a0n_frag = a_s2r.load(a_next0) - c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) + il = _g2s_thunks(b_g2s, b_cur1, B1_gl_offset + (k + 2) * B_K_STEP, N_TILES_A) + _s2r_thunks( + a_s2r, a_next0, _a0n, N_TILES_A, False + ) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il) + a0n_frag = _a0n - a_g2s.load(a_cur1, A1_gl_offset + (k + 2) * A_K_STEP) - b0n_frag = b_s2r.load(b_next0, preshuffled=True) - c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + il = _g2s_thunks(a_g2s, a_cur1, A1_gl_offset + (k + 2) * A_K_STEP, N_TILES_A) + _s2r_thunks( + b_s2r, b_next0, _b0n, N_TILES_B, True + ) + c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1, interleave=il) + b0n_frag = _b0n a0_frag = a0n_frag b0_frag = b0n_frag From 644c229dcaeddb0554b734b8985abda57417a8e8 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 12:32:31 +0000 Subject: [PATCH 092/118] fp4_gemm_4wave: roll K-loop into scf.for unroll-2 (fix icache overflow) -> ~4370 TFLOPS Fully unrolling the 30-step K-loop blew .text to ~9559 instrs (~59KB) > 32KB L1 I-cache -> periodic instruction-fetch stalls (ATT: 27 gaps >=200cyc = 11.2% of the wave, independent MFMAs stalling with no waitcnt). Rolled the main loop into an scf.for with body = 2 unrolled K-steps. Unroll-2 is chosen so the 8-buffer ping-pong swaps cur<->next exactly twice per body = identity -> LDS pointers need no loop-carry. Carried state: 4 accumulator groups + a0/b0 fragment + 4 prefetched scales, flattened to raw ir.Values (scf iter_args). Runtime loop-var offsets cast to Int32 to satisfy arith.addi same-type. @ 8192^3: .text 9559->3257 instrs, big-gaps 11.2%->4.9% of wave, 4310->~4370 TFLOPS, spill still 0, cos=0.999999. --- kernels/fp4_gemm_4wave.py | 186 +++++++++++++++++++++++++++++--------- 1 file changed, 145 insertions(+), 41 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 2972ba71f..77cb25683 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -89,6 +89,21 @@ def load_one(self, lds_src, i, ksub, preshuffled=False): return v.bitcast(fx.Int32) +def _flat_frag(frag): + """fragment [tile][ksub] -> flat list of raw i32x4 ir.Values (2*n_tiles). + scf.for loop-carried args must be raw ir.Values (the dispatch reads .type), + so unwrap Vec/ArithValue via arith._to_raw.""" + out = [] + for t in frag: + out.append(arith._to_raw(t[0])) + out.append(arith._to_raw(t[1])) + return out + + +def _unflat_frag(flat, n_tiles): + return [[flat[2 * i], flat[2 * i + 1]] for i in range(n_tiles)] + + def _g2s_thunks(g2s, dst, gl_off, n_steps): """Module-level (so the @kernel AST rewriter doesn't turn the `range` into scf.for): list of thunks, each issuing one g2s.load_one step.""" @@ -264,11 +279,15 @@ def __init__(self, scale_arg, n_tiles, K, lane_id): self.rsrc = _buffer_ops.create_buffer_resource(scale_arg, max_size=True) def load_step(self, kstep, base_tile): - """list[n_groups] of packed i32 (K=256 step for each 32-row pack-group).""" - base_group = base_tile // 32 + """list[n_groups] of packed i32 (K=256 step for each 32-row pack-group). + All addends cast to Int32 so a runtime fx ``kstep`` (scf.for loop var) + doesn't trip arith.addi's same-type requirement (base_tile is Index).""" + base_group = fx.Int32(base_tile // 32) + kterm = fx.Int32(kstep) * fx.Int32(64) + lane = fx.Int32(self.lane_off) out = [] for g in range_constexpr(self.n_groups): - i32_off = (base_group + g) * self.row_stride + kstep * 64 + self.lane_off + i32_off = (base_group + fx.Int32(g)) * fx.Int32(self.row_stride) + kterm + lane out.append(_buffer_ops.buffer_load(self.rsrc, i32_off, vec_width=1, dtype=fx.Int32)) return out @@ -409,7 +428,9 @@ def _b_sc(k, base): return b_scale_ld.load_step(k, base) def _load_scales(k): - """All four packed-i32 scales for K-step ``k`` (prefetchable).""" + """All four packed-i32 scales for K-step ``k`` (prefetchable). ``k`` may + be a compile-time int OR a runtime fx index (load_step's kstep*64 offset + arithmetic and buffer_load both accept a runtime value).""" return ( _a_sc(k, sa_R0), _a_sc(k, sa_R1), @@ -417,6 +438,8 @@ def _load_scales(k): _b_sc(k, sb_C1), ) + _load_scales_rt = _load_scales # runtime-k alias used inside the scf.for body + # Accumulators: 2x2 64x64 quadrants per wave. c00_frag = [mfma.zero_value] * N_ACCUMS c01_frag = [mfma.zero_value] * N_ACCUMS @@ -454,57 +477,138 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): # Step-0 scale (consumed in iter 0); each iter prefetches step k+1. saR0, saR1, sbC0, sbC1 = _load_scales(0) - for k in range_constexpr(K_ITERS - 2): - # Depth-1 scale prefetch: consume this step's carried scale, prefetch - # k+1. Now that the accumulator is AGPR-pinned (spill gone, VGPR - # headroom ~44) the +4 scale VGPR fit, and prefetching one step ahead - # lets the scale buffer_load land before its MFMA so the compiler keeps - # vmcnt(16) instead of dropping to vmcnt(8-13) waiting on scale. - saR0_n, saR1_n, sbC0_n, sbC1_n = _load_scales(k + 1) - - # Interleave each quad's MFMA with the data movement feeding the NEXT - # quad: thunks (g2s buffer_load + s2r ds_read) issued one-after-each-MFMA - # so they co-issue in the MFMA execute shadow (fp4 MFMA ~16-cyc execute / - # 4-cyc issue). Results land in holders consumed by the next quad. + # ---- Main K-loop as scf.for, unrolled by 2 ------------------------------ + # Why scf.for (not range_constexpr full unroll): fully unrolling all 30 main + # steps blew .text to ~59KB > 32KB I-cache -> periodic instruction-fetch + # stalls. Rolling into an scf.for (body = 2 unrolled steps) keeps .text small. + # Unroll-2 is chosen because the buffer ping-pong swaps the cur<->next LDS + # pointers exactly twice per body -> identity, so the LDS pointers need NOT + # be loop-carried. Carried state = the 4 accumulator groups + a0/b0 fragment + # + the 4 prefetched scales. + # + # ``buf`` arg names below are fixed (cur0/cur1/next0/next1); a single step + # mutates which physical buffer is "cur" via the pointer-pair swap, so the + # step body is parameterized by the current pointer set passed in. + def _one_step(kc, a0f, b0f, sc, accs, bufs): + # bufs = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) + ac0, ac1, an0, an1, bc0, bc1, bn0, bn1 = bufs + saR0, saR1, sbC0, sbC1 = sc + c00f, c01f, c10f, c11f = accs + kc_i = fx.Int32(kc) # Int32 for scale load_step (matches lane_off Int32) + saR0_n, saR1_n, sbC0_n, sbC1_n = _load_scales_rt(kc_i + 1) + _b1 = [None] * N_TILES_B _a1 = [None] * N_TILES_A _a0n = [None] * N_TILES_A _b0n = [None] * N_TILES_B + # This step prefetches K-step (kc+2). g2s offsets fully in Int32 + # (A*_gl_offset is Index; kc_i is the Int32 loop var), so arith.addi + # operands match. a*_off = base + (kc+2)*A_K_STEP. + ak = (kc_i + fx.Int32(2)) * fx.Int32(A_K_STEP) + bk = (kc_i + fx.Int32(2)) * fx.Int32(B_K_STEP) + a0_off = fx.Int32(A0_gl_offset) + ak + a1_off = fx.Int32(A1_gl_offset) + ak + b0_off = fx.Int32(B0_gl_offset) + bk + b1_off = fx.Int32(B1_gl_offset) + bk wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - il = _g2s_thunks(a_g2s, a_cur0, A0_gl_offset + (k + 2) * A_K_STEP, N_TILES_A) + _s2r_thunks( - b_s2r, b_cur1, _b1, N_TILES_B, True + il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks( + b_s2r, bc1, _b1, N_TILES_B, True ) - c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) - b1_frag = _b1 + c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) + b1f = _b1 - il = _g2s_thunks(b_g2s, b_cur0, B0_gl_offset + (k + 2) * B_K_STEP, N_TILES_A) + _s2r_thunks( - a_s2r, a_cur1, _a1, N_TILES_A, False + il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A) + _s2r_thunks( + a_s2r, ac1, _a1, N_TILES_A, False ) - c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1, interleave=il) - a1_frag = _a1 + c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) + a1f = _a1 wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - il = _g2s_thunks(b_g2s, b_cur1, B1_gl_offset + (k + 2) * B_K_STEP, N_TILES_A) + _s2r_thunks( - a_s2r, a_next0, _a0n, N_TILES_A, False + il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + _s2r_thunks( + a_s2r, an0, _a0n, N_TILES_A, False ) - c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il) - a0n_frag = _a0n + c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) + a0nf = _a0n - il = _g2s_thunks(a_g2s, a_cur1, A1_gl_offset + (k + 2) * A_K_STEP, N_TILES_A) + _s2r_thunks( - b_s2r, b_next0, _b0n, N_TILES_B, True + il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A) + _s2r_thunks( + b_s2r, bn0, _b0n, N_TILES_B, True ) - c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1, interleave=il) - b0n_frag = _b0n - - a0_frag = a0n_frag - b0_frag = b0n_frag - saR0, saR1, sbC0, sbC1 = saR0_n, saR1_n, sbC0_n, sbC1_n - - a_cur0, a_next0 = a_next0, a_cur0 - a_cur1, a_next1 = a_next1, a_cur1 - b_cur0, b_next0 = b_next0, b_cur0 - b_cur1, b_next1 = b_next1, b_cur1 + c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) + b0nf = _b0n + + new_bufs = (an0, an1, ac0, ac1, bn0, bn1, bc0, bc1) # swap cur<->next + return a0nf, b0nf, (saR0_n, saR1_n, sbC0_n, sbC1_n), (c00f, c01f, c10f, c11f), new_bufs + + bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) + n_a = 2 * N_TILES_A + n_b = 2 * N_TILES_B + _R = arith._to_raw + n_ga = N_TILES_A // _FP4_PACK # scale groups per A-scale (=len(saR0)) + n_gb = N_TILES_B // _FP4_PACK + + def _flat_sc(sc4): + # sc4 = (saR0, saR1, sbC0, sbC1); each is a list of n_g i32 + out = [] + for s in sc4: + for v in s: + out.append(_R(v)) + return out + + def _unflat_sc(flat): + o = 0 + saR0 = list(flat[o : o + n_ga]); o += n_ga + saR1 = list(flat[o : o + n_ga]); o += n_ga + sbC0 = list(flat[o : o + n_gb]); o += n_gb + sbC1 = list(flat[o : o + n_gb]); o += n_gb + return saR0, saR1, sbC0, sbC1 + + n_sc = 2 * n_ga + 2 * n_gb + init_state = ( + _flat_frag(a0_frag) + + _flat_frag(b0_frag) + + _flat_sc((saR0, saR1, sbC0, sbC1)) + + [_R(x) for x in c00_frag] + + [_R(x) for x in c01_frag] + + [_R(x) for x in c10_frag] + + [_R(x) for x in c11_frag] + ) + for kk, state in range(0, K_ITERS - 2, 2, init=init_state): + off = 0 + a0f = _unflat_frag(state[off : off + n_a], N_TILES_A); off += n_a + b0f = _unflat_frag(state[off : off + n_b], N_TILES_B); off += n_b + sc = _unflat_sc(state[off : off + n_sc]); off += n_sc + c00f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c01f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c10f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c11f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + accs = (c00f, c01f, c10f, c11f) + + # step kk + a0f, b0f, sc, accs, bufs = _one_step(kk, a0f, b0f, sc, accs, bufs0) + # step kk+1 (pointers swapped once; swap again -> back to bufs0 at exit) + a0f, b0f, sc, accs, bufs = _one_step(kk + 1, a0f, b0f, sc, accs, bufs) + + new_state = ( + _flat_frag(a0f) + + _flat_frag(b0f) + + _flat_sc(sc) + + [_R(x) for x in accs[0]] + + [_R(x) for x in accs[1]] + + [_R(x) for x in accs[2]] + + [_R(x) for x in accs[3]] + ) + state = yield new_state + + # unpack final state back into the named vars the tail uses + off = 0 + a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A); off += n_a + b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B); off += n_b + saR0, saR1, sbC0, sbC1 = _unflat_sc(state[off : off + n_sc]); off += n_sc + c00_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c01_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c10_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + c11_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) From 8a9cf5b042fca53aa2ee0b1ad5c92069bf04b681 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Thu, 25 Jun 2026 13:09:00 +0000 Subject: [PATCH 093/118] fp4_gemm_4wave: add mn_aligned epilogue fast-path (skip per-store bounds select) When the caller asserts M % BLOCK_M == 0 and N % BLOCK_N == 0 (mn_aligned=True), every epilogue store is in-bounds, so skip the per-store col-bounds v_cmp+v_cndmask (256/wave of redundant address work). mn_aligned=False keeps the explicit bounds select for arbitrary M/N (correctness preserved, more shapes supported). Common alignment fast-path; cos=0.999999, ~4370 TFLOPS unchanged (epilogue is <3% of the wave at 8192^3, so no measurable delta -- this is a generality + cleanliness change). --- kernels/fp4_gemm_4wave.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 77cb25683..bf6d6705e 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -295,13 +295,14 @@ def load_step(self, kstep, base_tile): class StoreCFp4: """Epilogue: acc(f32x4) -> bf16, no scale mul (scale was applied in MFMA).""" - def __init__(self, C, c_rows, c_cols, c_idx_fn, n_tiles_a, n_tiles_b): + def __init__(self, C, c_rows, c_cols, c_idx_fn, n_tiles_a, n_tiles_b, mn_aligned=False): self.c_rows = c_rows self.c_cols = c_cols self.lane_id = fx.thread_idx.x % 64 self.c_idx_fn = c_idx_fn self.n_tiles_a = n_tiles_a self.n_tiles_b = n_tiles_b + self.mn_aligned = mn_aligned c_nbytes = c_rows * c_cols * 2 gC = fx.rocdl.make_buffer_tensor(C, max_size=False, num_records_bytes=c_nbytes) self.c_div = fx.logical_divide(gC, fx.make_layout(1, 1)) @@ -317,13 +318,21 @@ def store(self, c_frag, base_row, base_col): row = base_row + ti * 16 + (self.lane_id // 16) * 4 for tj in range_constexpr(self.n_tiles_b): col = base_col + tj * 16 + self.lane_id % 16 - col_valid = col < self.c_cols - oob = fx.Int32(self.c_rows * self.c_cols) vec_f32 = Vec(c_frag[self.c_idx_fn(ti, tj)]) - for i in range_constexpr(4): - scaled = vec_f32[i].to(fx.BFloat16) - c_index = (row + i) * self.c_cols + col - self._store_bf16(scaled, arith.select(col_valid, c_index, oob)) + if const_expr(self.mn_aligned): + # M/N aligned to BLOCK -> every store in-bounds, no select. + for i in range_constexpr(4): + scaled = vec_f32[i].to(fx.BFloat16) + self._store_bf16(scaled, (row + i) * self.c_cols + col) + else: + # arbitrary M/N: guard each store; OOB redirected to a sentinel + # index the bounded buffer resource drops. + col_valid = col < self.c_cols + oob = fx.Int32(self.c_rows * self.c_cols) + for i in range_constexpr(4): + scaled = vec_f32[i].to(fx.BFloat16) + c_index = (row + i) * self.c_cols + col + self._store_bf16(scaled, arith.select(col_valid, c_index, oob)) def compile_fp4_gemm_4w( @@ -332,7 +341,12 @@ def compile_fp4_gemm_4w( BLOCK_M: int = 256, BLOCK_N: int = 256, use_xcd_remap: bool = True, + mn_aligned: bool = False, ): + # mn_aligned: caller asserts M % BLOCK_M == 0 and N % BLOCK_N == 0, so every + # epilogue store is in-bounds -> skip the per-store col-bounds select (saves + # 256 v_cmp+v_cndmask/wave). Leave False for arbitrary M/N (correctness via the + # explicit bounds select). Common alignment-fast-path optimization. # 256 fp4 per LDS K-step row = 128 bytes; reuse fp8's 128-byte LDS layout. BLOCK_K = 256 # fp4 elements BLOCK_K_BYTES = BLOCK_K // 2 # 128 bytes / row @@ -453,7 +467,7 @@ def _load_scales(k): b_g2s = G2SLoader(gb_div, gl_off_b, N_TILES_B, I8_IR_t, wave_id) a_s2r = S2RLoaderFp4(wave_i, N_TILES_A) b_s2r = S2RLoaderFp4(wave_j, N_TILES_B) - store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B) + store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B, mn_aligned=mn_aligned) # Prologue. a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) From 9ceee2d310e7d926611be9b23d954528abf5bb8a Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 26 Jun 2026 08:02:21 +0000 Subject: [PATCH 094/118] gitignore: exclude scratch experiments, handoff notes, and snapshot WIP experiments/, handoff*.md, resource_inspect/snapshots/, and run_bf16_gemm_att.sh are local scratch/WIP, not for tracking. --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 6a65971ec..e7be76b08 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,10 @@ resource_inspect/bm16_*/ # Agent / tooling scratch .agents/ codexhook.sh + +# Scratch / WIP experiments and handoff notes (not for tracking) +experiments/ +handoff.md +handoff_moe_gemm1.md +resource_inspect/snapshots/ +scripts/run_bf16_gemm_att.sh From a006b20ce96ae30dd4067cd2b22aaa552171e9bc Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 29 Jun 2026 03:05:59 +0000 Subject: [PATCH 095/118] fp4_gemm_4wave: cut arch VGPR 252->220 via single-symbol LDS + inline-asm g2s Merge the 8 separate LDS buffers into one contiguous symbol so cross-buffer ds_read offsets fold into the 16-bit ds offset: immediate (hot-loop ds_reads now use 4 base VGPRs / 2 windows per operand instead of ~20 materialized addresses), dropping arch VGPR high-water from 252 to 220 (headroom 4->36, off the spill cliff). A single LDS symbol breaks the compiler's alias analysis between the g2s global->LDS DMA writes and the ds_reads, which would insert an s_waitcnt vmcnt(0) drain before every ds_read (-40% perf); emitting g2s as inline-asm buffer_load_dwordx4 ... lds (G2SLoaderAsm) hides the LDS write so no drain is added, while ds_read stays a plain llvm.load so the compiler manages it with fine-grained lgkmcnt (matching the baseline) rather than conservative VMEM vmcnt. K-step offset goes in the buffer instruction's scalar soffset (hardware-free) to keep voffset loop-invariant. ~4270 TFLOPS @ 8192^3, 4812 @ 16384^3. Also add the vgpr-pressure-analysis skill (ISA dump -> high-water + per-purpose arch-VGPR breakdown + peak region) used to drive this work. Co-Authored-By: Claude Opus 4 (1M context) --- .../skills/vgpr-pressure-analysis/SKILL.md | 76 +++++ .../scripts/vgpr_pressure.py | 134 ++++++++ kernels/fp4_gemm_4wave.py | 289 +++++++++++++----- 3 files changed, 424 insertions(+), 75 deletions(-) create mode 100644 .claude/skills/vgpr-pressure-analysis/SKILL.md create mode 100644 .claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py diff --git a/.claude/skills/vgpr-pressure-analysis/SKILL.md b/.claude/skills/vgpr-pressure-analysis/SKILL.md new file mode 100644 index 000000000..6906c26a5 --- /dev/null +++ b/.claude/skills/vgpr-pressure-analysis/SKILL.md @@ -0,0 +1,76 @@ +--- +name: vgpr-pressure-analysis +description: Analyze AMDGCN VGPR/AGPR register pressure of a FlyDSL kernel from its ISA dump — report the compiler high-water (vgpr/agpr/accum_offset/spill/headroom) AND a per-purpose breakdown of where the arch VGPRs go (A/B fragment ds_read, address ALU, scale loads, epilogue), plus the true peak-pressure region. Use when the user asks "how many VGPRs does X use", "where is the register pressure", "为啥 vgpr 这么高 / 占用统计 / 寄存器压力", is chasing spill, or wants to free registers (deeper prefetch, more occupancy) on CDNA GEMM/attention kernels. +--- + +# VGPR Pressure Analysis + +Find out where a kernel's registers go so you can target what to cut (to kill +spill, deepen a prefetch, or raise occupancy). Works from the ISA dump, using the +compiler's own allocation — not guesses. + +## Mental model (CDNA3/4, wave64) + +- A SIMD has **512 VGPRs total**, split into **arch VGPRs** (v0..accum_offset-1) + and the **AGPR file** (accum_offset..511). MFMA accumulators normally live in + AGPR (pin them there — see [[feedback-4wave-1occ-is-optimal]]). +- So a 256x256 tile that needs **256 AGPR for accumulators** leaves only **256 + arch VGPRs** for everything else (A/B fragments, scale, addresses, temps). + That ~256 is the budget you actually fight over. +- `accum_offset` in the ISA metadata **IS the compiler's arch-VGPR high-water** + (the AGPR file starts right after the last arch VGPR). Trust it over hand counts. +- **spill** (`.vgpr_spill_count > 0`) is catastrophic on the hot loop — treat any + spill as the top priority. Always analyze the BIG shape (small shapes / short K + loops often don't spill and mislead). + +## How to get the ISA dump + +```bash +rm -rf /tmp/kdump +FLYDSL_RUNTIME_ENABLE_CACHE=0 FLYDSL_DUMP_IR=1 FLYDSL_DEBUG_DUMP_ASM=1 \ + FLYDSL_DUMP_DIR=/tmp/kdump PYTHONPATH= HIP_VISIBLE_DEVICES= \ + python3 # use a realistic/large shape +# -> /tmp/kdump/_0/21_final_isa.s +``` + +## Run the analysis + +```bash +python3 .claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py /tmp/kdump +``` + +Three sections: +1. **high-water** — vgpr/agpr/accum_offset/sgpr, spill flags, headroom (512-total). +2. **arch-VGPR breakdown** — each arch VGPR bucketed by the op that LAST defines it: + `ds_read` (A/B fragment data), `address/index ALU`, `buffer_load dword` (scale), + `cvt` (epilogue), `mov/accvgpr`. This tells you the proportion: e.g. fragments + 136, address ALU 89, scale 23. +3. **peak region** — the instructions that touch the very top arch VGPRs + (those numbers only get allocated at the pressure peak), so you see exactly + what is co-live at the worst point. + +## Reading the result / what to cut + +- **`mov/accvgpr` or `MFMA dest` showing many ARCH regs** => accumulators are NOT + AGPR-pinned (compiler spilled them to arch VGPR + inserted v_accvgpr_mov/read). + Fix: pin the accumulator in AGPR via inline asm (`=a,...,0`). Biggest single win. +- **`ds_read (A/B fragment)` dominates** => that's real operand data; to cut it you + must reduce *simultaneously-live* fragments (e.g. don't pre-load all M/N tiles up + front; load some inside the loop) — costs scheduling latitude, do only if spilling. +- **`address/index ALU` surprisingly high** => many live address/offset registers + (LDS swizzle bases, per-buffer LDS bases, scale addresses). Often reducible by + sharing one base + immediate offsets (ds_read/buffer_load have immediate offset + fields) instead of materializing a full address per access. Watch the 16-bit + immediate-offset limit (65535) — group accesses so the spread fits. +- **`buffer_load dword (scale)`** => per-block scale; carrying it as loop-carried + (prefetch) costs regs but hides latency. Trade-off: dropping the carry frees ~8 + regs but exposes scale latency (measure both). + +## Caveats + +- The breakdown buckets by *last* defining op, so a reg reused across phases is + attributed to its final use — it's a proportional map of pressure, not exact + per-instant liveness. For exact peak liveness trust `accum_offset`. +- Re-dump after every change (cache off) and re-check spill on the big shape. +- Related: [[project-fp4-gemm-4wave-status]] has a worked example (arch 252: + fragment 136 / address 89 / scale 23). diff --git a/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py b/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py new file mode 100644 index 000000000..20d0b7b29 --- /dev/null +++ b/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +"""Analyze AMDGCN VGPR/AGPR register pressure from a FlyDSL ISA dump. + +Two reports: + 1. High-water summary (compiler-authoritative): vgpr/agpr/sgpr counts, spill, + accum_offset (= arch-VGPR high-water; AGPR file starts here), headroom. + 2. Per-purpose arch-VGPR breakdown: bucket each arch VGPR (v0..accum_offset-1) + by the instruction that LAST defines it (ds_read=A/B fragment, address ALU, + buffer_load=scale/data, cvt=epilogue, ...). Shows where the pressure goes. + +Usage: + python3 vgpr_pressure.py # dir containing *_final_isa.s + python3 vgpr_pressure.py # an ISA file directly +""" +import collections +import glob +import os +import re +import sys + + +def find_isa(path): + if os.path.isfile(path): + return path + files = glob.glob(f"{path}/**/*_final_isa.s", recursive=True) + if not files: + files = glob.glob(f"{path}/**/*.s", recursive=True) + return max(files, key=os.path.getmtime) if files else None + + +def summary(text): + def g(pat): + m = re.search(pat, text) + return m.group(1) if m else None + + vgpr = g(r"\.vgpr_count:\s*(\d+)") + agpr = g(r"\.agpr_count:\s*(\d+)") + sgpr = g(r"\.sgpr_count:\s*(\d+)") + vspill = g(r"\.vgpr_spill_count:\s*(\d+)") or "0" + sspill = g(r"\.sgpr_spill_count:\s*(\d+)") or "0" + acc = g(r"\.amdhsa_accum_offset\s*(\d+)") + print("== high-water (compiler-authoritative) ==") + print(f" vgpr_total={vgpr} agpr={agpr} accum_offset(arch hi-water)={acc} sgpr={sgpr}") + print(f" spill: vgpr={vspill} sgpr={sspill}{' *** SPILL ***' if vspill != '0' or sspill != '0' else ''}") + if vgpr and vgpr.isdigit(): + print(f" total {vgpr}/512 headroom={512 - int(vgpr)}") + return int(acc) if acc and acc.isdigit() else (int(vgpr) if vgpr and vgpr.isdigit() else 256) + + +def dests(line): + l = line.strip() + if not l or l.startswith((";", "s_", ".")): + return ([], None) + m = re.match(r"(\S+)\s+(v\[(\d+):(\d+)\]|v(\d+))", l) + if not m: + return ([], None) + op = m.group(1) + rs = list(range(int(m.group(3)), int(m.group(4)) + 1)) if m.group(3) is not None else [int(m.group(5))] + return (rs, op) + + +def bucket(op): + if op.startswith("v_mfma"): + return "MFMA dest (accum; mostly AGPR, arch only if spilled)" + if op.startswith("ds_read"): + return "ds_read dest (S2R A/B fragment - data)" + if op.startswith("buffer_load_dwordx4"): + return "buffer_load x4 (wide A/B data)" + if op.startswith("buffer_load"): + return "buffer_load dword (scale / narrow)" + if op.startswith(("v_add", "v_or", "v_lshl", "v_and", "v_mul", "v_sub", "v_bitop", "v_lshr", "v_bfe")): + return "address / index ALU" + if op.startswith("v_cvt"): + return "cvt (epilogue dtype convert)" + if op.startswith(("v_mov", "v_accvgpr")): + return "mov / accvgpr shuffle" + return f"other ({op})" + + +def breakdown(text, arch_hi): + owner = {} # reg -> bucket of its LAST defining op (its "current" use at peak) + for l in text.splitlines(): + rs, op = dests(l) + if op is None: + continue + b = bucket(op) + for r in rs: + if r < arch_hi: + owner[r] = b + tab = collections.Counter(owner.values()) + print(f"\n== arch-VGPR breakdown (v0..v{arch_hi-1}, by last-defining op) ==") + print(f" {len(owner)}/{arch_hi} arch VGPRs defined in-kernel") + print(f" {'bucket':52s} #regs") + for b, n in tab.most_common(): + print(f" {b:52s} {n}") + + +def peak_region(text, arch_hi): + """Show instructions touching the TOP arch VGPRs (v[hi-12..hi-1]) -- the true + peak-pressure region (those high numbers only get allocated at the peak).""" + lo = max(0, arch_hi - 12) + lines = text.splitlines() + hits = [] + for i, l in enumerate(lines): + vs = set() + for m in re.findall(r"v\[(\d+):(\d+)\]", l): + vs.update(range(int(m[0]), int(m[1]) + 1)) + for m in re.findall(r"(? 1 else "/tmp/fp4_dump" + f = find_isa(path) + if not f: + print(f"no ISA .s under {path}") + sys.exit(1) + print(f"ISA: {f}") + text = open(f).read() + arch_hi = summary(text) + breakdown(text, arch_hi) + peak_region(text, arch_hi) + + +if __name__ == "__main__": + main() diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index bf6d6705e..7c1c55924 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -27,6 +27,7 @@ import flydsl.compiler as flyc import flydsl.expr as fx +from flydsl._mlir import ir as _ir from flydsl._mlir.dialects import llvm as _llvm from flydsl.expr import arith, const_expr, range_constexpr from flydsl.expr import buffer_ops as _buffer_ops @@ -34,16 +35,113 @@ from flydsl.expr.typing import T as _T from flydsl.expr.typing import Vector as Vec from kernels.fp8_gemm_utils import ( - G2SLoader, ceildiv, compute_global_swizzle, divmod, - make_fp8_buffer_tensor, swizzle_128, wait_barrier, ) +class _Buf: + """LDS sub-buffer handle over the ONE contiguous LDS array. + + Holds the shared base pointer plus this buffer's compile-time byte offset + SEPARATELY (not pre-added). Keeping the buffer offset as an int lets the ds_read + path build the address as ``(base + dynamic_swizzle) + const(buffer_off+tile)`` + so the constant outer GEP folds into the ds_read 16-bit offset: field. (Pre-adding + buffer_off into .ptr made the dynamic swizzle the outermost term -> ptrtoint + + int-add -> unfoldable, leaving ~24 address VGPRs materialized.) + + ``.ptr`` (base + buffer_off) is still provided for G2SLoaderAsm, which needs the + actual per-buffer LDS base for m0. + """ + + def __init__(self, base_ptr, byte_off): + self.base_ptr = base_ptr + self.byte_off = byte_off + + @property + def ptr(self): + return fx.add_offset(self.base_ptr, self.byte_off) + + +_gep = _buffer_ops.get_element_ptr + + +def _lds_ptr_t(): + return _ir.Type.parse("!llvm.ptr<3>") + + +def _asm_void(operands, asm_string, constraints): + """Side-effecting void inline asm (LLVM sees no memory op -> no waitcnt added).""" + _llvm.inline_asm(None, operands, asm_string, constraints, has_side_effects=True) + + +def _uniform_i32(value): + """Cast to i32 and force a wave-uniform SGPR value for scalar inline-asm operands.""" + raw = arith._to_raw(value) if not isinstance(value, _ir.Value) else value + if raw.type != _T.i32: + raw = arith._to_raw(fx.Int32(raw)) + return _rocdl.readfirstlane(_T.i32, raw) + + +class G2SLoaderAsm: + """Global->LDS DMA via INLINE-ASM ``buffer_load_dwordx4 ... lds`` instead of the + BufferCopyLDS128b copy atom. + + Mirrors the mla_fwd_decode trick: with the 8 LDS buffers merged into ONE + symbol (so ds_read cross-buffer offsets fold into the 16-bit imm), LLVM can no + longer prove the g2s LDS writes don't alias the ds_reads, and would insert a + spurious ``s_waitcnt vmcnt(0)`` before every ds_read. Emitting the load as + opaque inline asm means LLVM sees no LDS write at all, so it adds no drain -- + vmcnt ordering is managed entirely by our explicit ``wait_barrier`` (which is + itself inline-asm ``s_waitcnt vmcnt(N); s_barrier``). The inline-asm + buffer_load IS still counted toward vmcnt by hardware, so the manual counts in + wait_barrier stay correct. + + Each ``buffer_load_dwordx4 vN, rsrc, soffset offen lds`` writes 16 bytes to the + LDS address in m0; m0 holds the per-step LDS byte base (wave-uniform via + readfirstlane), the per-lane swizzle is the voffset VGPR (loop-invariant), and + the K-step offset is the scalar soffset operand (hardware-free add). + """ + + def __init__(self, rsrc, gl_offsets, n_load_steps, wave_id): + self.rsrc = arith._to_raw(rsrc) + self.gl_offsets = gl_offsets + self.n_load_steps = n_load_steps + self.wave_id = wave_id + self.n_waves = fx.block_dim.x // 64 + + def _lds_base_sgpr(self, lds_dst, step): + step_off = self.wave_id * 1024 + step * (self.n_waves * 1024) + lds_base = fx.Int32(fx.ptrtoint(lds_dst.ptr)) + fx.Int32(step_off) + return _uniform_i32(lds_base) + + def _voffset(self, step): + # Per-lane global byte offset = swizzle only (loop-invariant). The K-step + # offset is NOT added here -- it goes in the buffer instruction's scalar + # soffset field (hardware-free add), so voffset is a constant VGPR reused + # across all K iterations instead of an `v_add k_offset` every step. + return arith._to_raw(fx.Int32(self.gl_offsets[step])) + + def _emit(self, lds_dst, k_offset, step): + m0 = self._lds_base_sgpr(lds_dst, step) + voff = self._voffset(step) + soff = _uniform_i32(k_offset) # scalar soffset (K-step), folded by hardware + # No s_nop after the m0 write: these loads are interleaved between MFMAs, + # so the MFMA in the shadow already covers the m0 write->use hazard latency. + asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" + _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") + + def load(self, lds_dst, k_offset): + for step in range_constexpr(self.n_load_steps): + self._emit(lds_dst, k_offset, step) + + def load_one(self, lds_dst, k_offset, step): + self._emit(lds_dst, k_offset, step) + + class S2RLoaderFp4: """fp4 S2R LDS->reg loader. Unlike the fp8 loader it does NOT pack the two K=64 halves into an i32x8 fragment -- it returns the two i32x4 halves as-is, @@ -58,15 +156,41 @@ def __init__(self, wave_idx, n_tiles): self.wave_idx = wave_idx self.n_tiles = n_tiles - def _vec_load_16xf8(self, lds_src, offset): - off_tup = fx.make_int_tuple(offset) - ptr_off = fx.add_offset(lds_src.ptr, off_tup) - i8_iter = fx.recast_iter(fx.Uint8, ptr_off) - view = fx.make_view(i8_iter, fx.make_layout(16, 1)) - return view.load() - - def _offset(self, i, step, preshuffled): - row = self.wave_idx * (self.n_tiles * 16) + i * 16 + self.lane_id % 16 + def _vec_load_16xf8(self, lds_src, dyn_offset, const_offset): + # Plain LLVM ds_read (NOT inline-asm). The single-symbol LDS layout would + # normally make the compiler insert an s_waitcnt vmcnt(0) drain before each + # ds_read (it can't prove the g2s global->LDS DMA writes don't alias) -- but + # because g2s is now inline-asm (G2SLoaderAsm), the LDS WRITE is invisible to + # the compiler, so no drain is emitted. And being a REAL LDS load, the + # compiler tracks it with fine-grained lgkmcnt (matching the 8-symbol + # baseline's sync) instead of the conservative per-MFMA VMEM vmcnt it would + # insert for an opaque inline-asm block. + # + # Address folding: the per-lane vaddr VGPR carries only the DYNAMIC part + # (symbol base + 64KB-window half + lane swizzle); the constant (buffer + + # tile) byte offset folds into the ds_read 16-bit offset: immediate via the + # inttoptr + GEP(static) below. ds offset is 16-bit (max 0xFFFF=64KB) but the + # 8 buffers span 0x1d800 (>64KB), so split into two windows: buffers 0-3 + # (base+0) and 4-7 (base+0x10000). imm = buffer_off - window_base + tile*2048 + # stays <= 0xc000+0x1800 = 0xd800 < 0xFFFF. The window base (0 or 0x10000) is + # the only buffer-dependent term left in the dynamic vaddr, so all 8 buffers + # collapse to 2 base VGPRs per (operand, step) -- 4 total in the hot loop. + total_off = lds_src.byte_off + const_offset + window_base = (total_off // 0x10000) * 0x10000 + imm = total_off - window_base + assert 0 <= imm <= 0xFFFF + vaddr = fx.Int32(fx.ptrtoint(lds_src.base_ptr)) + fx.Int32(window_base + dyn_offset) + lds_ptr = _llvm.inttoptr(_lds_ptr_t(), arith._to_raw(vaddr)) + if imm != 0: + lds_ptr = _gep(lds_ptr, static_byte_offset=imm) + vec4_i32 = _ir.VectorType.get([4], fx.Int32.ir_type) + raw = _llvm.LoadOp(vec4_i32, lds_ptr, alignment=16).result + return Vec(raw) + + def _dyn_offset(self, step, preshuffled): + # Lane-dependent part (tile i=0); the per-tile i*2048 is added as a constant. + # Verified: _offset(i,step) - _offset(0,step) == i*2048 on both paths. + row = self.wave_idx * (self.n_tiles * 16) + self.lane_id % 16 col = (self.lane_id // 16) * 16 + step * 64 if const_expr(preshuffled): return (row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128 @@ -78,14 +202,16 @@ def load(self, lds_src, preshuffled=False): for i in range_constexpr(self.n_tiles): halves = [] for step in range_constexpr(2): - v = self._vec_load_16xf8(lds_src, self._offset(i, step, preshuffled)) + dyn = self._dyn_offset(step, preshuffled) + v = self._vec_load_16xf8(lds_src, dyn, i * 2048) halves.append(v.bitcast(fx.Int32)) # i32x4, the K=128 MFMA operand frag.append(halves) # [ksub0_i32x4, ksub1_i32x4] return frag def load_one(self, lds_src, i, ksub, preshuffled=False): """One i32x4 (tile i, K=128 sub-block ksub) -- the interleave granularity.""" - v = self._vec_load_16xf8(lds_src, self._offset(i, ksub, preshuffled)) + dyn = self._dyn_offset(ksub, preshuffled) + v = self._vec_load_16xf8(lds_src, dyn, i * 2048) return v.bitcast(fx.Int32) @@ -219,9 +345,7 @@ def call(self, a, b, c, sa, sb, interleave=None): b_op = b[j][ksub] sb_v = sb[j // _FP4_PACK] jb = j % _FP4_PACK - c[self.idx(i, j)] = self._mfma_agpr( - a_op, b_op, c[self.idx(i, j)], sa_v, sb_v, ksub, ia, jb - ) + c[self.idx(i, j)] = self._mfma_agpr(a_op, b_op, c[self.idx(i, j)], sa_v, sb_v, ksub, ia, jb) if nth[0] < len(thunks): thunks[nth[0]]() nth[0] += 1 @@ -234,10 +358,7 @@ def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): # Build the op_sel / op_sel_hi suffix (compile-time). op_sel[2]/hi[2]=0. opsel = f"op_sel:[{ia},{jb},0]" opsel_hi = f"op_sel_hi:[{ksub},{ksub},0]" - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 $0, $1, $2, $0, $3, $4 " - f"{opsel} {opsel_hi} cbsz:4 blgp:4" - ) + asm = "v_mfma_scale_f32_16x16x128_f8f6f4 $0, $1, $2, $0, $3, $4 " f"{opsel} {opsel_hi} cbsz:4 blgp:4" return _llvm.inline_asm( self.res_ty, [ @@ -367,32 +488,41 @@ def compile_fp4_gemm_4w( a_lds_size = LDS_BLOCK_M * BLOCK_K_BYTES b_lds_size = LDS_BLOCK_N * BLOCK_K_BYTES + # One contiguous LDS array (single static `make_ptr` -> single `@__shared_alloc` + # symbol), NOT 8 independent leaf fields. With one base symbol every cross-buffer + # offset is a compile-time constant against the same pointer, so the compiler + # folds it into the 16-bit ds_read offset: field instead of materializing ~24 + # per-(buffer,tile) address VGPRs (252 -> ~228 arch VGPR). The catch: a single + # LDS symbol breaks the compiler's alias analysis between the g2s global->LDS DMA + # writes and the ds_reads, so it would insert a spurious `s_waitcnt vmcnt(0)` + # before every ds_read -- which is why g2s uses inline-asm buffer_load (see + # G2SLoaderAsm) so LLVM sees no LDS write and emits no drain. + assert a_lds_size == b_lds_size + _lds_buf = a_lds_size # 16KB; 8 buffers laid out contiguously + @fx.struct class SharedStorage: - A_lds_cur_0: fx.Array[fx.Int8, a_lds_size, 16] - A_lds_cur_1: fx.Array[fx.Int8, a_lds_size, 16] - A_lds_next_0: fx.Array[fx.Int8, a_lds_size, 16] - A_lds_next_1: fx.Array[fx.Int8, a_lds_size, 16] - B_lds_cur_0: fx.Array[fx.Int8, b_lds_size, 16] - B_lds_cur_1: fx.Array[fx.Int8, b_lds_size, 16] - B_lds_next_0: fx.Array[fx.Int8, b_lds_size, 16] - B_lds_next_1: fx.Array[fx.Int8, b_lds_size, 16] + all_lds: fx.Array[fx.Int8, 8 * _lds_buf, 16] @flyc.kernel def kernel_gemm( A: fx.Tensor, B_T: fx.Tensor, C: fx.Tensor, A_scale: fx.Tensor, B_scale: fx.Tensor, c_m: fx.Int32, c_n: fx.Int32 ): - I8_IR_t = fx.Int8.ir_type - lds = fx.SharedAllocator().allocate(SharedStorage).peek() - a_cur0 = lds.A_lds_cur_0 - a_cur1 = lds.A_lds_cur_1 - a_next0 = lds.A_lds_next_0 - a_next1 = lds.A_lds_next_1 - b_cur0 = lds.B_lds_cur_0 - b_cur1 = lds.B_lds_cur_1 - b_next0 = lds.B_lds_next_0 - b_next1 = lds.B_lds_next_1 + # 8 buffers as compile-time offsets off ONE base pointer (single symbol). + _base_ptr = lds.all_lds.ptr + + def _buf(idx): + return _Buf(_base_ptr, idx * _lds_buf) + + a_cur0 = _buf(0) + a_cur1 = _buf(1) + a_next0 = _buf(2) + a_next1 = _buf(3) + b_cur0 = _buf(4) + b_cur1 = _buf(5) + b_next0 = _buf(6) + b_next1 = _buf(7) lane_id = fx.thread_idx.x % 64 wave_id = fx.thread_idx.x // 64 @@ -417,11 +547,6 @@ def kernel_gemm( # K-step (same constant fp8_gemm_4wave uses for b_preshuffled). B_K_STEP = 2 * 1024 - gA = make_fp8_buffer_tensor(A, I8_IR_t) - gB = make_fp8_buffer_tensor(B_T, I8_IR_t) - ga_div = fx.logical_divide(gA, fx.make_layout(1, 1)) - gb_div = fx.logical_divide(gB, fx.make_layout(1, 1)) - mfma = Mfma16x16x128Fp4(N_TILES_A, N_TILES_B) # One i32 scale per K-step (256 fp4) per M/N-pair; K-step index = k. @@ -463,8 +588,12 @@ def _load_scales(k): gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=False) gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=True) - a_g2s = G2SLoader(ga_div, gl_off_a, N_TILES_A, I8_IR_t, wave_id) - b_g2s = G2SLoader(gb_div, gl_off_b, N_TILES_B, I8_IR_t, wave_id) + # Inline-asm g2s (see G2SLoaderAsm): needs the raw buffer resource. Build it + # once from the i8 buffer tensor (max_size OOB check; all addresses in-bounds). + a_rsrc = _buffer_ops.create_buffer_resource(A, max_size=True) + b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) + a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A, wave_id) + b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B, wave_id) a_s2r = S2RLoaderFp4(wave_i, N_TILES_A) b_s2r = S2RLoaderFp4(wave_j, N_TILES_B) store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B, mn_aligned=mn_aligned) @@ -526,28 +655,20 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): b1_off = fx.Int32(B1_gl_offset) + bk wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks( - b_s2r, bc1, _b1, N_TILES_B, True - ) + il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B, True) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) b1f = _b1 - il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A) + _s2r_thunks( - a_s2r, ac1, _a1, N_TILES_A, False - ) + il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A) + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A, False) c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) a1f = _a1 wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + _s2r_thunks( - a_s2r, an0, _a0n, N_TILES_A, False - ) + il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A, False) c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) a0nf = _a0n - il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A) + _s2r_thunks( - b_s2r, bn0, _b0n, N_TILES_B, True - ) + il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A) + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B, True) c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) b0nf = _b0n @@ -571,10 +692,14 @@ def _flat_sc(sc4): def _unflat_sc(flat): o = 0 - saR0 = list(flat[o : o + n_ga]); o += n_ga - saR1 = list(flat[o : o + n_ga]); o += n_ga - sbC0 = list(flat[o : o + n_gb]); o += n_gb - sbC1 = list(flat[o : o + n_gb]); o += n_gb + saR0 = list(flat[o : o + n_ga]) + o += n_ga + saR1 = list(flat[o : o + n_ga]) + o += n_ga + sbC0 = list(flat[o : o + n_gb]) + o += n_gb + sbC1 = list(flat[o : o + n_gb]) + o += n_gb return saR0, saR1, sbC0, sbC1 n_sc = 2 * n_ga + 2 * n_gb @@ -589,13 +714,20 @@ def _unflat_sc(flat): ) for kk, state in range(0, K_ITERS - 2, 2, init=init_state): off = 0 - a0f = _unflat_frag(state[off : off + n_a], N_TILES_A); off += n_a - b0f = _unflat_frag(state[off : off + n_b], N_TILES_B); off += n_b - sc = _unflat_sc(state[off : off + n_sc]); off += n_sc - c00f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c01f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c10f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c11f = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + a0f = _unflat_frag(state[off : off + n_a], N_TILES_A) + off += n_a + b0f = _unflat_frag(state[off : off + n_b], N_TILES_B) + off += n_b + sc = _unflat_sc(state[off : off + n_sc]) + off += n_sc + c00f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c01f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c10f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c11f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS accs = (c00f, c01f, c10f, c11f) # step kk @@ -616,13 +748,20 @@ def _unflat_sc(flat): # unpack final state back into the named vars the tail uses off = 0 - a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A); off += n_a - b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B); off += n_b - saR0, saR1, sbC0, sbC1 = _unflat_sc(state[off : off + n_sc]); off += n_sc - c00_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c01_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c10_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS - c11_frag = list(state[off : off + N_ACCUMS]); off += N_ACCUMS + a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A) + off += n_a + b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B) + off += n_b + saR0, saR1, sbC0, sbC1 = _unflat_sc(state[off : off + n_sc]) + off += n_sc + c00_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c01_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c10_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c11_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) From ed17e7b857dea5bc337f7b14e1d4badf0b2dc459 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 29 Jun 2026 03:42:20 +0000 Subject: [PATCH 096/118] fp4_gemm_4wave: scale load via inline-asm buffer_load, fix vmcnt accounting Emit the per-K-step E8M0 scale buffer_load as inline-asm (like g2s) instead of the plain buffer_load op. With BOTH g2s and scale opaque to the compiler, it no longer folds the scale VMEM into the same dependence graph as the g2s LDS DMA and stops emitting the coarse combined `vmcnt(N) lgkmcnt(M)` waits that were the dominant hot-loop stall (ATT VMEM-wait 3.7%->14.3% in the prior commit); the hot-loop waitcnts are now clean separate vmcnt(16)/lgkmcnt. Consequence: since the compiler now sees no buffer_load at all, it uses our literal wait_barrier vmcnt verbatim (no recompute). The main-loop count must therefore include the in-flight scale VMEM. The scale is a depth-1 prefetch (8 loads issued at the top of each step, consumed next iter); the nan boundary is vmcnt(11) (>=11 lets a not-yet-complete g2s LDS write be read -> nan at large K, K>=16384), so use 2*(n_ga)+2*(n_gb)=8 with a 2-slot safety margin. Verified correct across 8192/16384/24576 K and non-square shapes. ~4281 TFLOPS @ 8192^3, 4805 @ 16384^3. arch VGPR still 220 (headroom 36). A depth-2 scale prefetch (next) should let the count relax toward 16. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp4_gemm_4wave.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 7c1c55924..00978782b 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -402,14 +402,31 @@ def __init__(self, scale_arg, n_tiles, K, lane_id): def load_step(self, kstep, base_tile): """list[n_groups] of packed i32 (K=256 step for each 32-row pack-group). All addends cast to Int32 so a runtime fx ``kstep`` (scf.for loop var) - doesn't trip arith.addi's same-type requirement (base_tile is Index).""" + doesn't trip arith.addi's same-type requirement (base_tile is Index). + + INLINE-ASM buffer_load (not the plain buffer_load op): the scale is a + depth-1 prefetch (loaded for kc+1, consumed next iteration, with a full + wait_barrier between), so making it opaque to the compiler is safe -- the + wait_barrier's s_waitcnt vmcnt still covers it (hardware counts inline-asm + VMEM). The plain op let the compiler fold the scale VMEM into the same + dependence graph as the g2s LDS DMA and emit coarse combined + `vmcnt(N) lgkmcnt(M)` waits (ATT: the dominant hot-loop stall); hiding the + scale load removes it from that analysis.""" base_group = fx.Int32(base_tile // 32) kterm = fx.Int32(kstep) * fx.Int32(64) lane = fx.Int32(self.lane_off) out = [] for g in range_constexpr(self.n_groups): i32_off = (base_group + fx.Int32(g)) * fx.Int32(self.row_stride) + kterm + lane - out.append(_buffer_ops.buffer_load(self.rsrc, i32_off, vec_width=1, dtype=fx.Int32)) + byte_off = arith._to_raw(i32_off * fx.Int32(4)) # buffer voffset is in bytes + raw = _llvm.inline_asm( + _T.i32, + [byte_off, self.rsrc], + "buffer_load_dword $0, $1, $2, 0 offen", + "=v,v,s", + has_side_effects=True, + ) + out.append(fx.Int32(raw)) return out @@ -620,6 +637,16 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): # Step-0 scale (consumed in iter 0); each iter prefetches step k+1. saR0, saR1, sbC0, sbC1 = _load_scales(0) + # Main-loop wait_barrier vmcnt. Both g2s AND scale are now inline-asm, so the + # compiler can't see any buffer_load and uses our literal vmcnt verbatim (it + # no longer recomputes/merges it). The count must therefore account for the + # in-flight scale VMEM too: scale is a depth-1 prefetch (8 loads = 2*n_ga + + # 2*n_gb issued at the top of each step, consumed next iter), which are + # allowed to stay in flight. Empirically the nan boundary is 11 (>=11 lets a + # not-yet-complete g2s LDS write be read -> nan at large K); 8 keeps a 2-slot + # safety margin. (A depth-2 scale prefetch would let this relax toward 16.) + _MAIN_VMCNT = 2 * (N_TILES_A // _FP4_PACK) + 2 * (N_TILES_B // _FP4_PACK) + # ---- Main K-loop as scf.for, unrolled by 2 ------------------------------ # Why scf.for (not range_constexpr full unroll): fully unrolling all 30 main # steps blew .text to ~59KB > 32KB I-cache -> periodic instruction-fetch @@ -654,7 +681,7 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): b0_off = fx.Int32(B0_gl_offset) + bk b1_off = fx.Int32(B1_gl_offset) + bk - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + wait_barrier(_MAIN_VMCNT) il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B, True) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) b1f = _b1 @@ -663,7 +690,7 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) a1f = _a1 - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + wait_barrier(_MAIN_VMCNT) il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A, False) c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) a0nf = _a0n From 5859f7f1464df9fee790ee078daf7a1014306920 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 29 Jun 2026 07:01:50 +0000 Subject: [PATCH 097/118] fp4_gemm_4wave: depth-2 end-of-step scale prefetch -> vmcnt(16), 4281->4385 Move the E8M0 scale to a depth-2 prefetch issued at the END of each _one_step (prefetch scale[kc+2] after all g2s) instead of depth-1 at the step top. With the scale buffer_loads pulled out of the FIFO window right before the binding wait_barrier, the vmcnt nan-boundary rises: depth-1 forced wait_barrier(8) (the 8 step-top scale loads occupied vmcnt slots ahead of the binding g2s, so >=11 read a not-yet-complete g2s LDS write -> nan at large K), whereas depth-2 end-of-step lets wait_barrier(16) keep more g2s in flight while staying correct. Carry two scale groups (sc_cur, sc_nxt) through the scf.for; the tail consumes both with no extra load. Result: 4281->4385 TFLOPS @ 8192^3, 4805->4881 @ 16384^3 (matches the original 8-symbol baseline 4385 but at much lower register pressure). arch VGPR 220->204 (headroom 36->52, spill 0) -- the clean single vmcnt(16) per barrier (no merged vmcnt/lgkmcnt) also improves scheduling. Verified correct across K=8192..24576 and non-square shapes. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp4_gemm_4wave.py | 67 ++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 00978782b..7711511f9 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -634,18 +634,20 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) - # Step-0 scale (consumed in iter 0); each iter prefetches step k+1. - saR0, saR1, sbC0, sbC1 = _load_scales(0) - - # Main-loop wait_barrier vmcnt. Both g2s AND scale are now inline-asm, so the - # compiler can't see any buffer_load and uses our literal vmcnt verbatim (it - # no longer recomputes/merges it). The count must therefore account for the - # in-flight scale VMEM too: scale is a depth-1 prefetch (8 loads = 2*n_ga + - # 2*n_gb issued at the top of each step, consumed next iter), which are - # allowed to stay in flight. Empirically the nan boundary is 11 (>=11 lets a - # not-yet-complete g2s LDS write be read -> nan at large K); 8 keeps a 2-slot - # safety margin. (A depth-2 scale prefetch would let this relax toward 16.) - _MAIN_VMCNT = 2 * (N_TILES_A // _FP4_PACK) + 2 * (N_TILES_B // _FP4_PACK) + # DEPTH-2 scale prefetch: load step 0 (used iter 0) AND step 1 (the next), + # carried as (sc_cur, sc_nxt). Each iter prefetches step k+2 at the END of + # the step. This pulls the scale buffer_loads out of the FIFO window right + # before the binding wait_barrier (vs depth-1 which issued them at the step + # top, occupying ~8 vmcnt slots ahead of the binding g2s and forcing a tight + # count). With the scale moved late, the nan boundary rises and we run + # wait_barrier(16) to keep more g2s in flight. + sc_cur0 = _load_scales(0) + sc_nxt0 = _load_scales(1) + + # Main-loop wait_barrier vmcnt. Both g2s and scale are inline-asm so the + # compiler uses our literal vmcnt verbatim. With depth-2 end-of-step scale, + # 16 keeps the binding g2s safe while leaving more g2s in flight. + _MAIN_VMCNT = 16 # ---- Main K-loop as scf.for, unrolled by 2 ------------------------------ # Why scf.for (not range_constexpr full unroll): fully unrolling all 30 main @@ -662,10 +664,17 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): def _one_step(kc, a0f, b0f, sc, accs, bufs): # bufs = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) ac0, ac1, an0, an1, bc0, bc1, bn0, bn1 = bufs - saR0, saR1, sbC0, sbC1 = sc + # DEPTH-2 scale: sc = (sc_cur, sc_nxt). Consume sc_cur (scale[kc], loaded + # two steps ago), prefetch scale[kc+2] at the END of the step (after all + # g2s), and rotate -> next step gets (sc_nxt, new). Issuing the scale at + # the step END (not the top) keeps it OUT of the FIFO window right before + # the binding wait_barrier, so the nan-boundary vmcnt rises (scale no + # longer occupies ~8 slots ahead of the binding g2s) -> we can run + # wait_barrier(16) and keep more g2s in flight. + sc_cur, sc_nxt = sc + saR0, saR1, sbC0, sbC1 = sc_cur c00f, c01f, c10f, c11f = accs kc_i = fx.Int32(kc) # Int32 for scale load_step (matches lane_off Int32) - saR0_n, saR1_n, sbC0_n, sbC1_n = _load_scales_rt(kc_i + 1) _b1 = [None] * N_TILES_B _a1 = [None] * N_TILES_A @@ -699,8 +708,11 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) b0nf = _b0n + # Prefetch scale[kc+2] at the END (after all g2s of this step). + sc_new = _load_scales_rt(kc_i + 2) + new_bufs = (an0, an1, ac0, ac1, bn0, bn1, bc0, bc1) # swap cur<->next - return a0nf, b0nf, (saR0_n, saR1_n, sbC0_n, sbC1_n), (c00f, c01f, c10f, c11f), new_bufs + return a0nf, b0nf, (sc_nxt, sc_new), (c00f, c01f, c10f, c11f), new_bufs bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) n_a = 2 * N_TILES_A @@ -709,7 +721,7 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): n_ga = N_TILES_A // _FP4_PACK # scale groups per A-scale (=len(saR0)) n_gb = N_TILES_B // _FP4_PACK - def _flat_sc(sc4): + def _flat_sc1(sc4): # sc4 = (saR0, saR1, sbC0, sbC1); each is a list of n_g i32 out = [] for s in sc4: @@ -717,7 +729,7 @@ def _flat_sc(sc4): out.append(_R(v)) return out - def _unflat_sc(flat): + def _unflat_sc1(flat): o = 0 saR0 = list(flat[o : o + n_ga]) o += n_ga @@ -729,11 +741,19 @@ def _unflat_sc(flat): o += n_gb return saR0, saR1, sbC0, sbC1 - n_sc = 2 * n_ga + 2 * n_gb + n_sc1 = 2 * n_ga + 2 * n_gb # one scale group (4 lists) + n_sc = 2 * n_sc1 # depth-2: carry (sc_cur, sc_nxt) + + def _flat_sc(sc): # sc = (sc_cur, sc_nxt) + return _flat_sc1(sc[0]) + _flat_sc1(sc[1]) + + def _unflat_sc(flat): + return (_unflat_sc1(flat[:n_sc1]), _unflat_sc1(flat[n_sc1:])) + init_state = ( _flat_frag(a0_frag) + _flat_frag(b0_frag) - + _flat_sc((saR0, saR1, sbC0, sbC1)) + + _flat_sc((sc_cur0, sc_nxt0)) + [_R(x) for x in c00_frag] + [_R(x) for x in c01_frag] + [_R(x) for x in c10_frag] @@ -779,7 +799,10 @@ def _unflat_sc(flat): off += n_a b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B) off += n_b - saR0, saR1, sbC0, sbC1 = _unflat_sc(state[off : off + n_sc]) + # depth-2 carry: sc_cur = scale[K_ITERS-2] (tail step 1), sc_nxt = + # scale[K_ITERS-1] (tail step 2, already prefetched -- no extra load). + sc_cur, sc_nxt = _unflat_sc(state[off : off + n_sc]) + saR0, saR1, sbC0, sbC1 = sc_cur off += n_sc c00_frag = list(state[off : off + N_ACCUMS]) off += N_ACCUMS @@ -807,8 +830,8 @@ def _unflat_sc(flat): b_cur0, b_next0 = b_next0, b_cur0 b_cur1, b_next1 = b_next1, b_cur1 - # Tail step K_ITERS - 1. - saR0, saR1, sbC0, sbC1 = _load_scales(K_ITERS - 1) + # Tail step K_ITERS - 1 (scale = sc_nxt, already prefetched in the loop). + saR0, saR1, sbC0, sbC1 = sc_nxt wait_barrier(0) b1_frag = b_s2r.load(b_cur1, preshuffled=True) a1_frag = a_s2r.load(a_cur1) From 3d9c3fff0fcc464e6fc9eeb0e5f1442b3b91b7c1 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 29 Jun 2026 07:25:43 +0000 Subject: [PATCH 098/118] fp4_gemm_4wave: interleave the two tail steps' ds_reads into MFMA shadow The two tail K-steps issued their b1/a1 (and next-step a0/b0) LDS reads as a single up-front batch before the MFMAs, exposing the ds_read latency as a serial stall (the main loop already hides these via interleave thunks). Restructure the tail to mirror the main loop: issue the b1/a1 ds_reads as _s2r_thunks in the shadow of the c00 MFMA cluster (c00 only depends on the already-loaded a0/b0), and the next-step a0'/b0' reads in the c10 shadow. Every non-MFMA op now overlaps an MFMA's ~12-cycle execute window instead of standing alone. Mostly helps large K where the tail's data movement is larger: 4881->4920 @ 16384^3; 8192^3 ~flat within noise (~4400). Correct across K=8192..24576. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp4_gemm_4wave.py | 42 ++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 7711511f9..b90a31045 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -814,16 +814,26 @@ def _unflat_sc(flat): off += N_ACCUMS # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). + # INTERLEAVED like the main loop: the b1/a1 ds_reads are issued as thunks in + # the shadow of the c00 MFMA cluster (c00 only needs a0/b0, already loaded), + # and the next-step a0'/b0' ds_reads in the c10 shadow -- so the LDS-read + # latency hides behind MFMA instead of being a serial stall. + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - b1_frag = b_s2r.load(b_cur1, preshuffled=True) - c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) - a1_frag = a_s2r.load(a_cur1) - c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) + il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) + b1_frag = _b1 + a1_frag = _a1 + c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) + _a0n = [None] * N_TILES_A + _b0n = [None] * N_TILES_B wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) - a0_frag = a_s2r.load(a_next0) - c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) - b0_frag = b_s2r.load(b_next0, preshuffled=True) - c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B, True) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il) + c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1) + a0_frag = _a0n + b0_frag = _b0n a_cur0, a_next0 = a_next0, a_cur0 a_cur1, a_next1 = a_next1, a_cur1 @@ -831,14 +841,18 @@ def _unflat_sc(flat): b_cur1, b_next1 = b_next1, b_cur1 # Tail step K_ITERS - 1 (scale = sc_nxt, already prefetched in the loop). + # Last step, no g2s prefetch; interleave the b1/a1 ds_reads into c00's shadow. saR0, saR1, sbC0, sbC1 = sc_nxt + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A wait_barrier(0) - b1_frag = b_s2r.load(b_cur1, preshuffled=True) - a1_frag = a_s2r.load(a_cur1) - c00_frag = _do_quad(a0_frag, b0_frag, c00_frag, saR0, sbC0) - c01_frag = _do_quad(a0_frag, b1_frag, c01_frag, saR0, sbC1) - c10_frag = _do_quad(a1_frag, b0_frag, c10_frag, saR1, sbC0) - c11_frag = _do_quad(a1_frag, b1_frag, c11_frag, saR1, sbC1) + il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) + b1_frag = _b1 + a1_frag = _a1 + c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0) + c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1) store_c.store(c00_frag, sa_R0, sb_C0) store_c.store(c01_frag, sa_R0, sb_C1) From 6788c9e0dae7659e8005a97e598b142fac10e318 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 29 Jun 2026 07:42:19 +0000 Subject: [PATCH 099/118] fp4_gemm_4wave: m0 set-once + s_add increment for g2s (gcnasm async-copy idiom) The g2s inline-asm recomputed v_readfirstlane + s_mov m0 for every step of every load (32 readfirstlane + 32 s_mov per main-loop iter), all materializing the same loop-invariant LDS base + a constant step stride. Following the gcnasm async_copy idiom (carlushuang/gcnasm), set m0 once for step 0 (s_mov) then advance it with `s_add_u32 m0, , m0` for the remaining steps. The N_TILES steps of one load are issued back-to-back inside one MFMA cluster, so the m0 add-chain stays coherent; the s_add is volatile inline-asm so the compiler can't reorder across it. Step stride uses the compile-time wave count (block=256 -> 4 waves) so it bakes into the asm string. Main-loop scalar ops: v_readfirstlane 32->8, s_mov 32->8 (replaced by 25 s_add). Frees scalar-issue slots (toward cyc/mfma 16) and lowers power; arch VGPR also drops 201->184. Perf flat within noise (~4400 @ 8192^3, ~4900 @ 16384^3) since the scalars already hid in the MFMA shadow -- this is headroom/efficiency, not a direct speedup. Correct across K=8192..24576. Co-Authored-By: Claude Opus 4 (1M context) --- kernels/fp4_gemm_4wave.py | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index b90a31045..898747505 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -42,6 +42,8 @@ wait_barrier, ) +_N_WAVES = 4 # block is always 256 threads -> 4 waves (compile-time constant) + class _Buf: """LDS sub-buffer handle over the ONE contiguous LDS array. @@ -113,9 +115,16 @@ def __init__(self, rsrc, gl_offsets, n_load_steps, wave_id): self.wave_id = wave_id self.n_waves = fx.block_dim.x // 64 - def _lds_base_sgpr(self, lds_dst, step): - step_off = self.wave_id * 1024 + step * (self.n_waves * 1024) - lds_base = fx.Int32(fx.ptrtoint(lds_dst.ptr)) + fx.Int32(step_off) + @property + def _step_stride(self): + # m0 (LDS byte) advance between consecutive steps of one load. Must be a + # Python int (baked into the asm string), so use the compile-time wave count + # (block is always 256 -> 4 waves) rather than the runtime block_dim value. + return _N_WAVES * 1024 + + def _lds_base_sgpr(self, lds_dst): + # Step-0 LDS byte base (wave-uniform). Later steps add _step_stride to m0. + lds_base = fx.Int32(fx.ptrtoint(lds_dst.ptr)) + fx.Int32(self.wave_id * 1024) return _uniform_i32(lds_base) def _voffset(self, step): @@ -126,13 +135,23 @@ def _voffset(self, step): return arith._to_raw(fx.Int32(self.gl_offsets[step])) def _emit(self, lds_dst, k_offset, step): - m0 = self._lds_base_sgpr(lds_dst, step) + # m0 idiom (gcnasm async_copy): set m0 once for step 0, then advance it with + # s_add for later steps instead of recomputing readfirstlane+s_mov per step. + # The N_TILES steps of one load are issued back-to-back (interleaved into one + # MFMA cluster, in order), so the m0 add-chain stays coherent; s_add m0 is + # volatile inline-asm so the compiler can't reorder across it. Cuts the + # per-step v_readfirstlane (32->8/main-loop) and turns s_mov into s_add, + # freeing scalar-issue slots so the MFMAs pack tighter (toward cyc/mfma 16). voff = self._voffset(step) soff = _uniform_i32(k_offset) # scalar soffset (K-step), folded by hardware - # No s_nop after the m0 write: these loads are interleaved between MFMAs, - # so the MFMA in the shadow already covers the m0 write->use hazard latency. - asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" - _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") + stride = self._step_stride + if step == 0: + m0 = self._lds_base_sgpr(lds_dst) + asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" + _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") + else: + asm = f"s_add_u32 m0, {stride}, m0\nbuffer_load_dwordx4 $0, $1, $2 offen lds" + _asm_void([voff, self.rsrc, soff], asm, "v,s,s") def load(self, lds_dst, k_offset): for step in range_constexpr(self.n_load_steps): From 9395ee3eac2066fbe2079d27af723bed408074b5 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Tue, 30 Jun 2026 12:29:52 +0000 Subject: [PATCH 100/118] have error learning now --- .gitignore | 1 + kernels/fp4_gemm_4wave.py | 302 ++++++++++++++++++++------------------ 2 files changed, 164 insertions(+), 139 deletions(-) diff --git a/.gitignore b/.gitignore index e7be76b08..1b3285ea9 100644 --- a/.gitignore +++ b/.gitignore @@ -98,5 +98,6 @@ codexhook.sh experiments/ handoff.md handoff_moe_gemm1.md +handoff_fp4_scale.md resource_inspect/snapshots/ scripts/run_bf16_gemm_att.sh diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 898747505..5cfe3d314 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -393,60 +393,116 @@ def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): ) -class ScaleLoader: - """Loads ``shuffle_scale_w4``-PRESHUFFLED per-1x32 E8M0 scales. - - The shuffled layout (gate_up=False) packs the e8m0 as - ``[N1, K1, K_Lane, N_Lane, K_Pack, N_Pack]`` (K_Lane=4, N_Lane=16, - K_Pack=N_Pack=2), so the 4 e8m0 selected by a lane's opsel values 0..3 are - exactly the 4 contiguous bytes of one i32. Per lane the element offset is:: - - group * (K1 * 64) + kstep * 64 + lane_div_16 * 16 + lane_mod_16 (i32) - - where ``group = base_tile // 32`` is the N1 index (one pack-group = the 2 - tiles n_tiles=2), ``K1 = K // 256``, and the i32 holds [K_Pack, N_Pack]. - The MFMA opsel ``ksub*2 + tile_in_pair`` selects the byte at runtime-free. - One buffer_load per K-step feeds all (tile, ksub) MFMAs of the group. +# Scale-LDS geometry. Each wave needs 4 scale blocks (256 B each) per operand: +# blocks {R0g0, R0g1, R1g0, R1g1} for A, {C0g0, C0g1, C1g0, C1g1} for B. One +# ``buffer_load_dwordx4 ... lds`` (64 lanes x 16 B = 1024 B/wave) gathers all 4 +# blocks of one operand. A region (1024 B) + B region (1024 B) = 2048 B/wave; +# x4 waves = 8192 B per pipeline slot; triple-buffered (depth-2 read[kc] / +# write[kc+2] need 3 distinct slots) = 24 KB total. +_SCALE_WAVE_BYTES = 2048 +_SCALE_SLOT_BYTES = _N_WAVES * _SCALE_WAVE_BYTES # 8192 +_SCALE_SLOTS = 3 +_SCALE_LDS_BYTES = _SCALE_SLOTS * _SCALE_SLOT_BYTES # 24 KB +_SCALE_A_REGION = 0 +_SCALE_B_REGION = 1024 + + +class ScaleLoaderLDS: + """Loads ``shuffle_scale_w4``-PRESHUFFLED per-1x32 E8M0 scales via a single + ``buffer_load_dwordx4 ... lds`` per operand per K-step, into a scale LDS + region, then per-lane ``ds_read_b32`` -- replacing the 8 per-step + ``buffer_load_dword`` (each with a dur-6 voffset v_add, the #1 exposed + hot-loop cost). + + Layout (gate_up=False): per (N1 group, K-step) the e8m0 form a 64-i32 + (256 B) block ``[K_Lane(4), N_Lane(16)]`` in which lane L's MFMA scale is + element L. A wave's 4 blocks are groups ``{G, G+1, G+4, G+5}`` (G+4 == the + second M/N half's group, since LDS_BLOCK/32 == 4). The dwordx4 gather has + lane g fetch 4 contiguous i32 ``(g%16)*4..+3`` of block ``g//16`` and write + them to ``m0 + g*16``; that lands i32 j of block blk at LDS byte + ``blk*256 + j*4`` (natural order), so the read is ``region + blk*256 + L*4``. """ - def __init__(self, scale_arg, n_tiles, K, lane_id): + def __init__(self, scale_arg, n_tiles, K, lane_id, wave_id, lds_base_ptr, region_off): assert n_tiles % _FP4_PACK == 0 - self.n_tiles = n_tiles - self.n_groups = n_tiles // _FP4_PACK # pack-groups of 2 tiles (32 rows) + self.n_groups = n_tiles // _FP4_PACK # pack-groups per M/N half (=2) self.K1 = K // 256 - self.row_stride = self.K1 * 64 # i32 elems per N1 group - self.lane_off = (lane_id // 16) * 16 + (lane_id % 16) - self.rsrc = _buffer_ops.create_buffer_resource(scale_arg, max_size=True) - - def load_step(self, kstep, base_tile): - """list[n_groups] of packed i32 (K=256 step for each 32-row pack-group). - All addends cast to Int32 so a runtime fx ``kstep`` (scf.for loop var) - doesn't trip arith.addi's same-type requirement (base_tile is Index). - - INLINE-ASM buffer_load (not the plain buffer_load op): the scale is a - depth-1 prefetch (loaded for kc+1, consumed next iteration, with a full - wait_barrier between), so making it opaque to the compiler is safe -- the - wait_barrier's s_waitcnt vmcnt still covers it (hardware counts inline-asm - VMEM). The plain op let the compiler fold the scale VMEM into the same - dependence graph as the g2s LDS DMA and emit coarse combined - `vmcnt(N) lgkmcnt(M)` waits (ATT: the dominant hot-loop stall); hiding the - scale load removes it from that analysis.""" + self.row_i32 = self.K1 * 64 # i32 per N1 group + self.lane_id = lane_id + self.wave_id = wave_id + self.region_off = region_off + self.rsrc = arith._to_raw(_buffer_ops.create_buffer_resource(scale_arg, max_size=True)) + # Gather per-lane block / within-block index (loop-invariant). + self._blk = lane_id // 16 # 0..3 -> which of the 4 blocks + self._in16 = lane_id % 16 # 0..15 -> which 4-i32 chunk within the block + self._lds_base = fx.Int32(fx.ptrtoint(lds_base_ptr)) + + def _slot_wave_byte(self, slot): + return self._lds_base + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES) + fx.Int32( + self.wave_id * _SCALE_WAVE_BYTES + self.region_off + ) + + def gather(self, kstep, slot, base_tile): + """Issue ONE buffer_load_dwordx4...lds gathering all 4 blocks of this + operand into scale-LDS ``slot``. ``base_tile`` = the M/N-half-0 base row + (half 1 is reached via group +4). Inline-asm so LLVM emits no LDS-write + drain; vmcnt accounting is owned by wait_barrier (hardware counts it).""" + # LDS write (layout A): lane L writes its 16 B to m0 + L*16. So lane L must + # READ from global the data destined for LDS slot L*16 = block (L//16), + # i32 chunk (L%16)*4..+3. block g//16 -> group G + (blk//2)*4 + (blk%2). + G = fx.Int32(base_tile // 32) + grp = G + (self._blk // 2) * fx.Int32(4) + (self._blk % 2) + _DBG_SAME_GROUP = True + if const_expr(_DBG_SAME_GROUP): + grp = G # all lanes read group G; [0,1024) should be block-G replicated + i32_off = grp * fx.Int32(self.row_i32) + fx.Int32(kstep) * fx.Int32(64) + self._in16 * fx.Int32(4) + voff = arith._to_raw(i32_off * fx.Int32(4)) # bytes + soff = _uniform_i32(fx.Int32(0)) + m0 = _uniform_i32(self._slot_wave_byte(slot)) + asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" + _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") + + def read_direct(self, kstep, base_tile): + """DEBUG: baseline direct per-group buffer_load_dword from global (no LDS). + Replicates HEAD's ScaleLoader.load_step to bisect pipeline vs roundtrip.""" base_group = fx.Int32(base_tile // 32) kterm = fx.Int32(kstep) * fx.Int32(64) - lane = fx.Int32(self.lane_off) - out = [] - for g in range_constexpr(self.n_groups): - i32_off = (base_group + fx.Int32(g)) * fx.Int32(self.row_stride) + kterm + lane - byte_off = arith._to_raw(i32_off * fx.Int32(4)) # buffer voffset is in bytes - raw = _llvm.inline_asm( - _T.i32, - [byte_off, self.rsrc], - "buffer_load_dword $0, $1, $2, 0 offen", - "=v,v,s", - has_side_effects=True, - ) - out.append(fx.Int32(raw)) - return out + lane = fx.Int32((self.lane_id // 16) * 16 + (self.lane_id % 16)) + halves = [] + for half in range_constexpr(2): + grp_list = [] + for gi in range_constexpr(self.n_groups): + grp = base_group + fx.Int32(half * 4 + gi) + i32_off = grp * fx.Int32(self.row_i32) + kterm + lane + voff = arith._to_raw(i32_off * fx.Int32(4)) + raw = _llvm.inline_asm( + _T.i32, [voff, self.rsrc], + "buffer_load_dword $0, $1, $2, 0 offen", "=v,v,s", + has_side_effects=True, + ) + grp_list.append(fx.Int32(raw)) + halves.append(grp_list) + return halves[0], halves[1] + + def read(self, slot): + """Per-lane ds_read of the 4 blocks -> (half0, half1), each list[n_groups] + of i32 (the same shape the MFMA consumes: sa[i//2] / sb[j//2]).""" + # lane-contiguous write: lane g's 4 i32 at m0 + g*16. block-elem e of block + # blk was written by lane (blk*16 + e//4) as its (e%4)-th i32 -> LDS byte + # blk*256 + (e//4)*16 + (e%4)*4. MFMA lane L wants block-elem L. + L = self.lane_id + base = self._slot_wave_byte(slot) + fx.Int32((L // 4) * 16 + (L % 4) * 4) + halves = [] + for half in range_constexpr(2): + grp_list = [] + for gi in range_constexpr(self.n_groups): + blk = half * 2 + gi + vaddr = base + fx.Int32(blk * 256) + lds_ptr = _llvm.inttoptr(_lds_ptr_t(), arith._to_raw(vaddr)) + raw = _llvm.LoadOp(fx.Int32.ir_type, lds_ptr, alignment=4).result + grp_list.append(fx.Int32(raw)) + halves.append(grp_list) + return halves[0], halves[1] class StoreCFp4: @@ -539,6 +595,7 @@ def compile_fp4_gemm_4w( @fx.struct class SharedStorage: all_lds: fx.Array[fx.Int8, 8 * _lds_buf, 16] + scale_lds: fx.Array[fx.Int8, _SCALE_LDS_BYTES, 16] @flyc.kernel def kernel_gemm( @@ -585,9 +642,12 @@ def _buf(idx): mfma = Mfma16x16x128Fp4(N_TILES_A, N_TILES_B) - # One i32 scale per K-step (256 fp4) per M/N-pair; K-step index = k. - a_scale_ld = ScaleLoader(A_scale, N_TILES_A, K, lane_id) - b_scale_ld = ScaleLoader(B_scale, N_TILES_B, K, lane_id) + # Scale via dwordx4...lds gather + ds_read (see ScaleLoaderLDS). One gather + # per operand per K-step into a triple-buffered scale-LDS slot; read[kc] / + # gather[kc+2] use slots kc%3 / (kc+2)%3 (3 distinct -> race-free). + _scale_base_ptr = lds.scale_lds.ptr + a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) + b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) @@ -596,24 +656,25 @@ def _buf(idx): sb_C0 = base_col sb_C1 = base_col + LDS_BLOCK_N - def _a_sc(k, base): - return a_scale_ld.load_step(k, base) - - def _b_sc(k, base): - return b_scale_ld.load_step(k, base) - - def _load_scales(k): - """All four packed-i32 scales for K-step ``k`` (prefetchable). ``k`` may - be a compile-time int OR a runtime fx index (load_step's kstep*64 offset - arithmetic and buffer_load both accept a runtime value).""" - return ( - _a_sc(k, sa_R0), - _a_sc(k, sa_R1), - _b_sc(k, sb_C0), - _b_sc(k, sb_C1), - ) + def _slot(k): + return fx.Int32(k) % fx.Int32(_SCALE_SLOTS) - _load_scales_rt = _load_scales # runtime-k alias used inside the scf.for body + def _gather_scales(k, slot): + """Issue the 2 dwordx4...lds gathers (A, B) for K-step ``k`` into LDS + ``slot``. base_row/base_col are the M/N half-0 bases; half-1 is reached + via group +4 inside gather().""" + a_scale_ld.gather(k, slot, base_row) + b_scale_ld.gather(k, slot, base_col) + + _DBG_DIRECT_SCALE = False + + def _read_scales(kstep): + """Per-lane scale read for K-step ``kstep`` -> (saR0,saR1,sbC0,sbC1), + each list[n_groups] of i32 (same shape the MFMA consumes).""" + slot = _slot(kstep) + saR0, saR1 = a_scale_ld.read(slot) + sbC0, sbC1 = b_scale_ld.read(slot) + return (saR0, saR1, sbC0, sbC1) # Accumulators: 2x2 64x64 quadrants per wave. c00_frag = [mfma.zero_value] * N_ACCUMS @@ -653,20 +714,19 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) - # DEPTH-2 scale prefetch: load step 0 (used iter 0) AND step 1 (the next), - # carried as (sc_cur, sc_nxt). Each iter prefetches step k+2 at the END of - # the step. This pulls the scale buffer_loads out of the FIFO window right - # before the binding wait_barrier (vs depth-1 which issued them at the step - # top, occupying ~8 vmcnt slots ahead of the binding g2s and forcing a tight - # count). With the scale moved late, the nan boundary rises and we run - # wait_barrier(16) to keep more g2s in flight. - sc_cur0 = _load_scales(0) - sc_nxt0 = _load_scales(1) - - # Main-loop wait_barrier vmcnt. Both g2s and scale are inline-asm so the + # DEPTH-2 scale prefetch into LDS slots: gather step 0 (used iter 0) into + # slot 0 and step 1 into slot 1. Each main-loop step gathers step kc+2 at the + # END (after all g2s) into slot (kc+2)%3, and reads step kc from slot kc%3 at + # the top. Triple-buffered: read[kc] / gather[kc+2] use distinct slots. + _gather_scales(0, _slot(0)) + _gather_scales(1, _slot(1)) + + # Main-loop wait_barrier vmcnt. g2s and scale gathers are inline-asm so the # compiler uses our literal vmcnt verbatim. With depth-2 end-of-step scale, - # 16 keeps the binding g2s safe while leaving more g2s in flight. - _MAIN_VMCNT = 16 + # the scale[kc] gather (issued 2 steps ago) is the oldest outstanding VMEM at + # the step top; vmcnt(17) drains exactly it while keeping the g2s window (16) + # in flight, so the ds_read of scale[kc] sees landed LDS. + _MAIN_VMCNT = 17 # ---- Main K-loop as scf.for, unrolled by 2 ------------------------------ # Why scf.for (not range_constexpr full unroll): fully unrolling all 30 main @@ -680,20 +740,16 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): # ``buf`` arg names below are fixed (cur0/cur1/next0/next1); a single step # mutates which physical buffer is "cur" via the pointer-pair swap, so the # step body is parameterized by the current pointer set passed in. - def _one_step(kc, a0f, b0f, sc, accs, bufs): + def _one_step(kc, a0f, b0f, accs, bufs): # bufs = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) ac0, ac1, an0, an1, bc0, bc1, bn0, bn1 = bufs - # DEPTH-2 scale: sc = (sc_cur, sc_nxt). Consume sc_cur (scale[kc], loaded - # two steps ago), prefetch scale[kc+2] at the END of the step (after all - # g2s), and rotate -> next step gets (sc_nxt, new). Issuing the scale at - # the step END (not the top) keeps it OUT of the FIFO window right before - # the binding wait_barrier, so the nan-boundary vmcnt rises (scale no - # longer occupies ~8 slots ahead of the binding g2s) -> we can run - # wait_barrier(16) and keep more g2s in flight. - sc_cur, sc_nxt = sc - saR0, saR1, sbC0, sbC1 = sc_cur + # DEPTH-2 scale: scale[kc] was gathered into slot kc%3 two steps ago; its + # dwordx4...lds is the oldest outstanding VMEM, so the first wait_barrier + # (vmcnt) lets the ds_read below see landed LDS. scale[kc+2] is gathered at + # the END (after all g2s), into slot (kc+2)%3 -- distinct from kc%3 and + # (kc+1)%3, so the in-flight read[kc]/read[kc+1] don't alias the write. c00f, c01f, c10f, c11f = accs - kc_i = fx.Int32(kc) # Int32 for scale load_step (matches lane_off Int32) + kc_i = fx.Int32(kc) _b1 = [None] * N_TILES_B _a1 = [None] * N_TILES_A @@ -710,6 +766,8 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): b1_off = fx.Int32(B1_gl_offset) + bk wait_barrier(_MAIN_VMCNT) + # ds_read scale[kc] (slot kc%3) -- LDS landed by the wait_barrier above. + saR0, saR1, sbC0, sbC1 = _read_scales(kc_i) il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B, True) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) b1f = _b1 @@ -727,52 +785,22 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) b0nf = _b0n - # Prefetch scale[kc+2] at the END (after all g2s of this step). - sc_new = _load_scales_rt(kc_i + 2) + # Gather scale[kc+2] at the END (after all g2s of this step). + _gather_scales(kc_i + 2, _slot(kc_i + 2)) new_bufs = (an0, an1, ac0, ac1, bn0, bn1, bc0, bc1) # swap cur<->next - return a0nf, b0nf, (sc_nxt, sc_new), (c00f, c01f, c10f, c11f), new_bufs + return a0nf, b0nf, (c00f, c01f, c10f, c11f), new_bufs bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) n_a = 2 * N_TILES_A n_b = 2 * N_TILES_B _R = arith._to_raw - n_ga = N_TILES_A // _FP4_PACK # scale groups per A-scale (=len(saR0)) - n_gb = N_TILES_B // _FP4_PACK - - def _flat_sc1(sc4): - # sc4 = (saR0, saR1, sbC0, sbC1); each is a list of n_g i32 - out = [] - for s in sc4: - for v in s: - out.append(_R(v)) - return out - - def _unflat_sc1(flat): - o = 0 - saR0 = list(flat[o : o + n_ga]) - o += n_ga - saR1 = list(flat[o : o + n_ga]) - o += n_ga - sbC0 = list(flat[o : o + n_gb]) - o += n_gb - sbC1 = list(flat[o : o + n_gb]) - o += n_gb - return saR0, saR1, sbC0, sbC1 - - n_sc1 = 2 * n_ga + 2 * n_gb # one scale group (4 lists) - n_sc = 2 * n_sc1 # depth-2: carry (sc_cur, sc_nxt) - - def _flat_sc(sc): # sc = (sc_cur, sc_nxt) - return _flat_sc1(sc[0]) + _flat_sc1(sc[1]) - - def _unflat_sc(flat): - return (_unflat_sc1(flat[:n_sc1]), _unflat_sc1(flat[n_sc1:])) + # Scale is no longer loop-carried (it lives in triple-buffered LDS slots + # indexed by kc%3); carry = a0/b0 fragments + the 4 accumulator groups. init_state = ( _flat_frag(a0_frag) + _flat_frag(b0_frag) - + _flat_sc((sc_cur0, sc_nxt0)) + [_R(x) for x in c00_frag] + [_R(x) for x in c01_frag] + [_R(x) for x in c10_frag] @@ -784,8 +812,6 @@ def _unflat_sc(flat): off += n_a b0f = _unflat_frag(state[off : off + n_b], N_TILES_B) off += n_b - sc = _unflat_sc(state[off : off + n_sc]) - off += n_sc c00f = list(state[off : off + N_ACCUMS]) off += N_ACCUMS c01f = list(state[off : off + N_ACCUMS]) @@ -797,14 +823,13 @@ def _unflat_sc(flat): accs = (c00f, c01f, c10f, c11f) # step kk - a0f, b0f, sc, accs, bufs = _one_step(kk, a0f, b0f, sc, accs, bufs0) + a0f, b0f, accs, bufs = _one_step(kk, a0f, b0f, accs, bufs0) # step kk+1 (pointers swapped once; swap again -> back to bufs0 at exit) - a0f, b0f, sc, accs, bufs = _one_step(kk + 1, a0f, b0f, sc, accs, bufs) + a0f, b0f, accs, bufs = _one_step(kk + 1, a0f, b0f, accs, bufs) new_state = ( _flat_frag(a0f) + _flat_frag(b0f) - + _flat_sc(sc) + [_R(x) for x in accs[0]] + [_R(x) for x in accs[1]] + [_R(x) for x in accs[2]] @@ -818,11 +843,9 @@ def _unflat_sc(flat): off += n_a b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B) off += n_b - # depth-2 carry: sc_cur = scale[K_ITERS-2] (tail step 1), sc_nxt = - # scale[K_ITERS-1] (tail step 2, already prefetched -- no extra load). - sc_cur, sc_nxt = _unflat_sc(state[off : off + n_sc]) - saR0, saR1, sbC0, sbC1 = sc_cur - off += n_sc + # depth-2: scale[K_ITERS-2] / scale[K_ITERS-1] were gathered into LDS slots + # (K_ITERS-2)%3 / (K_ITERS-1)%3 during the loop's last iteration; read each + # from its slot after the wait_barrier that drains its gather (below). c00_frag = list(state[off : off + N_ACCUMS]) off += N_ACCUMS c01_frag = list(state[off : off + N_ACCUMS]) @@ -840,6 +863,7 @@ def _unflat_sc(flat): _b1 = [None] * N_TILES_B _a1 = [None] * N_TILES_A wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 2)) il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) b1_frag = _b1 @@ -859,12 +883,12 @@ def _unflat_sc(flat): b_cur0, b_next0 = b_next0, b_cur0 b_cur1, b_next1 = b_next1, b_cur1 - # Tail step K_ITERS - 1 (scale = sc_nxt, already prefetched in the loop). + # Tail step K_ITERS - 1 (scale gathered in the loop into slot (K_ITERS-1)%3). # Last step, no g2s prefetch; interleave the b1/a1 ds_reads into c00's shadow. - saR0, saR1, sbC0, sbC1 = sc_nxt _b1 = [None] * N_TILES_B _a1 = [None] * N_TILES_A wait_barrier(0) + saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 1)) il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) b1_frag = _b1 From 15575f35c853ac843a1eae7487ac3b7839c146a2 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 1 Jul 2026 06:44:02 +0000 Subject: [PATCH 101/118] zty_tmp --- kernels/fp4_gemm_4wave.py | 251 +++++++++++++++++--------------------- kernels/fp8_gemm_utils.py | 4 +- 2 files changed, 115 insertions(+), 140 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 5cfe3d314..467329c87 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -42,7 +42,7 @@ wait_barrier, ) -_N_WAVES = 4 # block is always 256 threads -> 4 waves (compile-time constant) +_N_WAVES__4 = 4 # block is always 256 threads -> 4 waves (compile-time constant) class _Buf: @@ -108,19 +108,19 @@ class G2SLoaderAsm: the K-step offset is the scalar soffset operand (hardware-free add). """ - def __init__(self, rsrc, gl_offsets, n_load_steps, wave_id): + def __init__(self, rsrc, gl_offsets, n_load_steps__4, wave_id): self.rsrc = arith._to_raw(rsrc) self.gl_offsets = gl_offsets - self.n_load_steps = n_load_steps + self.n_load_steps__4 = n_load_steps__4 self.wave_id = wave_id - self.n_waves = fx.block_dim.x // 64 + self.n_waves__0_4 = fx.block_dim.x // 64 @property def _step_stride(self): # m0 (LDS byte) advance between consecutive steps of one load. Must be a # Python int (baked into the asm string), so use the compile-time wave count # (block is always 256 -> 4 waves) rather than the runtime block_dim value. - return _N_WAVES * 1024 + return _N_WAVES__4 * 1024 def _lds_base_sgpr(self, lds_dst): # Step-0 LDS byte base (wave-uniform). Later steps add _step_stride to m0. @@ -154,7 +154,7 @@ def _emit(self, lds_dst, k_offset, step): _asm_void([voff, self.rsrc, soff], asm, "v,s,s") def load(self, lds_dst, k_offset): - for step in range_constexpr(self.n_load_steps): + for step in range_constexpr(self.n_load_steps__4): self._emit(lds_dst, k_offset, step) def load_one(self, lds_dst, k_offset, step): @@ -397,12 +397,14 @@ def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): # blocks {R0g0, R0g1, R1g0, R1g1} for A, {C0g0, C0g1, C1g0, C1g1} for B. One # ``buffer_load_dwordx4 ... lds`` (64 lanes x 16 B = 1024 B/wave) gathers all 4 # blocks of one operand. A region (1024 B) + B region (1024 B) = 2048 B/wave; -# x4 waves = 8192 B per pipeline slot; triple-buffered (depth-2 read[kc] / -# write[kc+2] need 3 distinct slots) = 24 KB total. -_SCALE_WAVE_BYTES = 2048 -_SCALE_SLOT_BYTES = _N_WAVES * _SCALE_WAVE_BYTES # 8192 -_SCALE_SLOTS = 3 -_SCALE_LDS_BYTES = _SCALE_SLOTS * _SCALE_SLOT_BYTES # 24 KB +# x4 waves = 8192 B per pipeline slot. Slots are indexed kstep%_SCALE_SLOTS. +# With depth-2 prefetch AND an unroll-by-2 main loop, up to 4 K-steps are live at +# once (read[kk], read[kk+1], gather[kk+2], gather[kk+3]), so 4 slots are needed +# to avoid one being overwritten before its read (3 slots -> nan). 4*8192 = 32 KB. +_SCALE_WAVE_BYTES__2048 = 2048 +_SCALE_SLOT_BYTES__8192 = _N_WAVES__4 * _SCALE_WAVE_BYTES__2048 # 8192 +_SCALE_SLOTS__4 = 4 +_SCALE_LDS_BYTES__32768 = _SCALE_SLOTS__4 * _SCALE_SLOT_BYTES__8192 # 32 KB _SCALE_A_REGION = 0 _SCALE_B_REGION = 1024 @@ -438,8 +440,8 @@ def __init__(self, scale_arg, n_tiles, K, lane_id, wave_id, lds_base_ptr, region self._lds_base = fx.Int32(fx.ptrtoint(lds_base_ptr)) def _slot_wave_byte(self, slot): - return self._lds_base + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES) + fx.Int32( - self.wave_id * _SCALE_WAVE_BYTES + self.region_off + return self._lds_base + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES__8192) + fx.Int32( + self.wave_id * _SCALE_WAVE_BYTES__2048 + self.region_off ) def gather(self, kstep, slot, base_tile): @@ -452,9 +454,6 @@ def gather(self, kstep, slot, base_tile): # i32 chunk (L%16)*4..+3. block g//16 -> group G + (blk//2)*4 + (blk%2). G = fx.Int32(base_tile // 32) grp = G + (self._blk // 2) * fx.Int32(4) + (self._blk % 2) - _DBG_SAME_GROUP = True - if const_expr(_DBG_SAME_GROUP): - grp = G # all lanes read group G; [0,1024) should be block-G replicated i32_off = grp * fx.Int32(self.row_i32) + fx.Int32(kstep) * fx.Int32(64) + self._in16 * fx.Int32(4) voff = arith._to_raw(i32_off * fx.Int32(4)) # bytes soff = _uniform_i32(fx.Int32(0)) @@ -462,28 +461,6 @@ def gather(self, kstep, slot, base_tile): asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") - def read_direct(self, kstep, base_tile): - """DEBUG: baseline direct per-group buffer_load_dword from global (no LDS). - Replicates HEAD's ScaleLoader.load_step to bisect pipeline vs roundtrip.""" - base_group = fx.Int32(base_tile // 32) - kterm = fx.Int32(kstep) * fx.Int32(64) - lane = fx.Int32((self.lane_id // 16) * 16 + (self.lane_id % 16)) - halves = [] - for half in range_constexpr(2): - grp_list = [] - for gi in range_constexpr(self.n_groups): - grp = base_group + fx.Int32(half * 4 + gi) - i32_off = grp * fx.Int32(self.row_i32) + kterm + lane - voff = arith._to_raw(i32_off * fx.Int32(4)) - raw = _llvm.inline_asm( - _T.i32, [voff, self.rsrc], - "buffer_load_dword $0, $1, $2, 0 offen", "=v,v,s", - has_side_effects=True, - ) - grp_list.append(fx.Int32(raw)) - halves.append(grp_list) - return halves[0], halves[1] - def read(self, slot): """Per-lane ds_read of the 4 blocks -> (half0, half1), each list[n_groups] of i32 (the same shape the MFMA consumes: sa[i//2] / sb[j//2]).""" @@ -551,8 +528,8 @@ def store(self, c_frag, base_row, base_col): def compile_fp4_gemm_4w( *, K: int, - BLOCK_M: int = 256, - BLOCK_N: int = 256, + BLOCK_M__256: int = 256, + BLOCK_N__256: int = 256, use_xcd_remap: bool = True, mn_aligned: bool = False, ): @@ -561,24 +538,24 @@ def compile_fp4_gemm_4w( # 256 v_cmp+v_cndmask/wave). Leave False for arbitrary M/N (correctness via the # explicit bounds select). Common alignment-fast-path optimization. # 256 fp4 per LDS K-step row = 128 bytes; reuse fp8's 128-byte LDS layout. - BLOCK_K = 256 # fp4 elements - BLOCK_K_BYTES = BLOCK_K // 2 # 128 bytes / row - LDS_BLOCK_M = BLOCK_M // 2 - LDS_BLOCK_N = BLOCK_N // 2 + BLOCK_K__256 = 256 # fp4 elements + BLOCK_K_BYTES__128 = BLOCK_K__256 // 2 # 128 bytes / row + LDS_BLOCK_M__128 = BLOCK_M__256 // 2 + LDS_BLOCK_N__128 = BLOCK_N__256 // 2 - assert BLOCK_M % 64 == 0 and BLOCK_N % 64 == 0 - assert K % BLOCK_K == 0 + assert BLOCK_M__256 % 64 == 0 and BLOCK_N__256 % 64 == 0 + assert K % BLOCK_K__256 == 0 - K_ITERS = K // BLOCK_K - N_TILES_A = BLOCK_M // 4 // 16 - N_TILES_B = BLOCK_N // 4 // 16 - N_ACCUMS = N_TILES_A * N_TILES_B - assert N_ACCUMS > 0 + K_ITERS = K // BLOCK_K__256 + N_TILES_A__4 = BLOCK_M__256 // 4 // 16 + N_TILES_B__4 = BLOCK_N__256 // 4 // 16 + N_ACCUMS__16 = N_TILES_A__4 * N_TILES_B__4 + assert N_ACCUMS__16 > 0 - N_LDS_ROUNDS = max(N_TILES_A, N_TILES_B) + N_LDS_ROUNDS__4 = max(N_TILES_A__4, N_TILES_B__4) - a_lds_size = LDS_BLOCK_M * BLOCK_K_BYTES - b_lds_size = LDS_BLOCK_N * BLOCK_K_BYTES + a_lds_size__16384 = LDS_BLOCK_M__128 * BLOCK_K_BYTES__128 + b_lds_size__16384 = LDS_BLOCK_N__128 * BLOCK_K_BYTES__128 # One contiguous LDS array (single static `make_ptr` -> single `@__shared_alloc` # symbol), NOT 8 independent leaf fields. With one base symbol every cross-buffer @@ -589,13 +566,13 @@ def compile_fp4_gemm_4w( # writes and the ds_reads, so it would insert a spurious `s_waitcnt vmcnt(0)` # before every ds_read -- which is why g2s uses inline-asm buffer_load (see # G2SLoaderAsm) so LLVM sees no LDS write and emits no drain. - assert a_lds_size == b_lds_size - _lds_buf = a_lds_size # 16KB; 8 buffers laid out contiguously + assert a_lds_size__16384 == b_lds_size__16384 + _lds_buf__16384 = a_lds_size__16384 # 16KB; 8 buffers laid out contiguously # 128KB @fx.struct class SharedStorage: - all_lds: fx.Array[fx.Int8, 8 * _lds_buf, 16] - scale_lds: fx.Array[fx.Int8, _SCALE_LDS_BYTES, 16] + all_lds: fx.Array[fx.Int8, 8 * _lds_buf__16384, 16] + scale_lds: fx.Array[fx.Int8, _SCALE_LDS_BYTES__32768, 16] @flyc.kernel def kernel_gemm( @@ -606,7 +583,7 @@ def kernel_gemm( _base_ptr = lds.all_lds.ptr def _buf(idx): - return _Buf(_base_ptr, idx * _lds_buf) + return _Buf(_base_ptr, idx * _lds_buf__16384) a_cur0 = _buf(0) a_cur1 = _buf(1) @@ -620,44 +597,44 @@ def _buf(idx): lane_id = fx.thread_idx.x % 64 wave_id = fx.thread_idx.x // 64 - n_blocks = ceildiv(c_n, BLOCK_N) + n_blocks = ceildiv(c_n, BLOCK_N__256) if const_expr(use_xcd_remap): - tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M), n_blocks) + tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M__256), n_blocks) else: tile_i, tile_j = divmod(fx.block_idx.x, n_blocks) - wave_i = wave_id // 2 - wave_j = wave_id % 2 + wave_i__0_1 = wave_id // 2 + wave_j__0_1 = wave_id % 2 # Global byte offsets (fp4 packed: K bytes = K // 2). K_BYTES = K // 2 - A0_gl_offset = (tile_i * BLOCK_M) * K_BYTES - A1_gl_offset = (tile_i * BLOCK_M + LDS_BLOCK_M) * K_BYTES - A_K_STEP = BLOCK_K_BYTES - B0_gl_offset = (tile_j * BLOCK_N) * K_BYTES - B1_gl_offset = (tile_j * BLOCK_N + LDS_BLOCK_N) * K_BYTES + A0_gl_offset = (tile_i * BLOCK_M__256) * K_BYTES + A1_gl_offset = (tile_i * BLOCK_M__256 + LDS_BLOCK_M__128) * K_BYTES + A_K_STEP = BLOCK_K_BYTES__128 + B0_gl_offset = (tile_j * BLOCK_N__256) * K_BYTES + B1_gl_offset = (tile_j * BLOCK_N__256 + LDS_BLOCK_N__128) * K_BYTES # B is preshuffled (16,16): one N-16 row-block spans 2*1024 bytes per # K-step (same constant fp8_gemm_4wave uses for b_preshuffled). B_K_STEP = 2 * 1024 - mfma = Mfma16x16x128Fp4(N_TILES_A, N_TILES_B) + mfma = Mfma16x16x128Fp4(N_TILES_A__4, N_TILES_B__4) # Scale via dwordx4...lds gather + ds_read (see ScaleLoaderLDS). One gather # per operand per K-step into a triple-buffered scale-LDS slot; read[kc] / # gather[kc+2] use slots kc%3 / (kc+2)%3 (3 distinct -> race-free). _scale_base_ptr = lds.scale_lds.ptr - a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) - b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) + a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) + b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) - base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) - base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) + base_row = tile_i * BLOCK_M__256 + wave_i__0_1 * (N_TILES_A__4 * 16) + base_col = tile_j * BLOCK_N__256 + wave_j__0_1 * (N_TILES_B__4 * 16) sa_R0 = base_row - sa_R1 = base_row + LDS_BLOCK_M + sa_R1 = base_row + LDS_BLOCK_M__128 sb_C0 = base_col - sb_C1 = base_col + LDS_BLOCK_N + sb_C1 = base_col + LDS_BLOCK_N__128 def _slot(k): - return fx.Int32(k) % fx.Int32(_SCALE_SLOTS) + return fx.Int32(k) % fx.Int32(_SCALE_SLOTS__4) def _gather_scales(k, slot): """Issue the 2 dwordx4...lds gathers (A, B) for K-step ``k`` into LDS @@ -666,8 +643,6 @@ def _gather_scales(k, slot): a_scale_ld.gather(k, slot, base_row) b_scale_ld.gather(k, slot, base_col) - _DBG_DIRECT_SCALE = False - def _read_scales(kstep): """Per-lane scale read for K-step ``kstep`` -> (saR0,saR1,sbC0,sbC1), each list[n_groups] of i32 (same shape the MFMA consumes).""" @@ -677,27 +652,27 @@ def _read_scales(kstep): return (saR0, saR1, sbC0, sbC1) # Accumulators: 2x2 64x64 quadrants per wave. - c00_frag = [mfma.zero_value] * N_ACCUMS - c01_frag = [mfma.zero_value] * N_ACCUMS - c10_frag = [mfma.zero_value] * N_ACCUMS - c11_frag = [mfma.zero_value] * N_ACCUMS + c00_frag = [mfma.zero_value] * N_ACCUMS__16 + c01_frag = [mfma.zero_value] * N_ACCUMS__16 + c10_frag = [mfma.zero_value] * N_ACCUMS__16 + c11_frag = [mfma.zero_value] * N_ACCUMS__16 - gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=False) - gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=True) + gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS__4, preshuffled=False) + gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS__4, preshuffled=True) # Inline-asm g2s (see G2SLoaderAsm): needs the raw buffer resource. Build it # once from the i8 buffer tensor (max_size OOB check; all addresses in-bounds). - a_rsrc = _buffer_ops.create_buffer_resource(A, max_size=True) - b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) - a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A, wave_id) - b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B, wave_id) - a_s2r = S2RLoaderFp4(wave_i, N_TILES_A) - b_s2r = S2RLoaderFp4(wave_j, N_TILES_B) - store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B, mn_aligned=mn_aligned) + a_rsrc = _buffer_ops.create_buffer_resource(A, max_size=True) # why max size here... + b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) # why??? + a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A__4, wave_id) + b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B__4, wave_id) + a_s2r = S2RLoaderFp4(wave_i__0_1, N_TILES_A__4) + b_s2r = S2RLoaderFp4(wave_j__0_1, N_TILES_B__4) + store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A__4, N_TILES_B__4, mn_aligned=mn_aligned) # Prologue. - a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) - b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) + a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) # 4个load. + b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) # 4个... b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) a_g2s.load(a_cur1, A1_gl_offset + 0 * A_K_STEP) @@ -709,9 +684,9 @@ def _read_scales(kstep): def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): return mfma.call(a_frag, b_frag, c_frag, sa_ksub, sb_ksub) - wait_barrier((3 * N_TILES_A) + (4 * N_TILES_B)) + wait_barrier((3 * N_TILES_A__4) + (4 * N_TILES_B__4)) a0_frag = a_s2r.load(a_cur0) - wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) + wait_barrier((3 * N_TILES_A__4) + (3 * N_TILES_B__4)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) # DEPTH-2 scale prefetch into LDS slots: gather step 0 (used iter 0) into @@ -751,10 +726,10 @@ def _one_step(kc, a0f, b0f, accs, bufs): c00f, c01f, c10f, c11f = accs kc_i = fx.Int32(kc) - _b1 = [None] * N_TILES_B - _a1 = [None] * N_TILES_A - _a0n = [None] * N_TILES_A - _b0n = [None] * N_TILES_B + _b1 = [None] * N_TILES_B__4 + _a1 = [None] * N_TILES_A__4 + _a0n = [None] * N_TILES_A__4 + _b0n = [None] * N_TILES_B__4 # This step prefetches K-step (kc+2). g2s offsets fully in Int32 # (A*_gl_offset is Index; kc_i is the Int32 loop var), so arith.addi # operands match. a*_off = base + (kc+2)*A_K_STEP. @@ -768,20 +743,20 @@ def _one_step(kc, a0f, b0f, accs, bufs): wait_barrier(_MAIN_VMCNT) # ds_read scale[kc] (slot kc%3) -- LDS landed by the wait_barrier above. saR0, saR1, sbC0, sbC1 = _read_scales(kc_i) - il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B, True) + il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A__4) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B__4, True) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) b1f = _b1 - il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A) + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A, False) + il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A__4) + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A__4, False) c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) a1f = _a1 wait_barrier(_MAIN_VMCNT) - il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A, False) + il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A__4) + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A__4, False) c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) a0nf = _a0n - il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A) + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B, True) + il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A__4) + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B__4, True) c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) b0nf = _b0n @@ -792,8 +767,8 @@ def _one_step(kc, a0f, b0f, accs, bufs): return a0nf, b0nf, (c00f, c01f, c10f, c11f), new_bufs bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) - n_a = 2 * N_TILES_A - n_b = 2 * N_TILES_B + n_a = 2 * N_TILES_A__4 + n_b = 2 * N_TILES_B__4 _R = arith._to_raw # Scale is no longer loop-carried (it lives in triple-buffered LDS slots @@ -808,18 +783,18 @@ def _one_step(kc, a0f, b0f, accs, bufs): ) for kk, state in range(0, K_ITERS - 2, 2, init=init_state): off = 0 - a0f = _unflat_frag(state[off : off + n_a], N_TILES_A) + a0f = _unflat_frag(state[off : off + n_a], N_TILES_A__4) off += n_a - b0f = _unflat_frag(state[off : off + n_b], N_TILES_B) + b0f = _unflat_frag(state[off : off + n_b], N_TILES_B__4) off += n_b - c00f = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c01f = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c10f = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c11f = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS + c00f = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c01f = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c10f = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c11f = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 accs = (c00f, c01f, c10f, c11f) # step kk @@ -839,40 +814,40 @@ def _one_step(kc, a0f, b0f, accs, bufs): # unpack final state back into the named vars the tail uses off = 0 - a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A) + a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A__4) off += n_a - b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B) + b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B__4) off += n_b # depth-2: scale[K_ITERS-2] / scale[K_ITERS-1] were gathered into LDS slots # (K_ITERS-2)%3 / (K_ITERS-1)%3 during the loop's last iteration; read each # from its slot after the wait_barrier that drains its gather (below). - c00_frag = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c01_frag = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c10_frag = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS - c11_frag = list(state[off : off + N_ACCUMS]) - off += N_ACCUMS + c00_frag = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c01_frag = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c10_frag = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 + c11_frag = list(state[off : off + N_ACCUMS__16]) + off += N_ACCUMS__16 # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). # INTERLEAVED like the main loop: the b1/a1 ds_reads are issued as thunks in # the shadow of the c00 MFMA cluster (c00 only needs a0/b0, already loaded), # and the next-step a0'/b0' ds_reads in the c10 shadow -- so the LDS-read # latency hides behind MFMA instead of being a serial stall. - _b1 = [None] * N_TILES_B - _a1 = [None] * N_TILES_A - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) + _b1 = [None] * N_TILES_B__4 + _a1 = [None] * N_TILES_A__4 + wait_barrier((2 * N_TILES_A__4) + (2 * N_TILES_B__4)) saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 2)) - il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) + il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) b1_frag = _b1 a1_frag = _a1 c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) - _a0n = [None] * N_TILES_A - _b0n = [None] * N_TILES_B - wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) - il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B, True) + _a0n = [None] * N_TILES_A__4 + _b0n = [None] * N_TILES_B__4 + wait_barrier((1 * N_TILES_A__4) + (1 * N_TILES_B__4)) + il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A__4, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B__4, True) c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il) c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1) a0_frag = _a0n @@ -885,11 +860,11 @@ def _one_step(kc, a0f, b0f, accs, bufs): # Tail step K_ITERS - 1 (scale gathered in the loop into slot (K_ITERS-1)%3). # Last step, no g2s prefetch; interleave the b1/a1 ds_reads into c00's shadow. - _b1 = [None] * N_TILES_B - _a1 = [None] * N_TILES_A + _b1 = [None] * N_TILES_B__4 + _a1 = [None] * N_TILES_A__4 wait_barrier(0) saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 1)) - il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) + il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) b1_frag = _b1 a1_frag = _a1 @@ -913,7 +888,7 @@ def launch_gemm( c_n: fx.Int32, stream: fx.Stream, ): - grid_x = ceildiv(c_m, BLOCK_M) * ceildiv(c_n, BLOCK_N) + grid_x = ceildiv(c_m, BLOCK_M__256) * ceildiv(c_n, BLOCK_N__256) kernel_gemm( A, B_T, diff --git a/kernels/fp8_gemm_utils.py b/kernels/fp8_gemm_utils.py index 4b3462320..7ea3552cb 100644 --- a/kernels/fp8_gemm_utils.py +++ b/kernels/fp8_gemm_utils.py @@ -47,10 +47,10 @@ def swizzle_128(row, col): return swizzled_offset // 128, swizzled_offset % 128 -def compute_global_swizzle(lane_id, wave_id, K, n_rounds, preshuffled): +def compute_global_swizzle(lane_id, wave_id, K, n_rounds__4, preshuffled): offsets = [] n_waves = fx.block_dim.x // 64 - for round in range_constexpr(n_rounds): + for round in range_constexpr(n_rounds__4): if const_expr(preshuffled): row = lane_id % 8 + wave_id * 8 + round * (n_waves * 8) col = (lane_id // 8) * 16 From 467e70050997e40fa39e178eb81e0076d44bc090 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 1 Jul 2026 07:14:31 +0000 Subject: [PATCH 102/118] fp4_gemm_4wave: scale via dwordx4-lds gather, fix prologue vmcnt ordering Scale now loads via ScaleLoaderLDS: one buffer_load_dwordx4...lds per operand per K-step gathers a wave's 4 non-contiguous scale blocks into a contiguous LDS region (lane-contiguous write, m0+L*16), then per-lane ds_read feeds the MFMA -- replacing the 8 per-step buffer_load_dword (each with a dur-6 voffset v_add). Fix: prologue scale gathers must be issued BEFORE the 32 g2s loads so they are the oldest outstanding VMEM and the main-loop wait_barrier(17) drains them; issued last, vmcnt(17) couldn't reach them past 32 newer g2s -> step-0 read saw un-landed LDS -> big-K (16384) cos 0.9995. Also needs 4 scale LDS slots (depth-2 x unroll-2 keeps 4 K-steps live; 3 -> nan). cos 0.999999 all shapes. 4556 TFLOPS @ 8192^3, 5164 @ 16384^3 (vs baseline 6788c9e0: 4561 / 5093, +0% / +1.4%). Also add the mfma-coverage-analysis skill. Co-Authored-By: Claude --- .../skills/mfma-coverage-analysis/SKILL.md | 65 +++++++++++ .../scripts/mfma_coverage.py | 108 ++++++++++++++++++ kernels/fp4_gemm_4wave.py | 14 +-- 3 files changed, 180 insertions(+), 7 deletions(-) create mode 100644 .claude/skills/mfma-coverage-analysis/SKILL.md create mode 100644 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/mfma-coverage-analysis/SKILL.md new file mode 100644 index 000000000..eaa0bc4d8 --- /dev/null +++ b/.claude/skills/mfma-coverage-analysis/SKILL.md @@ -0,0 +1,65 @@ +--- +name: mfma-coverage-analysis +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Tiles each MFMA's execute window, finds the exposed gaps, and attributes each gap's cycles to the instruction that blocked the next MFMA. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +--- + +# MFMA Coverage Analysis + +## The model (user-validated) + +Each MFMA occupies a fixed **execute window** of EXEC cycles from its issue cycle. +Back-to-back MFMAs tile `[c, c+EXEC)` windows; while the matrix unit is busy, any +co-issued scalar / VMEM / LDS instruction is *free* (hidden in the shadow). Cycles +**outside** the union of those windows are EXPOSED — the matrix unit idles, so +`cyc/mfma > EXEC`. The goal of MFMA-bound optimization is to shrink the exposed +fraction toward 0 so cyc/mfma → EXEC (see [[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). + +Attribute each exposed gap to the **first non-MFMA instruction in it** = what +blocked the next MFMA from issuing on time. That ranks the real targets by cycles, +which is very different from ranking by instruction *count* or by the generic ATT +stall-type breakdown (a scalar op that issues alone for 1 cycle and an op that +gates a 50-cycle VMEM wait look identical by count but not by exposed cycles). + +EXEC is the MFMA **execute** latency, NOT issue latency: +- fp4 `mfma_scale_f32_16x16x128_f8f6f4` → **16** +- fp8 `mfma..16x16x128` → **32** (its issue latency) +Pass the right `--exec`. + +## How to run + +```bash +# 1. capture ATT (see att-hotloop-benchmark skill) on an idle GPU, long-K shape +# 2. run, first without --range to print the cycle span: +python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py +# 3. pick a mid steady slice spanning ~10 outer-loop iters, re-run: +python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py \ + --range 219000,245000 --exec 16 +``` + +Output: MFMA-covered %, EXPOSED %, cyc/mfma vs floor, and the exposed-gap cycles +bucketed by blocking instruction. + +## Reading it + +- **A named instruction with high exposed cycles is the real target**, even if it + is a tiny fraction of the instruction count and not in the generic stall top-N. + Example (fp4_gemm_4wave, m0-incr commit, cyc/mfma 20.25, exposed 23%): the + biggest blocker was `buffer_load_dword` (scale) at 30% of exposed cycles — only + 3.3% of instructions and absent from the stall-type top-25, yet the #1 thing + keeping cyc/mfma above 16. This reversed an earlier "scale load isn't worth it" + call that was based on the wrong (count / stall-type) metric. +- **`idle` gaps** = pure latency stalls (waitcnt drain / dependency) with no issuing + instruction — usually not directly cuttable, attack the named buckets first. +- `s_waitcnt` high → the wait itself gates; consider relaxing vmcnt/lgkmcnt or + moving the producing load earlier (deeper prefetch). + +## Caveats + +- Uses one wave file (se0_sm0_sl0_wv0.json by default). Different waves are + equivalent repeats; pass `--wave` to check another. +- The "first non-MFMA in gap" heuristic attributes the whole gap to one op; a gap + containing a producer + its consumer is charged to the producer. Good enough to + rank targets, not exact per-op liveness. +- Data structures: instruction record = `[cycle, dur, _, _, code_id]`; code_id -> + `code.json["code"][cid][0]` is the asm text. (See att-hotloop-benchmark for the + complementary barrier-window cyc/mfma summary.) diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py new file mode 100644 index 000000000..946850e31 --- /dev/null +++ b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""Find which instructions are NOT hidden behind MFMA in a GEMM hot loop. + +Model: each MFMA occupies a fixed execute window of EXEC cycles from its issue +cycle. Back-to-back MFMAs tile [c, c+EXEC) windows; while the matrix unit is busy +any co-issued scalar/VMEM/LDS op is "free". Cycles OUTSIDE the union of those +windows are EXPOSED -- the matrix unit idles there, so cyc/mfma > EXEC. We attribute +each exposed gap to the (non-MFMA) instruction at its start = what blocked the next +MFMA from issuing on time. + +Input: an ATT rocprofv3 UI dispatch dir (has code.json + se*_wv*.json). Pick the +steady-state cycle window with --range (avoid prologue/tail). + +Usage: + python3 mfma_coverage.py [--wave se0_sm0_sl0_wv0.json] + [--range LO,HI] [--exec 16] + + # find a steady window first (cycles): the script prints the wave cycle span; + # pick a mid slice spanning ~10 outer loop iterations. + +Notes: +- EXEC is the MFMA execute latency, NOT the issue latency. fp4 + mfma_scale_f32_16x16x128 ~ 16; fp8 16x16x128 ~ 32. Pass --exec accordingly. +- "idle" gaps = pure latency stalls (waitcnt drain / dependency) with no issuing + instruction; real wins come from cutting the named-instruction gaps. +""" +import argparse +import collections +import glob +import json +import os +import sys + + +def load(dispatch_dir, wave): + code = json.load(open(os.path.join(dispatch_dir, "code.json")))["code"] + if wave: + wpath = os.path.join(dispatch_dir, wave) + else: + cands = sorted(glob.glob(os.path.join(dispatch_dir, "se*_wv0.json"))) + wpath = cands[0] + wj = json.load(open(wpath)) + return code, wj["wave"]["instructions"], os.path.basename(wpath) + + +def op_of(code, cid): + a = code[cid][0].strip().split() if cid < len(code) else ["?"] + return a[0] if a else "?" + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("dispatch_dir") + ap.add_argument("--wave", default=None) + ap.add_argument("--range", default=None, help="LO,HI cycle window (steady state)") + ap.add_argument("--exec", type=int, default=16, dest="exec_cyc", help="MFMA execute latency") + args = ap.parse_args() + + code, insts, wname = load(args.dispatch_dir, args.wave) + cyc = [r[0] for r in insts] + print(f"wave={wname} inst cycle span {min(cyc)}..{max(cyc)} n={len(insts)}") + if not args.range: + print("pass --range LO,HI (a mid steady slice, ~10 outer iters). e.g. " + f"--range {min(cyc) + (max(cyc)-min(cyc))//4},{min(cyc) + (max(cyc)-min(cyc))//2}") + return + lo, hi = (int(x) for x in args.range.split(",")) + seg = sorted((r for r in insts if lo <= r[0] < hi), key=lambda r: r[0]) + span = hi - lo + + E = args.exec_cyc + mfma = sorted(r[0] for r in seg if op_of(code, r[4]).startswith("v_mfma")) + if not mfma: + print("no MFMA in window") + return + covered = [] + for c in mfma: + if covered and c <= covered[-1][1]: + covered[-1][1] = max(covered[-1][1], c + E) + else: + covered.append([c, c + E]) + cov = sum(b - a for a, b in covered) + print(f"\nsegment [{lo},{hi}) span={span} mfma={len(mfma)} exec={E}") + print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {span-cov} ({(span-cov)*100//span}%)") + print(f"cyc/mfma = {span/len(mfma):.2f} (floor = {E})") + + gaps = [] + for i in range(len(covered) - 1): + g0, g1 = covered[i][1], covered[i + 1][0] + if g1 > g0: + gaps.append((g0, g1)) + total_gap = sum(b - a for a, b in gaps) or 1 + + def first_non_mfma(g0, g1): + for r in seg: + if g0 <= r[0] < g1 and not op_of(code, r[4]).startswith("v_mfma"): + return op_of(code, r[4]) + return "idle" + + attr = collections.Counter() + for g0, g1 in gaps: + attr[first_non_mfma(g0, g1)] += g1 - g0 + print(f"\n== exposed gap cycles by blocking instruction ({len(gaps)} gaps, {total_gap} cyc) ==") + for o, c in attr.most_common(15): + print(f" {c:6d} cyc ({c*100//total_gap:2d}%) {o}") + + +if __name__ == "__main__": + main() diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 467329c87..36d553aed 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -670,7 +670,13 @@ def _read_scales(kstep): b_s2r = S2RLoaderFp4(wave_j__0_1, N_TILES_B__4) store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A__4, N_TILES_B__4, mn_aligned=mn_aligned) - # Prologue. + # Prologue. Scale gathers for step 0/1 go FIRST (before the 32 g2s) so they + # are the OLDEST outstanding VMEM -- the main loop's wait_barrier(17) then + # drains them naturally (vs issuing them last, where vmcnt(17) can't reach + # them past the 32 newer g2s -> step-0 read got un-landed LDS -> big-K nan). + _gather_scales(0, _slot(0)) + _gather_scales(1, _slot(1)) + a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) # 4个load. b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) # 4个... b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) @@ -689,12 +695,6 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): wait_barrier((3 * N_TILES_A__4) + (3 * N_TILES_B__4)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) - # DEPTH-2 scale prefetch into LDS slots: gather step 0 (used iter 0) into - # slot 0 and step 1 into slot 1. Each main-loop step gathers step kc+2 at the - # END (after all g2s) into slot (kc+2)%3, and reads step kc from slot kc%3 at - # the top. Triple-buffered: read[kc] / gather[kc+2] use distinct slots. - _gather_scales(0, _slot(0)) - _gather_scales(1, _slot(1)) # Main-loop wait_barrier vmcnt. g2s and scale gathers are inline-asm so the # compiler uses our literal vmcnt verbatim. With depth-2 end-of-step scale, From 0e37270e5d8b561ad07a60302e442b7a4b9d4791 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 1 Jul 2026 07:33:02 +0000 Subject: [PATCH 103/118] fp4_gemm_4wave: co-issue scale gather in MFMA shadow The end-of-step scale dwordx4-lds gather pair was issued back-to-back after all MFMAs (ATT: exposed, not hidden). Make them thunks appended to the last two mfma.call interleaves so they co-issue in the MFMA execute shadow. cos 0.999999. 4616 TFLOPS @ 8192^3 (was 4556), 5176 @ 16384^3 (was 5164). Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 36d553aed..aecc582de 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -643,6 +643,15 @@ def _gather_scales(k, slot): a_scale_ld.gather(k, slot, base_row) b_scale_ld.gather(k, slot, base_col) + def _gather_scale_thunks(k, slot): + """gather (A,B) as thunks so they co-issue in the MFMA execute shadow + instead of two back-to-back buffer_load after all MFMAs (ATT showed the + end-of-step gather pair exposed, not hidden).""" + return [ + lambda: a_scale_ld.gather(k, slot, base_row), + lambda: b_scale_ld.gather(k, slot, base_col), + ] + def _read_scales(kstep): """Per-lane scale read for K-step ``kstep`` -> (saR0,saR1,sbC0,sbC1), each list[n_groups] of i32 (same shape the MFMA consumes).""" @@ -751,18 +760,28 @@ def _one_step(kc, a0f, b0f, accs, bufs): c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) a1f = _a1 + # Scale[kc+2] gather thunks: co-issue in the MFMA shadow (appended after + # this step's g2s so their order stays late, but now hidden vs the old + # end-of-step back-to-back pair). One gather per the last two MFMA calls. + _sc_gather = _gather_scale_thunks(kc_i + 2, _slot(kc_i + 2)) + wait_barrier(_MAIN_VMCNT) - il = _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A__4) + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A__4, False) + il = ( + _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A__4) + + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A__4, False) + + _sc_gather[:1] + ) c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) a0nf = _a0n - il = _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A__4) + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B__4, True) + il = ( + _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A__4) + + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B__4, True) + + _sc_gather[1:] + ) c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) b0nf = _b0n - # Gather scale[kc+2] at the END (after all g2s of this step). - _gather_scales(kc_i + 2, _slot(kc_i + 2)) - new_bufs = (an0, an1, ac0, ac1, bn0, bn1, bc0, bc1) # swap cur<->next return a0nf, b0nf, (c00f, c01f, c10f, c11f), new_bufs From f89d59649316c097f093f1c50d578a9521df3beb Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Wed, 1 Jul 2026 07:42:26 +0000 Subject: [PATCH 104/118] fp4_gemm_4wave: hide scale half-1 ds_read in MFMA shadow Scale ds_read was 8 back-to-back ds_read2st64 before the first MFMA (ATT: exposed). Split read by half: half-0 (saR0/sbC0) feeds c00/c01 immediately; half-1 (saR1/sbC1) is only needed by c10/c11, so issue it as thunks in c00's MFMA execute shadow. cos 0.999999. 4648 TFLOPS @ 8192^3 (was 4616), 5166 @ 16384^3. Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 59 ++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index aecc582de..dc32af741 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -461,25 +461,28 @@ def gather(self, kstep, slot, base_tile): asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") - def read(self, slot): - """Per-lane ds_read of the 4 blocks -> (half0, half1), each list[n_groups] - of i32 (the same shape the MFMA consumes: sa[i//2] / sb[j//2]).""" + def read_half(self, slot, half): + """Per-lane ds_read of ONE half (2 blocks) -> list[n_groups] of i32. + Split from read() so half-1 can be issued as a thunk in an MFMA shadow + (half-0 feeds c00/c01, half-1 feeds c10/c11 -- two MFMA clusters later).""" # lane-contiguous write: lane g's 4 i32 at m0 + g*16. block-elem e of block # blk was written by lane (blk*16 + e//4) as its (e%4)-th i32 -> LDS byte # blk*256 + (e//4)*16 + (e%4)*4. MFMA lane L wants block-elem L. L = self.lane_id base = self._slot_wave_byte(slot) + fx.Int32((L // 4) * 16 + (L % 4) * 4) - halves = [] - for half in range_constexpr(2): - grp_list = [] - for gi in range_constexpr(self.n_groups): - blk = half * 2 + gi - vaddr = base + fx.Int32(blk * 256) - lds_ptr = _llvm.inttoptr(_lds_ptr_t(), arith._to_raw(vaddr)) - raw = _llvm.LoadOp(fx.Int32.ir_type, lds_ptr, alignment=4).result - grp_list.append(fx.Int32(raw)) - halves.append(grp_list) - return halves[0], halves[1] + grp_list = [] + for gi in range_constexpr(self.n_groups): + blk = half * 2 + gi + vaddr = base + fx.Int32(blk * 256) + lds_ptr = _llvm.inttoptr(_lds_ptr_t(), arith._to_raw(vaddr)) + raw = _llvm.LoadOp(fx.Int32.ir_type, lds_ptr, alignment=4).result + grp_list.append(fx.Int32(raw)) + return grp_list + + def read(self, slot): + """Per-lane ds_read of the 4 blocks -> (half0, half1), each list[n_groups] + of i32 (the same shape the MFMA consumes: sa[i//2] / sb[j//2]).""" + return self.read_half(slot, 0), self.read_half(slot, 1) class StoreCFp4: @@ -750,15 +753,37 @@ def _one_step(kc, a0f, b0f, accs, bufs): b1_off = fx.Int32(B1_gl_offset) + bk wait_barrier(_MAIN_VMCNT) - # ds_read scale[kc] (slot kc%3) -- LDS landed by the wait_barrier above. - saR0, saR1, sbC0, sbC1 = _read_scales(kc_i) - il = _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A__4) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B__4, True) + # Scale ds_read, split by half so half-1 hides in the c00/c01 MFMA shadow: + # half-0 (saR0/sbC0) feeds c00/c01 now; half-1 (saR1/sbC1) is only needed + # by c10/c11 (two MFMA clusters later), so issue it as thunks in c00/c01. + sc_slot = _slot(kc_i) + saR0 = a_scale_ld.read_half(sc_slot, 0) + sbC0 = b_scale_ld.read_half(sc_slot, 0) + _saR1 = [None] + _sbC1 = [None] + + def _rd_saR1(_s=sc_slot): + _saR1[0] = a_scale_ld.read_half(_s, 1) + + def _rd_sbC1(_s=sc_slot): + _sbC1[0] = b_scale_ld.read_half(_s, 1) + + # Both half-1 reads go in c00's shadow: c00 needs only half-0; sbC1 is + # needed by c01 (next MFMA) and saR1 by c10, so both must be ready after + # c00's execute window. c00 has 16 MFMAs -> plenty of shadow for 4 ds_read. + il = ( + _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A__4) + + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B__4, True) + + [_rd_saR1, _rd_sbC1] + ) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) b1f = _b1 + sbC1 = _sbC1[0] il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A__4) + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A__4, False) c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) a1f = _a1 + saR1 = _saR1[0] # Scale[kc+2] gather thunks: co-issue in the MFMA shadow (appended after # this step's g2s so their order stays late, but now hidden vs the old From 594d4cc9354e5e9d6b750977978b91934248e15c Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 07:06:21 +0000 Subject: [PATCH 105/118] fp4_gemm_4wave: VGPR-carry scale (depth-3) + strided MFMA interleave Scale read moves into VGPR loop-carry: step kc uses scale[kc] already in registers (read in the prior step's MFMA shadow), so the loop top has no scale ds_read / lgkmcnt wait. Requires depth-3 gather (scale[kc+3], clamped to K_ITERS-1 to avoid OOB fault) so scale[kc+1] is landed when read. +12 arch VGPR (180->192, no spill). Also add interleave_stride to mfma.call: issue a load/read thunk every N MFMAs so each buffer_load/ds_read gets >1 MFMA execute-shadow instead of bunching after the first few MFMAs. Main loop + tail use stride=2. cos 0.999999 all shapes. 4571 TFLOPS @ 8192^3, 4962 @ 16384^3 (vs step2 f89d5964: 4531 / 4926, +0.9% / +0.7%). Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 177 ++++++++++++++++++++++---------------- 1 file changed, 105 insertions(+), 72 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index dc32af741..9a9538df8 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -334,7 +334,7 @@ def __init__(self, n_tiles_a, n_tiles_b): def idx(self, i, j): return i * self.n_tiles_b + j - def call(self, a, b, c, sa, sb, interleave=None): + def call(self, a, b, c, sa, sb, interleave=None, interleave_stride=1): """``sa`` / ``sb`` are lists (len n_groups) of packed-E8M0 i32 scales (4 sub-fields each, one full K=256 step for a 32-row pack-group). @@ -355,6 +355,7 @@ def call(self, a, b, c, sa, sb, interleave=None): # ds_read/buffer_load fits free between MFMAs). Mirrors fp8 _interleaved_cluster. thunks = list(interleave) if interleave else [] nth = [0] # python-level counter (compile-time), not loop-carried + mth = [0] # MFMA counter, for spacing thunks every `interleave_stride` MFMAs for ksub in range_constexpr(_FP4_PACK): for i in range_constexpr(self.n_tiles_a): a_op = a[i][ksub] @@ -365,9 +366,13 @@ def call(self, a, b, c, sa, sb, interleave=None): sb_v = sb[j // _FP4_PACK] jb = j % _FP4_PACK c[self.idx(i, j)] = self._mfma_agpr(a_op, b_op, c[self.idx(i, j)], sa_v, sb_v, ksub, ia, jb) - if nth[0] < len(thunks): + # Issue a thunk only every `interleave_stride` MFMAs so a load gets + # >1 MFMA execute-shadow to hide behind (vs bunched after the first + # few MFMAs). Spreads buffer_load/ds_read across the quad. + if nth[0] < len(thunks) and (mth[0] % interleave_stride) == 0: thunks[nth[0]]() nth[0] += 1 + mth[0] += 1 while nth[0] < len(thunks): thunks[nth[0]]() nth[0] += 1 @@ -655,14 +660,6 @@ def _gather_scale_thunks(k, slot): lambda: b_scale_ld.gather(k, slot, base_col), ] - def _read_scales(kstep): - """Per-lane scale read for K-step ``kstep`` -> (saR0,saR1,sbC0,sbC1), - each list[n_groups] of i32 (same shape the MFMA consumes).""" - slot = _slot(kstep) - saR0, saR1 = a_scale_ld.read(slot) - sbC0, sbC1 = b_scale_ld.read(slot) - return (saR0, saR1, sbC0, sbC1) - # Accumulators: 2x2 64x64 quadrants per wave. c00_frag = [mfma.zero_value] * N_ACCUMS__16 c01_frag = [mfma.zero_value] * N_ACCUMS__16 @@ -682,12 +679,15 @@ def _read_scales(kstep): b_s2r = S2RLoaderFp4(wave_j__0_1, N_TILES_B__4) store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A__4, N_TILES_B__4, mn_aligned=mn_aligned) - # Prologue. Scale gathers for step 0/1 go FIRST (before the 32 g2s) so they + # Prologue. Scale gathers for step 0/1/2 go FIRST (before the 32 g2s) so they # are the OLDEST outstanding VMEM -- the main loop's wait_barrier(17) then # drains them naturally (vs issuing them last, where vmcnt(17) can't reach # them past the 32 newer g2s -> step-0 read got un-landed LDS -> big-K nan). + # DEPTH-3: scale[0] feeds the initial VGPR carry, scale[1]/scale[2] are read + # (into carry) during step 0/1; step kc then gathers scale[kc+3]. _gather_scales(0, _slot(0)) _gather_scales(1, _slot(1)) + _gather_scales(2, _slot(2)) a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) # 4个load. b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) # 4个... @@ -707,6 +707,13 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): wait_barrier((3 * N_TILES_A__4) + (3 * N_TILES_B__4)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) + # Initial VGPR scale carry = scale[0] (gathered first in prologue, landed by + # the barriers above). The loop carries scale[kc] in VGPR; each step reads + # scale[kc+1] in the MFMA shadow. saR0/saR1/sbC0/sbC1 each list[n_groups] i32. + sc0_saR0, sc0_saR1 = a_scale_ld.read(_slot(0)) + sc0_sbC0, sc0_sbC1 = b_scale_ld.read(_slot(0)) + sc0 = (sc0_saR0, sc0_saR1, sc0_sbC0, sc0_sbC1) + # Main-loop wait_barrier vmcnt. g2s and scale gathers are inline-asm so the # compiler uses our literal vmcnt verbatim. With depth-2 end-of-step scale, @@ -727,14 +734,32 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): # ``buf`` arg names below are fixed (cur0/cur1/next0/next1); a single step # mutates which physical buffer is "cur" via the pointer-pair swap, so the # step body is parameterized by the current pointer set passed in. - def _one_step(kc, a0f, b0f, accs, bufs): + def _read_scale_thunks(kc_idx, holder): + """4 thunks, each doing one half-read of scale[kc_idx] into holder + (holder = [saR0, saR1, sbC0, sbC1]). Co-issued in an MFMA shadow so the + read of NEXT step's scale is fully hidden (no exposed lgkmcnt at loop top; + scale lives in VGPR carry).""" + s = _slot(kc_idx) + + def _r(dst, ld, half, _s=s): + holder[dst] = ld.read_half(_s, half) + + return [ + lambda: _r(0, a_scale_ld, 0), + lambda: _r(1, a_scale_ld, 1), + lambda: _r(2, b_scale_ld, 0), + lambda: _r(3, b_scale_ld, 1), + ] + + def _one_step(kc, a0f, b0f, sc, accs, bufs): # bufs = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) ac0, ac1, an0, an1, bc0, bc1, bn0, bn1 = bufs - # DEPTH-2 scale: scale[kc] was gathered into slot kc%3 two steps ago; its - # dwordx4...lds is the oldest outstanding VMEM, so the first wait_barrier - # (vmcnt) lets the ds_read below see landed LDS. scale[kc+2] is gathered at - # the END (after all g2s), into slot (kc+2)%3 -- distinct from kc%3 and - # (kc+1)%3, so the in-flight read[kc]/read[kc+1] don't alias the write. + # DEPTH-3 scale + VGPR carry: ``sc`` = scale[kc] ALREADY in VGPR (read in + # the prior step's MFMA shadow), so there is NO scale ds_read / lgkmcnt + # wait at the top of this step. This step (a) reads scale[kc+1] into the + # next carry inside the MFMA shadow, and (b) gathers scale[kc+3] (depth-3, + # so scale[kc+1] -- gathered at step kc-2 -- is landed at the barrier here). + saR0, saR1, sbC0, sbC1 = sc c00f, c01f, c10f, c11f = accs kc_i = fx.Int32(kc) @@ -742,9 +767,7 @@ def _one_step(kc, a0f, b0f, accs, bufs): _a1 = [None] * N_TILES_A__4 _a0n = [None] * N_TILES_A__4 _b0n = [None] * N_TILES_B__4 - # This step prefetches K-step (kc+2). g2s offsets fully in Int32 - # (A*_gl_offset is Index; kc_i is the Int32 loop var), so arith.addi - # operands match. a*_off = base + (kc+2)*A_K_STEP. + # This step prefetches K-step (kc+2) for g2s. a*_off = base + (kc+2)*STEP. ak = (kc_i + fx.Int32(2)) * fx.Int32(A_K_STEP) bk = (kc_i + fx.Int32(2)) * fx.Int32(B_K_STEP) a0_off = fx.Int32(A0_gl_offset) + ak @@ -752,43 +775,32 @@ def _one_step(kc, a0f, b0f, accs, bufs): b0_off = fx.Int32(B0_gl_offset) + bk b1_off = fx.Int32(B1_gl_offset) + bk + # Next-step scale carry: read scale[kc+1] in the MFMA shadow (4 thunks). + _scn = [None, None, None, None] # saR0, saR1, sbC0, sbC1 for kc+1 + _rd_scn = _read_scale_thunks(kc_i + 1, _scn) + # Scale[kc+3] gather (depth-3), co-issued in the MFMA shadow (2 thunks). + # Clamp to K_ITERS-1: the last loop step would gather scale[K_ITERS] (OOB + # -> memory fault); the clamped extra gather re-reads scale[K_ITERS-1] + # into the same slot (idempotent, its result is never consumed). + _gk = _min(kc_i + fx.Int32(3), fx.Int32(K_ITERS - 1)) + _sc_gather = _gather_scale_thunks(_gk, _slot(_gk)) + wait_barrier(_MAIN_VMCNT) - # Scale ds_read, split by half so half-1 hides in the c00/c01 MFMA shadow: - # half-0 (saR0/sbC0) feeds c00/c01 now; half-1 (saR1/sbC1) is only needed - # by c10/c11 (two MFMA clusters later), so issue it as thunks in c00/c01. - sc_slot = _slot(kc_i) - saR0 = a_scale_ld.read_half(sc_slot, 0) - sbC0 = b_scale_ld.read_half(sc_slot, 0) - _saR1 = [None] - _sbC1 = [None] - - def _rd_saR1(_s=sc_slot): - _saR1[0] = a_scale_ld.read_half(_s, 1) - - def _rd_sbC1(_s=sc_slot): - _sbC1[0] = b_scale_ld.read_half(_s, 1) - - # Both half-1 reads go in c00's shadow: c00 needs only half-0; sbC1 is - # needed by c01 (next MFMA) and saR1 by c10, so both must be ready after - # c00's execute window. c00 has 16 MFMAs -> plenty of shadow for 4 ds_read. il = ( _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A__4) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B__4, True) - + [_rd_saR1, _rd_sbC1] + + _rd_scn[:2] ) - c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il) + c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il, interleave_stride=2) b1f = _b1 - sbC1 = _sbC1[0] - il = _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A__4) + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A__4, False) - c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il) + il = ( + _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A__4) + + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A__4, False) + + _rd_scn[2:] + ) + c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il, interleave_stride=2) a1f = _a1 - saR1 = _saR1[0] - - # Scale[kc+2] gather thunks: co-issue in the MFMA shadow (appended after - # this step's g2s so their order stays late, but now hidden vs the old - # end-of-step back-to-back pair). One gather per the last two MFMA calls. - _sc_gather = _gather_scale_thunks(kc_i + 2, _slot(kc_i + 2)) wait_barrier(_MAIN_VMCNT) il = ( @@ -796,7 +808,7 @@ def _rd_sbC1(_s=sc_slot): + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A__4, False) + _sc_gather[:1] ) - c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il) + c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il, interleave_stride=2) a0nf = _a0n il = ( @@ -804,22 +816,38 @@ def _rd_sbC1(_s=sc_slot): + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B__4, True) + _sc_gather[1:] ) - c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il) + c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il, interleave_stride=2) b0nf = _b0n + sc_next = (_scn[0], _scn[1], _scn[2], _scn[3]) new_bufs = (an0, an1, ac0, ac1, bn0, bn1, bc0, bc1) # swap cur<->next - return a0nf, b0nf, (c00f, c01f, c10f, c11f), new_bufs + return a0nf, b0nf, sc_next, (c00f, c01f, c10f, c11f), new_bufs bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) n_a = 2 * N_TILES_A__4 n_b = 2 * N_TILES_B__4 + n_ga = N_TILES_A__4 // _FP4_PACK # scale groups per A half (=len(saR0)) + n_gb = N_TILES_B__4 // _FP4_PACK + n_sc = 2 * n_ga + 2 * n_gb # sc = (saR0,saR1,sbC0,sbC1) flattened _R = arith._to_raw - # Scale is no longer loop-carried (it lives in triple-buffered LDS slots - # indexed by kc%3); carry = a0/b0 fragments + the 4 accumulator groups. + def _flat_sc(sc): + saR0, saR1, sbC0, sbC1 = sc + return [_R(v) for v in saR0] + [_R(v) for v in saR1] + [_R(v) for v in sbC0] + [_R(v) for v in sbC1] + + def _unflat_sc(flat): + o = 0 + saR0 = list(flat[o : o + n_ga]); o += n_ga + saR1 = list(flat[o : o + n_ga]); o += n_ga + sbC0 = list(flat[o : o + n_gb]); o += n_gb + sbC1 = list(flat[o : o + n_gb]); o += n_gb + return (saR0, saR1, sbC0, sbC1) + + # Carry = a0/b0 fragments + VGPR scale carry (scale[kc]) + 4 accumulator groups. init_state = ( _flat_frag(a0_frag) + _flat_frag(b0_frag) + + _flat_sc(sc0) + [_R(x) for x in c00_frag] + [_R(x) for x in c01_frag] + [_R(x) for x in c10_frag] @@ -831,6 +859,8 @@ def _rd_sbC1(_s=sc_slot): off += n_a b0f = _unflat_frag(state[off : off + n_b], N_TILES_B__4) off += n_b + sc = _unflat_sc(state[off : off + n_sc]) + off += n_sc c00f = list(state[off : off + N_ACCUMS__16]) off += N_ACCUMS__16 c01f = list(state[off : off + N_ACCUMS__16]) @@ -842,13 +872,14 @@ def _rd_sbC1(_s=sc_slot): accs = (c00f, c01f, c10f, c11f) # step kk - a0f, b0f, accs, bufs = _one_step(kk, a0f, b0f, accs, bufs0) + a0f, b0f, sc, accs, bufs = _one_step(kk, a0f, b0f, sc, accs, bufs0) # step kk+1 (pointers swapped once; swap again -> back to bufs0 at exit) - a0f, b0f, accs, bufs = _one_step(kk + 1, a0f, b0f, accs, bufs) + a0f, b0f, sc, accs, bufs = _one_step(kk + 1, a0f, b0f, sc, accs, bufs) new_state = ( _flat_frag(a0f) + _flat_frag(b0f) + + _flat_sc(sc) + [_R(x) for x in accs[0]] + [_R(x) for x in accs[1]] + [_R(x) for x in accs[2]] @@ -862,9 +893,9 @@ def _rd_sbC1(_s=sc_slot): off += n_a b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B__4) off += n_b - # depth-2: scale[K_ITERS-2] / scale[K_ITERS-1] were gathered into LDS slots - # (K_ITERS-2)%3 / (K_ITERS-1)%3 during the loop's last iteration; read each - # from its slot after the wait_barrier that drains its gather (below). + # VGPR carry at loop exit = scale[K_ITERS-2] (each iter advances sc by 2). + sc = _unflat_sc(state[off : off + n_sc]) + off += n_sc c00_frag = list(state[off : off + N_ACCUMS__16]) off += N_ACCUMS__16 c01_frag = list(state[off : off + N_ACCUMS__16]) @@ -874,17 +905,20 @@ def _rd_sbC1(_s=sc_slot): c11_frag = list(state[off : off + N_ACCUMS__16]) off += N_ACCUMS__16 - # Tail step K_ITERS - 2 (scale carried from loop's last prefetch). - # INTERLEAVED like the main loop: the b1/a1 ds_reads are issued as thunks in - # the shadow of the c00 MFMA cluster (c00 only needs a0/b0, already loaded), - # and the next-step a0'/b0' ds_reads in the c10 shadow -- so the LDS-read - # latency hides behind MFMA instead of being a serial stall. + # Tail step K_ITERS - 2: scale[K_ITERS-2] is the carried VGPR sc (no read). + # Read scale[K_ITERS-1] into the next carry in the c00 MFMA shadow. + saR0, saR1, sbC0, sbC1 = sc + _scn = [None, None, None, None] + _rd_scn = _read_scale_thunks(fx.Int32(K_ITERS - 1), _scn) _b1 = [None] * N_TILES_B__4 _a1 = [None] * N_TILES_A__4 wait_barrier((2 * N_TILES_A__4) + (2 * N_TILES_B__4)) - saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 2)) - il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) - c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) + il = ( + _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) + + _rd_scn + ) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il, interleave_stride=2) b1_frag = _b1 a1_frag = _a1 c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) @@ -892,7 +926,7 @@ def _rd_sbC1(_s=sc_slot): _b0n = [None] * N_TILES_B__4 wait_barrier((1 * N_TILES_A__4) + (1 * N_TILES_B__4)) il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A__4, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B__4, True) - c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il) + c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il, interleave_stride=2) c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1) a0_frag = _a0n b0_frag = _b0n @@ -902,14 +936,13 @@ def _rd_sbC1(_s=sc_slot): b_cur0, b_next0 = b_next0, b_cur0 b_cur1, b_next1 = b_next1, b_cur1 - # Tail step K_ITERS - 1 (scale gathered in the loop into slot (K_ITERS-1)%3). - # Last step, no g2s prefetch; interleave the b1/a1 ds_reads into c00's shadow. + # Tail step K_ITERS - 1: scale[K_ITERS-1] read into the carry above. _b1 = [None] * N_TILES_B__4 _a1 = [None] * N_TILES_A__4 wait_barrier(0) - saR0, saR1, sbC0, sbC1 = _read_scales(fx.Int32(K_ITERS - 1)) + saR0, saR1, sbC0, sbC1 = (_scn[0], _scn[1], _scn[2], _scn[3]) il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) - c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il) + c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il, interleave_stride=2) b1_frag = _b1 a1_frag = _a1 c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) From 9e21f0e3a1005b17c4b178fea77419058bb7a496 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 07:11:44 +0000 Subject: [PATCH 106/118] fp4_gemm_4wave: precompute scale-gather m0 base, drop per-gather readfirstlane The scale gather m0 was readfirstlane'd every gather (m0 derived from wave_id, a VGPR, forced by the "s" constraint) -- 4 readfirstlane/iter, ATT-exposed ~19%. Precompute the wave-uniform LDS base (lds_base + wave_id*2048 + region) into an SGPR ONCE via set_wave_base(); gather() then builds m0 = wave_base_s + slot*8192 with scalar arithmetic (no readfirstlane). soffset=0 also readfirstlane'd once. Loop readfirstlane 12->8. cos 0.999999. 4573 @ 8192^3, 4977 @ 16384^3. Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 9a9538df8..2258edb5d 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -449,6 +449,16 @@ def _slot_wave_byte(self, slot): self.wave_id * _SCALE_WAVE_BYTES__2048 + self.region_off ) + def set_wave_base(self): + """Precompute the wave-uniform LDS base (lds_base + wave_id*2048 + region) + into an SGPR ONCE via a single readfirstlane. gather() then computes m0 = + wave_base_s + slot*8192 with scalar arithmetic, so the "s" constraint on m0 + needs NO per-gather readfirstlane (was 4/iter: one per A/B gather per step).""" + wave_base = self._lds_base + fx.Int32(self.wave_id * _SCALE_WAVE_BYTES__2048 + self.region_off) + self._wave_base_s = _rocdl.readfirstlane(_T.i32, arith._to_raw(wave_base)) + # soffset=0 as a wave-uniform SGPR (readfirstlane'd once, reused every gather). + self._soff0 = _uniform_i32(fx.Int32(0)) + def gather(self, kstep, slot, base_tile): """Issue ONE buffer_load_dwordx4...lds gathering all 4 blocks of this operand into scale-LDS ``slot``. ``base_tile`` = the M/N-half-0 base row @@ -461,10 +471,10 @@ def gather(self, kstep, slot, base_tile): grp = G + (self._blk // 2) * fx.Int32(4) + (self._blk % 2) i32_off = grp * fx.Int32(self.row_i32) + fx.Int32(kstep) * fx.Int32(64) + self._in16 * fx.Int32(4) voff = arith._to_raw(i32_off * fx.Int32(4)) # bytes - soff = _uniform_i32(fx.Int32(0)) - m0 = _uniform_i32(self._slot_wave_byte(slot)) + # m0 = precomputed wave base (SGPR) + slot*8192 (scalar): no readfirstlane. + m0 = arith._to_raw(fx.Int32(self._wave_base_s) + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES__8192)) asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" - _asm_void([m0, voff, self.rsrc, soff], asm, "s,v,s,s") + _asm_void([m0, voff, self.rsrc, self._soff0], asm, "s,v,s,s") def read_half(self, slot, half): """Per-lane ds_read of ONE half (2 blocks) -> list[n_groups] of i32. @@ -633,6 +643,10 @@ def _buf(idx): _scale_base_ptr = lds.scale_lds.ptr a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) + # Precompute each loader's wave-uniform LDS base into an SGPR once, so the + # per-gather m0 needs no readfirstlane (was 4/iter -> exposed ~19% in ATT). + a_scale_ld.set_wave_base() + b_scale_ld.set_wave_base() base_row = tile_i * BLOCK_M__256 + wave_i__0_1 * (N_TILES_A__4 * 16) base_col = tile_j * BLOCK_N__256 + wave_j__0_1 * (N_TILES_B__4 * 16) From 62dca41391188a35dd0282f8bf08f9c4e2152389 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 07:30:37 +0000 Subject: [PATCH 107/118] mfma-coverage skill: switch to next_free pipeline exposure model The old union-of-[issue,issue+EXEC) model capped overlapping windows and mislabeled shadow-hidden loads as exposed (blamed ds_read_b128 33% when dense ~8-cyc-apart fp4 MFMAs actually hid all of them). The next_free model tracks the matrix unit as a pipeline: an MFMA issuing after the unit frees exposes only the idle gap. On fp4_gemm_4wave this corrected EXPOSED 28%->14% and revealed the real blockers: s_add address arithmetic 34% + idle/s_waitcnt, ds_read ~0%. Co-Authored-By: Claude --- .../skills/mfma-coverage-analysis/SKILL.md | 26 ++++++++++----- .../scripts/mfma_coverage.py | 33 +++++++++++-------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/mfma-coverage-analysis/SKILL.md index eaa0bc4d8..e6c99c768 100644 --- a/.claude/skills/mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/mfma-coverage-analysis/SKILL.md @@ -1,18 +1,28 @@ --- name: mfma-coverage-analysis -description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Tiles each MFMA's execute window, finds the exposed gaps, and attributes each gap's cycles to the instruction that blocked the next MFMA. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free): an MFMA issuing after the unit is free exposes the idle gap, attributed to the first non-MFMA op in it. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. --- # MFMA Coverage Analysis -## The model (user-validated) +## The model (user-validated, next_free pipeline) -Each MFMA occupies a fixed **execute window** of EXEC cycles from its issue cycle. -Back-to-back MFMAs tile `[c, c+EXEC)` windows; while the matrix unit is busy, any -co-issued scalar / VMEM / LDS instruction is *free* (hidden in the shadow). Cycles -**outside** the union of those windows are EXPOSED — the matrix unit idles, so -`cyc/mfma > EXEC`. The goal of MFMA-bound optimization is to shrink the exposed -fraction toward 0 so cyc/mfma → EXEC (see [[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). +The matrix unit is a PIPELINE: each MFMA occupies ONE EXEC-cycle execute slot, but +consecutive MFMAs can **issue < EXEC apart** and still both be hidden (dense fp4 +MFMAs issue ~8 cyc apart yet each execute-slot is 16). Track `next_free` = the cycle +the unit becomes free: +- MFMA issues at `t <= next_free` → hidden (co-issued in the shadow); `next_free += EXEC` +- MFMA issues at `t > next_free` → the unit was IDLE for `t - next_free` → **EXPOSED** + +EXPOSED = sum of those idle gaps; shrink it toward 0 so cyc/mfma → EXEC (see +[[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). + +IMPORTANT — this REPLACES the older "union of `[issue, issue+EXEC)` windows" model, +which **capped overlapping windows and so mislabeled shadow-hidden loads as exposed** +(e.g. it blamed `ds_read_b128` for 33% when dense 8-cyc-apart MFMAs actually hid all +of them; the next_free model correctly showed ds_read ~0% and the real blockers were +`s_add` address arithmetic 34% + idle/s_waitcnt). If a load appears as a top exposed +blocker, sanity-check it isn't just filling the natural MFMA issue cadence. Attribute each exposed gap to the **first non-MFMA instruction in it** = what blocked the next MFMA from issuing on time. That ranks the real targets by cycles, diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py index 946850e31..bbe7f1840 100644 --- a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py +++ b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py @@ -72,23 +72,30 @@ def main(): if not mfma: print("no MFMA in window") return - covered = [] - for c in mfma: - if covered and c <= covered[-1][1]: - covered[-1][1] = max(covered[-1][1], c + E) + + # next_free model (matrix-unit pipeline): each MFMA occupies ONE E-cycle execute + # slot, but slots pipeline -- consecutive MFMAs can ISSUE < E apart and still both + # be hidden (the unit stays busy). Track next_free = when the matrix unit frees. + # - issue t <= next_free : hidden (co-issued in the shadow); slot advances +E + # - issue t > next_free : the unit was IDLE for (t - next_free) -> EXPOSED + # This fixes the older union-of-[issue,issue+E) model, which capped overlapping + # windows and so mislabeled shadow-hidden loads (dense 8-cyc-apart MFMAs) as + # exposed. Blame each exposed gap on the first non-MFMA op issuing inside it. + next_free = mfma[0] + gaps = [] + for t in mfma: + if t > next_free: + gaps.append((next_free, t)) + next_free = t + E else: - covered.append([c, c + E]) - cov = sum(b - a for a, b in covered) + next_free = next_free + E + exp = sum(b - a for a, b in gaps) + cov = span - exp print(f"\nsegment [{lo},{hi}) span={span} mfma={len(mfma)} exec={E}") - print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {span-cov} ({(span-cov)*100//span}%)") + print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {exp} ({exp*100//span}%)") print(f"cyc/mfma = {span/len(mfma):.2f} (floor = {E})") - gaps = [] - for i in range(len(covered) - 1): - g0, g1 = covered[i][1], covered[i + 1][0] - if g1 > g0: - gaps.append((g0, g1)) - total_gap = sum(b - a for a, b in gaps) or 1 + total_gap = exp or 1 def first_non_mfma(g0, g1): for r in seg: From 2cd49107d5978208954725ba14ccd0f651031695 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 07:37:38 +0000 Subject: [PATCH 108/118] mfma-coverage skill: rank blockers by authoritative stall field, not gap geometry ATT wave rows are [cycle, issue_dur, STALL, total_dur, code_id]; r[2] is the real per-instruction stall. Every gap-geometry heuristic (first-in-gap / longest / occupancy-overlap) gave contradictory answers on the SAME trace -- variously blaming ds_read_b128 33%, s_add 34%, buffer_load 30%, all wrong. The stall field shows ds_read_b128 and s_add have stall==0 (pure fill between MFMAs, never block); the true blockers are s_barrier 39% + s_waitcnt(lgkmcnt) 35% + buffer_load 11% + readfirstlane 7% + s_waitcnt(vmcnt) 5%. Keep next_free only for the EXPOSED %. Co-Authored-By: Claude --- .../skills/mfma-coverage-analysis/SKILL.md | 66 +++++++++++-------- .../scripts/mfma_coverage.py | 45 +++++++++---- 2 files changed, 68 insertions(+), 43 deletions(-) diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/mfma-coverage-analysis/SKILL.md index e6c99c768..e5175cf54 100644 --- a/.claude/skills/mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/mfma-coverage-analysis/SKILL.md @@ -1,6 +1,6 @@ --- name: mfma-coverage-analysis -description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free): an MFMA issuing after the unit is free exposes the idle gap, attributed to the first non-MFMA op in it. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED %, and ranks blockers by the authoritative per-instruction STALL field (ops with stall==0 never block). Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. --- # MFMA Coverage Analysis @@ -17,18 +17,28 @@ the unit becomes free: EXPOSED = sum of those idle gaps; shrink it toward 0 so cyc/mfma → EXEC (see [[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). -IMPORTANT — this REPLACES the older "union of `[issue, issue+EXEC)` windows" model, -which **capped overlapping windows and so mislabeled shadow-hidden loads as exposed** -(e.g. it blamed `ds_read_b128` for 33% when dense 8-cyc-apart MFMAs actually hid all -of them; the next_free model correctly showed ds_read ~0% and the real blockers were -`s_add` address arithmetic 34% + idle/s_waitcnt). If a load appears as a top exposed -blocker, sanity-check it isn't just filling the natural MFMA issue cadence. +`next_free` gives the total EXPOSED % (matrix-unit idle fraction). It REPLACES the +older "union of `[issue, issue+EXEC)` windows" model, which capped overlapping +windows and over-reported exposure. -Attribute each exposed gap to the **first non-MFMA instruction in it** = what -blocked the next MFMA from issuing on time. That ranks the real targets by cycles, -which is very different from ranking by instruction *count* or by the generic ATT -stall-type breakdown (a scalar op that issues alone for 1 cycle and an op that -gates a 50-cycle VMEM wait look identical by count but not by exposed cycles). +## Attribution: use the per-instruction STALL field, NOT gap geometry + +Each ATT wave row is `[cycle, issue_dur, STALL, total_dur, code_id]`. **`r[2]` is +the authoritative stall** — the cycles that instruction actually blocked. Rank +blockers by summed stall per op (excluding the MFMAs' own execute stall, which is +the floor). Do NOT attribute by "which op sits in the idle gap" — every geometric +heuristic tried (first-in-gap / longest-in-gap / occupancy-overlap) mislabeled +non-blocking fill ops and gave contradictory answers on the SAME trace: + +- gap-geometry variously blamed `ds_read_b128` 33%, then `s_add` 34%, then + `buffer_load` 30% — all WRONG. +- the stall field showed `ds_read_b128` and `s_add` have **stall == 0** (pure fill, + never block), and the real blockers were **s_barrier 39% + s_waitcnt(lgkmcnt) 35% + + buffer_load 11% + readfirstlane 7% + s_waitcnt(vmcnt) 5%**. + +So: an op that issues between MFMAs is only a problem if its `r[2]` stall > 0. +s_waitcnt is split into vmcnt / lgkmcnt so you can see whether VMEM or LDS waits +dominate (here: LDS/lgkmcnt, i.e. waiting on ds_read; VMEM already hidden). EXEC is the MFMA **execute** latency, NOT issue latency: - fp4 `mfma_scale_f32_16x16x128_f8f6f4` → **16** @@ -51,25 +61,23 @@ bucketed by blocking instruction. ## Reading it -- **A named instruction with high exposed cycles is the real target**, even if it - is a tiny fraction of the instruction count and not in the generic stall top-N. - Example (fp4_gemm_4wave, m0-incr commit, cyc/mfma 20.25, exposed 23%): the - biggest blocker was `buffer_load_dword` (scale) at 30% of exposed cycles — only - 3.3% of instructions and absent from the stall-type top-25, yet the #1 thing - keeping cyc/mfma above 16. This reversed an earlier "scale load isn't worth it" - call that was based on the wrong (count / stall-type) metric. -- **`idle` gaps** = pure latency stalls (waitcnt drain / dependency) with no issuing - instruction — usually not directly cuttable, attack the named buckets first. -- `s_waitcnt` high → the wait itself gates; consider relaxing vmcnt/lgkmcnt or - moving the producing load earlier (deeper prefetch). +- **Rank by the stall column (`r[2]`), not by count or by which op sits in a gap.** + An op with stall==0 is free no matter where it sits; only stall>0 ops block. +- **s_barrier high** → the wave is waiting at the per-iter cross-wave sync (the + 4 waves finish the iter at slightly different times). Structural for a fixed wave + count; not cuttable without changing sync granularity / wave layout. +- **s_waitcnt(lgkmcnt) high** → waiting on LDS reads (ds_read). Move the producing + ds_read earlier / deepen the register prefetch so the value is ready. +- **s_waitcnt(vmcnt) high** → waiting on VMEM (global/g2s/scale gather). Deepen the + VMEM prefetch or relax the vmcnt bound. +- **buffer_load / readfirstlane with stall** → the load's own issue stalled, or the + v→s readfirstlane serialized; precompute wave-uniform values once (SGPR). ## Caveats - Uses one wave file (se0_sm0_sl0_wv0.json by default). Different waves are equivalent repeats; pass `--wave` to check another. -- The "first non-MFMA in gap" heuristic attributes the whole gap to one op; a gap - containing a producer + its consumer is charged to the producer. Good enough to - rank targets, not exact per-op liveness. -- Data structures: instruction record = `[cycle, dur, _, _, code_id]`; code_id -> - `code.json["code"][cid][0]` is the asm text. (See att-hotloop-benchmark for the - complementary barrier-window cyc/mfma summary.) +- Row schema: `[cycle, issue_dur, STALL, total_dur, code_id]`. `r[2]` (stall) is the + authoritative blocking metric; `code.json["code"][cid][0]` is the asm text. The + `next_free` pass gives EXPOSED %; the stall column gives the per-op ranking. (See + att-hotloop-benchmark for the complementary barrier-window cyc/mfma summary.) diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py index bbe7f1840..387573571 100644 --- a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py +++ b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py @@ -95,20 +95,37 @@ def main(): print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {exp} ({exp*100//span}%)") print(f"cyc/mfma = {span/len(mfma):.2f} (floor = {E})") - total_gap = exp or 1 - - def first_non_mfma(g0, g1): - for r in seg: - if g0 <= r[0] < g1 and not op_of(code, r[4]).startswith("v_mfma"): - return op_of(code, r[4]) - return "idle" - - attr = collections.Counter() - for g0, g1 in gaps: - attr[first_non_mfma(g0, g1)] += g1 - g0 - print(f"\n== exposed gap cycles by blocking instruction ({len(gaps)} gaps, {total_gap} cyc) ==") - for o, c in attr.most_common(15): - print(f" {c:6d} cyc ({c*100//total_gap:2d}%) {o}") + # AUTHORITATIVE attribution via the per-instruction STALL field. Each ATT wave + # row is [cycle, issue_dur, STALL, total_dur, code_id]: r[2] is the cycles the + # instruction stalled (blocked issue / waited). This is ground truth -- it makes + # gap-geometry guessing (first-in-gap / longest-in-gap / occupancy-overlap) moot, + # all of which mislabeled non-blocking fill ops. Ops with stall==0 (ds_read_b128, + # s_add, ...) NEVER block the matrix unit no matter how they sit between MFMAs; + # only ops with real stall (s_barrier, s_waitcnt, buffer_load) do. Report stall by + # op, excluding the MFMAs' own execute stall (that is the floor, not exposure). + def label(cid): + t = code[cid][0].strip() if cid < len(code) else "?" + o = op_of(code, cid) + if o == "s_waitcnt": + v, l = "vmcnt" in t, "lgkmcnt" in t + return "s_waitcnt(vm+lgkm)" if v and l else "s_waitcnt(vmcnt)" if v else \ + "s_waitcnt(lgkmcnt)" if l else "s_waitcnt" + return o + + stall = collections.Counter() + mfma_stall = 0 + for r in seg: + o = op_of(code, r[4]) + s = r[2] if len(r) > 2 else 0 + if o.startswith("v_mfma"): + mfma_stall += s + elif s: + stall[label(r[4])] += s + tot_stall = sum(stall.values()) or 1 + print(f"\n(mfma self execute-stall {mfma_stall} = the floor, excluded)") + print(f"== NON-MFMA stall cycles by instruction (authoritative, {tot_stall} cyc) ==") + for o, c in stall.most_common(15): + print(f" {c:6d} cyc ({c*100//tot_stall:2d}%) {o}") if __name__ == "__main__": From eee276e7d56a070b42f3a03761c34698b89be45e Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 09:02:16 +0000 Subject: [PATCH 109/118] mfma-coverage skill: exposed = stall field intersected with idle gaps + pure-idle Two bugs in the prior stall-only attribution: (1) it summed the whole r[2] stall even when the stall overlapped MFMA execute (hidden, pipe busy), and (2) the "MFMA busy" mask must be the next_free gap complement, not a geometric union of [issue,issue+16) -- consecutive ~8-cyc-apart MFMAs keep the unit busy past any single 16-cyc window. Fix: a stall counts as exposed only for its overlap with a next_free idle gap; the uncovered remainder is PURE IDLE (scheduling/dependency slack), reported as its own bucket. On fp4_gemm_4wave this corrected the picture: EXPOSED 6344 = pure-idle 72% + s_barrier 15% + lgkmcnt 7% (was over-reported 35%) + buffer_load 3% + vmcnt 0%. The real lever is tighter MFMA packing, not cutting a single op. Co-Authored-By: Claude --- .../skills/mfma-coverage-analysis/SKILL.md | 48 +++++++++++------- .../scripts/mfma_coverage.py | 50 ++++++++++++------- 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/mfma-coverage-analysis/SKILL.md index e5175cf54..55b4c2b6b 100644 --- a/.claude/skills/mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/mfma-coverage-analysis/SKILL.md @@ -1,6 +1,6 @@ --- name: mfma-coverage-analysis -description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED %, and ranks blockers by the authoritative per-instruction STALL field (ops with stall==0 never block). Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED %, then attributes exposed cycles by per-instruction STALL field intersected with the idle gaps (stall==0 ops and MFMA-hidden stall never count); the uncovered remainder is pure-idle scheduling slack. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. --- # MFMA Coverage Analysis @@ -21,20 +21,29 @@ EXPOSED = sum of those idle gaps; shrink it toward 0 so cyc/mfma → EXEC (see older "union of `[issue, issue+EXEC)` windows" model, which capped overlapping windows and over-reported exposure. -## Attribution: use the per-instruction STALL field, NOT gap geometry +## Attribution: STALL field ∩ idle gap (both filters matter) Each ATT wave row is `[cycle, issue_dur, STALL, total_dur, code_id]`. **`r[2]` is -the authoritative stall** — the cycles that instruction actually blocked. Rank -blockers by summed stall per op (excluding the MFMAs' own execute stall, which is -the floor). Do NOT attribute by "which op sits in the idle gap" — every geometric -heuristic tried (first-in-gap / longest-in-gap / occupancy-overlap) mislabeled -non-blocking fill ops and gave contradictory answers on the SAME trace: - -- gap-geometry variously blamed `ds_read_b128` 33%, then `s_add` 34%, then - `buffer_load` 30% — all WRONG. -- the stall field showed `ds_read_b128` and `s_add` have **stall == 0** (pure fill, - never block), and the real blockers were **s_barrier 39% + s_waitcnt(lgkmcnt) 35% - + buffer_load 11% + readfirstlane 7% + s_waitcnt(vmcnt) 5%**. +the authoritative per-instruction stall.** Attribute EXPOSED cycles with TWO filters: + +1. **Only stall>0 ops block.** Ops with stall==0 (`ds_read_b128`, `s_add`) are pure + fill between MFMAs and never block — do NOT attribute by "which op sits in the + gap" (first/longest/occupancy geometry all mislabeled fill and gave contradictory + answers on the same trace: ds_read 33%, then s_add 34%, then buffer_load 30% — all wrong). +2. **Only the part of the stall overlapping a next_free GAP counts as exposed.** A + stall that overlaps MFMA execute is HIDDEN (the pipe is busy). Because MFMAs issue + ~8 cyc apart but each execute-slot is 16, several overlapping executes keep the + unit busy well past any single `[issue,issue+16)`; intersecting with the next_free + idle gaps handles this. (Skipping this over-reported lgkmcnt: raw stall 976 → + true-exposed 504.) + +Whatever exposed cycles no stalling instruction covers = **PURE IDLE** (scheduling / +dependency slack, not one op's fault) — usually the TOP bucket. + +Example (fp4_gemm_4wave, cyc/mfma 18.73, EXPOSED 14% = 6344 cyc): **pure-idle 72% + +s_barrier 15% + s_waitcnt(lgkmcnt) 7% + buffer_load 3% + s_waitcnt(vmcnt) 0%.** The +biggest lever is packing MFMAs tighter (pure-idle), not cutting any single op; the +per-op stalls are small once MFMA-hidden cycles are removed. So: an op that issues between MFMAs is only a problem if its `r[2]` stall > 0. s_waitcnt is split into vmcnt / lgkmcnt so you can see whether VMEM or LDS waits @@ -56,13 +65,18 @@ python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py \ --range 219000,245000 --exec 16 ``` -Output: MFMA-covered %, EXPOSED %, cyc/mfma vs floor, and the exposed-gap cycles -bucketed by blocking instruction. +Output: MFMA-covered %, EXPOSED %, cyc/mfma vs floor, then the exposed cycles split +into pure-idle + per-op (stall ∩ idle-gap) buckets. ## Reading it -- **Rank by the stall column (`r[2]`), not by count or by which op sits in a gap.** - An op with stall==0 is free no matter where it sits; only stall>0 ops block. +- **pure-idle top** → the matrix unit is idle with NO stalling instruction there; + it's scheduling/dependency slack. Attack by packing MFMAs tighter (spread thunks + differently, interleave_stride, deepen prefetch so operands are ready earlier), + NOT by cutting one op. This is usually the biggest bucket once stalls are filtered. +- **Rank named ops by the stall column (`r[2]`) ∩ idle gap**, not by count or by which + op sits in a gap. An op with stall==0 is free; a stall overlapping MFMA execute is + hidden. Only stall>0 ∩ idle-gap cycles are real exposure. - **s_barrier high** → the wave is waiting at the per-iter cross-wave sync (the 4 waves finish the iter at slightly different times). Structural for a fixed wave count; not cuttable without changing sync granularity / wave layout. diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py index 387573571..38c8621f8 100644 --- a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py +++ b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py @@ -95,14 +95,18 @@ def main(): print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {exp} ({exp*100//span}%)") print(f"cyc/mfma = {span/len(mfma):.2f} (floor = {E})") - # AUTHORITATIVE attribution via the per-instruction STALL field. Each ATT wave - # row is [cycle, issue_dur, STALL, total_dur, code_id]: r[2] is the cycles the - # instruction stalled (blocked issue / waited). This is ground truth -- it makes - # gap-geometry guessing (first-in-gap / longest-in-gap / occupancy-overlap) moot, - # all of which mislabeled non-blocking fill ops. Ops with stall==0 (ds_read_b128, - # s_add, ...) NEVER block the matrix unit no matter how they sit between MFMAs; - # only ops with real stall (s_barrier, s_waitcnt, buffer_load) do. Report stall by - # op, excluding the MFMAs' own execute stall (that is the floor, not exposure). + # Attribute the EXPOSED cycles (matrix unit idle) to instructions. Two facts: + # 1. Row = [cycle, issue_dur, STALL(r[2]), total_dur, code_id]. r[2] is the real + # per-instruction stall. Ops with stall==0 (ds_read_b128, s_add) NEVER block. + # 2. A stall only COUNTS AS EXPOSED for the cycles the matrix unit was actually + # idle -- i.e. the stall interval [cycle, cycle+stall) intersected with a + # next_free GAP. A stall that overlaps MFMA execute is hidden (the pipe is + # busy). (MFMAs issue ~8 cyc apart but each execute-slot is 16, so several + # overlapping executes keep the unit busy well past any single [issue,issue+16); + # using the next_free gaps as the "idle" mask handles this correctly.) + # Whatever exposed cycles are NOT covered by any stalling instruction are PURE IDLE + # (scheduling gaps / dependency slack, not a single op's fault) -- usually the top + # bucket, and the target for tighter MFMA packing rather than cutting one op. def label(cid): t = code[cid][0].strip() if cid < len(code) else "?" o = op_of(code, cid) @@ -112,20 +116,28 @@ def label(cid): "s_waitcnt(lgkmcnt)" if l else "s_waitcnt" return o + def gap_overlap(a, b): + tot = 0 + for g0, g1 in gaps: + if g1 <= a or g0 >= b: + continue + tot += min(g1, b) - max(g0, a) + return tot + stall = collections.Counter() - mfma_stall = 0 for r in seg: - o = op_of(code, r[4]) - s = r[2] if len(r) > 2 else 0 - if o.startswith("v_mfma"): - mfma_stall += s - elif s: - stall[label(r[4])] += s - tot_stall = sum(stall.values()) or 1 - print(f"\n(mfma self execute-stall {mfma_stall} = the floor, excluded)") - print(f"== NON-MFMA stall cycles by instruction (authoritative, {tot_stall} cyc) ==") + if op_of(code, r[4]).startswith("v_mfma") or len(r) < 3 or r[2] <= 0: + continue + e = gap_overlap(r[0], r[0] + r[2]) + if e > 0: + stall[label(r[4])] += e + named = sum(stall.values()) + pure_idle = exp - named + total = exp or 1 + print(f"\n== EXPOSED {exp} cyc attributed (stall interval ∩ idle gap) ==") + print(f" {pure_idle:6d} cyc ({pure_idle*100//total:2d}%) ") for o, c in stall.most_common(15): - print(f" {c:6d} cyc ({c*100//tot_stall:2d}%) {o}") + print(f" {c:6d} cyc ({c*100//total:2d}%) {o}") if __name__ == "__main__": From df9f154560b28061e7a213056faccf825c795fdc Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 09:20:30 +0000 Subject: [PATCH 110/118] mfma-coverage skill: occupancy-only attribution with %exp + %all columns Drop the stall/blocking views entirely. For MFMA-bound speedup what matters is which non-MFMA ops steal issue bandwidth between MFMAs, so tile every EXPOSED (matrix-idle) cycle by the OCCUPYING instruction = its issue_dur + stall, intersected with the next_free idle gaps. Every idle cycle gets an owner (%exp sums ~100). Add a %all column (of the whole window incl. MFMA) = the real wall-clock lever. fp4_gemm_4wave (cyc/mfma 18.73, EXPOSED 14.4%): buffer_load 30%exp/4.3%all, readfirstlane 17%/2.5%, s_barrier 16%/2.3%, lgkmcnt 8%/1.2%, s_add 6%, ds_read 6%. Reads as: gather + readfirstlane + address arithmetic stealing issue slots. Co-Authored-By: Claude --- .../skills/mfma-coverage-analysis/SKILL.md | 123 ++++++++---------- .../scripts/mfma_coverage.py | 48 ++++--- 2 files changed, 80 insertions(+), 91 deletions(-) diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/mfma-coverage-analysis/SKILL.md index 55b4c2b6b..ce87dba35 100644 --- a/.claude/skills/mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/mfma-coverage-analysis/SKILL.md @@ -1,53 +1,42 @@ --- name: mfma-coverage-analysis -description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED %, then attributes exposed cycles by per-instruction STALL field intersected with the idle gaps (stall==0 ops and MFMA-hidden stall never count); the uncovered remainder is pure-idle scheduling slack. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED cycles, then tiles those idle cycles by OCCUPYING instruction (issue_dur + stall, intersected with the idle gaps) so the ranking says which non-MFMA ops steal issue bandwidth between MFMAs. Reports %exp and %all. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. --- # MFMA Coverage Analysis -## The model (user-validated, next_free pipeline) - -The matrix unit is a PIPELINE: each MFMA occupies ONE EXEC-cycle execute slot, but -consecutive MFMAs can **issue < EXEC apart** and still both be hidden (dense fp4 -MFMAs issue ~8 cyc apart yet each execute-slot is 16). Track `next_free` = the cycle -the unit becomes free: -- MFMA issues at `t <= next_free` → hidden (co-issued in the shadow); `next_free += EXEC` -- MFMA issues at `t > next_free` → the unit was IDLE for `t - next_free` → **EXPOSED** - -EXPOSED = sum of those idle gaps; shrink it toward 0 so cyc/mfma → EXEC (see -[[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). - -`next_free` gives the total EXPOSED % (matrix-unit idle fraction). It REPLACES the -older "union of `[issue, issue+EXEC)` windows" model, which capped overlapping -windows and over-reported exposure. - -## Attribution: STALL field ∩ idle gap (both filters matter) - -Each ATT wave row is `[cycle, issue_dur, STALL, total_dur, code_id]`. **`r[2]` is -the authoritative per-instruction stall.** Attribute EXPOSED cycles with TWO filters: - -1. **Only stall>0 ops block.** Ops with stall==0 (`ds_read_b128`, `s_add`) are pure - fill between MFMAs and never block — do NOT attribute by "which op sits in the - gap" (first/longest/occupancy geometry all mislabeled fill and gave contradictory - answers on the same trace: ds_read 33%, then s_add 34%, then buffer_load 30% — all wrong). -2. **Only the part of the stall overlapping a next_free GAP counts as exposed.** A - stall that overlaps MFMA execute is HIDDEN (the pipe is busy). Because MFMAs issue - ~8 cyc apart but each execute-slot is 16, several overlapping executes keep the - unit busy well past any single `[issue,issue+16)`; intersecting with the next_free - idle gaps handles this. (Skipping this over-reported lgkmcnt: raw stall 976 → - true-exposed 504.) - -Whatever exposed cycles no stalling instruction covers = **PURE IDLE** (scheduling / -dependency slack, not one op's fault) — usually the TOP bucket. - -Example (fp4_gemm_4wave, cyc/mfma 18.73, EXPOSED 14% = 6344 cyc): **pure-idle 72% + -s_barrier 15% + s_waitcnt(lgkmcnt) 7% + buffer_load 3% + s_waitcnt(vmcnt) 0%.** The -biggest lever is packing MFMAs tighter (pure-idle), not cutting any single op; the -per-op stalls are small once MFMA-hidden cycles are removed. - -So: an op that issues between MFMAs is only a problem if its `r[2]` stall > 0. -s_waitcnt is split into vmcnt / lgkmcnt so you can see whether VMEM or LDS waits -dominate (here: LDS/lgkmcnt, i.e. waiting on ds_read; VMEM already hidden). +## The model + +**Step 1 — EXPOSED via next_free (matrix-unit pipeline).** Each MFMA occupies ONE +EXEC-cycle execute slot, but consecutive MFMAs can **issue < EXEC apart** and still +both be hidden (dense fp4 MFMAs issue ~8 cyc apart yet each execute-slot is 16). +Track `next_free` = the cycle the unit becomes free: +- MFMA issues at `t <= next_free` → hidden; `next_free += EXEC` +- MFMA issues at `t > next_free` → unit IDLE for `t - next_free` → **EXPOSED** + +EXPOSED = sum of idle gaps; shrink toward 0 so cyc/mfma → EXEC (see +[[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). (This replaces an older +union-of-`[issue,issue+EXEC)` model that over-reported exposure.) + +**Step 2 — attribute EXPOSED by OCCUPANCY.** For every idle cycle, credit it to +whichever instruction was on the issue port then. Each non-MFMA instruction occupies +`[its issue, next instruction's issue)` = its issue_dur PLUS any stall (r[2]) — we do +NOT split issue vs stall, and do NOT ask "who blocks". The question is simply: while +the matrix unit sat idle, which non-MFMA ops were stealing issue bandwidth? Intersect +each op's occupancy with the idle gaps and sum. This tiles the whole EXPOSED window +(every idle cycle has an owner), so the ranking directly says which ops must be +REMOVED / SHRUNK from between the MFMAs to push cyc/mfma toward the floor. + +Two percent columns: **%exp** (of the EXPOSED cycles) and **%all** (of the whole +window incl. MFMA — the real wall-clock lever, since MFMA execute is ~85%+). + +Example (fp4_gemm_4wave, cyc/mfma 18.73, EXPOSED 6344 = 14.4% of全局): +`buffer_load_dwordx4 30%exp/4.3%all · v_readfirstlane 17%/2.5% · s_barrier 16%/2.3% · +s_waitcnt(lgkmcnt) 8%/1.2% · s_add_i32 6%/0.8% · ds_read_b128 6%/0.8% · …`. +Read it as: the exposed time is scale/g2s **gather + readfirstlane + address +arithmetic** stealing issue slots between MFMAs; cut their count/occupancy. +Row schema: `[cycle, issue_dur, stall, total_dur, code_id]`; s_waitcnt is split +vmcnt / lgkmcnt so you see whether VMEM or LDS waits dominate. EXEC is the MFMA **execute** latency, NOT issue latency: - fp4 `mfma_scale_f32_16x16x128_f8f6f4` → **16** @@ -65,33 +54,35 @@ python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py \ --range 219000,245000 --exec 16 ``` -Output: MFMA-covered %, EXPOSED %, cyc/mfma vs floor, then the exposed cycles split -into pure-idle + per-op (stall ∩ idle-gap) buckets. +Output: MFMA-covered %, EXPOSED % (and % of全局), cyc/mfma vs floor, then the exposed +cycles tiled by OCCUPYING instruction with two columns (%exp, %all). ## Reading it -- **pure-idle top** → the matrix unit is idle with NO stalling instruction there; - it's scheduling/dependency slack. Attack by packing MFMAs tighter (spread thunks - differently, interleave_stride, deepen prefetch so operands are ready earlier), - NOT by cutting one op. This is usually the biggest bucket once stalls are filtered. -- **Rank named ops by the stall column (`r[2]`) ∩ idle gap**, not by count or by which - op sits in a gap. An op with stall==0 is free; a stall overlapping MFMA execute is - hidden. Only stall>0 ∩ idle-gap cycles are real exposure. -- **s_barrier high** → the wave is waiting at the per-iter cross-wave sync (the - 4 waves finish the iter at slightly different times). Structural for a fixed wave - count; not cuttable without changing sync granularity / wave layout. -- **s_waitcnt(lgkmcnt) high** → waiting on LDS reads (ds_read). Move the producing - ds_read earlier / deepen the register prefetch so the value is ready. -- **s_waitcnt(vmcnt) high** → waiting on VMEM (global/g2s/scale gather). Deepen the - VMEM prefetch or relax the vmcnt bound. -- **buffer_load / readfirstlane with stall** → the load's own issue stalled, or the - v→s readfirstlane serialized; precompute wave-uniform values once (SGPR). +- **Attack the top occupancy ops** = the non-MFMA instructions eating the most idle + cycles between MFMAs. Reduce their COUNT or per-op occupancy so more MFMAs pack in: + fewer/cheaper address ops, precompute wave-uniform values once (kill readfirstlane), + merge/spread loads, deepen prefetch so a value is on the port earlier. +- **buffer_load / ds_read high** → too many gathers/reads issue between MFMAs; merge + (wider load), move to a different MFMA's shadow, or cut the count. +- **v_readfirstlane high** → v→s serialization; precompute the wave-uniform SGPR once + outside the loop instead of per-use. +- **s_add / s_and / v_cmp / s_lshl** (address & loop arithmetic) → recompute less; + hoist loop-invariants, use s_add increment chains, fold offsets into instruction + immediates. +- **s_barrier high** → per-iter cross-wave sync (4 waves finish the iter at slightly + different times). Structural for a fixed wave count; not cuttable without changing + sync granularity / wave layout. +- **s_waitcnt(lgkmcnt/vmcnt)** → LDS/VMEM waits; deepen the corresponding prefetch or + relax the count. Usually small once loads are hidden. ## Caveats - Uses one wave file (se0_sm0_sl0_wv0.json by default). Different waves are equivalent repeats; pass `--wave` to check another. -- Row schema: `[cycle, issue_dur, STALL, total_dur, code_id]`. `r[2]` (stall) is the - authoritative blocking metric; `code.json["code"][cid][0]` is the asm text. The - `next_free` pass gives EXPOSED %; the stall column gives the per-op ranking. (See - att-hotloop-benchmark for the complementary barrier-window cyc/mfma summary.) +- Occupancy tiles the EXPOSED window with no gaps (every idle cycle has an owner), so + %exp sums to ~100. It counts issue_dur + stall together on purpose — the goal is + "what steals issue bandwidth between MFMAs", not "who stalls". +- Row schema: `[cycle, issue_dur, stall, total_dur, code_id]`; + `code.json["code"][cid][0]` is the asm text. (See att-hotloop-benchmark for the + complementary barrier-window cyc/mfma summary.) diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py index 38c8621f8..574a1b54e 100644 --- a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py +++ b/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py @@ -95,18 +95,17 @@ def main(): print(f"MFMA-covered: {cov} ({cov*100//span}%) EXPOSED: {exp} ({exp*100//span}%)") print(f"cyc/mfma = {span/len(mfma):.2f} (floor = {E})") - # Attribute the EXPOSED cycles (matrix unit idle) to instructions. Two facts: - # 1. Row = [cycle, issue_dur, STALL(r[2]), total_dur, code_id]. r[2] is the real - # per-instruction stall. Ops with stall==0 (ds_read_b128, s_add) NEVER block. - # 2. A stall only COUNTS AS EXPOSED for the cycles the matrix unit was actually - # idle -- i.e. the stall interval [cycle, cycle+stall) intersected with a - # next_free GAP. A stall that overlaps MFMA execute is hidden (the pipe is - # busy). (MFMAs issue ~8 cyc apart but each execute-slot is 16, so several - # overlapping executes keep the unit busy well past any single [issue,issue+16); - # using the next_free gaps as the "idle" mask handles this correctly.) - # Whatever exposed cycles are NOT covered by any stalling instruction are PURE IDLE - # (scheduling gaps / dependency slack, not a single op's fault) -- usually the top - # bucket, and the target for tighter MFMA packing rather than cutting one op. + # OCCUPANCY attribution: for every EXPOSED cycle (matrix unit idle), credit it to + # whatever instruction was occupying the issue port then. Each non-MFMA instruction + # occupies [its issue, next instruction's issue) -- i.e. its issue_dur PLUS any + # stall (r[2]); we do NOT separate issue vs stall, we just ask "while the matrix + # unit sat idle, which op was on the port?". Intersect each op's occupancy span + # with the next_free idle gaps and sum. This tiles the whole EXPOSED window with no + # gaps (every idle cycle has an owner), so the ranking directly says: to push + # cyc/mfma toward the floor, which non-MFMA ops must be REMOVED / SHRUNK from + # between the MFMAs. (Stall-vs-issue and who-"blocks" views were dropped -- what + # matters for MFMA-bound speedup is total occupancy stealing issue bandwidth.) + # Row = [cycle, issue_dur, stall, total_dur, code_id]. def label(cid): t = code[cid][0].strip() if cid < len(code) else "?" o = op_of(code, cid) @@ -124,20 +123,19 @@ def gap_overlap(a, b): tot += min(g1, b) - max(g0, a) return tot - stall = collections.Counter() - for r in seg: - if op_of(code, r[4]).startswith("v_mfma") or len(r) < 3 or r[2] <= 0: - continue - e = gap_overlap(r[0], r[0] + r[2]) - if e > 0: - stall[label(r[4])] += e - named = sum(stall.values()) - pure_idle = exp - named + ni = [r for r in seg if not op_of(code, r[4]).startswith("v_mfma")] + ni.sort(key=lambda r: r[0]) + occ = collections.Counter() + for i, r in enumerate(ni): + nxt = ni[i + 1][0] if i + 1 < len(ni) else hi + c = gap_overlap(r[0], nxt) + if c: + occ[label(r[4])] += c total = exp or 1 - print(f"\n== EXPOSED {exp} cyc attributed (stall interval ∩ idle gap) ==") - print(f" {pure_idle:6d} cyc ({pure_idle*100//total:2d}%) ") - for o, c in stall.most_common(15): - print(f" {c:6d} cyc ({c*100//total:2d}%) {o}") + print(f"\n== EXPOSED {exp} cyc ({exp*100/span:.1f}% of全局) by occupying instruction ==") + print(f" {'cyc':>6} {'%exp':>5} {'%all':>5} op") + for o, c in occ.most_common(18): + print(f" {c:>6} {c*100//total:>4d}% {c*100/span:>4.1f}% {o}") if __name__ == "__main__": From 9b091b43d021e907776687e2d53491e10d9ad029 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 09:25:50 +0000 Subject: [PATCH 111/118] fp4_gemm_4wave: precompute g2s m0 base, drop per-load readfirstlane Same fix as the scale gather: the g2s step-0 m0 base was ptrtoint(lds)+wave_id* 1024 with wave_id a VGPR, forcing a readfirstlane per load (8/iter, ATT occupancy 17%exp / 2.5%all). set_wave_base() readfirstlanes the wave-uniform base once; _lds_base_sgpr adds the per-buffer compile-time byte_off with scalar arithmetic. Loop readfirstlane 8->0. cyc/mfma 18.73->18.06, EXPOSED 14.4%->11.4%. cos 0.999999. 4710 @ 8192^3, 5264 @ 16384^3 (GPU6, idle). Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 2258edb5d..7d6b2671e 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -122,10 +122,20 @@ def _step_stride(self): # (block is always 256 -> 4 waves) rather than the runtime block_dim value. return _N_WAVES__4 * 1024 + def set_wave_base(self, base_ptr): + # Precompute the wave-uniform LDS base (ptrtoint(base) + wave_id*1024) into an + # SGPR ONCE. _lds_base_sgpr then adds the per-buffer compile-time byte_off with + # scalar arithmetic, so the step-0 m0 needs NO per-load readfirstlane (was 8/ + # iter: the m0 base came from wave_id, a VGPR, forcing readfirstlane). + wb = fx.Int32(fx.ptrtoint(base_ptr)) + fx.Int32(self.wave_id * 1024) + self._wave_base_s = _rocdl.readfirstlane(_T.i32, arith._to_raw(wb)) + def _lds_base_sgpr(self, lds_dst): - # Step-0 LDS byte base (wave-uniform). Later steps add _step_stride to m0. - lds_base = fx.Int32(fx.ptrtoint(lds_dst.ptr)) + fx.Int32(self.wave_id * 1024) - return _uniform_i32(lds_base) + # Step-0 LDS byte base (wave-uniform) = precomputed wave base (SGPR) + this + # buffer's compile-time byte_off. Scalar -> no readfirstlane. Later steps add + # _step_stride to m0. + m0 = fx.Int32(self._wave_base_s) + fx.Int32(lds_dst.byte_off) + return arith._to_raw(m0) def _voffset(self, step): # Per-lane global byte offset = swizzle only (loop-invariant). The K-step @@ -689,6 +699,10 @@ def _gather_scale_thunks(k, slot): b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) # why??? a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A__4, wave_id) b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B__4, wave_id) + # Precompute the g2s wave-uniform LDS base into SGPR once (all 8 buffers share + # _base_ptr; per-buffer byte_off is compile-time) -> no per-load readfirstlane. + a_g2s.set_wave_base(_base_ptr) + b_g2s.set_wave_base(_base_ptr) a_s2r = S2RLoaderFp4(wave_i__0_1, N_TILES_A__4) b_s2r = S2RLoaderFp4(wave_j__0_1, N_TILES_B__4) store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A__4, N_TILES_B__4, mn_aligned=mn_aligned) From 79d9c86c242f5c96758db8d69217d46fd3f5c001 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 09:52:19 +0000 Subject: [PATCH 112/118] fp4_gemm_4wave: restore clean identifier names (drop __N value-annotation suffixes) Session scratch had annotated identifiers with __ suffixes (BLOCK_M__256, N_TILES_A__4, ...). The BLOCK_M__256 / BLOCK_N__256 ones were keyword parameters of compile_fp4_gemm_4w, so the __N suffix broke the public API -- the upstream test tests/kernels/test_fp4_gemm_4wave.py calls compile_fp4_gemm_4w(BLOCK_M=..., BLOCK_N=...) and failed with "unexpected keyword argument". Strip all __N suffixes back to clean names and black-format. Upstream fp4 test now passes (2/2), cos 0.999999. Co-Authored-By: Claude --- kernels/fp4_gemm_4wave.py | 251 +++++++++++++++++++------------------- 1 file changed, 127 insertions(+), 124 deletions(-) diff --git a/kernels/fp4_gemm_4wave.py b/kernels/fp4_gemm_4wave.py index 7d6b2671e..e016a4613 100644 --- a/kernels/fp4_gemm_4wave.py +++ b/kernels/fp4_gemm_4wave.py @@ -42,7 +42,7 @@ wait_barrier, ) -_N_WAVES__4 = 4 # block is always 256 threads -> 4 waves (compile-time constant) +_N_WAVES = 4 # block is always 256 threads -> 4 waves (compile-time constant) class _Buf: @@ -108,19 +108,19 @@ class G2SLoaderAsm: the K-step offset is the scalar soffset operand (hardware-free add). """ - def __init__(self, rsrc, gl_offsets, n_load_steps__4, wave_id): + def __init__(self, rsrc, gl_offsets, n_load_steps, wave_id): self.rsrc = arith._to_raw(rsrc) self.gl_offsets = gl_offsets - self.n_load_steps__4 = n_load_steps__4 + self.n_load_steps = n_load_steps self.wave_id = wave_id - self.n_waves__0_4 = fx.block_dim.x // 64 + self.n_waves = fx.block_dim.x // 64 @property def _step_stride(self): # m0 (LDS byte) advance between consecutive steps of one load. Must be a # Python int (baked into the asm string), so use the compile-time wave count # (block is always 256 -> 4 waves) rather than the runtime block_dim value. - return _N_WAVES__4 * 1024 + return _N_WAVES * 1024 def set_wave_base(self, base_ptr): # Precompute the wave-uniform LDS base (ptrtoint(base) + wave_id*1024) into an @@ -164,7 +164,7 @@ def _emit(self, lds_dst, k_offset, step): _asm_void([voff, self.rsrc, soff], asm, "v,s,s") def load(self, lds_dst, k_offset): - for step in range_constexpr(self.n_load_steps__4): + for step in range_constexpr(self.n_load_steps): self._emit(lds_dst, k_offset, step) def load_one(self, lds_dst, k_offset, step): @@ -416,10 +416,10 @@ def _mfma_agpr(self, a_op, b_op, acc, sa_v, sb_v, ksub, ia, jb): # With depth-2 prefetch AND an unroll-by-2 main loop, up to 4 K-steps are live at # once (read[kk], read[kk+1], gather[kk+2], gather[kk+3]), so 4 slots are needed # to avoid one being overwritten before its read (3 slots -> nan). 4*8192 = 32 KB. -_SCALE_WAVE_BYTES__2048 = 2048 -_SCALE_SLOT_BYTES__8192 = _N_WAVES__4 * _SCALE_WAVE_BYTES__2048 # 8192 -_SCALE_SLOTS__4 = 4 -_SCALE_LDS_BYTES__32768 = _SCALE_SLOTS__4 * _SCALE_SLOT_BYTES__8192 # 32 KB +_SCALE_WAVE_BYTES = 2048 +_SCALE_SLOT_BYTES = _N_WAVES * _SCALE_WAVE_BYTES # 8192 +_SCALE_SLOTS = 4 +_SCALE_LDS_BYTES = _SCALE_SLOTS * _SCALE_SLOT_BYTES # 32 KB _SCALE_A_REGION = 0 _SCALE_B_REGION = 1024 @@ -455,8 +455,10 @@ def __init__(self, scale_arg, n_tiles, K, lane_id, wave_id, lds_base_ptr, region self._lds_base = fx.Int32(fx.ptrtoint(lds_base_ptr)) def _slot_wave_byte(self, slot): - return self._lds_base + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES__8192) + fx.Int32( - self.wave_id * _SCALE_WAVE_BYTES__2048 + self.region_off + return ( + self._lds_base + + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES) + + fx.Int32(self.wave_id * _SCALE_WAVE_BYTES + self.region_off) ) def set_wave_base(self): @@ -464,7 +466,7 @@ def set_wave_base(self): into an SGPR ONCE via a single readfirstlane. gather() then computes m0 = wave_base_s + slot*8192 with scalar arithmetic, so the "s" constraint on m0 needs NO per-gather readfirstlane (was 4/iter: one per A/B gather per step).""" - wave_base = self._lds_base + fx.Int32(self.wave_id * _SCALE_WAVE_BYTES__2048 + self.region_off) + wave_base = self._lds_base + fx.Int32(self.wave_id * _SCALE_WAVE_BYTES + self.region_off) self._wave_base_s = _rocdl.readfirstlane(_T.i32, arith._to_raw(wave_base)) # soffset=0 as a wave-uniform SGPR (readfirstlane'd once, reused every gather). self._soff0 = _uniform_i32(fx.Int32(0)) @@ -482,7 +484,7 @@ def gather(self, kstep, slot, base_tile): i32_off = grp * fx.Int32(self.row_i32) + fx.Int32(kstep) * fx.Int32(64) + self._in16 * fx.Int32(4) voff = arith._to_raw(i32_off * fx.Int32(4)) # bytes # m0 = precomputed wave base (SGPR) + slot*8192 (scalar): no readfirstlane. - m0 = arith._to_raw(fx.Int32(self._wave_base_s) + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES__8192)) + m0 = arith._to_raw(fx.Int32(self._wave_base_s) + fx.Int32(slot) * fx.Int32(_SCALE_SLOT_BYTES)) asm = "s_mov_b32 m0, $0\nbuffer_load_dwordx4 $1, $2, $3 offen lds" _asm_void([m0, voff, self.rsrc, self._soff0], asm, "s,v,s,s") @@ -556,8 +558,8 @@ def store(self, c_frag, base_row, base_col): def compile_fp4_gemm_4w( *, K: int, - BLOCK_M__256: int = 256, - BLOCK_N__256: int = 256, + BLOCK_M: int = 256, + BLOCK_N: int = 256, use_xcd_remap: bool = True, mn_aligned: bool = False, ): @@ -566,24 +568,24 @@ def compile_fp4_gemm_4w( # 256 v_cmp+v_cndmask/wave). Leave False for arbitrary M/N (correctness via the # explicit bounds select). Common alignment-fast-path optimization. # 256 fp4 per LDS K-step row = 128 bytes; reuse fp8's 128-byte LDS layout. - BLOCK_K__256 = 256 # fp4 elements - BLOCK_K_BYTES__128 = BLOCK_K__256 // 2 # 128 bytes / row - LDS_BLOCK_M__128 = BLOCK_M__256 // 2 - LDS_BLOCK_N__128 = BLOCK_N__256 // 2 + BLOCK_K = 256 # fp4 elements + BLOCK_K_BYTES = BLOCK_K // 2 # 128 bytes / row + LDS_BLOCK_M = BLOCK_M // 2 + LDS_BLOCK_N = BLOCK_N // 2 - assert BLOCK_M__256 % 64 == 0 and BLOCK_N__256 % 64 == 0 - assert K % BLOCK_K__256 == 0 + assert BLOCK_M % 64 == 0 and BLOCK_N % 64 == 0 + assert K % BLOCK_K == 0 - K_ITERS = K // BLOCK_K__256 - N_TILES_A__4 = BLOCK_M__256 // 4 // 16 - N_TILES_B__4 = BLOCK_N__256 // 4 // 16 - N_ACCUMS__16 = N_TILES_A__4 * N_TILES_B__4 - assert N_ACCUMS__16 > 0 + K_ITERS = K // BLOCK_K + N_TILES_A = BLOCK_M // 4 // 16 + N_TILES_B = BLOCK_N // 4 // 16 + N_ACCUMS = N_TILES_A * N_TILES_B + assert N_ACCUMS > 0 - N_LDS_ROUNDS__4 = max(N_TILES_A__4, N_TILES_B__4) + N_LDS_ROUNDS = max(N_TILES_A, N_TILES_B) - a_lds_size__16384 = LDS_BLOCK_M__128 * BLOCK_K_BYTES__128 - b_lds_size__16384 = LDS_BLOCK_N__128 * BLOCK_K_BYTES__128 + a_lds_size = LDS_BLOCK_M * BLOCK_K_BYTES + b_lds_size = LDS_BLOCK_N * BLOCK_K_BYTES # One contiguous LDS array (single static `make_ptr` -> single `@__shared_alloc` # symbol), NOT 8 independent leaf fields. With one base symbol every cross-buffer @@ -594,13 +596,13 @@ def compile_fp4_gemm_4w( # writes and the ds_reads, so it would insert a spurious `s_waitcnt vmcnt(0)` # before every ds_read -- which is why g2s uses inline-asm buffer_load (see # G2SLoaderAsm) so LLVM sees no LDS write and emits no drain. - assert a_lds_size__16384 == b_lds_size__16384 - _lds_buf__16384 = a_lds_size__16384 # 16KB; 8 buffers laid out contiguously # 128KB + assert a_lds_size == b_lds_size + _lds_buf = a_lds_size # 16KB; 8 buffers laid out contiguously # 128KB @fx.struct class SharedStorage: - all_lds: fx.Array[fx.Int8, 8 * _lds_buf__16384, 16] - scale_lds: fx.Array[fx.Int8, _SCALE_LDS_BYTES__32768, 16] + all_lds: fx.Array[fx.Int8, 8 * _lds_buf, 16] + scale_lds: fx.Array[fx.Int8, _SCALE_LDS_BYTES, 16] @flyc.kernel def kernel_gemm( @@ -611,7 +613,7 @@ def kernel_gemm( _base_ptr = lds.all_lds.ptr def _buf(idx): - return _Buf(_base_ptr, idx * _lds_buf__16384) + return _Buf(_base_ptr, idx * _lds_buf) a_cur0 = _buf(0) a_cur1 = _buf(1) @@ -625,48 +627,48 @@ def _buf(idx): lane_id = fx.thread_idx.x % 64 wave_id = fx.thread_idx.x // 64 - n_blocks = ceildiv(c_n, BLOCK_N__256) + n_blocks = ceildiv(c_n, BLOCK_N) if const_expr(use_xcd_remap): - tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M__256), n_blocks) + tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M), n_blocks) else: tile_i, tile_j = divmod(fx.block_idx.x, n_blocks) - wave_i__0_1 = wave_id // 2 - wave_j__0_1 = wave_id % 2 + wave_i = wave_id // 2 + wave_j = wave_id % 2 # Global byte offsets (fp4 packed: K bytes = K // 2). K_BYTES = K // 2 - A0_gl_offset = (tile_i * BLOCK_M__256) * K_BYTES - A1_gl_offset = (tile_i * BLOCK_M__256 + LDS_BLOCK_M__128) * K_BYTES - A_K_STEP = BLOCK_K_BYTES__128 - B0_gl_offset = (tile_j * BLOCK_N__256) * K_BYTES - B1_gl_offset = (tile_j * BLOCK_N__256 + LDS_BLOCK_N__128) * K_BYTES + A0_gl_offset = (tile_i * BLOCK_M) * K_BYTES + A1_gl_offset = (tile_i * BLOCK_M + LDS_BLOCK_M) * K_BYTES + A_K_STEP = BLOCK_K_BYTES + B0_gl_offset = (tile_j * BLOCK_N) * K_BYTES + B1_gl_offset = (tile_j * BLOCK_N + LDS_BLOCK_N) * K_BYTES # B is preshuffled (16,16): one N-16 row-block spans 2*1024 bytes per # K-step (same constant fp8_gemm_4wave uses for b_preshuffled). B_K_STEP = 2 * 1024 - mfma = Mfma16x16x128Fp4(N_TILES_A__4, N_TILES_B__4) + mfma = Mfma16x16x128Fp4(N_TILES_A, N_TILES_B) # Scale via dwordx4...lds gather + ds_read (see ScaleLoaderLDS). One gather # per operand per K-step into a triple-buffered scale-LDS slot; read[kc] / # gather[kc+2] use slots kc%3 / (kc+2)%3 (3 distinct -> race-free). _scale_base_ptr = lds.scale_lds.ptr - a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) - b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B__4, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) + a_scale_ld = ScaleLoaderLDS(A_scale, N_TILES_A, K, lane_id, wave_id, _scale_base_ptr, _SCALE_A_REGION) + b_scale_ld = ScaleLoaderLDS(B_scale, N_TILES_B, K, lane_id, wave_id, _scale_base_ptr, _SCALE_B_REGION) # Precompute each loader's wave-uniform LDS base into an SGPR once, so the # per-gather m0 needs no readfirstlane (was 4/iter -> exposed ~19% in ATT). a_scale_ld.set_wave_base() b_scale_ld.set_wave_base() - base_row = tile_i * BLOCK_M__256 + wave_i__0_1 * (N_TILES_A__4 * 16) - base_col = tile_j * BLOCK_N__256 + wave_j__0_1 * (N_TILES_B__4 * 16) + base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) + base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) sa_R0 = base_row - sa_R1 = base_row + LDS_BLOCK_M__128 + sa_R1 = base_row + LDS_BLOCK_M sb_C0 = base_col - sb_C1 = base_col + LDS_BLOCK_N__128 + sb_C1 = base_col + LDS_BLOCK_N def _slot(k): - return fx.Int32(k) % fx.Int32(_SCALE_SLOTS__4) + return fx.Int32(k) % fx.Int32(_SCALE_SLOTS) def _gather_scales(k, slot): """Issue the 2 dwordx4...lds gathers (A, B) for K-step ``k`` into LDS @@ -685,27 +687,27 @@ def _gather_scale_thunks(k, slot): ] # Accumulators: 2x2 64x64 quadrants per wave. - c00_frag = [mfma.zero_value] * N_ACCUMS__16 - c01_frag = [mfma.zero_value] * N_ACCUMS__16 - c10_frag = [mfma.zero_value] * N_ACCUMS__16 - c11_frag = [mfma.zero_value] * N_ACCUMS__16 + c00_frag = [mfma.zero_value] * N_ACCUMS + c01_frag = [mfma.zero_value] * N_ACCUMS + c10_frag = [mfma.zero_value] * N_ACCUMS + c11_frag = [mfma.zero_value] * N_ACCUMS - gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS__4, preshuffled=False) - gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS__4, preshuffled=True) + gl_off_a = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=False) + gl_off_b = compute_global_swizzle(lane_id, wave_id, K_BYTES, N_LDS_ROUNDS, preshuffled=True) # Inline-asm g2s (see G2SLoaderAsm): needs the raw buffer resource. Build it # once from the i8 buffer tensor (max_size OOB check; all addresses in-bounds). - a_rsrc = _buffer_ops.create_buffer_resource(A, max_size=True) # why max size here... - b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) # why??? - a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A__4, wave_id) - b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B__4, wave_id) + a_rsrc = _buffer_ops.create_buffer_resource(A, max_size=True) # why max size here... + b_rsrc = _buffer_ops.create_buffer_resource(B_T, max_size=True) # why??? + a_g2s = G2SLoaderAsm(a_rsrc, gl_off_a, N_TILES_A, wave_id) + b_g2s = G2SLoaderAsm(b_rsrc, gl_off_b, N_TILES_B, wave_id) # Precompute the g2s wave-uniform LDS base into SGPR once (all 8 buffers share # _base_ptr; per-buffer byte_off is compile-time) -> no per-load readfirstlane. a_g2s.set_wave_base(_base_ptr) b_g2s.set_wave_base(_base_ptr) - a_s2r = S2RLoaderFp4(wave_i__0_1, N_TILES_A__4) - b_s2r = S2RLoaderFp4(wave_j__0_1, N_TILES_B__4) - store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A__4, N_TILES_B__4, mn_aligned=mn_aligned) + a_s2r = S2RLoaderFp4(wave_i, N_TILES_A) + b_s2r = S2RLoaderFp4(wave_j, N_TILES_B) + store_c = StoreCFp4(C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B, mn_aligned=mn_aligned) # Prologue. Scale gathers for step 0/1/2 go FIRST (before the 32 g2s) so they # are the OLDEST outstanding VMEM -- the main loop's wait_barrier(17) then @@ -717,8 +719,8 @@ def _gather_scale_thunks(k, slot): _gather_scales(1, _slot(1)) _gather_scales(2, _slot(2)) - a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) # 4个load. - b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) # 4个... + a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) # 4个load. + b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) # 4个... b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) a_g2s.load(a_cur1, A1_gl_offset + 0 * A_K_STEP) @@ -730,9 +732,9 @@ def _gather_scale_thunks(k, slot): def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): return mfma.call(a_frag, b_frag, c_frag, sa_ksub, sb_ksub) - wait_barrier((3 * N_TILES_A__4) + (4 * N_TILES_B__4)) + wait_barrier((3 * N_TILES_A) + (4 * N_TILES_B)) a0_frag = a_s2r.load(a_cur0) - wait_barrier((3 * N_TILES_A__4) + (3 * N_TILES_B__4)) + wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) b0_frag = b_s2r.load(b_cur0, preshuffled=True) # Initial VGPR scale carry = scale[0] (gathered first in prologue, landed by @@ -742,7 +744,6 @@ def _do_quad(a_frag, b_frag, c_frag, sa_ksub, sb_ksub): sc0_sbC0, sc0_sbC1 = b_scale_ld.read(_slot(0)) sc0 = (sc0_saR0, sc0_saR1, sc0_sbC0, sc0_sbC1) - # Main-loop wait_barrier vmcnt. g2s and scale gathers are inline-asm so the # compiler uses our literal vmcnt verbatim. With depth-2 end-of-step scale, # the scale[kc] gather (issued 2 steps ago) is the oldest outstanding VMEM at @@ -791,10 +792,10 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): c00f, c01f, c10f, c11f = accs kc_i = fx.Int32(kc) - _b1 = [None] * N_TILES_B__4 - _a1 = [None] * N_TILES_A__4 - _a0n = [None] * N_TILES_A__4 - _b0n = [None] * N_TILES_B__4 + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A + _a0n = [None] * N_TILES_A + _b0n = [None] * N_TILES_B # This step prefetches K-step (kc+2) for g2s. a*_off = base + (kc+2)*STEP. ak = (kc_i + fx.Int32(2)) * fx.Int32(A_K_STEP) bk = (kc_i + fx.Int32(2)) * fx.Int32(B_K_STEP) @@ -815,16 +816,14 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): wait_barrier(_MAIN_VMCNT) il = ( - _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A__4) - + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B__4, True) - + _rd_scn[:2] + _g2s_thunks(a_g2s, ac0, a0_off, N_TILES_A) + _s2r_thunks(b_s2r, bc1, _b1, N_TILES_B, True) + _rd_scn[:2] ) c00f = mfma.call(a0f, b0f, c00f, saR0, sbC0, interleave=il, interleave_stride=2) b1f = _b1 il = ( - _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A__4) - + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A__4, False) + _g2s_thunks(b_g2s, bc0, b0_off, N_TILES_A) + + _s2r_thunks(a_s2r, ac1, _a1, N_TILES_A, False) + _rd_scn[2:] ) c01f = mfma.call(a0f, b1f, c01f, saR0, sbC1, interleave=il, interleave_stride=2) @@ -832,16 +831,16 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): wait_barrier(_MAIN_VMCNT) il = ( - _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A__4) - + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A__4, False) + _g2s_thunks(b_g2s, bc1, b1_off, N_TILES_A) + + _s2r_thunks(a_s2r, an0, _a0n, N_TILES_A, False) + _sc_gather[:1] ) c10f = mfma.call(a1f, b0f, c10f, saR1, sbC0, interleave=il, interleave_stride=2) a0nf = _a0n il = ( - _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A__4) - + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B__4, True) + _g2s_thunks(a_g2s, ac1, a1_off, N_TILES_A) + + _s2r_thunks(b_s2r, bn0, _b0n, N_TILES_B, True) + _sc_gather[1:] ) c11f = mfma.call(a1f, b1f, c11f, saR1, sbC1, interleave=il, interleave_stride=2) @@ -852,10 +851,10 @@ def _one_step(kc, a0f, b0f, sc, accs, bufs): return a0nf, b0nf, sc_next, (c00f, c01f, c10f, c11f), new_bufs bufs0 = (a_cur0, a_cur1, a_next0, a_next1, b_cur0, b_cur1, b_next0, b_next1) - n_a = 2 * N_TILES_A__4 - n_b = 2 * N_TILES_B__4 - n_ga = N_TILES_A__4 // _FP4_PACK # scale groups per A half (=len(saR0)) - n_gb = N_TILES_B__4 // _FP4_PACK + n_a = 2 * N_TILES_A + n_b = 2 * N_TILES_B + n_ga = N_TILES_A // _FP4_PACK # scale groups per A half (=len(saR0)) + n_gb = N_TILES_B // _FP4_PACK n_sc = 2 * n_ga + 2 * n_gb # sc = (saR0,saR1,sbC0,sbC1) flattened _R = arith._to_raw @@ -865,10 +864,14 @@ def _flat_sc(sc): def _unflat_sc(flat): o = 0 - saR0 = list(flat[o : o + n_ga]); o += n_ga - saR1 = list(flat[o : o + n_ga]); o += n_ga - sbC0 = list(flat[o : o + n_gb]); o += n_gb - sbC1 = list(flat[o : o + n_gb]); o += n_gb + saR0 = list(flat[o : o + n_ga]) + o += n_ga + saR1 = list(flat[o : o + n_ga]) + o += n_ga + sbC0 = list(flat[o : o + n_gb]) + o += n_gb + sbC1 = list(flat[o : o + n_gb]) + o += n_gb return (saR0, saR1, sbC0, sbC1) # Carry = a0/b0 fragments + VGPR scale carry (scale[kc]) + 4 accumulator groups. @@ -883,20 +886,20 @@ def _unflat_sc(flat): ) for kk, state in range(0, K_ITERS - 2, 2, init=init_state): off = 0 - a0f = _unflat_frag(state[off : off + n_a], N_TILES_A__4) + a0f = _unflat_frag(state[off : off + n_a], N_TILES_A) off += n_a - b0f = _unflat_frag(state[off : off + n_b], N_TILES_B__4) + b0f = _unflat_frag(state[off : off + n_b], N_TILES_B) off += n_b sc = _unflat_sc(state[off : off + n_sc]) off += n_sc - c00f = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c01f = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c10f = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c11f = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 + c00f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c01f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c10f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c11f = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS accs = (c00f, c01f, c10f, c11f) # step kk @@ -917,43 +920,43 @@ def _unflat_sc(flat): # unpack final state back into the named vars the tail uses off = 0 - a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A__4) + a0_frag = _unflat_frag(state[off : off + n_a], N_TILES_A) off += n_a - b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B__4) + b0_frag = _unflat_frag(state[off : off + n_b], N_TILES_B) off += n_b # VGPR carry at loop exit = scale[K_ITERS-2] (each iter advances sc by 2). sc = _unflat_sc(state[off : off + n_sc]) off += n_sc - c00_frag = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c01_frag = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c10_frag = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 - c11_frag = list(state[off : off + N_ACCUMS__16]) - off += N_ACCUMS__16 + c00_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c01_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c10_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS + c11_frag = list(state[off : off + N_ACCUMS]) + off += N_ACCUMS # Tail step K_ITERS - 2: scale[K_ITERS-2] is the carried VGPR sc (no read). # Read scale[K_ITERS-1] into the next carry in the c00 MFMA shadow. saR0, saR1, sbC0, sbC1 = sc _scn = [None, None, None, None] _rd_scn = _read_scale_thunks(fx.Int32(K_ITERS - 1), _scn) - _b1 = [None] * N_TILES_B__4 - _a1 = [None] * N_TILES_A__4 - wait_barrier((2 * N_TILES_A__4) + (2 * N_TILES_B__4)) + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A + wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) il = ( - _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) - + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) + _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) + _rd_scn ) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il, interleave_stride=2) b1_frag = _b1 a1_frag = _a1 c01_frag = mfma.call(a0_frag, b1_frag, c01_frag, saR0, sbC1) - _a0n = [None] * N_TILES_A__4 - _b0n = [None] * N_TILES_B__4 - wait_barrier((1 * N_TILES_A__4) + (1 * N_TILES_B__4)) - il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A__4, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B__4, True) + _a0n = [None] * N_TILES_A + _b0n = [None] * N_TILES_B + wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) + il = _s2r_thunks(a_s2r, a_next0, _a0n, N_TILES_A, False) + _s2r_thunks(b_s2r, b_next0, _b0n, N_TILES_B, True) c10_frag = mfma.call(a1_frag, b0_frag, c10_frag, saR1, sbC0, interleave=il, interleave_stride=2) c11_frag = mfma.call(a1_frag, b1_frag, c11_frag, saR1, sbC1) a0_frag = _a0n @@ -965,11 +968,11 @@ def _unflat_sc(flat): b_cur1, b_next1 = b_next1, b_cur1 # Tail step K_ITERS - 1: scale[K_ITERS-1] read into the carry above. - _b1 = [None] * N_TILES_B__4 - _a1 = [None] * N_TILES_A__4 + _b1 = [None] * N_TILES_B + _a1 = [None] * N_TILES_A wait_barrier(0) saR0, saR1, sbC0, sbC1 = (_scn[0], _scn[1], _scn[2], _scn[3]) - il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B__4, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A__4, False) + il = _s2r_thunks(b_s2r, b_cur1, _b1, N_TILES_B, True) + _s2r_thunks(a_s2r, a_cur1, _a1, N_TILES_A, False) c00_frag = mfma.call(a0_frag, b0_frag, c00_frag, saR0, sbC0, interleave=il, interleave_stride=2) b1_frag = _b1 a1_frag = _a1 @@ -993,7 +996,7 @@ def launch_gemm( c_n: fx.Int32, stream: fx.Stream, ): - grid_x = ceildiv(c_m, BLOCK_M__256) * ceildiv(c_n, BLOCK_N__256) + grid_x = ceildiv(c_m, BLOCK_M) * ceildiv(c_n, BLOCK_N) kernel_gemm( A, B_T, From 170b1f2fbc6f0a8e93c01245eac365392677d6d8 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 10:16:09 +0000 Subject: [PATCH 113/118] add --- .../SKILL.md | 2 +- .../scripts/mfma_coverage.py | 0 .claude/skills/att-hotloop-benchmark/SKILL.md | 199 -- .../att-hotloop-benchmark/agents/openai.yaml | 4 - .../scripts/att_hotloop_cycles.py | 198 -- .../skills/bufferload-cycle-table/SKILL.md | 60 - .../scripts/bufferload_table.py | 87 - .claude/skills/hotloop-table/SKILL.md | 63 - .../hotloop-table/scripts/hotloop_table.py | 126 - .../skills/kernel-dataflow-schedule/SKILL.md | 93 - bench.py | 421 --- bench_flydsl_16384.py | 467 --- bench_small_bm16.py | 159 - bm_128_moe.py | 142 - gpu_select.py | 205 -- kernels/hgemm_splitk.py | 987 +----- kimi_fp4_moe_16384.py | 1809 ----------- kimi_fp4_moe_16384_opt.py | 2709 ---------------- kimi_fp4_moe_16384_opt_bm128_bn512.py | 2750 ---------------- kimi_fp4_moe_16384_opt_bm128_bn512_all.py | 2777 ---------------- kimi_fp4_moe_16384_opt_bm128_storemask.py | 2726 ---------------- kimi_fp4_moe_16384_opt_bm128p64.py | 2787 ----------------- kimi_fp4_moe_16384_opt_bm96.py | 2760 ---------------- kimi_fp4_moe_16384_opt_simplify.py | 2682 ---------------- kimi_fp4_moe_small_bm16.py | 2053 ------------ profile_flydsl_16384.py | 468 --- profile_small_bm16.py | 454 --- 27 files changed, 125 insertions(+), 27063 deletions(-) rename .claude/skills/{mfma-coverage-analysis => 4wave-mfma-coverage-analysis}/SKILL.md (99%) rename .claude/skills/{mfma-coverage-analysis => 4wave-mfma-coverage-analysis}/scripts/mfma_coverage.py (100%) delete mode 100644 .claude/skills/att-hotloop-benchmark/SKILL.md delete mode 100644 .claude/skills/att-hotloop-benchmark/agents/openai.yaml delete mode 100755 .claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py delete mode 100644 .claude/skills/bufferload-cycle-table/SKILL.md delete mode 100644 .claude/skills/bufferload-cycle-table/scripts/bufferload_table.py delete mode 100644 .claude/skills/hotloop-table/SKILL.md delete mode 100644 .claude/skills/hotloop-table/scripts/hotloop_table.py delete mode 100644 .claude/skills/kernel-dataflow-schedule/SKILL.md delete mode 100644 bench.py delete mode 100644 bench_flydsl_16384.py delete mode 100644 bench_small_bm16.py delete mode 100644 bm_128_moe.py delete mode 100644 gpu_select.py delete mode 100644 kimi_fp4_moe_16384.py delete mode 100644 kimi_fp4_moe_16384_opt.py delete mode 100644 kimi_fp4_moe_16384_opt_bm128_bn512.py delete mode 100644 kimi_fp4_moe_16384_opt_bm128_bn512_all.py delete mode 100644 kimi_fp4_moe_16384_opt_bm128_storemask.py delete mode 100644 kimi_fp4_moe_16384_opt_bm128p64.py delete mode 100644 kimi_fp4_moe_16384_opt_bm96.py delete mode 100644 kimi_fp4_moe_16384_opt_simplify.py delete mode 100644 kimi_fp4_moe_small_bm16.py delete mode 100644 profile_flydsl_16384.py delete mode 100644 profile_small_bm16.py diff --git a/.claude/skills/mfma-coverage-analysis/SKILL.md b/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md similarity index 99% rename from .claude/skills/mfma-coverage-analysis/SKILL.md rename to .claude/skills/4wave-mfma-coverage-analysis/SKILL.md index ce87dba35..365d549c7 100644 --- a/.claude/skills/mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md @@ -1,5 +1,5 @@ --- -name: mfma-coverage-analysis +name: 4wave-mfma-coverage-analysis description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED cycles, then tiles those idle cycles by OCCUPYING instruction (issue_dur + stall, intersected with the idle gaps) so the ranking says which non-MFMA ops steal issue bandwidth between MFMAs. Reports %exp and %all. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. --- diff --git a/.claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py b/.claude/skills/4wave-mfma-coverage-analysis/scripts/mfma_coverage.py similarity index 100% rename from .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py rename to .claude/skills/4wave-mfma-coverage-analysis/scripts/mfma_coverage.py diff --git a/.claude/skills/att-hotloop-benchmark/SKILL.md b/.claude/skills/att-hotloop-benchmark/SKILL.md deleted file mode 100644 index 51a32a998..000000000 --- a/.claude/skills/att-hotloop-benchmark/SKILL.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -name: att-hotloop-benchmark -description: Capture and analyze ROCm rocprofv3 Advanced Thread Trace (ATT) for FlyDSL or AMD GPU kernels, especially when the user asks to dump hot-loop cycles, compare kernel schedules using barrier-to-barrier cycle counts, inspect dispatch ATT traces, report MFMA utilization from hot-loop cycles, or use ATT rather than wall-clock TFLOPS as the benchmark. ---- - -# ATT Hotloop Benchmark - -## Goal - -Use ATT as the primary benchmark for scheduling work. Prefer cycle windows from the ATT UI output over wall-clock microbenchmarks when the user is optimizing hot loops, MFMA/VMEM/DSRD interleaving, waitcnt stalls, or barrier-to-barrier loop bodies. - -## Capture Workflow - -0. Pick an idle GPU first with `gpu_select.py` (repo root), then bind it for every - subsequent command. ATT capture is invalid if another process shares the CU. - -```bash -GPU=$(python3 -c "import gpu_select; print(gpu_select.select_empty_gpu().index)") -echo "selected GPU $GPU" -export HIP_VISIBLE_DEVICES=$GPU -``` - -Prefer a long-K shape so the steady-state hot loop dominates over prologue/tail -(e.g. fp8_gemm_4wave reaches ~3000 TFLOPS at 8192x8192x16384 vs ~2380 at -5120x5120x8320). Use the same shape for capture and for any before/after compare. - -1. Build or run the target once with debug info and dumps enabled so source lines and ISA are available: - -```bash -FLYDSL_RUNTIME_ENABLE_CACHE=0 \ -FLYDSL_DUMP_IR=1 \ -FLYDSL_DUMP_DIR=resource_inspect/ \ -FLYDSL_DEBUG_ENABLE_DEBUG_INFO=1 \ - -``` - -2. Capture ATT with `rocprofv3`. Use a narrow `kernel_include_regex`, keep only 1-2 iterations, and enable UI-compatible CSV output: - -```bash -cat >/tmp/att.yaml <<'YAML' -jobs: - - kernel_include_regex: - kernel_iteration_range: "[1, [1-2]]" - output_file: att - output_directory: profiler_traces_grid/ - output_format: [csv] - truncate_kernels: true - sys_trace: true - advanced_thread_trace: true - att_target_cu: 1 - att_shader_engine_mask: "0xf" - att_simd_select: "0xf" - att_buffer_size: "0x6000000" -YAML - -FLYDSL_RUNTIME_ENABLE_CACHE=0 \ -FLYDSL_DEBUG_ENABLE_DEBUG_INFO=1 \ -rocprofv3 -i /tmp/att.yaml -- -``` - -3. Locate the UI output directory: - -```bash -find profiler_traces_grid/ -maxdepth 2 -type d -name 'ui_output_agent_*_dispatch_*' -``` - -### Which dispatch to open - -There are usually several `dispatch_` dirs (one per kernel launch in the -`kernel_iteration_range`, e.g. `--iters 2` -> two dispatches). **They are -equivalent repeats of the same kernel** — pick any *valid* one and tell the user -exactly which you used. A dispatch is valid iff `--list-barriers` returns a -non-zero barrier count (and the same count across dispatches); skip any whose -`code.json` is empty/`null` (it yields 0 barriers / unparseable output). Default -to the lowest-numbered valid dispatch. When handing a zip to the user, name the -single dispatch+wave to open so they don't have to guess. - -## Hot-Loop Cycle Policy - -Use one wave JSON file from the selected dispatch directory, usually `se*_sm*_sl*_wv0.json` or the wave with the most instructions. Treat `s_barrier` timestamps as loop boundaries when the kernel synchronizes once per outer loop. - -For stable comparisons: - -- Prefer a middle barrier window, for example barrier 30 to barrier 50, instead of loop-top setup or tail loops. -- Report `total_cycles`, `cycles_per_loop`, start/end barrier ordinals, and start/end cycles. -- Also report instruction mix inside the same window: `v_mfma`, `ds_read`, `buffer_load`, `s_waitcnt`, `s_barrier`, and other instructions. -- For MFMA throughput sanity, compute `cycles_per_mfma16 = total_cycles / (mfma_count * 16)` when the window contains MFMA instructions. Lower is better; `1.0` means the selected window averages one 16-cycle MFMA issue slot per MFMA. - -### MFMA cycle cost depends on the instruction - -The script's `cycles_per_mfma16` assumes a 16-cycle MFMA. Many wide MFMAs cost -more. Pick the issue latency of the actual atom before computing utilization: - -- `MFMA_Scale 16x16x128` (fp8, e.g. fp8_gemm_4wave / Mfma16x16x128) issues every - **32 cycles**, not 16. - -For those, compute by hand from `total_cycles` and `mfma_count`: - -```text -mfma_cycle = 32 # the atom's issue latency -ideal_cycles = mfma_count * mfma_cycle -utilization = ideal_cycles / total_cycles # closer to 1.0 is better -cycles_per_mfma = total_cycles / mfma_count # compare against mfma_cycle -``` - -Example (fp8_gemm_4wave, 8192x8192x16384, barrier window 30:50): total 24916, -mfma_count 645 -> ideal 645*32=20640 -> utilization 20640/24916 = 0.83 (~83%). - -If the user gives explicit UI cycle coordinates, use a cycle range directly instead of barrier ordinals. - -### Isolating exactly one loop iteration - -A kernel that issues N `s_barrier` per outer-loop iteration spans N barrier -intervals per iteration (fp8_gemm_4wave issues 2: `wait -> block1+block2 -> -wait -> block3+block4`). To get the cycle->cycle bounds of a single iteration, -list barriers and take a window `N` apart starting on an even iteration boundary: - -```bash -python scripts/att_hotloop_cycles.py --list-barriers | sed -n '40,46p' -# pick barrier k that starts an iteration, window k:k+N (N=barriers per iter) -python scripts/att_hotloop_cycles.py --barrier-window 38:40 -``` - -Report it as `cycle_start -> cycle_end` with `total_cycles` = one iteration, and -name the exact wave file the numbers came from, e.g. -`se0_sm0_sl0_wv0.json`. The user jumps to `cycle_start` in the UI to land on the -iteration's first `s_barrier`. - -## Script - -Use `scripts/att_hotloop_cycles.py` for deterministic parsing of ATT UI output: - -```bash -python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ - profiler_traces_grid//ui_output_agent__dispatch_ \ - --list-barriers -``` - -```bash -python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ - profiler_traces_grid//ui_output_agent__dispatch_ \ - --barrier-window 30:50 \ - --per-interval -``` - -```bash -python ~/.codex/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py \ - profiler_traces_grid//ui_output_agent__dispatch_ \ - --cycle-range 123552:125600 -``` - -Important output fields: - -- `cycle_start`, `cycle_end`: ATT cycle coordinates to jump to in the UI. -- `total_cycles`: `cycle_end - cycle_start`. -- `cycles_per_loop`: `total_cycles / number_of_barrier_intervals`. -- `mfma_count`: one-wave MFMA instruction count in the selected window. -- `cycles_per_mfma16`: `total_cycles / (mfma_count * 16)`. - -## Reporting - -When answering the user, lead with the cycle result and the exact dispatch/wave/window: - -```text -dispatch: ui_output_agent_123_dispatch_7 -wave: se0_sm0_sl0_wv0.json -barrier window: 30 -> 50 -cycle range: 123552 -> 176084 -hot-loop cycles: 52532 total, 2626.6 per loop -mfma_count: 1280 -cycles_per_mfma16: 2.565 -``` - -Then summarize the instruction mix and any obvious stall source. Avoid using wall-clock TFLOPS as the main comparison unless the user explicitly asks for it. - -## Packaging the trace for the user - -When asked to hand off the trace, zip the whole trace-name directory, keeping its -structure intact. The UI viewer needs the dispatch dir's `filenames.json` to sit -next to the sibling raw `.att` files and code-object `.out` files at the -trace-name level; do NOT zip only the `ui_output_*_dispatch_*` dir or only its -contents -- both break the viewer (`Invalid or inaccessible path: .../filenames.json`). - -```bash -zip -rq _att.zip profiler_traces_grid/ -# sanity: the dispatch dir + its filenames.json are nested under trace-name -unzip -l _att.zip | grep filenames.json -``` - -Always report the handoff in exactly this three-line format (nothing else needed): - -```text -1. /root/FlyDSL/_att.zip -2. ui_output_agent__dispatch_/se0_sm0_sl0_wv0.json -3. cycle -> (共 ) -``` - -Where line 3 is one complete for-loop iteration (the cycle range to jump to in -the UI, and its total cycle count). Keep this exact ordering and labels. diff --git a/.claude/skills/att-hotloop-benchmark/agents/openai.yaml b/.claude/skills/att-hotloop-benchmark/agents/openai.yaml deleted file mode 100644 index d333a90a4..000000000 --- a/.claude/skills/att-hotloop-benchmark/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "ATT Hotloop Benchmark" - short_description: "Measure ATT barrier-window hot-loop cycles" - default_prompt: "Use $att-hotloop-benchmark to capture ATT and report hot-loop cycles for a FlyDSL kernel." diff --git a/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py b/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py deleted file mode 100755 index f41cbde12..000000000 --- a/.claude/skills/att-hotloop-benchmark/scripts/att_hotloop_cycles.py +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env python3 -"""Summarize ATT UI hot-loop cycles from a dispatch directory. - -The script reads rocprofv3 ATT UI output directories containing code.json and -se*_sm*_sl*_wv*.json files. It measures either a barrier-to-barrier window or -an explicit cycle range for one wave. -""" - -from __future__ import annotations - -import argparse -import glob -import json -import re -from collections import Counter -from pathlib import Path - - -def load_code(ui_dir: Path) -> dict[int, str]: - code_path = ui_dir / "code.json" - with code_path.open("r", encoding="utf-8") as f: - payload = json.load(f) - code_by_id: dict[int, str] = {} - for entry in payload["code"]: - # Header is: ISA, _, LineNumber, Source, Codeobj, Vaddr, Hit, Latency, Stall, Idle - isa = entry[0] - code_id = int(entry[2]) - code_by_id[code_id] = isa - return code_by_id - - -def wave_files(ui_dir: Path, pattern: str) -> list[Path]: - return sorted(Path(p) for p in glob.glob(str(ui_dir / pattern))) - - -def choose_wave(ui_dir: Path, pattern: str, explicit: str | None) -> Path: - if explicit: - p = Path(explicit) - return p if p.is_absolute() else ui_dir / p - candidates = wave_files(ui_dir, pattern) - if not candidates: - raise SystemExit(f"no wave json files matching {pattern!r} under {ui_dir}") - - def num_insts(path: Path) -> int: - with path.open("r", encoding="utf-8") as f: - return int(json.load(f).get("num_insts", 0)) - - return max(candidates, key=num_insts) - - -def load_wave(path: Path) -> list[tuple[int, int]]: - with path.open("r", encoding="utf-8") as f: - payload = json.load(f) - out: list[tuple[int, int]] = [] - for inst in payload["wave"]["instructions"]: - cycle = int(inst[0]) - code_id = int(inst[-1]) - out.append((cycle, code_id)) - return out - - -def parse_range(text: str) -> tuple[int, int]: - m = re.fullmatch(r"\s*(\d+)\s*:\s*(\d+)\s*", text) - if not m: - raise argparse.ArgumentTypeError("expected START:END") - start, end = int(m.group(1)), int(m.group(2)) - if end <= start: - raise argparse.ArgumentTypeError("END must be greater than START") - return start, end - - -def classify(isa: str) -> str: - if "v_mfma" in isa: - return "v_mfma" - if "ds_read" in isa: - return "ds_read" - if "ds_write" in isa: - return "ds_write" - if "buffer_load" in isa: - if " lds" in isa: - return "buffer_load_lds" - return "buffer_load" - if "buffer_store" in isa: - return "buffer_store" - if isa.startswith("s_waitcnt"): - return "s_waitcnt" - if isa.startswith("s_barrier"): - return "s_barrier" - if isa.startswith("s_"): - return "salu" - if isa.startswith("v_"): - return "valu" - return "other" - - -def barrier_events(instructions: list[tuple[int, int]], code_by_id: dict[int, str]) -> list[tuple[int, int]]: - events = [] - for cycle, code_id in instructions: - if "s_barrier" in code_by_id.get(code_id, ""): - events.append((cycle, code_id)) - return events - - -def summarize_window( - instructions: list[tuple[int, int]], - code_by_id: dict[int, str], - start_cycle: int, - end_cycle: int, -) -> Counter[str]: - counts: Counter[str] = Counter() - for cycle, code_id in instructions: - if start_cycle <= cycle < end_cycle: - counts[classify(code_by_id.get(code_id, ""))] += 1 - return counts - - -def print_barriers(events: list[tuple[int, int]], code_by_id: dict[int, str]) -> None: - print(f"barriers={len(events)}") - for i, (cycle, code_id) in enumerate(events): - print(f"{i:4d} cycle={cycle} code_id={code_id} isa={code_by_id.get(code_id, '')}") - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("ui_dir", type=Path, help="ATT ui_output_agent_*_dispatch_* directory") - parser.add_argument("--wave-file", help="Wave JSON filename or absolute path") - parser.add_argument("--wave-glob", default="se*_sm*_sl*_wv*.json", help="Wave JSON glob under ui_dir") - parser.add_argument("--list-barriers", action="store_true", help="List s_barrier events and exit") - parser.add_argument("--barrier-window", type=parse_range, help="Barrier ordinal window START:END") - parser.add_argument("--cycle-range", type=parse_range, help="Explicit cycle window START:END") - parser.add_argument("--auto-middle", type=int, help="Use N middle barrier intervals") - parser.add_argument("--per-interval", action="store_true", help="Print cycles for each barrier interval") - args = parser.parse_args() - - ui_dir = args.ui_dir.resolve() - code_by_id = load_code(ui_dir) - wave_path = choose_wave(ui_dir, args.wave_glob, args.wave_file).resolve() - instructions = load_wave(wave_path) - barriers = barrier_events(instructions, code_by_id) - - print(f"ui_dir={ui_dir}") - print(f"wave={wave_path.name}") - - if args.list_barriers: - print_barriers(barriers, code_by_id) - return - - window_label = "cycle_range" - loops = 1 - if args.cycle_range: - start_cycle, end_cycle = args.cycle_range - else: - if len(barriers) < 2: - raise SystemExit("need at least two s_barrier events or pass --cycle-range") - if args.barrier_window: - b_start, b_end = args.barrier_window - else: - n = args.auto_middle or min(20, len(barriers) - 1) - if n <= 0: - raise SystemExit("--auto-middle must be positive") - b_start = max(0, (len(barriers) - 1 - n) // 2) - b_end = b_start + n - if b_start < 0 or b_end >= len(barriers) or b_end <= b_start: - raise SystemExit(f"invalid barrier window {b_start}:{b_end}; have {len(barriers)} barriers") - start_cycle = barriers[b_start][0] - end_cycle = barriers[b_end][0] - loops = b_end - b_start - window_label = f"barrier_window={b_start}:{b_end}" - - counts = summarize_window(instructions, code_by_id, start_cycle, end_cycle) - total_cycles = end_cycle - start_cycle - mfma_count = counts["v_mfma"] - - print(window_label) - print(f"cycle_start={start_cycle}") - print(f"cycle_end={end_cycle}") - print(f"total_cycles={total_cycles}") - print(f"loops={loops}") - print(f"cycles_per_loop={total_cycles / loops:.3f}") - print(f"mfma_count={mfma_count}") - if mfma_count: - print(f"cycles_per_mfma16={total_cycles / (mfma_count * 16):.6f}") - - print("instruction_mix:") - for key, value in counts.most_common(): - print(f" {key}: {value}") - - if args.per_interval and not args.cycle_range: - b_start, b_end = map(int, window_label.split("=")[1].split(":")) - print("interval_cycles:") - for i in range(b_start, b_end): - c0 = barriers[i][0] - c1 = barriers[i + 1][0] - print(f" {i:4d}->{i + 1:<4d} {c1 - c0}") - - -if __name__ == "__main__": - main() diff --git a/.claude/skills/bufferload-cycle-table/SKILL.md b/.claude/skills/bufferload-cycle-table/SKILL.md deleted file mode 100644 index 91d5ce50f..000000000 --- a/.claude/skills/bufferload-cycle-table/SKILL.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: bufferload-cycle-table -description: Build a per-tile buffer_load cycle/stall comparison table from two ATT traces, anchored at the K-tile start barrier. Each load shows gap-since-previous-load and its stall, with a trailing gap-to-tile-end. Use when comparing why one GEMM kernel's buffer_load stalls and another's does not (e.g. fp8 vs bf16, our kernel vs HipKittens), or when the user asks for a "buffer_load cycle table" / "每个 buffer_load 卡了多久". ---- - -# buffer_load Cycle Table - -Compare two kernels' global-load (buffer_load) behavior inside one steady-state K -tile, to see whether stalls come from spacing (排布) or from VMEM-queue -back-pressure / DMA retire rate. - -## What it prints - -For each `buffer_load` in one K tile, anchored at the tile-start `s_barrier`: - -``` - fp8 gap(stall) bf16 gap(stall) - L 0 80(4) 284(0) - L 2 208(0) 128(216) <- bf16 stalls here - ... -end-> 140(end) 128(end) <- last load -> tile-end barrier - sum stall=24 stall=740 - len 2468 3324 -``` - -- **gap** = cycles since the previous buffer_load (L0's gap = offset from the tile - barrier). -- **stall** = ATT stall cycles on that load. -- **end->** = cycles from the last load to the tile-end barrier. -- **sum/len** = total stall and tile length (cycles) per kernel. - -## How to read it (the key insight) - -If the stalling kernel has **larger gaps but more stall**, spacing is NOT the -problem — it's VMEM-queue back-pressure (DMAs not retiring fast enough), which -correlates with **occupancy** and **dtype arithmetic intensity**, not scheduling. -A big empty gap (e.g. a 576-cyc hole at a half boundary) followed by zero-stall -loads confirms the queue had to fully drain before new loads could issue. - -Example finding: fp8 4wave moved the same bytes/tile as our bf16 4wave but stalled -24 vs 740 cyc — fp8's loads spread evenly with small gaps and never stalled, while -bf16's first-half loads (L2-L7) stalled despite *larger* gaps. Root cause: VMEM -queue turnover, tied to occupancy=1 and bf16's lower FLOP/byte, not load spacing. - -## Run - -1. Capture ATT for both kernels (see att-hotloop-benchmark skill), pick a - steady-state `--bar-start` (e.g. 40). -2. Determine how many barrier intervals make one K tile (`--tiles`): RP1 bf16 and - fp8 4wave both use 2 barriers per tile. - -```bash -python .claude/skills/bufferload-cycle-table/scripts/bufferload_table.py \ - --labels fp8,bf16 --bar-start 40 --tiles 2 -``` - -Uses wave `se0_sm0_sl0_wv0.json` by default (override with `--wave`). The ATT inst -tuple is `[cycle, type, stall, dur, code_id]`; barriers are located via code.json -asm text. See [[feedback-bufferload-per-tile-cycle-analysis]], -[[bf16-hgemm-vmem-bound-arith-intensity]], [[fp8-4wave-8buffer-no-lgkmcnt-drain]]. diff --git a/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py b/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py deleted file mode 100644 index 0352d80f5..000000000 --- a/.claude/skills/bufferload-cycle-table/scripts/bufferload_table.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python3 -"""Per-tile buffer_load cycle/stall table from ATT, anchored at the tile barrier. - -For one steady-state K tile, list every buffer_load as: - gap(stall) -where gap = cycles since the previous buffer_load (the first one's gap is its -offset from the tile-start barrier), and stall = ATT stall cycles on that load. -A trailing `end-> gap(end)` row gives the cycles from the last load to the tile -end barrier. Compares two kernels side by side. - -Why: if two GEMMs move the same bytes/tile but one stalls far more than the -MFMA-width difference can explain, the faster one's DMAs are completing faster / -the VMEM queue turns over faster -- not just hidden behind longer MFMAs. The -per-load gap+stall view (anchored at the tile barrier) exposes that. Note that a -LARGER gap with MORE stall rules out "spacing too tight"; it points at VMEM queue -back-pressure (DMA retire rate), which correlates with occupancy and dtype. - -Usage: - bufferload_table.py [--labels fp8,bf16] - [--bar-start 40] [--tiles 2] [--wave se0_sm0_sl0_wv0.json] - -`--tiles N` = how many barrier intervals make one K tile (RP1 bf16 = 2; check the -kernel). Pick `--bar-start` in the steady state (e.g. 40). -""" -import argparse -import json -import os - - -def load_loads(ui_dir, bar_start, tiles, wave): - j = json.load(open(os.path.join(ui_dir, wave))) - insts = j["wave"]["instructions"] - code = json.load(open(os.path.join(ui_dir, "code.json")))["code"] - idmap = {c[2]: c[0] for c in code} # code line index -> asm text - # inst tuple = [cycle, type, stall, dur, code_id] - bar = [t[0] for t in insts if "s_barrier" in str(idmap.get(t[4], ""))] - b0 = bar[bar_start] - b_end = bar[bar_start + tiles] - out = [] - for t in insts: - if b0 <= t[0] < b_end: - asm = str(idmap.get(t[4], "")).strip() - if asm.startswith("buffer_load"): - out.append((t[0] - b0, t[2])) # (offset_from_tile_start, stall) - return out, b_end - b0 - - -def to_gaps(loads, tilelen): - rows = [] - prev = 0 - for off, st in loads: - rows.append((off - prev, st)) - prev = off - rows.append((tilelen - prev, "end")) - return rows - - -def main(): - ap = argparse.ArgumentParser() - ap.add_argument("dir_a") - ap.add_argument("dir_b") - ap.add_argument("--labels", default="A,B") - ap.add_argument("--bar-start", type=int, default=40) - ap.add_argument("--tiles", type=int, default=2) - ap.add_argument("--wave", default="se0_sm0_sl0_wv0.json") - args = ap.parse_args() - la, lb = args.labels.split(",") - - a, al = load_loads(args.dir_a, args.bar_start, args.tiles, args.wave) - b, bl = load_loads(args.dir_b, args.bar_start, args.tiles, args.wave) - ga, gb = to_gaps(a, al), to_gaps(b, bl) - - n = max(len(ga), len(gb)) - print(f"{'':>5} {la+' gap(stall)':>16} {lb+' gap(stall)':>16} (gap=cyc since prev L)") - print("-" * 56) - for i in range(n): - ca = f"{ga[i][0]}({ga[i][1]})" if i < len(ga) else "" - cb = f"{gb[i][0]}({gb[i][1]})" if i < len(gb) else "" - tag = "end->" if i == n - 1 else f"L{i:>2} " - print(f"{tag:>5} {ca:>16} {cb:>16}") - print("-" * 56) - print(f"{'sum':>5} {'stall='+str(sum(s for _,s in a)):>16} {'stall='+str(sum(s for _,s in b)):>16}") - print(f"{'len':>5} {al:>16} {bl:>16}") - - -if __name__ == "__main__": - main() diff --git a/.claude/skills/hotloop-table/SKILL.md b/.claude/skills/hotloop-table/SKILL.md deleted file mode 100644 index 2a9dd1e74..000000000 --- a/.claude/skills/hotloop-table/SKILL.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: hotloop-table -description: Generate a compact hot-loop instruction table from a kernel's AMDGCN ISA, reduced to the three GEMM-scheduling ops (v_mfma=M, ds_read=r, buffer_load=L) plus s_barrier=B, one per line with a single-char stream summary. Use when inspecting or comparing how MFMA / LDS-read / global-load prefetch are interleaved in a GEMM/attention main loop, or when the user asks for a "hotloop table" / "指令排布表". ---- - -# Hot-loop Table - -Standardize how we look at a kernel's steady-state main loop: collapse the ISA to -only the ops that matter for GEMM scheduling and show their interleaving. - -## Tags (only these three ops + barrier) - -| Tag | Instruction | Role | -|-----|-------------|------| -| `M` | `v_mfma_*` | matrix multiply-accumulate (compute) | -| `r` | `ds_read_*` | LDS -> register (S2R operand load) | -| `L` | `buffer_load_*` | global -> LDS/VGPR prefetch (G2S) | -| `B` | `s_barrier` | half / loop boundary | - -Everything else (address calc, `s_waitcnt`, salu, valu) is dropped so the M/r/L -interleaving and the barrier-delimited halves are obvious. - -## Input: a "pure" ISA - -Best run on a cleaned ISA. Produce one with benenzhu/learn-hip `gen_pure.py` -(strips comments/debug, inlines `.loc`, labels `s_cbranch` targets, expands -`v[a:b]` ranges, zero-pads vgpr numbers): - -```bash -curl -sL https://raw.githubusercontent.com/benenzhu/learn-hip/main/gen_pure.py -o /tmp/gen_pure.py -python /tmp/gen_pure.py _final_isa.s # writes <...>final_isa.spure.s -``` - -Get the raw ISA from a FlyDSL compile with `FLYDSL_DUMP_IR=1` (file -`/_0/21_final_isa.s`). - -## Generate the table - -```bash -python .claude/skills/hotloop-table/scripts/hotloop_table.py \ - --out _hotloop.txt --compact -``` - -- Auto-detects the main loop as the most-MFMA-heavy backward `s_cbranch` body. - Override with `--loop-label .LBB0_1` if needed. -- `--compact` appends a one-char-per-op `stream:` line, e.g. - `MLrMMMMrMMMMLrMMMMrMMMM...B...B` — read it to judge interleaving at a glance: - a leading run like `LLLLrrrr` before any `M` means a front-loaded load/read - wall (bad); `MLrMMMM` repeating means loads/reads are tucked into MFMA - co-issue shadows (good). - -## Header reports per-loop counts - -`Per loop: M=128 r=32 L=16 B=2` — sanity-check against the kernel: e.g. a -256x256 bf16 tile, 4 waves, BK64 (2 K-steps) gives 2x64 MFMA, 2x16 ds_read, -2x8 buffer_load, 2 barriers per loop. - -## Reporting - -Lead with the `stream:` line and the per-loop counts; point out any leading wall -or uneven half. Commit the generated `_hotloop.txt` next to the ISA -snapshot under `resource_inspect/snapshots/` so loops can be diffed across -optimization steps. diff --git a/.claude/skills/hotloop-table/scripts/hotloop_table.py b/.claude/skills/hotloop-table/scripts/hotloop_table.py deleted file mode 100644 index 631da53a1..000000000 --- a/.claude/skills/hotloop-table/scripts/hotloop_table.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python3 -"""Generate a compact hot-loop instruction table from a (pure) AMDGCN ISA file. - -Reduces the steady-state main loop to the three memory/compute ops that drive -GEMM scheduling, one per line, using single-letter tags: - - M = v_mfma_* (matrix multiply-accumulate) - r = ds_read_* (LDS -> register, S2R) - L = buffer_load_* (global -> LDS/VGPR prefetch, G2S) - B = s_barrier (half / loop boundary) - -All other instructions (address calc, waitcnt, salu, valu) are dropped so the -M/r/L interleaving and the barrier-delimited halves are visible at a glance. - -Usage: - hotloop_table.py [--loop-label .LBB0_1] [--out table.txt] - [--compact] # also emit a one-char-per-op stream line - -If --loop-label is omitted, the script auto-detects the main loop as the body -between the most-branched-to backward label and its s_cbranch. -""" -import argparse -import re -import sys -from collections import Counter - -TAGS = [ - ("M", re.compile(r"^\s*v_mfma")), - ("r", re.compile(r"^\s*ds_read")), - ("L", re.compile(r"^\s*buffer_load")), - ("B", re.compile(r"^\s*s_barrier")), -] - - -def classify(line: str): - for tag, pat in TAGS: - if pat.match(line): - return tag - return None - - -def find_main_loop(lines): - # Pick the backward branch target that a s_cbranch jumps to, preferring the - # one whose body contains the most v_mfma (the steady-state K loop). - labels = {l.strip().rstrip(":"): i for i, l in enumerate(lines) if re.match(r"^\.\w", l.strip()) and l.strip().endswith(":")} - best = None - for i, l in enumerate(lines): - m = re.search(r"s_cbranch\w*\s+(\.\S+)", l) - if not m: - continue - tgt = m.group(1) - if tgt in labels and labels[tgt] < i: - start = labels[tgt] - body = lines[start : i + 1] - nmfma = sum(1 for b in body if b.strip().startswith("v_mfma")) - if best is None or nmfma > best[0]: - best = (nmfma, tgt, start, i) - if best is None: - raise SystemExit("could not auto-detect a backward loop; pass --loop-label") - return best[1], best[2], best[3] - - -def main(): - ap = argparse.ArgumentParser() - ap.add_argument("isa") - ap.add_argument("--loop-label", default=None) - ap.add_argument("--out", default=None) - ap.add_argument("--compact", action="store_true") - args = ap.parse_args() - - lines = open(args.isa).read().splitlines() - - if args.loop_label: - labels = {l.strip().rstrip(":"): i for i, l in enumerate(lines) if l.strip().endswith(":")} - start = labels[args.loop_label] - end = next(i for i, l in enumerate(lines) if i > start and "s_cbranch" in l and args.loop_label in l) - label = args.loop_label - else: - label, start, end = find_main_loop(lines) - - body = lines[start : end + 1] - seq = [] # (tag, operands-summary) - counts = Counter() - for l in body: - tag = classify(l) - if tag is None: - continue - counts[tag] += 1 - s = l.strip() - # keep just mnemonic + first dst operand for context - parts = s.split(None, 1) - mnem = parts[0] - rest = parts[1].split(";")[0].strip() if len(parts) > 1 else "" - dst = rest.split(",")[0].strip() if rest else "" - seq.append((tag, mnem, dst)) - - out = [] - out.append(f"Hot-loop table for main loop {label} (ISA: {args.isa})") - out.append("Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier") - out.append( - f"Per loop: M={counts['M']} r={counts['r']} L={counts['L']} B={counts['B']}" - ) - out.append("=" * 60) - half = 0 - for tag, mnem, dst in seq: - if tag == "B": - out.append(f"B -------- barrier (end of half {half}) --------") - half += 1 - else: - out.append(f"{tag} {mnem:28s} {dst}") - - if args.compact: - stream = "".join(t for t, _, _ in seq) - out.append("=" * 60) - out.append("stream: " + stream) - - text = "\n".join(out) + "\n" - if args.out: - open(args.out, "w").write(text) - print(f"wrote {args.out} ({len(seq)} ops)") - else: - sys.stdout.write(text) - - -if __name__ == "__main__": - main() diff --git a/.claude/skills/kernel-dataflow-schedule/SKILL.md b/.claude/skills/kernel-dataflow-schedule/SKILL.md deleted file mode 100644 index d59caf8b6..000000000 --- a/.claude/skills/kernel-dataflow-schedule/SKILL.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -name: kernel-dataflow-schedule -description: Write a compact, source-derived steady-state SCHEDULE for one wave of a GEMM/attention kernel, by hand-reading the kernel source (NOT the ISA). Each line is one logical op (mfma / dsrd / bfld / barrier) in program order, with C blocks in GLOBAL coordinates, A/B operands as double-buffer positions (A0/A1/B0/B1), explicit vmcnt on every barrier, and an end-of-iteration count check. Use when the user asks to "describe/draw the data flow", "画数据流 / 流水排布", "compact schedule", "走一遍这个 kernel 的流水", or to explain how mfma/ds_read/buffer_load interleave and which buffer each load fills. This is the SOURCE-LEVEL companion to the ISA-level hotloop-table skill. ---- - -# Kernel Dataflow Schedule - -Produce a human-verifiable, source-level schedule of one wave's steady-state -main loop. The goal is a table the user can read line-by-line to (1) confirm -correctness of the pipeline (which buffer/block each load touches, which slice it -holds) and (2) reason about latency hiding (how dsrd/bfld are co-issued in the -MFMA shadow). This is NOT the ISA hotloop-table (that collapses real AMDGCN to -M/r/L/B); here we hand-derive from the Python/C++ kernel source and keep full -operand positions. - -Reference examples (read these first, match their style EXACTLY): -- `resource_inspect/hgemm_wave0_compact_schedule.txt` (bf16, K=32 mfma -> ops - carry a k-subtile index like `A0[5,1]`) -- `resource_inspect/fp8_4wave_compact_schedule.txt` (fp8, K=128 mfma -> one mfma - consumes a whole block, no k index on mfma) - -## The four ops (only these, one per line, in program order) - -| op | meaning | source it comes from | -|----|---------|----------------------| -| `mfma C[r,c] += A0[a]*B0[b]` | one MMA instruction | mfma.call_one / mma_atom_call | -| `dsrd [blk,h]` | LDS -> reg, one load granule | s2r.load_one / ds_read | -| `bfld [lo:hi]` | global -> LDS chunk | g2s.load_one / buffer_load_lds | -| `barrier vmcnt(N)+s_barrier` | wait_barrier(N) | wait_barrier / gpu.barrier | - -Drop everything else (address math, salu/valu, packing). Keep blank lines between -logical groups (e.g. per output quadrant) so the structure is scannable. - -## Notation conventions (the agreed style) - -- **One wave only** (wave0). Steady-state main-loop body = one outer K iteration. -- **C blocks: GLOBAL coordinates.** The output tile is a grid of 16x16 MFMA - blocks; `C[r,c]` uses the block's global (row,col) index over the whole - BLOCK_M x BLOCK_N tile (e.g. a 256x256 tile -> r,c in 0..15). If the wave owns a - strided set, say so in the header and use the real global indices (e.g. wave0 = - rows {0..3,8..11} x cols {0..3,8..11}). -- **A/B operands: double-buffer view `A0/A1/B0/B1`.** Merge the kernel's physical - sub-buffers into two logical buffers per operand: `A0`=current K-slice, - `A1`=next K-slice (prefetch), same for B. Each logical buffer is the full - BLOCK_M (or BLOCK_N) x BLOCK_K, indexed by block: `A0[blk]`. If the kernel - splits M/N into halves, map them into one block range (e.g. half0 -> blk 0..7, - half1 -> blk 8..15) so block numbers line up with the global C rows/cols. -- **mfma operand index has NO K subscript when one mfma eats the whole BLOCK_K** - (e.g. fp8 16x16x128). It DOES carry a k-subtile index when BLOCK_K needs - multiple mfma along K (e.g. bf16 16x16x32 -> `A0[5,1]` = block5, k-half1). -- **dsrd second index `h` is the LOAD granularity**, not necessarily a K subtile: - if one ds_read moves half a block, write `B0[8,0]` / `B0[8,1]` for the two - halves that pack into one mfma operand. State this in the header. -- **bfld writes a BLOCK RANGE** `[lo:hi]` (which row/col blocks of the K+P - prefetch slice this g2s step fills). Compute the range from the loader's - per-step row stride. Name the destination buffer explicitly (A0/B0 if the - kernel refills the current buffer in place + swaps, A1/B1 if it writes the - other buffer). Note which convention this kernel uses -- it is a real semantic - difference between kernels. -- **Every barrier shows its vmcnt** as `barrier vmcnt(N)+s_barrier`. N = max - outstanding VMEM allowed (smaller = waits for more to land). Derive N from the - wait_barrier argument symbolically AND give the number. -- **Ignore swizzle.** It relabels LDS addresses, not pipeline order. Say so once. - -## How to produce it (steps) - -1. Read the kernel source: launch config (threads, waves, BLOCK_M/N/K), the - per-wave tile ownership, the loader classes (G2S, S2R), the mma wrapper, and - the main loop body. Do NOT read ISA -- this is a source-derived schedule. -2. Fix the wave0 -> C-block mapping (compute it from store offsets / wave_i,j). -3. Define the logical A0/A1/B0/B1 merge and the block-index convention; write the - header block (layout, buffers, notation, K-slice bookkeeping) like the - examples. -4. Walk the main loop in program order. For each compute cluster emit mfma lines - interleaved with the exact dsrd/bfld the source issues between them. Put the - barriers where the source calls wait_barrier, with the resolved vmcnt. -5. Track K-slice bookkeeping: which slice each buffer holds on entry, what the - bfld writes (K+P), and the end-of-iter swap. State entry/exit so the user can - confirm the pipeline is consistent. -6. **Count check** at the end: mfma / dsrd / bfld counts per iteration, and - confirm bfld count == the main-loop vmcnt value (they usually match by - construction). List the barrier split points. - -## Output - -- Write to `resource_inspect/_wave0_compact_schedule.txt` (or answer - inline if the user only wants to read it). -- Keep the header explanatory but put NO inline comments on the op lines unless - asked -- the user reads the ops directly. Blank lines separate quadrants/groups. -- After writing, surface the 1-2 load-buffer-convention assumptions you made - (in-place refill+swap vs write-other-buffer; strided vs contiguous wave - footprint) and ask the user to confirm, since those are the easy things to get - backwards. diff --git a/bench.py b/bench.py deleted file mode 100644 index b60cdb55b..000000000 --- a/bench.py +++ /dev/null @@ -1,421 +0,0 @@ -import argparse -import statistics -import time -from dataclasses import dataclass -import os - -from gpu_select import bind_empty_gpu_for_torch - -bind_empty_gpu_for_torch("bench") - -import torch - -import aiter -from aiter import dtypes, ActivationType, QuantType -from aiter.fused_moe import fused_moe, get_padded_M, torch_moe -from aiter.ops.shuffle import shuffle_weight, shuffle_scale -from aiter.utility.fp4_utils import e8m0_shuffle - - -@dataclass(frozen=True) -class Shape: - NE: int - H: int # model_dim / D_HIDDEN - INTER: int # per-shard inter_dim / D_INTER - TOPK: int - - -KIMI = Shape(NE=385, H=7168, INTER=512, TOPK=9) - -# Accuracy-first benchmark defaults. Small-M MoE paths are short enough that -# CUDA-event and graph-replay noise can move the conclusion, so default to many -# captured calls, replay measurements, and independent graph captures. Override -# these down only for quick smoke tests or exploratory large-M sweeps. -DEFAULT_WARMUP = 5000 -DEFAULT_EAGER_ITERS = 200000 -DEFAULT_GRAPH_ITERS = 512 -DEFAULT_GRAPH_MEASURE = 101 -DEFAULT_GRAPH_WARMUP_REPLAYS = 20 -DEFAULT_REPEAT = 15 - -# mxfp4 tuned dispatch per token bucket (from kimik2_5_mxfp4_tuned_fmoe.csv). -# (M_max, block_m, g1_suffix, g2_suffix) -MXFP4_TUNED = [ - (128, 16, "BM16_INLINEQUANT", "TOPK{topk}_BM16_ATOMIC_NT"), # M<=128: BM16 inline-quant, g2 non-temporal - (512, 32, "BM32_NT", "TOPK{topk}_BM32_ATOMIC_NT"), # M<=512: BM32 read-once, g2 non-temporal - (2048, 32, "BM32_CACHED", "TOPK{topk}_BM32_ATOMIC"), # M<=2048: BM32 cached - (4096, 128, "BM128", "BM128_NONATOMIC"), # M=4096: bf16 flat_out + scatter_reduce - (10**9, 128, "BM128", "BM128_NONATOMIC_MXFP4OUT"), # M>=8192: mxfp4 flat_out + scatter_reduce_q -] - - -def _mxfp4_knames(shape: Shape, M: int): - for m_max, bm, g1, g2 in MXFP4_TUNED: - if M <= m_max: - base1 = f"mxfp4_moe_g1_a4w4_NE{shape.NE}_H{shape.H}_E{shape.INTER}" - base2 = f"mxfp4_moe_g2_a4w4_NE{shape.NE}_H{shape.H}_E{shape.INTER}" - return bm, f"{base1}_{g1}", f"{base2}_{g2.format(topk=shape.TOPK)}" - raise RuntimeError("unreachable") - - -# ── one-time weight prep (M-independent) ───────────────────────────────────── -def build_weights(shape: Shape, device, seed=0): - torch.manual_seed(seed) - NE, H, I = shape.NE, shape.H, shape.INTER - torch_quant = aiter.get_torch_quant(QuantType.per_1x32) - - # Plain bf16 weights, scaled small (matches flydsl test conventions). - w1 = torch.randn((NE, 2 * I, H), dtype=dtypes.bf16, device=device) / 10 - w2 = torch.randn((NE, H, I), dtype=dtypes.bf16, device=device) / 10 - - # Quantize ONCE -> identical fp4 values fed to both backends. - # torch_quant returns w1_qt as (E, 2I, H//2) fp4x2 and w1_scale as a 2D - # (E*2I, H//32) e8m0 tensor. - w1_qt, w1_scale = torch_quant(w1, quant_dtype=dtypes.fp4x2) - w2_qt, w2_scale = torch_quant(w2, quant_dtype=dtypes.fp4x2) - - # mxfp4_moe layout: equivalent to mxfp4_moe_preshuffle_w1/w2 in upstream aiter. - m_w1q = shuffle_weight( - w1_qt, layout=(16, 16), is_guinterleave=True, gate_up=True - ).view(w1_qt.dtype) - m_w2q = shuffle_weight( - w2_qt, layout=(16, 16), is_guinterleave=True, gate_up=False - ).view(w2_qt.dtype) - m_w1s = shuffle_scale( - w1_scale.view(NE * 2 * I, H // 32), - experts_cnt=NE, is_guinterleave=True, gate_up=True, - ).view(NE, 2 * I, H // 32) - m_w2s = shuffle_scale( - w2_scale.view(NE * H, I // 32), - experts_cnt=NE, is_guinterleave=True, gate_up=False, - ).view(NE, H, I // 32) - # .view() above drops the is_shuffled attribute shuffle_weight sets internally; - # fused_moe reads it off w1/w2 (fused_moe.py:339,1617) to pick tuned preshuffled kernels. - # shuffle_kind="mxfp4_moe" is what gates dispatch onto the new mxfp4 pipeline - # (fused_moe.py:418-429, 1504-1508); without it we silently fall back to the - # untagged CSV path and never call the mxfp4_moe_gemm1/2_a4w4 kernels. - for t in (m_w1q, m_w2q, m_w1s, m_w2s): - t.is_shuffled = True - t.shuffle_kind = "mxfp4_moe" - - # Flydsl uses a DIFFERENT preshuffle layout than mxfp4_moe -- see flydsl's own - # test at FlyDSL/tests/kernels/test_moe_gemm.py:523-528,1137-1139, which for - # the fp4 path does plain `shuffle_weight(w.view(fp4x2))` (no layout/guinter- - # leave/gate_up kwargs) and `e8m0_shuffle(scale)` (NOT `shuffle_scale`). - # Feeding flydsl the mxfp4_moe layout yields cos~0 (verified) -- correctness - # requires matching its native preshuffle. - f_w1q = shuffle_weight(w1_qt.view(torch.float4_e2m1fn_x2)).view(w1_qt.dtype) - f_w2q = shuffle_weight(w2_qt.view(torch.float4_e2m1fn_x2)).view(w2_qt.dtype) - f_w1s = e8m0_shuffle(w1_scale).view(NE, 2 * I, H // 32) - f_w2s = e8m0_shuffle(w2_scale).view(NE, H, I // 32) - # Same dispatch gating as the mxfp4 side, minus the shuffle_kind tag -- - # absence of the tag is what makes the CSV lookup hit the untagged flydsl_* - # rows instead of the "mxfp4_moe"-tagged ones (fused_moe.py:1504-1508). - for t in (f_w1q, f_w2q, f_w1s, f_w2s): - t.is_shuffled = True - - return dict( - mxfp4=dict(w1=m_w1q, w1_scale=m_w1s, w2=m_w2q, w2_scale=m_w2s), - flydsl=dict(w1=f_w1q, w1_scale=f_w1s, w2=f_w2q, w2_scale=f_w2s), - # Raw bf16 weights kept for torch_moe ground-truth comparison. Note these - # are PRE-quantization, so cos(kernel, ref) won't hit 1.0 -- expect ~0.97+ - # for a correct mxfp4 kernel; <0.9 means the kernel itself is wrong. - ref=dict(w1=w1, w2=w2), - ) - - -def build_inputs(shape: Shape, M: int, device, seed=1): - torch.manual_seed(seed) - NE, H, TOPK = shape.NE, shape.H, shape.TOPK - hidden = torch.randn((M, H), dtype=dtypes.bf16, device=device) / 10 - # Production-faithful Kimi-K2.5 routing (matches tune_mxfp4_moe_gemm.py): - # the shared expert (id NE-1, weight 1.0) is always at slot 0, plus TOPK-1 - # softmax-routed experts sampled with a mild per-expert popularity skew. - # This concentrates tokens onto fewer experts (vs uniform-random routing), - # so moe_sorting emits fewer padded expert-blocks -- the real serving load. - n_routed = NE - 1 - shared_id = NE - 1 - n_topk_routed = TOPK - 1 - g = torch.Generator(device=device).manual_seed(seed) - bias = torch.randn(n_routed, generator=g, device=device) * 0.5 - scores = torch.randn(M, n_routed, generator=g, device=device) + bias - routed_w, routed_ids = torch.topk(scores.softmax(-1), n_topk_routed, dim=-1) - shared_ids = torch.full((M, 1), shared_id, device=device, dtype=routed_ids.dtype) - shared_w = torch.ones((M, 1), device=device, dtype=routed_w.dtype) - topk_ids = torch.cat([shared_ids, routed_ids], dim=1).to(torch.int32) - topk_weight = torch.cat([shared_w, routed_w], dim=1).to(torch.float32) - return hidden, topk_ids, topk_weight - - -# ── per-backend e2e closures ───────────────────────────────────────────────── -def make_mxfp4_fn(shape, M, hidden, topk_ids, topk_weight, w, device): - # mxfp4 weights carry shuffle_kind="mxfp4_moe" (set by mxfp4_moe_preshuffle_*), - # so the high-level fused_moe dispatches per-M straight from the tuned CSV — - # including the MXFP4OUT mxfp4-intermediate path on the largest buckets. - def fn(): - return fused_moe( - hidden, w["w1"], w["w2"], topk_weight, topk_ids, - activation=ActivationType.Silu, - quant_type=QuantType.per_1x32, - w1_scale=w["w1_scale"], w2_scale=w["w2_scale"], - ) - - pm = get_padded_M(M) - bm = 16 if pm <= 128 else (32 if pm <= 2048 else 128) - return fn, bm, ("fused_moe(csv)",) - - -def make_flydsl_fn(shape, M, hidden, topk_ids, topk_weight, w, device): - # Identical entry point to mxfp4 -- both call fused_moe(), which routes to - # _flydsl_stage1/2_wrapper because the CSV row for this shape (NE=385/ - # INTER=512/H=7168) under the UNTAGGED dict has kernelName1/2 starting with - # "flydsl_" (fused_moe.py:1666). The mxfp4 side hits a separate "mxfp4_moe"- - # tagged row via shuffle_kind. Same sort/quant/scatter aux kernels run on both - # sides -- only the gemm1/gemm2 differ -- so the perf delta is apples-to-apples. - def fn(): - return fused_moe( - hidden, w["w1"], w["w2"], topk_weight, topk_ids, - activation=ActivationType.Silu, - quant_type=QuantType.per_1x32, - w1_scale=w["w1_scale"], w2_scale=w["w2_scale"], - ) - - return fn - - -# ── timing ─────────────────────────────────────────────────────────────────── -def bench(fn, warmup=DEFAULT_WARMUP, iters=DEFAULT_EAGER_ITERS): - """Eager wall-clock timing. Includes per-kernel CPU launch overhead, so on - launch/latency-bound (small-M) shapes it OVER-estimates vs the real e2e path, - which replays a single CUDA graph (one launch, no inter-kernel CPU bubbles).""" - for _ in range(warmup): - fn() - torch.cuda.synchronize() - ts = [] - for _ in range(iters): - s = time.perf_counter() - fn() - torch.cuda.synchronize() - ts.append(time.perf_counter() - s) - ts.sort() - return ts[len(ts) // 2] * 1e6 # median us - -def bench_cudagraph( - fn, - warmup=DEFAULT_WARMUP, - iters=DEFAULT_GRAPH_ITERS, - measure=DEFAULT_GRAPH_MEASURE, - graph_warmup_replays=DEFAULT_GRAPH_WARMUP_REPLAYS, -): - """CUDA-graph-faithful timing: capture `iters` back-to-back fn() calls into a - SINGLE graph, replay the whole graph, and divide total GPU time by `iters`. - The whole MoE pipeline runs as one graph -- CPU launch overhead and inter- - kernel bubbles are excluded, matching the production e2e cudagraph path. The - /iters amortization also dilutes the per-replay CUDA-event overhead. May raise - during capture if any kernel in fn() does a host sync / host-dependent op.""" - # Side-stream warmup is REQUIRED before torch.cuda.graph(): it triggers JIT - # compile + autotune and primes the caching allocator on a private stream. - side = torch.cuda.Stream() - side.wait_stream(torch.cuda.current_stream()) - with torch.cuda.stream(side): - for _ in range(warmup): - fn() - torch.cuda.current_stream().wait_stream(side) - torch.cuda.synchronize() - - # Capture `iters` calls into one graph. Internal allocations come from the - # graph's private pool (reused across the captured calls and every replay). - g = torch.cuda.CUDAGraph() - with torch.cuda.graph(g): - for _ in range(iters): - fn() - - for _ in range(graph_warmup_replays): - g.replay() - torch.cuda.synchronize() - - start = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] - end = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] - totals = [] - for _ in range(measure): - start[_].record() - g.replay() - end[_].record() - torch.cuda.synchronize() - for _ in range(measure): - totals.append(start[_].elapsed_time(end[_]) * 1e3) # ms -> us, total for `iters` - totals.sort() - - return totals[len(totals) // 2] / iters # median per-call us - - -def cosine(a, b): - a, b = a.float().reshape(-1), b.float().reshape(-1) - return torch.nn.functional.cosine_similarity(a, b, dim=0).item() - - -def main(): - ap = argparse.ArgumentParser() - ap.add_argument("-M", "--M-list", default="4,8,16,32,64,128,256,8192,16384") - #ap.add_argument("-M", "--M-list", default="16384") - ap.add_argument("--check", default=True, action="store_true", - help="cross-backend output cosine-sim sanity check per M") - ap.add_argument("--cudagraph", default=True, action="store_true", - help="time via CUDA-graph capture+replay (excludes CPU launch " - "overhead; faithful to the e2e cudagraph path). Default is " - "eager perf_counter, which includes launch overhead.") - ap.add_argument("--iters", type=int, default=DEFAULT_EAGER_ITERS, - help="eager perf_counter iterations") - ap.add_argument("--graph-iters", type=int, default=DEFAULT_GRAPH_ITERS, - help="fn() calls captured per graph; total GPU time / this") - ap.add_argument("--warmup", type=int, default=DEFAULT_WARMUP, - help="warmup fn() calls before timing or graph capture") - ap.add_argument("--measure", type=int, default=DEFAULT_GRAPH_MEASURE, - help="CUDA-graph replay measurements; median is reported") - ap.add_argument("--graph-warmup-replays", type=int, - default=DEFAULT_GRAPH_WARMUP_REPLAYS, - help="full-graph replays before CUDA-event measurement") - ap.add_argument("--repeat", type=int, default=DEFAULT_REPEAT, - help="independent timing samples; median is reported") - ap.add_argument("--ref-max-M", type=int, default=16385, - help="run torch_moe ground-truth ref for M<=this (slow on large " - "M since torch_moe loops over experts in python).") - args = ap.parse_args() - if args.repeat <= 0: - raise ValueError("--repeat must be positive") - - device = torch.device("cuda") - shape = KIMI - Ms = [int(x) for x in args.M_list.split(",")] - def time_fn(fn): - samples = [] - for _ in range(args.repeat): - if args.cudagraph: - samples.append( - bench_cudagraph( - fn, - warmup=args.warmup, - iters=args.graph_iters, - measure=args.measure, - graph_warmup_replays=args.graph_warmup_replays, - ) - ) - else: - samples.append(bench(fn, warmup=args.warmup, iters=args.iters)) - return float(statistics.median(samples)), samples - - def sample_text(samples): - if len(samples) <= 1: - return "" - body = ",".join(f"{sample:.1f}" for sample in samples) - return ( - f" samples_us={body}" - f" range_us={min(samples):.1f}..{max(samples):.1f}" - f" stdev_us={statistics.stdev(samples):.1f}" - ) - - timing_mode = ( - f"cudagraph replay ({args.graph_iters}/graph, " - f"warmup={args.warmup}, measure={args.measure}, " - f"graph_warmup_replays={args.graph_warmup_replays}, " - f"measured_calls_per_sample={args.graph_iters * args.measure}, " - f"measured_calls_per_backend={args.graph_iters * args.measure * args.repeat})" - if args.cudagraph - else ( - f"eager perf_counter (warmup={args.warmup}, iters={args.iters}, " - f"measured_calls_per_backend={args.iters * args.repeat})" - ) - ) - - print(f"GPU: {torch.cuda.get_device_name(0)}") - print(f"Timing: {timing_mode} repeat={args.repeat}") - print(f"Shape Kimi-K2.5 TP=4: NE={shape.NE} H={shape.H} " - f"INTER={shape.INTER} TOPK={shape.TOPK}") - print("Preparing weights (once)...", flush=True) - w = build_weights(shape, device) - - # flydsl tile_m intentionally omitted: fused_moe picks it from the untagged - # CSV row at dispatch time and bench has no clean hook to read it back; see - # dispatcher log '[aiter] [fused_moe] using 2stage (kernelName1=...)' for - # the real flydsl tile per M. mxfp4 bm is the bench-side MXFP4_TUNED table - # value, hand-aligned with kimik2_5_mxfp4_tuned_fmoe.csv so it IS accurate. - hdr = (f"\n{'M':>6} | {'mxfp4 us':>10} {'bm':>3} | " - f"{'flydsl us':>10} | {'flydsl/mxfp4':>12}") - if args.check: - hdr += f" | {'mx⋅fly':>7} | {'mx⋅ref':>7} | {'fly⋅ref':>7}" - print(hdr) - print("-" * len(hdr)) - - for M in Ms: - hidden, topk_ids, topk_weight = build_inputs(shape, M, device) - - # torch_moe ground truth (bf16 weights, fp32 accum). Skip on big M -- - # python-level expert loop is slow on NE=385. cos vs ref tells you which - # backend is broken when the two kernels disagree. - ref_out = None - if M <= args.ref_max_M: - try: - ref_out = torch_moe( - hidden, w["ref"]["w1"], w["ref"]["w2"], - topk_weight, topk_ids, activation=ActivationType.Silu, - ).float() - except Exception as e: - print(f" [ref M={M}] torch_moe ERROR: {type(e).__name__}: {e}") - - mx_fn, mx_bm, _ = make_mxfp4_fn( - shape, M, hidden, topk_ids, topk_weight, w["mxfp4"], device) - - try: - mx_out = mx_fn().float() - except Exception as e: - print(f"{M:>6} | mxfp4 ERROR: {type(e).__name__}: {e}") - continue - if not torch.isfinite(mx_out).all() or mx_out.abs().sum() == 0: - print(f"{M:>6} | mxfp4 produced non-finite/zero output — skipping") - continue - mx_ref_cos = cosine(mx_out, ref_out) if ref_out is not None else float("nan") - - # flydsl: same fused_moe entry; CSV (untagged kimik2 rows) routes to - # _flydsl_stage1/2_wrapper. tile_m is picked by the tuner -- no sweep. - fly_ok, fly_us, fly_mx_cos, fly_ref_cos = False, float("nan"), float("nan"), float("nan") - try: - f_fn = make_flydsl_fn( - shape, M, hidden, topk_ids, topk_weight, w["flydsl"], device) - out = f_fn() - finite = torch.isfinite(out).all().item() - fly_mx_cos = cosine(mx_out, out) if finite else float("nan") - fly_ref_cos = (cosine(out.float(), ref_out) - if finite and ref_out is not None else float("nan")) - print(f"bench flydsl, M={M} mx⋅fly={fly_mx_cos:.4f} fly⋅ref={fly_ref_cos:.4f}") - fly_us, fly_samples = time_fn(f_fn) - print(f"flydsl M={M} median_us={fly_us:.1f}{sample_text(fly_samples)}") - fly_ok = True - except Exception as e: - print(f" [flydsl M={M}] ERROR: {type(e).__name__}: {e}", flush=True) - - try: - print(f"bench mxfp4, M={M} bm={mx_bm} mx⋅ref={mx_ref_cos:.4f}") - mx_us, mx_samples = time_fn(mx_fn) - print(f"mxfp4 M={M} median_us={mx_us:.1f}{sample_text(mx_samples)}") - except Exception as e: - print(f"{M:>6} | mxfp4 timing ERROR: {type(e).__name__}: {e} — skipping") - continue - - if not fly_ok: - line = (f"{M:>6} | {mx_us:>10.1f} {mx_bm:>3} | " - f"{'flydsl FAIL':>10} | {'-':>12}") - if args.check: - line += f" | {'-':>7} | {mx_ref_cos:>7.4f} | {'-':>7}" - print(line, flush=True) - continue - ratio = fly_us / mx_us - line = (f"{M:>6} | {mx_us:>10.1f} {mx_bm:>3} | " - f"{fly_us:>10.1f} | {ratio:>11.2f}x") - if args.check: - line += (f" | {fly_mx_cos:>7.4f} | {mx_ref_cos:>7.4f} | " - f"{fly_ref_cos:>7.4f}") - print(line, flush=True) - - -if __name__ == "__main__": - main() diff --git a/bench_flydsl_16384.py b/bench_flydsl_16384.py deleted file mode 100644 index 8c119525e..000000000 --- a/bench_flydsl_16384.py +++ /dev/null @@ -1,467 +0,0 @@ -import os -os.system("rm -rf ~/.flydsl") -from gpu_select import bind_empty_gpu_for_torch - -bind_empty_gpu_for_torch("bench_flydsl_16384") - -import argparse -import statistics -import sys -from dataclasses import dataclass -from pathlib import Path - -import torch - - -THIS_DIR = Path(__file__).resolve().parent -UP_AITER = Path("/root/up-aiter") -BUILD_PYTHON_PACKAGES = THIS_DIR / "build-fly" / "python_packages" -if BUILD_PYTHON_PACKAGES.exists(): - sys.path.insert(0, str(BUILD_PYTHON_PACKAGES)) -sys.path.insert(0, str(UP_AITER)) -sys.path.insert(0, str(THIS_DIR)) - -import aiter # noqa: E402 -from aiter import ActivationType, QuantType, dtypes # noqa: E402 -from aiter.fused_moe import fused_moe # noqa: E402 -from aiter.ops.shuffle import shuffle_scale, shuffle_weight # noqa: E402 -from aiter.utility.fp4_utils import e8m0_shuffle # noqa: E402 -from kimi_fp4_moe_16384 import ( # noqa: E402 - EXPERTS, - INTER_DIM, - MODEL_DIM, - STAGE1_KERNEL, - STAGE2_KERNEL, - TOKEN, - TOPK, - run_kimi_fp4_flydsl_moe_16384, -) -from kimi_fp4_moe_16384_opt_simplify import ( # noqa: E402 - MXFP4_STAGE1_KERNEL, - MXFP4_STAGE2_KERNEL, - run_kimi_fp4_mxfp4_moe_16384_all_flydsl, -) -from kimi_fp4_moe_16384_opt_bm96 import ( # noqa: E402 - run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm96, -) -from kimi_fp4_moe_16384_opt_bm128p64 import ( # noqa: E402 - run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128p64, -) -from kimi_fp4_moe_16384_opt_bm128_storemask import ( # noqa: E402 - run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_storemask, -) -from kimi_fp4_moe_16384_opt_bm128_bn512 import ( # noqa: E402 - run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512, -) -from kimi_fp4_moe_16384_opt_bm128_bn512_all import ( # noqa: E402 - run_kimi_fp4_mxfp4_moe_16384_all_flydsl as run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512_all, -) - - -M = TOKEN - -# The 16k-M pipeline is much longer than the small BM16 path, but the previous -# defaults were smoke-test sized. Keep the graph large enough to amortize event -# noise while avoiding an unbounded multi-hour default run. -DEFAULT_WARMUP = 500 -DEFAULT_GRAPH_ITERS = 512 -DEFAULT_GRAPH_MEASURE = 101 -DEFAULT_REPEAT = 11 - - -@dataclass(frozen=True) -class KimiShape: - experts: int = EXPERTS - model_dim: int = MODEL_DIM - inter_dim: int = INTER_DIM - topk: int = TOPK - - -SHAPE = KimiShape() - - -def _mark_flydsl_shuffled(weights): - for t in weights.values(): - t.is_shuffled = True - return weights - - -def _mark_mxfp4_shuffled(weights): - for t in weights.values(): - t.is_shuffled = True - t.shuffle_kind = "mxfp4_moe" - return weights - - -def build_weights(shape: KimiShape, device: torch.device, seed: int = 0): - torch.manual_seed(seed) - quant = aiter.get_torch_quant(QuantType.per_1x32) - ne, h, inter = shape.experts, shape.model_dim, shape.inter_dim - - w1 = torch.randn((ne, 2 * inter, h), dtype=dtypes.bf16, device=device) / 10 - w2 = torch.randn((ne, h, inter), dtype=dtypes.bf16, device=device) / 10 - w1_q, w1_scale = quant(w1, quant_dtype=dtypes.fp4x2) - w2_q, w2_scale = quant(w2, quant_dtype=dtypes.fp4x2) - - flydsl = _mark_flydsl_shuffled( - { - "w1": shuffle_weight(w1_q.view(torch.float4_e2m1fn_x2)).view(w1_q.dtype), - "w2": shuffle_weight(w2_q.view(torch.float4_e2m1fn_x2)).view(w2_q.dtype), - "w1_scale": e8m0_shuffle(w1_scale).view(ne, 2 * inter, h // 32), - "w2_scale": e8m0_shuffle(w2_scale).view(ne, h, inter // 32), - } - ) - - mxfp4 = _mark_mxfp4_shuffled( - { - "w1": shuffle_weight( - w1_q, - layout=(16, 16), - is_guinterleave=True, - gate_up=True, - ).view(w1_q.dtype), - "w2": shuffle_weight( - w2_q, - layout=(16, 16), - is_guinterleave=True, - gate_up=False, - ).view(w2_q.dtype), - "w1_scale": shuffle_scale( - w1_scale.view(ne * 2 * inter, h // 32), - experts_cnt=ne, - is_guinterleave=True, - gate_up=True, - ).view(ne, 2 * inter, h // 32), - "w2_scale": shuffle_scale( - w2_scale.view(ne * h, inter // 32), - experts_cnt=ne, - is_guinterleave=True, - gate_up=False, - ).view(ne, h, inter // 32), - } - ) - - return {"flydsl": flydsl, "mxfp4": mxfp4} - - -def build_inputs(shape: KimiShape, device: torch.device, seed: int = 1): - torch.manual_seed(seed) - hidden = torch.randn((M, shape.model_dim), dtype=dtypes.bf16, device=device) / 10 - - routed_experts = shape.experts - 1 - routed_topk = shape.topk - 1 - shared_id = shape.experts - 1 - - gen = torch.Generator(device=device).manual_seed(seed) - bias = torch.randn(routed_experts, generator=gen, device=device) * 0.5 - scores = torch.randn(M, routed_experts, generator=gen, device=device) + bias - routed_weight, routed_ids = torch.topk(scores.softmax(-1), routed_topk, dim=-1) - - shared_ids = torch.full((M, 1), shared_id, device=device, dtype=routed_ids.dtype) - shared_weight = torch.ones((M, 1), device=device, dtype=routed_weight.dtype) - topk_ids = torch.cat([shared_ids, routed_ids], dim=1).to(torch.int32) - topk_weight = torch.cat([shared_weight, routed_weight], dim=1).to(torch.float32) - return hidden, topk_ids, topk_weight - - -def run_aiter_moe(hidden, topk_ids, topk_weight, weights): - return fused_moe( - hidden, - weights["w1"], - weights["w2"], - topk_weight, - topk_ids, - activation=ActivationType.Silu, - quant_type=QuantType.per_1x32, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_kimi(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_flydsl_moe_16384( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl_bm96(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm96( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl_bm128p64(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128p64( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl_bm128_storemask(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_storemask( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl_bm128_bn512(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def run_local_mxfp4_all_flydsl_bm128_bn512_all(hidden, topk_ids, topk_weight, weights): - return run_kimi_fp4_mxfp4_moe_16384_all_flydsl_bm128_bn512_all( - hidden, - weights["w1"], - w2=weights["w2"], - topk_ids=topk_ids, - topk_weight=topk_weight, - w1_scale=weights["w1_scale"], - w2_scale=weights["w2_scale"], - ) - - -def make_runners(hidden, topk_ids, topk_weight, weights): - return { - "aiter_moe": lambda: run_aiter_moe( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - "aiter_mxfp4_moe": lambda: run_aiter_moe( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_kimi_fp4": lambda: run_local_kimi( - hidden, - topk_ids, - topk_weight, - weights["flydsl"], - ), - "local_mxfp4_all_flydsl": lambda: run_local_mxfp4_all_flydsl( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_all_flydsl_bm96": lambda: run_local_mxfp4_all_flydsl_bm96( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_all_flydsl_bm128p64": lambda: run_local_mxfp4_all_flydsl_bm128p64( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_all_flydsl_bm128_storemask": lambda: run_local_mxfp4_all_flydsl_bm128_storemask( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_all_flydsl_bm128_bn512": lambda: run_local_mxfp4_all_flydsl_bm128_bn512( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - "local_mxfp4_all_flydsl_bm128_bn512_all": lambda: run_local_mxfp4_all_flydsl_bm128_bn512_all( - hidden, - topk_ids, - topk_weight, - weights["mxfp4"], - ), - } - - -def bench_cudagraph(fn, warmup: int, graph_iters: int, measure: int): - side = torch.cuda.Stream() - side.wait_stream(torch.cuda.current_stream()) - with torch.cuda.stream(side): - for _ in range(warmup): - fn() - torch.cuda.current_stream().wait_stream(side) - torch.cuda.synchronize() - - graph = torch.cuda.CUDAGraph() - with torch.cuda.graph(graph): - for _ in range(graph_iters): - fn() - - graph.replay() - starts = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] - ends = [torch.cuda.Event(enable_timing=True) for _ in range(measure)] - totals = [] - for i in range(measure): - starts[i].record() - graph.replay() - ends[i].record() - torch.cuda.synchronize() - for start, end in zip(starts, ends): - totals.append(start.elapsed_time(end) * 1e3) - totals.sort() - return totals[len(totals) // 2] / graph_iters - - -def cosine(a, b): - return torch.nn.functional.cosine_similarity( - a.float().reshape(-1), - b.float().reshape(-1), - dim=0, - ).item() - - -def max_abs(a, b): - return (a.float() - b.float()).abs().max().item() - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--warmup", type=int, default=DEFAULT_WARMUP) - parser.add_argument("--graph-iters", type=int, default=DEFAULT_GRAPH_ITERS) - parser.add_argument("--measure", type=int, default=DEFAULT_GRAPH_MEASURE) - parser.add_argument("--repeat", type=int, default=DEFAULT_REPEAT) - parser.add_argument( - "--runners", - default=None, - help="comma-separated runner names; defaults to all runners", - ) - args = parser.parse_args() - if args.repeat <= 0: - raise ValueError("--repeat must be positive") - - device = torch.device("cuda") - print(f"GPU: {torch.cuda.get_device_name(0)}") - print( - f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} " - f"INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}" - ) - print(f"stage1={STAGE1_KERNEL}") - print(f"stage2={STAGE2_KERNEL}") - print(f"mxfp4_stage1={MXFP4_STAGE1_KERNEL}") - print(f"mxfp4_stage2={MXFP4_STAGE2_KERNEL}") - print( - f"Timing: graph warmup={args.warmup} graph_iters={args.graph_iters} " - f"measure={args.measure} repeat={args.repeat} " - f"measured_calls_per_runner={args.graph_iters * args.measure * args.repeat}" - ) - - weights = build_weights(SHAPE, device) - hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) - - runners = make_runners(hidden, topk_ids, topk_weight, weights) - if args.runners: - requested = [item.strip() for item in args.runners.split(",") if item.strip()] - unknown = [name for name in requested if name not in runners] - if unknown: - raise ValueError(f"unknown runners: {', '.join(unknown)}") - runners = {name: runners[name] for name in requested} - - outputs = {} - for name, fn in runners.items(): - out = fn() - torch.cuda.synchronize() - if not torch.isfinite(out).all().item(): - raise RuntimeError(f"{name} output has non-finite values") - outputs[name] = out - - check_specs = [ - ("aiter_mxfp4_vs_aiter", "aiter_mxfp4_moe", "aiter_moe"), - ("local_vs_aiter", "local_kimi_fp4", "aiter_moe"), - ("local_mxfp4_all_flydsl_vs_aiter_mxfp4", "local_mxfp4_all_flydsl", "aiter_mxfp4_moe"), - ("local_mxfp4_all_flydsl_bm96_vs_aiter_mxfp4", "local_mxfp4_all_flydsl_bm96", "aiter_mxfp4_moe"), - ( - "local_mxfp4_all_flydsl_bm128p64_vs_aiter_mxfp4", - "local_mxfp4_all_flydsl_bm128p64", - "aiter_mxfp4_moe", - ), - ( - "local_mxfp4_all_flydsl_bm128_storemask_vs_aiter_mxfp4", - "local_mxfp4_all_flydsl_bm128_storemask", - "aiter_mxfp4_moe", - ), - ( - "local_mxfp4_all_flydsl_bm128_bn512_vs_aiter_mxfp4", - "local_mxfp4_all_flydsl_bm128_bn512", - "aiter_mxfp4_moe", - ), - ( - "local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4", - "local_mxfp4_all_flydsl_bm128_bn512_all", - "aiter_mxfp4_moe", - ), - ] - for name, lhs_name, rhs_name in check_specs: - if lhs_name not in outputs or rhs_name not in outputs: - continue - lhs = outputs[lhs_name] - rhs = outputs[rhs_name] - print( - f"{name}_cos={cosine(lhs, rhs):.6f} " - f"{name}_max_abs={max_abs(lhs, rhs):.6f}" - ) - - for name, fn in runners.items(): - samples = [ - bench_cudagraph(fn, args.warmup, args.graph_iters, args.measure) - for _ in range(args.repeat) - ] - us = float(statistics.median(samples)) - if len(samples) > 1: - formatted = ",".join(f"{sample:.1f}" for sample in samples) - print( - f"{name}_samples_us={formatted} " - f"range_us={min(samples):.1f}..{max(samples):.1f}" - ) - print(f"{name}_us={us:.1f}") - - -if __name__ == "__main__": - main() diff --git a/bench_small_bm16.py b/bench_small_bm16.py deleted file mode 100644 index 7733e9843..000000000 --- a/bench_small_bm16.py +++ /dev/null @@ -1,159 +0,0 @@ -import argparse -import statistics - -import bench as b -from kimi_fp4_moe_small_bm16 import ( - run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl, -) - - -RUNNER_ORDER = ( - "aiter", - "allfly", -) - -# Accuracy-first defaults for the tiny BM16 path. Capture enough calls per graph -# to amortize event/replay noise, but keep the default run finite for iterative -# kernel work. Override downward only for smoke tests. -DEFAULT_SMALL_WARMUP = 1000 -DEFAULT_SMALL_EAGER_ITERS = 500000 -DEFAULT_SMALL_GRAPH_ITERS = 512 -DEFAULT_SMALL_GRAPH_MEASURE = 101 -DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS = 10 -DEFAULT_REPEAT = 1 - - -def _time_fn(fn, args): - samples = [] - for _ in range(args.repeat): - if args.eager: - samples.append(b.bench(fn, warmup=args.warmup, iters=args.iters)) - else: - print(f"{args.warmup} {args.graph_iters} {args.measure} {args.graph_warmup_replays}") - samples.append( - b.bench_cudagraph( - fn, - warmup=args.warmup, - iters=args.graph_iters, - measure=args.measure, - graph_warmup_replays=args.graph_warmup_replays, - ) - ) - return float(statistics.median(samples)), samples - - -def _fmt_samples(samples): - if len(samples) <= 1: - return "" - body = ",".join(f"{sample:.3f}" for sample in samples) - return ( - f" samples={body}" - f" range_us={min(samples):.3f}..{max(samples):.3f}" - f" stdev_us={statistics.stdev(samples):.3f}" - ) - - -def _make_runners(shape, m, hidden, topk_ids, topk_weight, weights, device): - w = weights["mxfp4"] - aiter_fn, _, _ = b.make_mxfp4_fn( - shape, m, hidden, topk_ids, topk_weight, w, device - ) - - def allfly(): - return run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl( - hidden, - w["w1"], - w["w2"], - topk_weight, - topk_ids, - w1_scale=w["w1_scale"], - w2_scale=w["w2_scale"], - ) - - return { - "aiter": aiter_fn, - "allfly": allfly, - } - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("-M", "--M-list", default="4,8,16,32,64,128") - parser.add_argument("--warmup", type=int, default=DEFAULT_SMALL_WARMUP) - parser.add_argument("--iters", type=int, default=DEFAULT_SMALL_EAGER_ITERS) - parser.add_argument("--graph-iters", type=int, default=DEFAULT_SMALL_GRAPH_ITERS) - parser.add_argument("--measure", type=int, default=DEFAULT_SMALL_GRAPH_MEASURE) - parser.add_argument( - "--graph-warmup-replays", - type=int, - default=DEFAULT_SMALL_GRAPH_WARMUP_REPLAYS, - ) - parser.add_argument("--repeat", type=int, default=DEFAULT_REPEAT) - parser.add_argument("--eager", action="store_true") - parser.add_argument("--no-check", action="store_true") - args = parser.parse_args() - - if args.repeat <= 0: - raise ValueError("--repeat must be positive") - - shape = b.KIMI - device = b.torch.device("cuda") - ms = [int(item) for item in args.M_list.split(",") if item.strip()] - - mode = ( - f"eager warmup={args.warmup} iters={args.iters}" - if args.eager - else ( - f"graph warmup={args.warmup} graph_iters={args.graph_iters} " - f"measure={args.measure} graph_warmup_replays={args.graph_warmup_replays} " - f"measured_calls_per_sample={args.graph_iters * args.measure} " - f"measured_calls_per_runner={args.graph_iters * args.measure * args.repeat}" - ) - ) - print(f"GPU: {b.torch.cuda.get_device_name(0)}") - print(f"Timing: {mode} repeat={args.repeat}") - print( - f"Shape: NE={shape.NE} H={shape.H} INTER={shape.INTER} TOPK={shape.TOPK}" - ) - print("Preparing weights...", flush=True) - weights = b.build_weights(shape, device) - - header = "M,aiter_us,allfly_us,allfly_delta_us,cos_all,max_abs_all" - print(header) - - for m in ms: - hidden, topk_ids, topk_weight = b.build_inputs(shape, m, device) - runners = _make_runners( - shape, m, hidden, topk_ids, topk_weight, weights, device - ) - - cos_all = float("nan") - max_abs_all = float("nan") - if not args.no_check: - ref = runners["aiter"]().float() - b.torch.cuda.synchronize() - out = runners["allfly"]().float() - b.torch.cuda.synchronize() - if not b.torch.isfinite(out).all().item(): - raise RuntimeError(f"allfly M={m} produced non-finite output") - cos_all = b.cosine(ref, out) - max_abs_all = (ref - out).abs().max().item() - - timings = {} - for name in RUNNER_ORDER: - timings[name], samples = _time_fn(runners[name], args) - print( - f"sample M={m} {name}={timings[name]:.3f} us{_fmt_samples(samples)}", - flush=True, - ) - - allfly_delta = timings["allfly"] - timings["aiter"] - print( - f"{m},{timings['aiter']:.3f},{timings['allfly']:.3f}," - f"{allfly_delta:.3f},{cos_all:.9f},{max_abs_all:.6f}", - flush=True, - ) - - -if __name__ == "__main__": - main() diff --git a/bm_128_moe.py b/bm_128_moe.py deleted file mode 100644 index 1ded109cc..000000000 --- a/bm_128_moe.py +++ /dev/null @@ -1,142 +0,0 @@ - -import torch -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl.expr.typing import T -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - -TOKEN = 16384 -BLOCK_M = 128 -TOPK = 9 -EXPERTS = 385 -def div_up(a: int, b: int) -> int: - return (a + b - 1) // b - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) # TODO(是否要这个?) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes) - -def _elem_offset_to_i64(elem_offset): - - - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4 - ).result - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor): - assert topk_ids.shape == (TOKEN, TOPK) == topk_weight.shape - max_sorted = div_up(TOKEN * TOPK, BLOCK_M) + EXPERTS - blocks = max_sorted // BLOCK_M - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 # 前面的 int * experts个吧.. 这个不需要align么? - - total_pairs = TOKEN * TOPK - topk_nbytes = total_pairs * 4 - sort_ctas = 16 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 # TODO(是否开多了?为啥不和TOPK相关)? - threads = 1024 - - @flyc.kernel( - name = "sort kernel", - know_block_size = [BLOCK_M, 1, 1] - ) - def sort_count(arg_topk_ids: fx.Pointer, - arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_idx.x - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - if tx < arith.constant(EXPERTS, index=True): - memref.store(arith.constant(0, type=i32), local_count, [tx]) - # local_count[tx] = 0 - gpu.barrier() - per_cta = div_up(total_pairs, sort_ctas) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - for it in range_constexpr(div_up(per_cta, threads)): - idx = c_start + tx + arith.constant(it * threads, index=True) - if idx <= end: - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, 1) - - - - diff --git a/gpu_select.py b/gpu_select.py deleted file mode 100644 index afbc0e1d6..000000000 --- a/gpu_select.py +++ /dev/null @@ -1,205 +0,0 @@ -import json -import os -import re -import subprocess -import sys -from dataclasses import dataclass - - -@dataclass(frozen=True) -class GpuUsage: - index: int - total_used_bytes: int - process_used_bytes: int - gpu_busy_percent: int - - -def _parse_int(value: object) -> int: - try: - return int(str(value).strip()) - except (TypeError, ValueError): - return 0 - - -def _rocm_smi_json(*args: str) -> dict: - proc = subprocess.run( - ["rocm-smi", *args, "--json"], - check=False, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - ) - if proc.returncode != 0: - raise RuntimeError(proc.stderr.strip() or "rocm-smi failed") - try: - return json.loads(proc.stdout) - except json.JSONDecodeError as exc: - raise RuntimeError(f"failed to parse rocm-smi JSON: {exc}") from exc - - -def _rocm_smi_text(*args: str) -> str: - proc = subprocess.run( - ["rocm-smi", *args], - check=False, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - ) - if proc.returncode != 0: - raise RuntimeError(proc.stderr.strip() or "rocm-smi failed") - return proc.stdout - - -def _card_total_used_bytes() -> dict[int, int]: - data = _rocm_smi_json("--showmeminfo", "vram") - result = {} - for card, fields in data.items(): - match = re.fullmatch(r"card(\d+)", str(card)) - if not match: - continue - result[int(match.group(1))] = _parse_int(fields.get("VRAM Total Used Memory (B)")) - return result - - -def _card_gpu_busy_percent() -> dict[int, int]: - data = _rocm_smi_json("--showuse") - result = {} - for card, fields in data.items(): - match = re.fullmatch(r"card(\d+)", str(card)) - if not match: - continue - result[int(match.group(1))] = _parse_int(fields.get("GPU use (%)")) - return result - - -def _pid_gpu_map(text: str) -> dict[int, list[int]]: - result: dict[int, list[int]] = {} - current_pid: int | None = None - for line in text.splitlines(): - match = re.match(r"^PID\s+(\d+)\s+is using", line.strip()) - if match: - current_pid = int(match.group(1)) - result.setdefault(current_pid, []) - continue - if current_pid is None: - continue - stripped = line.strip() - if not stripped: - continue - if re.fullmatch(r"\d+(?:\s+\d+)*", stripped): - result[current_pid].extend(int(item) for item in stripped.split()) - current_pid = None - return result - - -def _pid_vram_map(text: str) -> dict[int, int]: - result: dict[int, int] = {} - in_table = False - for line in text.splitlines(): - stripped = line.strip() - if stripped.startswith("PID") and "VRAM USED" in stripped: - in_table = True - continue - if not in_table: - continue - if not stripped or stripped.startswith("="): - continue - parts = stripped.split() - if len(parts) < 4 or not parts[0].isdigit(): - continue - result[int(parts[0])] = _parse_int(parts[3]) - return result - - -def _card_process_used_bytes(cards: set[int]) -> dict[int, int]: - text = _rocm_smi_text("--showpidgpus", "--showpids") - pid_to_gpus = _pid_gpu_map(text) - pid_to_vram = _pid_vram_map(text) - result = {card: 0 for card in cards} - for pid, gpus in pid_to_gpus.items(): - vram = pid_to_vram.get(pid, 0) - for gpu in gpus: - if gpu in result: - result[gpu] += vram - return result - - -def get_gpu_usage() -> list[GpuUsage]: - total_used = _card_total_used_bytes() - if not total_used: - raise RuntimeError("rocm-smi reported no GPU cards") - gpu_busy = _card_gpu_busy_percent() - process_used = _card_process_used_bytes(set(total_used)) - return [ - GpuUsage( - index=index, - total_used_bytes=total, - process_used_bytes=process_used[index], - gpu_busy_percent=gpu_busy.get(index, 0), - ) - for index, total in sorted(total_used.items()) - ] - - -def select_empty_gpu( - max_process_used_bytes: int = 1024, - max_gpu_busy_percent: int = 0, -) -> GpuUsage: - usages = get_gpu_usage() - idle = [ - gpu - for gpu in usages - if gpu.process_used_bytes < max_process_used_bytes - and gpu.gpu_busy_percent <= max_gpu_busy_percent - ] - if not idle: - summary = ", ".join( - f"gpu{gpu.index}:proc={gpu.process_used_bytes}B," - f"busy={gpu.gpu_busy_percent}%,total={gpu.total_used_bytes}B" - for gpu in usages - ) - raise RuntimeError( - f"no GPU has process VRAM < {max_process_used_bytes} bytes " - f"and GPU use <= {max_gpu_busy_percent}%; {summary}" - ) - return min( - idle, - key=lambda gpu: ( - gpu.process_used_bytes, - gpu.gpu_busy_percent, - gpu.total_used_bytes, - gpu.index, - ), - ) - - -def bind_empty_gpu_for_torch(script_name: str, max_process_used_bytes: int = 1024) -> int | None: - if os.environ.get("FLYDSL_AUTO_GPU", "1").lower() in {"0", "false", "no"}: - return None - already_bound = os.environ.get("FLYDSL_GPU_BOUND_FOR_TORCH") - if already_bound is not None: - try: - return int(already_bound) - except ValueError: - return None - - try: - selected = select_empty_gpu(max_process_used_bytes=max_process_used_bytes) - except Exception as exc: - print(f"[{script_name}] GPU auto-select failed: {exc}", file=sys.stderr) - raise SystemExit(1) from exc - - gpu = str(selected.index) - os.environ["HIP_VISIBLE_DEVICES"] = gpu - os.environ["CUDA_VISIBLE_DEVICES"] = gpu - os.environ.pop("ROCR_VISIBLE_DEVICES", None) - os.environ["FLYDSL_GPU_BOUND_FOR_TORCH"] = gpu - print( - f"[{script_name}] Auto-selected physical ROCm GPU/card {gpu} " - f"(torch will see it as cuda:0; " - f"process_vram={selected.process_used_bytes}B, " - f"busy={selected.gpu_busy_percent}%, " - f"total_used={selected.total_used_bytes}B)", - flush=True, - ) - return selected.index diff --git a/kernels/hgemm_splitk.py b/kernels/hgemm_splitk.py index 9ea5ccced..87ec2ff4d 100644 --- a/kernels/hgemm_splitk.py +++ b/kernels/hgemm_splitk.py @@ -37,10 +37,6 @@ def __init__(self, dtype: str): def __call__(self, a_frag, b_frag, c_frag): pass - def init(self, a_frag, b_frag): - zero = arith.constant_vector(0.0, T.vec(self.WMMA_C_FRAG_VALUES, T.f32)) - return self(a_frag, b_frag, zero) - class WmmaHalf_m16n16k16(WmmaHalfBase): WMMA_M = 16 @@ -74,50 +70,17 @@ class WmmaHalf_m16n16k32(WmmaHalfBase): WMMA_B_FRAG_VALUES = 8 WMMA_C_FRAG_VALUES = 4 - def __init__(self, dtype: str, use_agpr_inline: bool = False): + def __init__(self, dtype: str): self.dtype = dtype - self.use_agpr_inline = use_agpr_inline def __call__(self, a_frag, b_frag, c_frag): res_ty = T.vec(self.WMMA_C_FRAG_VALUES, T.f32) + operands = [a_frag, b_frag, c_frag, 0, 0, 0] if self.dtype == "bf16": - if self.use_agpr_inline: - a_i32x4 = vector.bitcast(T.i32x4, a_frag) - b_i32x4 = vector.bitcast(T.i32x4, b_frag) - return llvm.inline_asm( - res_ty, - [ - arith._to_raw(a_i32x4), - arith._to_raw(b_i32x4), - arith._to_raw(c_frag), - ], - "v_mfma_f32_16x16x32_bf16 $0, $1, $2, $0", - "=a,v,v,0", - has_side_effects=True, - ) - operands = [a_frag, b_frag, c_frag, 0, 0, 0] return rocdl.mfma_f32_16x16x32_bf16(res_ty, operands) else: - operands = [a_frag, b_frag, c_frag, 0, 0, 0] return rocdl.mfma_f32_16x16x32_f16(res_ty, operands) - def init(self, a_frag, b_frag): - res_ty = T.vec(self.WMMA_C_FRAG_VALUES, T.f32) - if self.dtype == "bf16" and self.use_agpr_inline: - a_i32x4 = vector.bitcast(T.i32x4, a_frag) - b_i32x4 = vector.bitcast(T.i32x4, b_frag) - return llvm.inline_asm( - res_ty, - [ - arith._to_raw(a_i32x4), - arith._to_raw(b_i32x4), - ], - "v_mfma_f32_16x16x32_bf16 $0, $1, $2, 0", - "=a,v,v", - has_side_effects=True, - ) - return super().init(a_frag, b_frag) - class OnlineScheduler: def __init__(self, total_signals: int, init_count: int = 0): @@ -150,12 +113,6 @@ def compile_hgemm_kernel( BLOCK_N_WARPS: int = 2, BLOCK_K_WARPS: int = 1, B_TO_LDS: bool = False, - A_LDS_K32_BLOCKING: bool = False, - B_LDS_K32_BLOCKING: bool = False, - K32_REGISTER_PIPELINE: bool = False, - PRESHUFFLE: bool = False, - XCD_SWIZZLE: bool = False, - XCD_WGM: int = 4, HAS_BIAS: bool = False, ): assert BLOCK_M_WARPS * BLOCK_N_WARPS * BLOCK_K_WARPS <= 16 @@ -179,7 +136,7 @@ def compile_hgemm_kernel( MFMA_PER_WARP_K = 2 ASYNC_COPY = True else: - WMMA_IMPL = WmmaHalf_m16n16k32(dtype, use_agpr_inline=(GPU_ARCH == "gfx950" and dtype == "bf16")) + WMMA_IMPL = WmmaHalf_m16n16k32(dtype) DMA_BYTES = 16 MFMA_PER_WARP_K = 1 ASYNC_COPY = True @@ -249,78 +206,15 @@ def compile_hgemm_kernel( allocator.ptr += SMEM_USE_ - SMEM_USE assert SMEM_USE_ <= SMEM_CAPACITY_MAP[GPU_ARCH] LDG_ASYNC_VEC_SIZE = DMA_BYTES // DTYPE_BYTES + LDG_A_X_THREADS_AS = BLOCK_K // LDG_ASYNC_VEC_SIZE LDG_REG_A_COUNT_AS = BLOCK_MK_SIZE // LDG_ASYNC_VEC_SIZE // BLOCK_THREADS + LDG_B_X_THREADS_AS = BLOCK_K // LDG_ASYNC_VEC_SIZE LDG_REG_B_COUNT_AS = BLOCK_NK_SIZE // LDG_ASYNC_VEC_SIZE // BLOCK_THREADS LDG_WAIT_COUNT = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS assert ((STAGES - 2) * LDG_WAIT_COUNT) < 63 - # RP1: vmcnt(N) at the loop tail = "wait until <= N VMEM loads are in flight". - # Smaller N is safer (forces more loads to land) but slower; larger N is faster - # but risks reading not-yet-landed data. The tile read next (next_stage K0) was - # prefetched 2 tiles earlier; between that bfld and this read only one k-group's - # worth of newer bfld is issued (LDG_WAIT_COUNT // 2 loads), so that is the - # largest N that still guarantees the target batch has landed. Perf is identical - # to the looser LDG_WAIT_COUNT (the tail vmcnt is not the bottleneck), so use the - # tighter, provably-safe bound. - RP1_TAIL_VMCNT = LDG_WAIT_COUNT // 2 - # A is consumed one K32 slice at a time. Store A in a K32-blocked LDS view - # when the shape supports it. For the gfx950 256x256x64 path this makes - # each async A chunk 64x32 instead of 32x64. - A_LDS_K_CHUNK = WARP_ATOM_K - A_LDS_K_GROUPS = BLOCK_K // A_LDS_K_CHUNK - A_LDS_X_THREADS_AS = A_LDS_K_CHUNK // LDG_ASYNC_VEC_SIZE - A_LDS_ROWS_PER_CHUNK_AS = BLOCK_THREADS // A_LDS_X_THREADS_AS - A_LDS_ROW_GROUPS = BLOCK_M // A_LDS_ROWS_PER_CHUNK_AS if A_LDS_ROWS_PER_CHUNK_AS <= BLOCK_M else 0 - A_LDS_K_BLOCKS16 = (A_LDS_K_CHUNK * DTYPE_BYTES) // 16 - A_LDS_K32_BLOCKED = ( - (A_LDS_K32_BLOCKING or K32_REGISTER_PIPELINE) - and B_TO_LDS - and ASYNC_COPY - and (A_LDS_K_CHUNK == 32) - and (A_LDS_X_THREADS_AS > 0) - and (BLOCK_THREADS % A_LDS_X_THREADS_AS == 0) - and (A_LDS_ROWS_PER_CHUNK_AS <= BLOCK_M) - and (BLOCK_M % A_LDS_ROWS_PER_CHUNK_AS == 0) - and (BLOCK_K % A_LDS_K_CHUNK == 0) - and (LDG_REG_A_COUNT_AS == A_LDS_ROW_GROUPS * A_LDS_K_GROUPS) - ) - B_LDS_K_CHUNK = WARP_ATOM_K - B_LDS_K_GROUPS = BLOCK_K // B_LDS_K_CHUNK - B_LDS_X_THREADS_AS = B_LDS_K_CHUNK // LDG_ASYNC_VEC_SIZE - B_LDS_ROWS_PER_CHUNK_AS = BLOCK_THREADS // B_LDS_X_THREADS_AS - B_LDS_ROW_GROUPS = BLOCK_N // B_LDS_ROWS_PER_CHUNK_AS if B_LDS_ROWS_PER_CHUNK_AS <= BLOCK_N else 0 - B_LDS_K_BLOCKS16 = (B_LDS_K_CHUNK * DTYPE_BYTES) // 16 - B_LDS_K32_BLOCKED = ( - (B_LDS_K32_BLOCKING or K32_REGISTER_PIPELINE) - and B_TO_LDS - and ASYNC_COPY - and (B_LDS_K_CHUNK == 32) - and (B_LDS_X_THREADS_AS > 0) - and (BLOCK_THREADS % B_LDS_X_THREADS_AS == 0) - and (B_LDS_ROWS_PER_CHUNK_AS <= BLOCK_N) - and (BLOCK_N % B_LDS_ROWS_PER_CHUNK_AS == 0) - and (BLOCK_K % B_LDS_K_CHUNK == 0) - and (LDG_REG_B_COUNT_AS == B_LDS_ROW_GROUPS * B_LDS_K_GROUPS) - ) - REGISTER_PREFETCH_K1 = ( - K32_REGISTER_PIPELINE - and A_LDS_K32_BLOCKED - and B_LDS_K32_BLOCKED - and (STAGES == 2) - and (WARP_K_STEPS == 2) - and (BLOCK_K_WARPS == 1) - ) - assert not K32_REGISTER_PIPELINE or REGISTER_PREFETCH_K1 - LDG_A_X_THREADS_AS = A_LDS_X_THREADS_AS if A_LDS_K32_BLOCKED else BLOCK_K // LDG_ASYNC_VEC_SIZE - LDG_B_X_THREADS_AS = B_LDS_X_THREADS_AS if B_LDS_K32_BLOCKED else BLOCK_K // LDG_ASYNC_VEC_SIZE KERNEL_NAME = f"hgemm_{dtype}_{BLOCK_M}x{BLOCK_N}x{BLOCK_K}x{STAGES}_SPK{SPLIT_K}_W{BLOCK_M_WARPS}x{BLOCK_N_WARPS}x{BLOCK_K_WARPS}_BLDS{int(B_TO_LDS)}_TN" KERNEL_NAME += "_AS0" if not ASYNC_COPY else "_AS1" - if A_LDS_K32_BLOCKED: - KERNEL_NAME += "_AK32" - if B_LDS_K32_BLOCKED: - KERNEL_NAME += "_BK32" - if REGISTER_PREFETCH_K1: - KERNEL_NAME += "_RP1" if HAS_BIAS: KERNEL_NAME += "_BIAS" @@ -340,45 +234,15 @@ def hgemm_kernel( A_ = GTensor(A, dtype=dtype_, shape=(-1, k)) B_ = GTensor(B, dtype=dtype_, shape=(n, k)) - - # Preshuffle layout (host preshuffle_rows_k): A/B are pre-permuted to - # [R//tile_row, K//BLOCK_K, KG, tile_row, K_CHUNK] - # i.e. the K32 sub-group (K_CHUNK=32 elems = 64B) is an OUTER K axis, so the - # tile_row rows of one k_group are contiguous. One buffer_load (one k_group, - # one row-block) then reads a fully contiguous run and each 128B L2 line is - # used in full -- halves L2 accesses vs a [.., tile_row, BLOCK_K] layout where - # a load only touched 64B of each 128B line. - _PRESH_KC = WARP_ATOM_K # K_CHUNK = 32 (matches A/B_LDS_K_CHUNK) - _PRESH_KG = BLOCK_K // _PRESH_KC # 2 - _K_TILES_SH = k // BLOCK_K - - def preshuffle_vaddr_soffset(row, k_offset, within, tile_row): - # within in [0, BLOCK_K): kg = which K32 sub-group, wc = within-chunk col. - # off = (((tm*K_TILES + ktile)*KG + kg)*tile_row + mi)*K_CHUNK + wc - # Split into a lane-constant vaddr part and a wave-uniform soffset (K step): - # vaddr = (tm*K_TILES*KG*tile_row + kg*tile_row + mi)*K_CHUNK + wc - # soff = ktile*(KG*tile_row*K_CHUNK), ktile = k_offset // BLOCK_K - row = fx.Index(row) - within = fx.Index(within) - tm = row // tile_row - mi = row % tile_row - kg = within // _PRESH_KC - wc = within % _PRESH_KC - vaddr = (tm * _K_TILES_SH * _PRESH_KG * tile_row + kg * tile_row + mi) * _PRESH_KC + wc - ktile = fx.Index(k_offset) // BLOCK_K - soff = ktile * (_PRESH_KG * tile_row * _PRESH_KC) - return vaddr, soff C_ = GTensor(C, dtype=dtype_, shape=(-1, n)) if const_expr(HAS_BIAS): BIAS_ = GTensor(BIAS, dtype=dtype_, shape=(n,)) base_ptr = allocator.get_base() smem_a_ptr = SmemPtr(base_ptr, smem_a_offset, dtype_, shape=(STAGES * BLOCK_M * BLOCK_K,)) as_ = STensor(smem_a_ptr, dtype_, shape=(STAGES, BLOCK_M, BLOCK_K)) - as_k32_ = STensor(smem_a_ptr, dtype_, shape=(STAGES, A_LDS_K_GROUPS, BLOCK_M, A_LDS_K_CHUNK)) if const_expr(B_TO_LDS): smem_b_ptr = SmemPtr(base_ptr, smem_b_offset, dtype_, shape=(STAGES * BLOCK_N * BLOCK_K,)) bs_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, BLOCK_N, BLOCK_K)) - bs_k32_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, B_LDS_K_GROUPS, BLOCK_N, B_LDS_K_CHUNK)) smem_c_ptr = SmemPtr(base_ptr, smem_a_offset, dtype_, shape=(BLOCK_K_WARPS * BLOCK_M * BLOCK_N,)) cs_ = STensor(smem_c_ptr, dtype_, shape=(BLOCK_K_WARPS, BLOCK_M, BLOCK_N)) if const_expr(IS_SPLIT_K): @@ -393,45 +257,8 @@ def preshuffle_vaddr_soffset(row, k_offset, within, tile_row): w_tid = tid % WARP_SIZE def swizzle_for_cache_reuse(pid): - if const_expr(not XCD_SWIZZLE): - return pid // N_BLOCKS, pid % N_BLOCKS - # XCD-aware tile remap (ported from fp8_gemm_4wave._xcd_swizzle). gfx950 - # has 8 XCDs each with its own L2 slice; HW assigns CTAs round-robin - # (xcd = pid % 8). Invert that so each XCD owns a contiguous tile range, - # then super-group along M (WGM rows) so tiles on one XCD reuse the same - # A rows / B columns in that XCD's L2. Falls back to plain row-major for - # small grids or grids not divisible by NUM_XCDS. - NUM_XCDS = const_expr(8) - WGM = const_expr(XCD_WGM) # M-major super-group size - - pid_idx = fx.Index(pid) - num_pid_m = (fx.Index(m) + (BLOCK_M - 1)) // BLOCK_M - num_pid_n = N_BLOCKS - num_wg = num_pid_m * num_pid_n - - simple_m = pid_idx // num_pid_n - simple_n = pid_idx % num_pid_n - - intra_xcd = pid_idx // NUM_XCDS - xcd = pid_idx % NUM_XCDS - wgid_remap = xcd * (num_wg // NUM_XCDS) + intra_xcd - num_wgid_in_group = WGM * num_pid_n - group_id = wgid_remap // num_wgid_in_group - intra_group = wgid_remap % num_wgid_in_group - first_pid_m = group_id * WGM - gsm = num_pid_m - first_pid_m - group_size_m = arith.select( - arith.cmpi(arith.CmpIPredicate.slt, gsm, fx.Index(WGM)), gsm, fx.Index(WGM) - ) - pid_n = intra_group // group_size_m - intra_group_m = intra_group % group_size_m - pid_m = first_pid_m + intra_group_m - - use_simple = arith.cmpi(arith.CmpIPredicate.ne, num_wg % NUM_XCDS, fx.Index(0)) - return ( - arith.select(use_simple, simple_m, pid_m), - arith.select(use_simple, simple_n, pid_n), - ) + # Do nothing currently + return pid // N_BLOCKS, pid % N_BLOCKS block_m_idx, block_n_idx = swizzle_for_cache_reuse(fx.block_idx.x) ks_idx = fx.Index(fx.block_idx.y) @@ -449,7 +276,6 @@ def swizzle_for_cache_reuse(pid): ldmatrix_b_k_vec_idx = w_tid // WMMA_N * WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K warp_k_slice_base = wid_k * K_SLICE C_FRAGS_LEN = WARP_M_STEPS * WARP_N_STEPS - B_INITIAL_READS_CONST = 4 if WARP_N_STEPS > 4 else WARP_N_STEPS c_frags = [acc_init] * C_FRAGS_LEN def __barrier(vmcnt=0, use_s_barrier=True): @@ -459,19 +285,6 @@ def __barrier(vmcnt=0, use_s_barrier=True): asm = f"s_waitcnt vmcnt({vmcnt})" llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) - def __barrier_lgkmcnt(use_s_barrier=True, vmcnt=None): - # vmcnt is None -> LDS-only sync; otherwise also bound in-flight global - # loads. Both RP1 half barriers carry vmcnt + lgkmcnt(0): each half has a - # ds_read of a globally-prefetched block (needs vmcnt to ensure the bfld - # landed) and writes LDS that another wave will overwrite next iter - # (needs lgkmcnt(0)+s_barrier for cross-wave WAR/visibility). - wait = "s_waitcnt lgkmcnt(0)" if vmcnt is None else f"s_waitcnt vmcnt({vmcnt}) lgkmcnt(0)" - if const_expr(use_s_barrier): - asm = wait + "\n\ts_barrier" - else: - asm = wait - llvm.InlineAsmOp(None, [], asm, "", has_side_effects=True) - def get_llvm_ptr(ptr, offset, dtype_bytes, ptr_type=ir.Type.parse("!llvm.ptr<1>")): base_ptr = fly.extract_aligned_pointer_as_index(ptr_type, ptr) base_ptr = llvm.PtrToIntOp(T.i64, base_ptr).result @@ -608,145 +421,78 @@ def get_dma_copy_warp_offset(): return warp_offset def buffer_load_lds_inline(rsrc, lds_ptr, global_offset): - # No sc0 (=glc) on these read-only A/B input loads: the inputs are not - # written during the kernel, so global coherence is unnecessary, and it - # matches the fp8_gemm_4wave path (which omits sc0). Avoids the extra L2 - # coherence traffic glc can force under cache pressure. if const_expr(DMA_BYTES == 16): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, 0 offen lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, 0 offen sc0 lds" elif const_expr(DMA_BYTES == 8): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, 0 offen lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, 0 offen sc0 lds" elif const_expr(DMA_BYTES == 4): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, 0 offen lds" + asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, 0 offen sc0 lds" else: raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") llvm.InlineAsmOp(None, [lds_ptr, global_offset, rsrc], asm, "s,v,s", has_side_effects=True) - def buffer_load_lds_inline_soff(rsrc, lds_ptr, vaddr_off, soffset): - # Like buffer_load_lds_inline but the wave-uniform K-step rides the scalar - # soffset ($3) instead of being folded into the per-lane vaddr ($1). Lets - # vaddr stay loop-invariant (shared VGPR across K tiles). - if const_expr(DMA_BYTES == 16): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx4 $1, $2, $3 offen lds" - elif const_expr(DMA_BYTES == 8): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dwordx2 $1, $2, $3 offen lds" - elif const_expr(DMA_BYTES == 4): - asm = "s_mov_b32 m0, $0\n\tbuffer_load_dword $1, $2, $3 offen lds" - else: - raise NotImplementedError(f"DMA_BYTES={DMA_BYTES} not supported") - llvm.InlineAsmOp(None, [lds_ptr, vaddr_off, rsrc, soffset], asm, "s,v,s,s", has_side_effects=True) - - def get_async_lds_ptr(lds_tensor, lds_stage, i): - lds_offset = lds_tensor.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES - lds_base = memref.extract_aligned_pointer_as_index(lds_tensor.memptr) + lds_offset - lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) - return buffer_ops.get_element_ptr( - lds_ptr_base, - warp_offset, - static_byte_offset=i * BLOCK_THREADS * DMA_BYTES, - ) - - def get_async_lds_ptr_from_offset(lds_tensor, elem_offset): - lds_offset = elem_offset * DTYPE_BYTES - lds_base = memref.extract_aligned_pointer_as_index(lds_tensor.memptr) + lds_offset - lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) - return buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) - - def ldg_sts_a_async_one(k_offset, lds_stage, i): - if const_expr(A_LDS_K32_BLOCKED): - row_group = i % A_LDS_ROW_GROUPS - k_group = i // A_LDS_ROW_GROUPS - row_in_group = tid // A_LDS_X_THREADS_AS - k_local_idx = tid % A_LDS_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - m_local_idx = row_group * A_LDS_ROWS_PER_CHUNK_AS + row_in_group - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, fx.Int32(A_LDS_K_BLOCKS16)) - a_within = k_group * A_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES - col_idx = fx.Index(k_offset + a_within) - lds_offset = as_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * A_LDS_ROWS_PER_CHUNK_AS, 0)) - lds_ptr = get_async_lds_ptr_from_offset(as_k32_, lds_offset) - else: + def ldg_sts_a_async(k_offset, lds_stage): + for i in range_constexpr(LDG_REG_A_COUNT_AS): global_tid = BLOCK_THREADS * i + tid m_local_idx = global_tid // LDG_A_X_THREADS_AS k_local_idx = global_tid % LDG_A_X_THREADS_AS * LDG_ASYNC_VEC_SIZE col_in_bytes = k_local_idx * DTYPE_BYTES col_in_bytes = swizzle_xor16(m_local_idx, col_in_bytes, k_blocks16) + row_idx = m_offset + fx.Index(m_local_idx) + safe_row_idx = arith.select( + arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(m)), + row_idx, + fx.Index(0), + ) col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) - lds_ptr = get_async_lds_ptr(as_, lds_stage, i) - row_idx = m_offset + fx.Index(m_local_idx) - safe_row_idx = arith.select( - arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(m)), - row_idx, - fx.Index(0), - ) - if const_expr(PRESHUFFLE): - vaddr_e, soff_e = preshuffle_vaddr_soffset(safe_row_idx, fx.Index(k_offset), a_within, BLOCK_M) - vaddr_i32 = arith.index_cast(T.i32, vaddr_e * DTYPE_BYTES) - soff_i32 = rocdl.readfirstlane(T.i32, arith.index_cast(T.i32, soff_e * DTYPE_BYTES)) - buffer_load_lds_inline_soff(A_.rsrc, lds_ptr, vaddr_i32, soff_i32) - else: + # get offset global_offset = A_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) + # get lds ptr + if const_expr(i == 0): + lds_offset = as_.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES + lds_base = memref.extract_aligned_pointer_as_index(as_.memptr) + lds_offset + lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) + lds_ptr = buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) + else: + lds_ptr = buffer_ops.get_element_ptr( + lds_ptr, + static_byte_offset=BLOCK_THREADS * DMA_BYTES, + ) + # dma copy buffer_load_lds_inline(A_.rsrc, lds_ptr, global_offset) - def ldg_sts_a_async(k_offset, lds_stage): - for i in range_constexpr(LDG_REG_A_COUNT_AS): - ldg_sts_a_async_one(k_offset, lds_stage, i) - - def ldg_sts_b_async_one(k_offset, lds_stage, i): - if const_expr(B_LDS_K32_BLOCKED): - row_group = i % B_LDS_ROW_GROUPS - k_group = i // B_LDS_ROW_GROUPS - row_in_group = tid // B_LDS_X_THREADS_AS - k_local_idx = tid % B_LDS_X_THREADS_AS * LDG_ASYNC_VEC_SIZE - n_local_idx = row_group * B_LDS_ROWS_PER_CHUNK_AS + row_in_group - col_in_bytes = k_local_idx * DTYPE_BYTES - col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, fx.Int32(B_LDS_K_BLOCKS16)) - b_within = k_group * B_LDS_K_CHUNK + col_in_bytes // DTYPE_BYTES - col_idx = fx.Index(k_offset + b_within) - lds_offset = bs_k32_.linear_offset((fx.Index(lds_stage), k_group, row_group * B_LDS_ROWS_PER_CHUNK_AS, 0)) - lds_ptr = get_async_lds_ptr_from_offset(bs_k32_, lds_offset) - else: + def ldg_sts_b_async(k_offset, lds_stage): + for i in range_constexpr(LDG_REG_B_COUNT_AS): global_tid = BLOCK_THREADS * i + tid n_local_idx = global_tid // LDG_B_X_THREADS_AS k_local_idx = global_tid % LDG_B_X_THREADS_AS * LDG_ASYNC_VEC_SIZE col_in_bytes = k_local_idx * DTYPE_BYTES col_in_bytes = swizzle_xor16(n_local_idx, col_in_bytes, k_blocks16) + row_idx = n_offset + fx.Index(n_local_idx) + safe_row_idx = arith.select( + arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(n)), + row_idx, + fx.Index(0), + ) col_idx = fx.Index(k_offset + col_in_bytes // DTYPE_BYTES) - lds_ptr = get_async_lds_ptr(bs_, lds_stage, i) - row_idx = n_offset + fx.Index(n_local_idx) - safe_row_idx = arith.select( - arith.cmpi(arith.CmpIPredicate.ult, row_idx, fx.Index(n)), - row_idx, - fx.Index(0), - ) - if const_expr(PRESHUFFLE): - vaddr_e, soff_e = preshuffle_vaddr_soffset(safe_row_idx, fx.Index(k_offset), b_within, BLOCK_N) - vaddr_i32 = arith.index_cast(T.i32, vaddr_e * DTYPE_BYTES) - soff_i32 = rocdl.readfirstlane(T.i32, arith.index_cast(T.i32, soff_e * DTYPE_BYTES)) - buffer_load_lds_inline_soff(B_.rsrc, lds_ptr, vaddr_i32, soff_i32) - else: + # get offset global_offset = B_.linear_offset((safe_row_idx, col_idx)) * DTYPE_BYTES global_offset = arith.index_cast(T.i32, global_offset) + # get lds ptr + if const_expr(i == 0): + lds_offset = bs_.linear_offset((fx.Index(lds_stage), 0, 0)) * DTYPE_BYTES + lds_base = memref.extract_aligned_pointer_as_index(bs_.memptr) + lds_offset + lds_ptr_base = buffer_ops.create_llvm_ptr(arith.index_cast(T.i64, lds_base), address_space=3) + lds_ptr = buffer_ops.get_element_ptr(lds_ptr_base, warp_offset) + else: + lds_ptr = buffer_ops.get_element_ptr( + lds_ptr, + static_byte_offset=BLOCK_THREADS * DMA_BYTES, + ) + # dma copy buffer_load_lds_inline(B_.rsrc, lds_ptr, global_offset) - def ldg_sts_b_async(k_offset, lds_stage): - for i in range_constexpr(LDG_REG_B_COUNT_AS): - ldg_sts_b_async_one(k_offset, lds_stage, i) - - def ldg_sts_async_one(k_offset, lds_stage, i): - if const_expr(i < LDG_REG_B_COUNT_AS): - ldg_sts_b_async_one(k_offset, lds_stage, i) - else: - ldg_sts_a_async_one(k_offset, lds_stage, i - LDG_REG_B_COUNT_AS) - - def ldg_sts_async_kgroup(k_offset, lds_stage, k_group): - assert B_LDS_K32_BLOCKED and A_LDS_K32_BLOCKED - for i in range_constexpr(B_LDS_ROW_GROUPS): - ldg_sts_b_async_one(k_offset, lds_stage, k_group * B_LDS_ROW_GROUPS + i) - for i in range_constexpr(A_LDS_ROW_GROUPS): - ldg_sts_a_async_one(k_offset, lds_stage, k_group * A_LDS_ROW_GROUPS + i) - def ldg_matrix_b(k_offset): vecs = [] for kk in range_constexpr(WARP_K_STEPS): @@ -759,375 +505,60 @@ def ldg_matrix_b(k_offset): vecs.append(vec) return vecs - def spread_counts(numer: int, denom: int): - out = [] - prev = 0 - for i in range_constexpr(denom): - cur = ((i + 1) * numer + denom - 1) // denom - out.append(cur - prev) - prev = cur - return out - - def load_a_frag_from(lds_stage, warp_atom_k_idx, ii): - s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) - warp_atom_m_idx = warp_m_idx + ii * WARP_ATOM_M - row = warp_atom_m_idx + ldmatrix_a_m_idx - if const_expr(A_LDS_K32_BLOCKED): - k_group = warp_atom_k_idx // A_LDS_K_CHUNK - k_in_group = warp_atom_k_idx % A_LDS_K_CHUNK + ldmatrix_a_k_vec_idx - col_in_bytes = k_in_group * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, fx.Int32(A_LDS_K_BLOCKS16)) - return as_k32_.vec_load( - (s, k_group, row, col_in_bytes // DTYPE_BYTES), - WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K, - ) - col_in_bytes = (warp_atom_k_idx + ldmatrix_a_k_vec_idx) * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) - return as_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K) - - def load_b_frag_from(lds_stage, warp_atom_k_idx, jj): - s = lds_stage if isinstance(lds_stage, fx.Index) else fx.Index(lds_stage) - warp_atom_n_idx = warp_n_idx + jj * WARP_ATOM_N - row = warp_atom_n_idx + ldmatrix_b_n_idx - if const_expr(B_LDS_K32_BLOCKED): - k_group = warp_atom_k_idx // B_LDS_K_CHUNK - k_in_group = warp_atom_k_idx % B_LDS_K_CHUNK + ldmatrix_b_k_vec_idx - col_in_bytes = k_in_group * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, fx.Int32(B_LDS_K_BLOCKS16)) - return bs_k32_.vec_load( - (s, k_group, row, col_in_bytes // DTYPE_BYTES), - WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K, - ) - col_in_bytes = (warp_atom_k_idx + ldmatrix_b_k_vec_idx) * DTYPE_BYTES - col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) - return bs_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K) - - def load_initial_frags_from(lds_stage): - b_frags = [] - for jj in range_constexpr(B_INITIAL_READS_CONST): - b_frags.append(load_b_frag_from(lds_stage, warp_k_slice_base, jj)) - a_frag = load_a_frag_from(lds_stage, warp_k_slice_base, 0) - return a_frag, b_frags - - def ldmatrix_compute_tile_streaming( - lds_stage, - c_frags, - initial_b_frags=None, - prefetched_initial_a_frag=None, - prefetched_initial_b_frags=None, - prefetch_k_offset=None, - prefetch_lds_stage=0, - init_zero=False, - ): + def ldmatrix_compute_tile_streaming(lds_stage, c_frags, initial_b_frags=None): s = fx.Index(lds_stage) c_frags_new = [cx for cx in c_frags] - async_load_idx = 0 - row_group = 0 - ldg_total = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS - # Finish the next-tile VMEM earlier so the loop-top vmcnt wait has - # more MFMA distance to hide global-to-LDS latency. - prefetch_rows = (ldg_total + 1) // 2 - if const_expr(prefetch_rows > WARP_K_STEPS * WARP_M_STEPS): - prefetch_rows = WARP_K_STEPS * WARP_M_STEPS - prefetch_split_1 = WARP_N_STEPS // 2 - a_prefetch_jj = 1 if const_expr(WARP_N_STEPS > 1) else 0 - b_initial_reads = B_INITIAL_READS_CONST - - def load_a_frag(warp_atom_k_idx, ii): - return load_a_frag_from(s, warp_atom_k_idx, ii) - - def load_b_frag(warp_atom_k_idx, jj): - return load_b_frag_from(s, warp_atom_k_idx, jj) - - def do_mfma(ii, jj, a_frag, b_frag): - if const_expr(MFMA_PER_WARP_K == 2): - # split a - a_i64x2 = vector.bitcast(T.i64x2, a_frag) - a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) - a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) - a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) - a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) - # split b - b_i64x2 = vector.bitcast(T.i64x2, b_frag) - b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) - b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) - b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) - b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) - c_idx = ii * WARP_N_STEPS + jj - acc_in = c_frags_new[c_idx] - acc_mid = WMMA_IMPL(a_v0, b_v0, acc_in) - c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) - elif const_expr(MFMA_PER_WARP_K == 1): - c_idx = ii * WARP_N_STEPS + jj - c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) - else: - raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") - - next_k_a_frag = None - next_k_b_frags = [None] * WARP_N_STEPS - next_k_prefetch_ii = WARP_M_STEPS - 2 if const_expr(WARP_M_STEPS > 1) else 0 - next_k_prefetch_a_jj = b_initial_reads if const_expr(b_initial_reads < WARP_N_STEPS) else WARP_N_STEPS - 1 - for kk in range_constexpr(WARP_K_STEPS): warp_atom_k_idx = warp_k_slice_base + kk * WARP_ATOM_K - if const_expr(initial_b_frags is None and kk == 0 and prefetched_initial_b_frags is not None): + if const_expr(initial_b_frags is None): b_frags = [0] * WARP_N_STEPS - for jj in range_constexpr(b_initial_reads): - b_frags[jj] = prefetched_initial_b_frags[jj] - elif const_expr(initial_b_frags is None and kk > 0): - b_frags = [0] * WARP_N_STEPS - for jj in range_constexpr(b_initial_reads): - b_frags[jj] = next_k_b_frags[jj] - elif const_expr(initial_b_frags is None): - b_frags = [0] * WARP_N_STEPS - for jj in range_constexpr(b_initial_reads): - b_frags[jj] = load_b_frag(warp_atom_k_idx, jj) + for ii in range_constexpr(WARP_N_STEPS): + warp_atom_n_idx = warp_n_idx + ii * WARP_ATOM_N + row = warp_atom_n_idx + ldmatrix_b_n_idx + col_in_bytes = (warp_atom_k_idx + ldmatrix_b_k_vec_idx) * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) + vec = bs_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_B_FRAG_VALUES * MFMA_PER_WARP_K) + b_frags[ii] = vec else: b_frags = [initial_b_frags[i] for i in range_constexpr(kk * WARP_N_STEPS, (kk + 1) * WARP_N_STEPS)] - if const_expr(initial_b_frags is None and kk == 0 and prefetched_initial_a_frag is not None): - a_frag = prefetched_initial_a_frag - elif const_expr(initial_b_frags is None and kk > 0): - a_frag = next_k_a_frag - else: - a_frag = load_a_frag(warp_atom_k_idx, 0) - next_k_a_frag = None - next_k_b_frags = [None] * WARP_N_STEPS + a_frags = [0] * WARP_M_STEPS + for ii in range_constexpr(WARP_M_STEPS): + warp_atom_m_idx = warp_m_idx + ii * WARP_ATOM_M + row = warp_atom_m_idx + ldmatrix_a_m_idx + col_in_bytes = (warp_atom_k_idx + ldmatrix_a_k_vec_idx) * DTYPE_BYTES + col_in_bytes = swizzle_xor16(row, col_in_bytes, k_blocks16) + vec = as_.vec_load((s, row, col_in_bytes // DTYPE_BYTES), WMMA_A_FRAG_VALUES * MFMA_PER_WARP_K) + a_frags[ii] = vec rocdl.sched_barrier(0) for ii in range_constexpr(WARP_M_STEPS): - a_frag_next = a_frag + a_frag = a_frags[ii] for jj in range_constexpr(WARP_N_STEPS): b_frag = b_frags[jj] - if const_expr(init_zero and kk == 0): - c_frags_new[ii * WARP_N_STEPS + jj] = WMMA_IMPL.init(a_frag, b_frag) + if const_expr(MFMA_PER_WARP_K == 2): + # split a + a_i64x2 = vector.bitcast(T.i64x2, a_frag) + a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) + a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) + a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) + a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) + # split b + b_i64x2 = vector.bitcast(T.i64x2, b_frag) + b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) + b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) + b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) + b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) + # wmma + c_idx = ii * WARP_N_STEPS + jj + acc_in = c_frags_new[c_idx] + acc_mid = WMMA_IMPL(a_v0, b_v0, acc_in) + c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) + elif const_expr(MFMA_PER_WARP_K == 1): + c_idx = ii * WARP_N_STEPS + jj + c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) else: - do_mfma(ii, jj, a_frag, b_frag) - if const_expr( - initial_b_frags is None - and ii == 0 - and jj + b_initial_reads < WARP_N_STEPS - ): - b_frags[jj + b_initial_reads] = load_b_frag(warp_atom_k_idx, jj + b_initial_reads) - if const_expr(ii + 1 < WARP_M_STEPS and jj == a_prefetch_jj): - a_frag_next = load_a_frag(warp_atom_k_idx, ii + 1) - if const_expr( - initial_b_frags is None - and kk + 1 < WARP_K_STEPS - and ii == next_k_prefetch_ii - and jj == 0 - ): - next_k_b_frags = [None] * WARP_N_STEPS - if const_expr( - initial_b_frags is None - and kk + 1 < WARP_K_STEPS - and ii == next_k_prefetch_ii - and jj < b_initial_reads - ): - next_k_warp_atom_k_idx = warp_k_slice_base + (kk + 1) * WARP_ATOM_K - next_k_b_frags[jj] = load_b_frag(next_k_warp_atom_k_idx, jj) - if const_expr( - initial_b_frags is None - and kk + 1 < WARP_K_STEPS - and ii == next_k_prefetch_ii - and jj == next_k_prefetch_a_jj - ): - next_k_warp_atom_k_idx = warp_k_slice_base + (kk + 1) * WARP_ATOM_K - next_k_a_frag = load_a_frag(next_k_warp_atom_k_idx, 0) - if const_expr( - prefetch_k_offset is not None - and row_group < prefetch_rows - and async_load_idx < ldg_total - and (jj == 0 or jj == prefetch_split_1) - ): - ldg_sts_async_one(prefetch_k_offset, prefetch_lds_stage, async_load_idx) - async_load_idx += 1 - a_frag = a_frag_next - row_group += 1 + raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") return c_frags_new - def ldmatrix_compute_tile_register_prefetch( - lds_stage, - c_frags, - prefetched_initial_a_frag=None, - prefetched_initial_b_frags=None, - prefetch_k_offset=None, - prefetch_lds_stage=0, - init_zero=False, - k0_prefetch_k_offset=None, - k0_prefetch_lds_stage=None, - next_k0_read_stage=None, - ): - # K32 sub-buffer ping-pong (see fp8-4wave-8buffer design notes): - # h1: bfld tile_{i+1} K1 -> prefetch_lds_stage (lead 1) - # h2: bfld tile_{i+2} K0 -> k0_prefetch_lds_stage = current_stage - # (lead 2; overwrites tile_i K0 which was consumed in h1). - # If k0_prefetch_* is None the K0 group is not prefetched (epilogue). - assert REGISTER_PREFETCH_K1 - s = fx.Index(lds_stage) - c_frags_new = [cx for cx in c_frags] - k0_idx = warp_k_slice_base - k1_idx = warp_k_slice_base + WARP_ATOM_K - - def load_a_frag(warp_atom_k_idx, ii): - return load_a_frag_from(s, warp_atom_k_idx, ii) - - def load_b_frag(warp_atom_k_idx, jj): - return load_b_frag_from(s, warp_atom_k_idx, jj) - - def load_a_slice(warp_atom_k_idx, initial_a=None): - # initial_a may be a single frag (legacy) or a full list (full carry). - if const_expr(isinstance(initial_a, list)): - return list(initial_a) - out = [0] * WARP_M_STEPS - for ii in range_constexpr(WARP_M_STEPS): - if const_expr(initial_a is not None and ii == 0): - out[ii] = initial_a - else: - out[ii] = load_a_frag(warp_atom_k_idx, ii) - return out - - def load_b_slice(warp_atom_k_idx, initial_bs=None): - # initial_bs may be a partial list (B_INITIAL_READS) or a full list. - if const_expr(isinstance(initial_bs, list) and len(initial_bs) == WARP_N_STEPS): - return list(initial_bs) - out = [0] * WARP_N_STEPS - for jj in range_constexpr(WARP_N_STEPS): - if const_expr(initial_bs is not None and jj < B_INITIAL_READS_CONST): - out[jj] = initial_bs[jj] - else: - out[jj] = load_b_frag(warp_atom_k_idx, jj) - return out - - def do_mfma(ii, jj, a_frag, b_frag): - if const_expr(MFMA_PER_WARP_K == 2): - a_i64x2 = vector.bitcast(T.i64x2, a_frag) - a0_i64 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) - a1_i64 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) - a_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a0_i64])) - a_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [a1_i64])) - b_i64x2 = vector.bitcast(T.i64x2, b_frag) - b0_i64 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) - b1_i64 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) - b_v0 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b0_i64])) - b_v1 = vector.bitcast(T.f16x4, vector.from_elements(T.vec(1, T.i64), [b1_i64])) - c_idx = ii * WARP_N_STEPS + jj - acc_mid = WMMA_IMPL(a_v0, b_v0, c_frags_new[c_idx]) - c_frags_new[c_idx] = WMMA_IMPL(a_v1, b_v1, acc_mid) - elif const_expr(MFMA_PER_WARP_K == 1): - c_idx = ii * WARP_N_STEPS + jj - c_frags_new[c_idx] = WMMA_IMPL(a_frag, b_frag, c_frags_new[c_idx]) - else: - raise NotImplementedError(f"MFMA_PER_WARP_K={MFMA_PER_WARP_K} not supported") - - # Compute one K32 slice (64 MFMAs) while dripping the next slice's - # operand ds_reads into the MFMA shadows. The operands consumed here - # (a_frags/b_frags) are fully ready on entry (carried in registers from - # the previous half); the reads issued here (read_k_idx into out_a/out_b) - # are for the NEXT half and only consumed after this half's lgkmcnt(0), - # so their ~64-cyc latency hides fully under the 64 MFMAs. ds_reads are - # spread front-loaded-but-interleaved so all land before the half's - # trailing lgkmcnt(0). - def _spread_from(numer, denom, start): - out = [0] * denom - if const_expr(numer <= 0): - return out - span = denom - start - if const_expr(span < numer): - start = denom - numer - span = numer - sub = spread_counts(numer, span) - for i in range_constexpr(span): - out[start + i] = sub[i] - return out - - def compute_slice_interleaved( - a_frags, b_frags, read_k_idx, read_stage=None, zero_acc=False, bfld_tasks=None, - bfld_start=0, - ): - out_a = [0] * WARP_M_STEPS - out_b = [0] * WARP_N_STEPS - rstage = s if read_stage is None else fx.Index(read_stage) - reads = [] - if const_expr(read_k_idx is not None): - for ii in range_constexpr(WARP_M_STEPS): - reads.append(("a", ii)) - for jj in range_constexpr(WARP_N_STEPS): - reads.append(("b", jj)) - n_reads = len(reads) - # Distribute the reads across the MFMA grid; keep them in the first - # ~3/4 of the MFMAs so they all complete before the closing lgkmcnt. - read_at = spread_counts(n_reads, WARP_M_STEPS * WARP_N_STEPS) - # bfld (global->LDS) prefetch is also dripped one-per-MFMA into the - # co-issue shadows instead of bursting at the region head. - tasks = bfld_tasks if bfld_tasks is not None else [] - n_tasks = len(tasks) - if const_expr(bfld_start > 0): - bfld_at = _spread_from(n_tasks, WARP_M_STEPS * WARP_N_STEPS, bfld_start) - else: - bfld_at = spread_counts(n_tasks, WARP_M_STEPS * WARP_N_STEPS) - read_cursor = 0 - bfld_cursor = 0 - for ii in range_constexpr(WARP_M_STEPS): - for jj in range_constexpr(WARP_N_STEPS): - if const_expr(zero_acc): - c_frags_new[ii * WARP_N_STEPS + jj] = WMMA_IMPL.init(a_frags[ii], b_frags[jj]) - else: - do_mfma(ii, jj, a_frags[ii], b_frags[jj]) - step = ii * WARP_N_STEPS + jj - for _ in range_constexpr(bfld_at[step]): - tasks[bfld_cursor]() - bfld_cursor += 1 - for _ in range_constexpr(read_at[step]): - kind, idx = reads[read_cursor] - if const_expr(kind == "a"): - out_a[idx] = load_a_frag_from(rstage, read_k_idx, idx) - else: - out_b[idx] = load_b_frag_from(rstage, read_k_idx, idx) - read_cursor += 1 - return out_a, out_b - - # K0 operands of this tile are fully carried in on entry (a0/b0 full - # group); load_*_slice just unpacks the carried frags (no LDS read when - # the full group is provided). - a0_frags = load_a_slice(k0_idx, prefetched_initial_a_frag) - b0_frags = load_b_slice(k0_idx, prefetched_initial_b_frags) - - def make_bfld_tasks(k_offset, lds_stage, k_group): - # One callable per buffer_load in this k-group (B rows then A rows), - # to be dripped into the MFMA loop instead of bursting up front. - tasks = [] - for i in range_constexpr(B_LDS_ROW_GROUPS): - tasks.append(lambda i=i: ldg_sts_b_async_one(k_offset, lds_stage, k_group * B_LDS_ROW_GROUPS + i)) - for i in range_constexpr(A_LDS_ROW_GROUPS): - tasks.append(lambda i=i: ldg_sts_a_async_one(k_offset, lds_stage, k_group * A_LDS_ROW_GROUPS + i)) - return tasks - - # half-1: bfld next tile's K1 (lead 1) dripped into the MFMAs; compute K0 - # while reading this tile's K1 operands for half-2. - # Delay the first half's bfld drip by 1 MFMA row so the previous half's - # in-flight DMAs drain off the VMEM queue before new ones issue; ATT - # showed this cuts the first half's buffer_load issue stalls ~80%. - h1_bfld = make_bfld_tasks(prefetch_k_offset, prefetch_lds_stage, 1) if prefetch_k_offset is not None else None - a1_frags, b1_frags = compute_slice_interleaved( - a0_frags, b0_frags, k1_idx, zero_acc=init_zero, bfld_tasks=h1_bfld, - bfld_start=WARP_N_STEPS, - ) - - __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) - - # half-2: bfld the tile-after-next's K0 (lead 2) dripped into the MFMAs; - # compute K1 while reading the NEXT tile's K0 group (from - # next_k0_read_stage) to carry into the next iteration. - h2_bfld = ( - make_bfld_tasks(k0_prefetch_k_offset, k0_prefetch_lds_stage, 0) - if k0_prefetch_k_offset is not None - else None - ) - next_a0, next_b0 = compute_slice_interleaved( - a1_frags, b1_frags, k0_idx if next_k0_read_stage is not None else None, - read_stage=next_k0_read_stage, bfld_tasks=h2_bfld, - ) - return c_frags_new, next_a0, next_b0 - warp_offset = get_dma_copy_warp_offset() if const_expr(IS_SPLIT_K): @@ -1138,214 +569,44 @@ def make_bfld_tasks(k_offset, lds_stage, k_group): for s in range_constexpr(STAGES - 1): ldg_sts_b_async(ks_begin + s * BLOCK_K, s) ldg_sts_a_async(ks_begin + s * BLOCK_K, s) - if const_expr(REGISTER_PREFETCH_K1): - # K0/K1 are prefetched on separate stage schedules: tile1's K0 is - # never produced by an earlier compute (no tile -1), so seed it here - # into stage 1. tile1's K1 is produced by tile0's compute (h1). - ldg_sts_async_kgroup(ks_begin + BLOCK_K, arith.constant(1 % STAGES, index=True), 0) rocdl.sched_barrier(0) - def hot_loop_scheduler(prefetched_initial=False, tail_prefetch_initial=False): - LDG_TOTAL = LDG_REG_B_COUNT_AS + LDG_REG_A_COUNT_AS - MFMA_PER_ROW = WARP_N_STEPS * MFMA_PER_WARP_K - PREFETCH_ROWS = (LDG_TOTAL + 1) // 2 - if const_expr(PREFETCH_ROWS > WARP_K_STEPS * WARP_M_STEPS): - PREFETCH_ROWS = WARP_K_STEPS * WARP_M_STEPS - PREFETCH_SPLIT_1 = WARP_N_STEPS // 2 - A_PREFETCH_JJ = 1 if const_expr(WARP_N_STEPS > 1) else 0 - B_INITIAL_READS = 4 if const_expr(WARP_N_STEPS > 4) else WARP_N_STEPS - NEXT_K_PREFETCH_II = WARP_M_STEPS - 2 if const_expr(WARP_M_STEPS > 1) else 0 - NEXT_K_PREFETCH_A_JJ = B_INITIAL_READS if const_expr(B_INITIAL_READS < WARP_N_STEPS) else WARP_N_STEPS - 1 - row_group = 0 + def hot_loop_scheduler(): + # ================ Ordered ================ + for i in range_constexpr(LDG_REG_B_COUNT_AS): + rocdl.sched_vmem(1) # ldg_sts_b_async next + for i in range_constexpr(LDG_REG_A_COUNT_AS): + rocdl.sched_vmem(1) # ldg_sts_a_async next for ki in range_constexpr(WARP_K_STEPS): - if const_expr(ki == 0 and not prefetched_initial): - for i in range_constexpr(B_INITIAL_READS): - rocdl.sched_dsrd(1) # lds_matrix_b current - rocdl.sched_dsrd(1) # first lds_matrix_a current + for i in range_constexpr(WARP_N_STEPS): + rocdl.sched_dsrd(1) # lds_matrix_b current for i in range_constexpr(WARP_M_STEPS): - for j in range_constexpr(WARP_N_STEPS): - rocdl.sched_mfma(MFMA_PER_WARP_K) - if const_expr(i == 0 and j + B_INITIAL_READS < WARP_N_STEPS): - rocdl.sched_dsrd(1) # next lds_matrix_b current - if const_expr(i + 1 < WARP_M_STEPS and j == A_PREFETCH_JJ): - rocdl.sched_dsrd(1) # next lds_matrix_a current - if const_expr(ki + 1 < WARP_K_STEPS and i == NEXT_K_PREFETCH_II and j < B_INITIAL_READS): - rocdl.sched_dsrd(1) # first lds_matrix_b next k-slice - if const_expr(ki + 1 < WARP_K_STEPS and i == NEXT_K_PREFETCH_II and j == NEXT_K_PREFETCH_A_JJ): - rocdl.sched_dsrd(1) # first lds_matrix_a next k-slice - if const_expr( - row_group < PREFETCH_ROWS - and (j == 0 or j == PREFETCH_SPLIT_1) - ): - rocdl.sched_vmem(1) - row_group += 1 - rocdl.sched_barrier(0) - if const_expr(tail_prefetch_initial): - for i in range_constexpr(B_INITIAL_READS): - rocdl.sched_dsrd(1) # first lds_matrix_b next BLOCK_K tile - rocdl.sched_dsrd(1) # first lds_matrix_a next BLOCK_K tile - - def hot_loop_scheduler_register_prefetch(prefetched_initial=False, tail_prefetch_initial=False): - PHASE_VMEM = LDG_REG_B_COUNT_AS // 2 + LDG_REG_A_COUNT_AS // 2 - PHASE_MFMA = WARP_M_STEPS * WARP_N_STEPS - PHASE0_DSRD = WARP_M_STEPS + WARP_N_STEPS - if const_expr(prefetched_initial): - PHASE0_DSRD += (WARP_M_STEPS - 1) + (WARP_N_STEPS - B_INITIAL_READS_CONST) - else: - PHASE0_DSRD += WARP_M_STEPS + WARP_N_STEPS - - # Match the manual interleave in the compute function: region-1 - # drips PHASE0_DSRD ds_reads across its MFMAs, region-2 only has vmem. - dsrd_spread = spread_counts(PHASE0_DSRD, PHASE_MFMA) - vmem1_spread = spread_counts(PHASE_VMEM, PHASE_MFMA) - for i in range_constexpr(PHASE_MFMA): - rocdl.sched_mfma(MFMA_PER_WARP_K) - for _ in range_constexpr(dsrd_spread[i]): - rocdl.sched_dsrd(1) - for _ in range_constexpr(vmem1_spread[i]): - rocdl.sched_vmem(1) - rocdl.sched_barrier(0) - vmem2_spread = spread_counts(PHASE_VMEM, PHASE_MFMA) - for i in range_constexpr(PHASE_MFMA): - rocdl.sched_mfma(MFMA_PER_WARP_K) - for _ in range_constexpr(vmem2_spread[i]): - rocdl.sched_vmem(1) + rocdl.sched_dsrd(1) # lds_matrix_a current + for i in range_constexpr(WARP_M_STEPS): + rocdl.sched_mfma(WARP_N_STEPS) + # ================ Reordered ================ rocdl.sched_barrier(0) - if const_expr(tail_prefetch_initial): - for i in range_constexpr(B_INITIAL_READS_CONST): - rocdl.sched_dsrd(1) - rocdl.sched_dsrd(1) - - __barrier((STAGES - 2) * LDG_WAIT_COUNT) - if const_expr(REGISTER_PREFETCH_K1): - # tile0 compute: h1 bfld tile1.K1 -> stage1; h2 bfld tile2.K0 -> stage0. - # half-2 reads tile1's K0 (stage1) into the carry for the next iter. - c_frags, carry_a0, carry_b0 = ldmatrix_compute_tile_register_prefetch( - arith.constant(0, index=True), - c_frags, - prefetch_k_offset=ks_begin + BLOCK_K, - prefetch_lds_stage=arith.constant(1 % STAGES, index=True), - init_zero=True, - k0_prefetch_k_offset=ks_begin + 2 * BLOCK_K, - k0_prefetch_lds_stage=arith.constant(0, index=True), - next_k0_read_stage=arith.constant(1 % STAGES, index=True), - ) - hot_loop_scheduler_register_prefetch(tail_prefetch_initial=True) - next_stage_init = arith.constant(1 % STAGES, index=True) - __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) - - init_state = ( - [ks_begin + fx.Int32(BLOCK_K), next_stage_init] - + c_frags - + carry_a0 - + carry_b0 - ) - for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): - k_offset = state[0] - current_stage = fx.Index(state[1]) - c_frags = state[2 : 2 + C_FRAGS_LEN] - carry_a0 = state[2 + C_FRAGS_LEN : 2 + C_FRAGS_LEN + WARP_M_STEPS] - carry_b0 = state[2 + C_FRAGS_LEN + WARP_M_STEPS : 2 + C_FRAGS_LEN + WARP_M_STEPS + WARP_N_STEPS] - next_stage = (current_stage + 1) % STAGES - prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K - # lead-2 K0 offset runs past the last tile in the final loop - # iterations; clamp it so the (unused) prefetch stays in-bounds. - k0_pf_offset = k_offset + fx.Int32(STAGES * BLOCK_K) - k0_pf_max = ks_begin + fx.Int32((BLOCK_K_LOOPS - 1) * BLOCK_K) - k0_pf_offset = arith.select( - arith.cmpi(arith.CmpIPredicate.slt, k0_pf_offset, k0_pf_max), - k0_pf_offset, - k0_pf_max, - ) - c_frags_new, carry_a0_next, carry_b0_next = ldmatrix_compute_tile_register_prefetch( - current_stage, - c_frags, - prefetched_initial_a_frag=carry_a0, - prefetched_initial_b_frags=carry_b0, - prefetch_k_offset=prefetch_k_offset, - prefetch_lds_stage=next_stage, - k0_prefetch_k_offset=k0_pf_offset, - k0_prefetch_lds_stage=current_stage, - next_k0_read_stage=next_stage, - ) - k_offset_next = k_offset + fx.Int32(BLOCK_K) - hot_loop_scheduler_register_prefetch(prefetched_initial=True, tail_prefetch_initial=True) - __barrier_lgkmcnt(vmcnt=RP1_TAIL_VMCNT) - results = ( - yield [k_offset_next, next_stage] + c_frags_new + carry_a0_next + carry_b0_next - ) - current_stage = fx.Index(results[1]) - c_frags = results[2 : 2 + C_FRAGS_LEN] - carry_a0 = results[2 + C_FRAGS_LEN : 2 + C_FRAGS_LEN + WARP_M_STEPS] - carry_b0 = results[2 + C_FRAGS_LEN + WARP_M_STEPS : 2 + C_FRAGS_LEN + WARP_M_STEPS + WARP_N_STEPS] - for s in range_constexpr(0, STAGES - 1): - c_frags, carry_a0, carry_b0 = ldmatrix_compute_tile_register_prefetch( - current_stage, - c_frags, - prefetched_initial_a_frag=carry_a0, - prefetched_initial_b_frags=carry_b0, - ) - rocdl.sched_barrier(0) - current_stage = (current_stage + 1) % STAGES - - if const_expr(not REGISTER_PREFETCH_K1): - c_frags = ldmatrix_compute_tile_streaming( - arith.constant(0, index=True), - c_frags, - prefetch_k_offset=ks_begin + BLOCK_K, - prefetch_lds_stage=arith.constant((STAGES - 1) % STAGES, index=True), - init_zero=True, - ) - hot_loop_scheduler(tail_prefetch_initial=True) - next_stage_init = arith.constant(1 % STAGES, index=True) - __barrier((STAGES - 2) * LDG_WAIT_COUNT) - prefetched_tile_a_frag, prefetched_tile_b_frags = load_initial_frags_from(next_stage_init) - init_state = ( - [ks_begin + fx.Int32(BLOCK_K), next_stage_init] - + c_frags - + [prefetched_tile_a_frag] - + prefetched_tile_b_frags - ) - for bki, state in range(1, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): - k_offset = state[0] - current_stage = fx.Index(state[1]) - c_frags = state[2 : 2 + C_FRAGS_LEN] - prefetched_tile_a_frag = state[2 + C_FRAGS_LEN] - prefetched_tile_b_frags = state[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] - next_stage = (current_stage + 1) % STAGES - write_stage = (current_stage + STAGES - 1) % STAGES - prefetch_k_offset = k_offset + (STAGES - 1) * BLOCK_K - c_frags_new = ldmatrix_compute_tile_streaming( - current_stage, - c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, - prefetch_k_offset=prefetch_k_offset, - prefetch_lds_stage=write_stage, - ) - k_offset_next = k_offset + fx.Int32(BLOCK_K) - hot_loop_scheduler(prefetched_initial=True, tail_prefetch_initial=True) - __barrier((STAGES - 2) * LDG_WAIT_COUNT) - prefetched_tile_a_frag_next, prefetched_tile_b_frags_next = load_initial_frags_from(next_stage) - results = ( - yield [k_offset_next, next_stage] - + c_frags_new - + [prefetched_tile_a_frag_next] - + prefetched_tile_b_frags_next - ) - current_stage = fx.Index(results[1]) - c_frags = results[2 : 2 + C_FRAGS_LEN] - prefetched_tile_a_frag = results[2 + C_FRAGS_LEN] - prefetched_tile_b_frags = results[3 + C_FRAGS_LEN : 3 + C_FRAGS_LEN + B_INITIAL_READS_CONST] - for s in range_constexpr(0, STAGES - 1): - c_frags = ldmatrix_compute_tile_streaming( - current_stage, - c_frags, - prefetched_initial_a_frag=prefetched_tile_a_frag, - prefetched_initial_b_frags=prefetched_tile_b_frags, - ) - current_stage = (current_stage + 1) % STAGES + init_state = [ks_begin, arith.constant(0, index=True)] + c_frags + for bki, state in range(0, BLOCK_K_LOOPS - (STAGES - 1), 1, init=init_state): + k_offset = state[0] + current_stage = fx.Index(state[1]) + c_frags = state[2:] + next_stage = (current_stage + 1) % STAGES + write_stage = (current_stage + STAGES - 1) % STAGES + __barrier((STAGES - 2) * LDG_WAIT_COUNT) + ldg_sts_b_async(k_offset + (STAGES - 1) * BLOCK_K, write_stage) + ldg_sts_a_async(k_offset + (STAGES - 1) * BLOCK_K, write_stage) + c_frags_new = ldmatrix_compute_tile_streaming(current_stage, c_frags) + k_offset_next = k_offset + fx.Int32(BLOCK_K) + hot_loop_scheduler() + results = yield [k_offset_next, next_stage] + c_frags_new + current_stage = fx.Index(results[1]) + c_frags = results[2:] + for s in range_constexpr(0, STAGES - 1): + __barrier((STAGES - 2 - s) * LDG_WAIT_COUNT) + c_frags = ldmatrix_compute_tile_streaming(current_stage, c_frags) + current_stage = (current_stage + 1) % STAGES else: diff --git a/kimi_fp4_moe_16384.py b/kimi_fp4_moe_16384.py deleted file mode 100644 index e33c0620d..000000000 --- a/kimi_fp4_moe_16384.py +++ /dev/null @@ -1,1809 +0,0 @@ -"""Kimi fp4 MoE FlyDSL kernels for the M=16384 tuned row. - -This file intentionally keeps only the CSV-selected fp4 path: - - token=16384, model_dim=7168, inter_dim=512, experts=385, topk=9 - stage1=flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4 - stage2=flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4 - -No CSV dispatch, alternate dtype kernels, split reduction variants, optional -epilogues, or fallback selection is kept here. -""" -from __future__ import annotations -import functools -import os -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import range_constexpr -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from flydsl._mlir import ir -from flydsl.expr.typing import T -from flydsl.expr import arith, buffer_ops, const_expr, gpu, rocdl, vector -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from aiter.ops.flydsl.kernels.layout_utils import crd2idx, idx2crd, get as layout_get -from aiter.ops.flydsl.kernels.mfma_epilogues import c_shuffle_epilog -from aiter.ops.flydsl.kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - make_preshuffle_b_layout, - make_preshuffle_scale_layout, - swizzle_xor16, - tile_chunk_coord_i32, -) -from dataclasses import dataclass -from typing import Optional -import torch -import aiter -import flydsl.compiler as flyc -import flydsl.expr as fx -from aiter import dtypes -TOKEN = 16384 -EXPERTS = 385 -MODEL_DIM = 7168 -INTER_DIM = 512 -TOPK = 9 -BLOCK_M = 64 -STAGE1_KERNEL = 'flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4' -STAGE2_KERNEL = 'flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4' - -@dataclass(frozen=True) -class Stage1Config: - tile_m: int = 64 - tile_n: int = 128 - tile_k: int = 256 - waves_per_eu: int = 4 - b_nt: int = 0 - xcd_swizzle: int = 4 - -@dataclass(frozen=True) -class Stage2Config: - tile_m: int = 64 - tile_n: int = 256 - tile_k: int = 256 - b_nt: int = 0 - xcd_swizzle: int = 4 - persist_m: int = -1 -S1 = Stage1Config() -S2 = Stage2Config() -_DLPACK_SAFE = (torch.uint8, torch.float16, torch.bfloat16, torch.float32) - -def _view_safe(t: torch.Tensor) -> torch.Tensor: - return t.view(torch.uint8) if t is not None and t.numel() > 0 and (t.dtype not in _DLPACK_SAFE) else t - -def _ptr_view_safe(t: torch.Tensor): - view = _view_safe(t) - type_name = type(view).__name__ - module_name = type(view).__module__ - if type_name == 'FakeTensor' or 'fake_tensor' in module_name: - return flyc.from_c_void_p(fx.Uint8, 0) - return flyc.from_c_void_p(fx.Uint8, view.data_ptr()) - -def _barrier(vmcnt=63, lgkmcnt=63): - parts = [] - needs_waitcnt = vmcnt < 63 or lgkmcnt < 63 - if needs_waitcnt: - wc = [] - if vmcnt < 63: - wc.append(f'vmcnt({vmcnt})') - if lgkmcnt < 63: - wc.append(f'lgkmcnt({lgkmcnt})') - parts.append('s_waitcnt ' + ' '.join(wc)) - parts.append('s_barrier') - llvm.InlineAsmOp(res=None, operands_=[], asm_string='\n'.join(parts), constraints='', has_side_effects=True, is_align_stack=False) - -def _run_compiled(exe, args): - try: - exe(*args) - except Exception: - try: - from flydsl._mlir import ir - while ir.Context.current is not None: - ir.Context.current.__exit__(None, None, None) - except Exception: - pass - raise - -def kimi_moe_sorting_16384(topk_ids: torch.Tensor, topk_weight: torch.Tensor, moebuf_dtype): - """Run the fixed Opus MoE sorting step used before the two FlyDSL GEMMs.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError(f'expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}') - device = topk_ids.device - max_sorted = int(topk_ids.numel() + EXPERTS * BLOCK_M - TOPK) - max_m_blocks = int((max_sorted + BLOCK_M - 1) // BLOCK_M) - sorted_ids = torch.empty(max_sorted, dtype=dtypes.i32, device=device) - sorted_weights = torch.empty(max_sorted, dtype=dtypes.fp32, device=device) - sorted_expert_ids = torch.empty(max_m_blocks, dtype=dtypes.i32, device=device) - num_valid_ids = torch.empty(2, dtype=dtypes.i32, device=device) - moe_out = torch.empty((TOKEN, MODEL_DIM), dtype=moebuf_dtype, device=device) - workspace_size = aiter.moe_sorting_opus_get_workspace_size(TOKEN, EXPERTS, TOPK, 0) - workspace = torch.empty(workspace_size, dtype=torch.uint8, device=device) if workspace_size > 0 else None - aiter.moe_sorting_opus_fwd(topk_ids, topk_weight, sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out, EXPERTS, BLOCK_M, None, None, workspace, 0, None) - return (sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out) - -@functools.lru_cache(maxsize=1) -def compile_kimi_fp4_stage1_16384(): - """Compile the fixed Kimi fp4 stage1 kernel selected for M=16384.""" - model_dim__7168 = MODEL_DIM - inter_dim__512 = INTER_DIM - experts__385 = EXPERTS - topk__9 = TOPK - tile_m__64 = S1.tile_m # 64 - tile_n__128 = S1.tile_n # 128 - tile_k__256 = S1.tile_k # 256 - model_dim_pad = 0 - inter_dim_pad = 0 - persist_m = 1 - use_async_copy__True = True - waves_per_eu = S1.waves_per_eu - k_batch = 1 - b_nt = S1.b_nt - xcd_swizzle = S1.xcd_swizzle # TODO(zty), 为啥是4? - gpu_arch = get_hip_arch() - allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') - allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') - sort_block_m = max(32, tile_m__64) - num_waves__4 = min(4, tile_n__128 // 32) # 4 - total_threads = num_waves__4 * 64 - pack_M__2 = 1 if tile_m__64 < 32 else 2 - n_per_wave__32 = tile_n__128 // num_waves__4 - pack_N__2 = min(2, n_per_wave__32 // 16) - pack_K__2 = 2 - scale_mn_pack = 2 - elem_bytes = 1 - a_elem_bytes = 1 - b_elem_bytes = 1 - tile_k_bytes = int(tile_k__256) * int(a_elem_bytes) # 256 - a_elem_vec_pack = 2 - cbsz = 4 - blgp = 4 - if tile_k_bytes % 64 != 0: - raise ValueError(f'tile_k_bytes must be divisible by 64, got {tile_k_bytes}') - - def _x_elem_type(): - return T.i8 - - def _w_elem_type(): - return T.i8 - - def out_elem(): - return T.bf16 - _k_per_batch = model_dim__7168 - _k_dim__7168 = model_dim__7168 - bytes_x_per_tile = int(tile_m__64) * int(tile_k__256) * int(a_elem_bytes) - if bytes_x_per_tile % total_threads != 0: - raise ValueError(f'tile_m*tile_k*elem_bytes must be divisible by {total_threads}') - bytes_per_thread_x = bytes_x_per_tile // total_threads - _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') - pad_k = 0 if _use_lds128 else 8 - lds_stride = tile_k__256 + pad_k # 256 + 0 = 256 - _use_cshuffle_epilog = True - _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' - module_name = f'mfma_moe1_silu_mul_afp4_wfp4_bf16_t{tile_m__64}x{tile_n__128}x{tile_k__256}_pm{persist_m}_async{_xcd_tag}_v32' - _cshuffle_elem_bytes = 2 - _single_x_bytes = int(tile_m__64) * int(lds_stride) * int(a_elem_bytes) # 16k = 64 * 256 * 1 - lds_out_bytes = _cshuffle_elem_bytes * int(tile_m__64) * int(tile_n__128) if _use_cshuffle_epilog else 0 # 16k = 2 * 64 * 128 - lds_tid_bytes = int(tile_m__64) * 4 # 256 = 64 * 4 - _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 - _GLOBAL_ALIGN = 1024 - _std_pong = max(_single_x_bytes, lds_out_bytes) + lds_tid_bytes # 16k + 256 - _std_ping = _single_x_bytes # 16k = 64 * 256 # A tile 放进lds的大小. - _std_pong_aligned = allocator_pong._align(_std_pong, 128) # 256 - _std_total = allocator_pong._align(_std_pong_aligned, _GLOBAL_ALIGN) + allocator_pong._align(_std_ping, 128) # - _lds_limit = {'gfx950': 163840, 'gfx942': 65536}.get(gpu_arch, 0) - _split_lds_out = _lds_limit > 0 and lds_out_bytes > 0 and (_std_total > _lds_limit) and (num_waves__4 >= 2) # #False = 160k > 0 and 16k > 0 and () - print(f"{_split_lds_out=}, {_std_total=}, {_lds_limit=}, {num_waves__4=}, {_std_pong=}, {_std_ping=}, {_std_pong_aligned=}, {_std_total=}") - if _split_lds_out: # False - _half_out_bytes = _cshuffle_elem_bytes * int(tile_m__64) * (int(tile_n__128) // 2) - _pong_buffer_bytes = max(_single_x_bytes, _half_out_bytes) - _ping_buffer_bytes = max(_single_x_bytes, _half_out_bytes) - else: - _pong_buffer_bytes = max(_single_x_bytes, lds_out_bytes) - _ping_buffer_bytes = _single_x_bytes - - def x_lds_elem(): - return T.f8 - lds_pong_offset = allocator_pong._align(allocator_pong.ptr, 16) - allocator_pong.ptr = lds_pong_offset + _pong_buffer_bytes - _lds_tid_offset_pong = allocator_pong._align(allocator_pong.ptr, 4) - allocator_pong.ptr = _lds_tid_offset_pong + lds_tid_bytes - lds_ping_offset = allocator_ping._align(allocator_ping.ptr, 16) - allocator_ping.ptr = lds_ping_offset + _ping_buffer_bytes - if waves_per_eu is not None and waves_per_eu >= 1: - _total_cu_lds = 160 * 1024 - _min_lds = _total_cu_lds // (waves_per_eu + 1) + 1 - _pong_sz = allocator_pong._align(allocator_pong.ptr, 128) - _ping_sz = allocator_ping._align(allocator_ping.ptr, 128) - _cur_lds = _pong_sz + _ping_sz - if _cur_lds < _min_lds: - allocator_ping.ptr += _min_lds - _cur_lds - kpack_bytes = 16 - out_elem_bytes = 2 - w_elem_bytes = 1 - w_elem_pack = 2 - w_nbytes = experts__385 * (2 * inter_dim__512) * model_dim__7168 * w_elem_bytes // w_elem_pack - _e_vec_s1 = min(tile_n__128 // 32, 8) - _pipe_m_repeat = tile_m__64 // 16 - _pipe_k_unroll = tile_k_bytes // 128 - _pipe_k_unroll_packed = _pipe_k_unroll // pack_K__2 - _pipe_m_repeat_packed = _pipe_m_repeat // pack_M__2 - _pipe_num_acc_n = n_per_wave__32 // 16 - _pipe_a_groups = [] - for _mi in range(_pipe_m_repeat): - _grp = [] - for _k in range(_pipe_k_unroll): - _grp.append((_k, _mi)) - if len(_grp) == 2: - _pipe_a_groups.append(_grp) - _grp = [] - if _grp: - _pipe_a_groups.append(_grp) - _pipe_b_loads = [] - for ku in range(_pipe_k_unroll): - for ni in range(_pipe_num_acc_n): - _pipe_b_loads.append(('gate', ku, ni)) - _pipe_b_loads.append(('up', ku, ni)) - _pipe_num_acc_n_packed = _pipe_num_acc_n // pack_N__2 - _pipe_all_mfma = [] - for _ku128 in range(_pipe_k_unroll_packed): - for _ni_packed in range(_pipe_num_acc_n_packed): - for _ikxdl in range(pack_K__2): - for _inxdl in range(pack_N__2): - _k_idx = _ku128 * pack_K__2 + _ikxdl - _ni_idx = _ni_packed * pack_N__2 + _inxdl - _pipe_all_mfma.append((_k_idx, _ni_idx, _ikxdl, _inxdl, _ku128)) - _pipe_mfma_per_phase = max(1, len(_pipe_all_mfma) // 4) - _pipe_n_phases__4 = len(_pipe_all_mfma) // _pipe_mfma_per_phase - _a_groups_per_phase = (len(_pipe_a_groups) + _pipe_n_phases__4 - 1) // _pipe_n_phases__4 - _pipe_phases = [] - _mfma_i = 0 - _a_i = 0 - for _p in range(_pipe_n_phases__4): - _a_reads = [] - for _ in range(_a_groups_per_phase): - if _a_i < len(_pipe_a_groups): - _a_reads.extend(_pipe_a_groups[_a_i]) - _a_i += 1 - _phase = {'mfma': _pipe_all_mfma[_mfma_i:_mfma_i + _pipe_mfma_per_phase], 'a_reads': _a_reads, 'b_loads': [], 'has_scale': _p == 0} - _mfma_i += _pipe_mfma_per_phase - _pipe_phases.append(_phase) - _bi = 0 - for _p in range(1, _pipe_n_phases__4): - _rem_b = len(_pipe_b_loads) - _bi - _rem_p = _pipe_n_phases__4 - _p - _n_b = (_rem_b + _rem_p - 1) // _rem_p if _rem_p > 0 else 0 - for _ in range(_n_b): - if _bi < len(_pipe_b_loads): - _pipe_phases[_p]['b_loads'].append(_pipe_b_loads[_bi]) - _bi += 1 - _pp_mfma = [p['mfma'] for p in _pipe_phases] - _pp_a_reads = [p['a_reads'] for p in _pipe_phases] - _pp_b_loads = [p['b_loads'] for p in _pipe_phases] - _pp_has_scale = [p['has_scale'] for p in _pipe_phases] - fp4_ratio = 2 - gui_ratio = 2 - _vmcnt_before_barrier__9 = tile_m__64 // 32 // fp4_ratio + tile_n__128 // 32 * gui_ratio # 8 = 64/32/2 + 128/32 * 2 - - @flyc.kernel(name=module_name) - def moe_gemm1(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32): - tokens_in = arith.index_cast(ir.IndexType.get(), i32_tokens_in.ir_value()) - n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) - k_in = arith.index_cast(ir.IndexType.get(), i32_k_in.ir_value()) - size_expert_ids_in = arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) - x_elem = T.f8 - f32 = T.f32 - i32 = T.i32 - i64 = T.i64 - vec4_f32 = T.vec(4, f32) - vec16_elems = 16 if a_elem_bytes == 1 else 8 - vec16_x = T.vec(vec16_elems, x_elem) - vec2_i64 = T.vec(2, i64) - - def _ptr_buffer_resource(ptr, num_records_bytes): # 这种函数是不是能放外面呢.. 创建 buffer resources. - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) - acc_init = arith.constant_vector(0.0, vec4_f32) # 这个可以优化到mfma第一次直接初始化掉. - c_n_total = arith.constant(experts__385 * (2 * inter_dim__512), index=True) # 385 * 2 * 512. - b_layout = make_preshuffle_b_layout(arith, c_n=c_n_total, c_k=k_in // pack_K__2, kpack_bytes=kpack_bytes, elem_bytes=b_elem_bytes) # B的layout. 这里我猜测 和我之前想得应该是一样的?TODO(zty): - layout_b = b_layout.layout_b - sorted_m = size_expert_ids_in * arith.constant(sort_block_m, index=True) # 64. - layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=sorted_m, c_k=arith.constant(model_dim__7168, index=True)) - layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=arith.constant(model_dim__7168, index=True)) - _eff_lds_stride = lds_stride # 256. - _eff_tile_k_bytes = tile_k_bytes - if const_expr(use_async_copy__True and a_elem_vec_pack > 1): # 2 - _eff_lds_stride = lds_stride // a_elem_vec_pack # 128 = 256 // 2 - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack # 128 = 256 // 2 - shape_lds = fx.make_shape(tile_m__64, _eff_lds_stride) # 64, 128 - stride_lds = fx.make_stride(_eff_lds_stride, 1) # 128, 1 - layout_lds = fx.make_layout(shape_lds, stride_lds) # 64, 128 - tx = gpu.thread_id('x') - by = gpu.block_id('x') - bx_persist = gpu.block_id('y') - if const_expr(xcd_swizzle > 0): - _NUM_XCDS_S1 = 8 - _c1_sw = arith.constant(1, index=True) # 1 - _c_tn_sw = arith.constant(tile_n__128, index=True) # 128 - _c_idp_sw = arith.constant(2 * inter_dim_pad, index=True) # 0 - _c2_sw = arith.constant(2, index=True) - _gx = (n_in - _c_idp_sw + _c2_sw * _c_tn_sw - _c1_sw) / _c_tn_sw / _c2_sw - _c_pm_sw = arith.constant(persist_m, index=True) - _gy = (size_expert_ids_in + _c_pm_sw - _c1_sw) / _c_pm_sw - _linear_id = bx_persist * _gx + by - _num_wgs = _gx * _gy - _c_xcds = arith.constant(_NUM_XCDS_S1, index=True) - _wgs_per_xcd = _num_wgs / _c_xcds - _wgid = _linear_id % _c_xcds * _wgs_per_xcd + _linear_id / _c_xcds - _WGM_S1 = xcd_swizzle - _c_wgm = arith.constant(_WGM_S1, index=True) - _num_wgid_in_group = _c_wgm * _gx - _group_id = _wgid / _num_wgid_in_group - _first_pid_m = _group_id * _c_wgm - _remaining_m = _gy - _first_pid_m - _cmp_m = arith.cmpi(CmpIPredicate.ult, _remaining_m, _c_wgm) - _group_size_m = arith.select(_cmp_m, _remaining_m, _c_wgm) - _wgid_in_group = _wgid % _num_wgid_in_group - bx_persist = _first_pid_m + _wgid_in_group % _group_size_m - by = _wgid_in_group / _group_size_m - by_n = by * arith.constant(tile_n__128, index=True) # by * 128 - k_base_idx__0 = arith.index(0) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) # 8 = 128 / 16. - layout_tx_wave_lane = fx.make_layout((num_waves__4, 64), stride=(64, 1)) # (4,64):(64,1) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) # (4,16):(16,1) - base_ptr_pong = allocator_pong.get_base() - base_ptr_ping = allocator_ping.get_base() - lds_x_pong = SmemPtr(base_ptr_pong, lds_pong_offset, x_lds_elem(), shape=(_input_elems,)).get() - lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() - _lds_out_elem_type = T.bf16 - if const_expr(_split_lds_out and _use_cshuffle_epilog): # False - _half_out_elems = int(tile_m__64) * (int(tile_n__128) // 2) - lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() - lds_out_B = SmemPtr(base_ptr_ping, lds_ping_offset, _lds_out_elem_type, shape=(_half_out_elems,)).get() - else: - lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, _lds_out_elem_type, shape=(tile_m__64 * tile_n__128,)).get() if _use_cshuffle_epilog else None # True (64 * 128) - lds_out_B = None - lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m__64,)).get() - c_a_pack = arith.constant(int(a_elem_vec_pack), index=True) - c_elem_bytes = arith.constant(int(a_elem_bytes), index=True) - x_nbytes_idx = tokens_in * k_in * c_elem_bytes / c_a_pack - x_nbytes_i32 = arith.index_cast(T.i32, x_nbytes_idx) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes_i32) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, arith.constant(4, type=T.i32)) - num_valid_i32 = buffer_ops.buffer_load(numids_rsrc, arith.constant(0, index=True), vec_width=1, dtype=T.i32) - sx_rsrc = 1 - sw_rsrc = 1 - c32 = arith.constant(32, index=True) - kblk = k_in / c32 - sx_nbytes_idx = sorted_m * kblk - sx_nbytes_i32 = arith.index_cast(T.i32, sx_nbytes_idx) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, sx_nbytes_i32) - c32 = arith.constant(32, index=True) - kblk_w = k_in / c32 - mn_w = arith.constant(experts__385 * (2 * inter_dim__512), index=True) - sw_nbytes_idx = mn_w * kblk_w - sw_nbytes_i32 = arith.index_cast(T.i32, sw_nbytes_idx) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, sw_nbytes_i32) - sorted_nbytes_idx = size_expert_ids_in * arith.constant(sort_block_m * 4, index=True) - sorted_nbytes_i32 = arith.index_cast(T.i32, sorted_nbytes_idx) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes_i32) - eid_nbytes_idx = size_expert_ids_in * arith.constant(4, index=True) - eid_nbytes_i32 = arith.index_cast(T.i32, eid_nbytes_idx) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, eid_nbytes_i32) - _PERSIST_M = persist_m - _c0_p = arith.constant(0, index=True) - _c1_p = arith.constant(1, index=True) - _c_pm = arith.constant(_PERSIST_M, index=True) - _for_persist = scf.ForOp(_c0_p, _c_pm, _c1_p) - _for_ip = ir.InsertionPoint(_for_persist.body) - _for_ip.__enter__() - _mi_p = _for_persist.induction_variable - bx = bx_persist * _c_pm + _mi_p - bx_m = bx * arith.constant(sort_block_m, index=True) - bx_m_i32 = arith.index_cast(T.i32, bx_m) - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=T.i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts__385, type=T.i32)) - - def _moe_gemm1_body(): - expert_off_idx = expert_idx * arith.constant(2 * inter_dim__512, index=True) - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - c_k_div4 = k_in / c_a_pack * arith.constant(int(a_elem_bytes), index=True) / arith.index(4) - tile_k_dwords = int(tile_k__256) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) - layout_x_tile_div4 = fx.make_layout((tile_m__64, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - topk_i32 = arith.constant(topk__9) - mask24 = arith.constant(16777215) - tokens_i32 = arith.index_cast(T.i32, tokens_in) - - def x_tile_chunk_coord_i32(i: int): - return tile_chunk_coord_i32(arith, tx_i32_base=tx_i32_base, i=i, total_threads=total_threads, layout_tile_div4=layout_x_tile_div4, chunk_i32=chunk_i32) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = x_tile_chunk_coord_i32(i) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - fused_i = buffer_ops.buffer_load(sorted_rsrc, sorted_row_i, vec_width=1, dtype=T.i32) - t_i32 = arith.andi(fused_i, mask24) - s_i32 = arith.shrui(fused_i, arith.constant(24)) - t_valid = arith.cmpi(CmpIPredicate.ult, t_i32, tokens_i32) - s_valid = arith.cmpi(CmpIPredicate.ult, s_i32, topk_i32) - ts_valid = arith.andi(t_valid, s_valid) - t_safe = arith.select(ts_valid, t_i32, arith.constant(0)) - t_idx = arith.index_cast(ir.IndexType.get(), t_safe) - x_row_base_div4.append(t_idx * c_k_div4) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - num_acc_n__2 = n_per_wave__32 // 16 - c_n_per_wave = arith.constant(n_per_wave__32, index=True) - wave_n_id = wave_id % arith.constant(num_waves__4, index=True) - n_tile_base = wave_n_id * c_n_per_wave - gate_n_intra_list = [] - gate_n_blk_list = [] - up_n_intra_list = [] - up_n_blk_list = [] - col_g_list = [] - c_n0_static = experts__385 * (2 * inter_dim__512) // 16 - layout_n_blk_intra = fx.make_layout((c_n0_static, 16), stride=(16, 1)) - inter_idx = arith.constant(inter_dim__512, index=True) - for i in range_constexpr(num_acc_n__2): - offset = i * 16 - c_offset = arith.constant(offset, index=True) - col_g = by_n + n_tile_base + c_offset + lane_mod_16 - col_g_list.append(col_g) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - gate_row_w = expert_off_idx + global_n - gate_coord = idx2crd(gate_row_w, layout_n_blk_intra) - gate_n_blk_list.append(layout_get(gate_coord, 0)) - gate_n_intra_list.append(layout_get(gate_coord, 1)) - up_row_w = gate_row_w + inter_idx - up_coord = idx2crd(up_row_w, layout_n_blk_intra) - up_n_blk_list.append(layout_get(up_coord, 0)) - up_n_intra_list.append(layout_get(up_coord, 1)) - m_repeat__4 = tile_m__64 // 16 - k_unroll = tile_k_bytes // 128 - k_unroll_packed = k_unroll // pack_K__2 - m_repeat_packed__2 = m_repeat__4 // pack_M__2 - num_acc_n_packed__1 = num_acc_n__2 // pack_N__2 - _K_per_ku = tile_k__256 // k_unroll - _pad_k_elems = model_dim_pad % tile_k__256 if model_dim_pad > 0 else 0 - _pad_ku_skip = _pad_k_elems // _K_per_ku - _tail_ku = k_unroll - _pad_ku_skip - _tail_ku_packed = (_tail_ku + pack_K__2 - 1) // pack_K__2 if _pad_ku_skip > 0 else None - - def load_b_packs_k64(base_k, ku: int, n_blk, n_intra): # B g2r? - c64 = arith.constant(64, index=True) - base_k_bytes = base_k * arith.constant(int(b_elem_bytes), index=True) - k0 = base_k_bytes // c64 + arith.constant(ku, index=True) - k1 = lane_div_16 - coord_pack = (n_blk, k0, k1, n_intra, arith.constant(0, index=True)) - idx_pack = crd2idx(coord_pack, layout_b) - vec_elems = kpack_bytes // int(b_elem_bytes) - b16 = _buffer_load_vec(buffer_ops, vector, w_rsrc, idx_pack, elem_type=_w_elem_type(), vec_elems=vec_elems, elem_bytes=b_elem_bytes, offset_in_bytes=b_elem_bytes == 1, cache_modifier=b_nt) - b_i64x2 = vector.bitcast(vec2_i64, b16) - b0 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) - b1 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) - return (b0, b1) - - def load_b_tile(base_k, ku_limit=k_unroll): # gate down & gate up. - """Load separated gate and up B tiles.""" - gate_b_tile = [] - up_b_tile = [] - for ku in range_constexpr(ku_limit): - g_packs0, g_packs1 = ([], []) - u_packs0, u_packs1 = ([], []) - for ni in range_constexpr(num_acc_n__2): - gb0, gb1 = load_b_packs_k64(base_k, ku, gate_n_blk_list[ni], gate_n_intra_list[ni]) - g_packs0.append(gb0) - g_packs1.append(gb1) - ub0, ub1 = load_b_packs_k64(base_k, ku, up_n_blk_list[ni], up_n_intra_list[ni]) - u_packs0.append(ub0) - u_packs1.append(ub1) - gate_b_tile.append((g_packs0, g_packs1)) - up_b_tile.append((u_packs0, u_packs1)) - return (gate_b_tile, up_b_tile) - _scale_lane_elem = lane_div_16 * layout_b_scale.stride_klane + lane_mod_16 - _gate_scale_bases = [] - _up_scale_bases = [] - for _ni in range_constexpr(num_acc_n_packed__1): - _col_base = by_n + n_tile_base + arith.constant(_ni * 16 * pack_N__2, index=True) - _gate_mni = (expert_off_idx + _col_base) // arith.constant(32, index=True) - _gate_scale_bases.append(_gate_mni * layout_b_scale.stride_n0 + _scale_lane_elem) - _up_mni = (expert_off_idx + inter_idx + _col_base) // arith.constant(32, index=True) - _up_scale_bases.append(_up_mni * layout_b_scale.stride_n0 + _scale_lane_elem) - _a_scale_bases = [] - for _mi in range_constexpr(m_repeat_packed__2): - _a_mni = _mi + bx_m // scale_mn_pack // 16 - _a_scale_bases.append(_a_mni * layout_a_scale.stride_n0 + _scale_lane_elem) - _c16_idx = arith.constant(16, index=True) - _c2_idx = arith.constant(2, index=True) - _scale_mask_lo = arith.constant(255, type=T.i32) - _m_half_idx = arith.constant(0, type=T.i32) - _m_half_i32 = arith.constant(0, type=T.i32) - _scale_shift = arith.constant(0, type=T.i32) - _scale_shift_hi = arith.constant(0, type=T.i32) - _n_half_idx = arith.constant(0, type=T.i32) - _n_half_i32 = arith.constant(0, type=T.i32) - _bscale_shift = arith.constant(0, type=T.i32) - _bscale_shift_hi = arith.constant(0, type=T.i32) - if const_expr(pack_M__2 < scale_mn_pack): - _m_half_idx = bx_m // _c16_idx % _c2_idx - _m_half_i32 = arith.index_cast(T.i32, _m_half_idx) - _scale_shift = _m_half_i32 * arith.constant(8, type=T.i32) - _scale_shift_hi = _scale_shift + arith.constant(16, type=T.i32) - if const_expr(pack_N__2 < scale_mn_pack): - _n_half_idx = n_tile_base // _c16_idx % _c2_idx - _n_half_i32 = arith.index_cast(T.i32, _n_half_idx) - _bscale_shift = _n_half_i32 * arith.constant(8, type=T.i32) - _bscale_shift_hi = _bscale_shift + arith.constant(16, type=T.i32) - - def _rearrange_a_scale(raw_i32): - """Rearrange scale bytes for pack_M=1: extract m_half's k0,k1 bytes.""" - if const_expr(pack_M__2 >= scale_mn_pack): - return raw_i32 - b_k0 = arith.andi(arith.shrui(raw_i32, _scale_shift), _scale_mask_lo) - b_k1 = arith.andi(arith.shrui(raw_i32, _scale_shift_hi), _scale_mask_lo) - return arith.ori(b_k0, arith.shli(b_k1, arith.constant(8, type=T.i32))) - - def _rearrange_b_scale(raw_i32): - """Rearrange scale bytes for pack_N=1: extract n_half's k0,k1 bytes.""" - if const_expr(pack_N__2 >= scale_mn_pack): - return raw_i32 - b_k0 = arith.andi(arith.shrui(raw_i32, _bscale_shift), _scale_mask_lo) - b_k1 = arith.andi(arith.shrui(raw_i32, _bscale_shift_hi), _scale_mask_lo) - return arith.ori(b_k0, arith.shli(b_k1, arith.constant(8, type=T.i32))) - - def prefetch_ab_scale_tile(base_k, ku_packed_limit=k_unroll_packed): - a_scale_tile = [] - gate_b_scale = [] - up_b_scale = [] - for ku in range_constexpr(ku_packed_limit): - k_off = (ku + base_k) * layout_b_scale.stride_k0 - for mi in range_constexpr(m_repeat_packed__2): - s = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[mi] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - s = _rearrange_a_scale(s) - a_scale_tile.append(vector.from_elements(T.vec(1, T.i32), [s])) - for ni in range_constexpr(num_acc_n_packed__1): - gs = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[ni] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - gs = _rearrange_b_scale(gs) - gate_b_scale.append(vector.from_elements(T.vec(1, T.i32), [gs])) - us = buffer_ops.buffer_load(sw_rsrc, _up_scale_bases[ni] + k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - us = _rearrange_b_scale(us) - up_b_scale.append(vector.from_elements(T.vec(1, T.i32), [us])) - return [a_scale_tile, gate_b_scale, up_b_scale] - _dma_bytes = 16 - _wave_size = 64 - _eff_bytes_per_buffer = int(tile_m__64) * int(_eff_lds_stride) * int(a_elem_bytes) - _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) - - def dma_x_tile_to_lds(base_k, lds_buffer): # A g2s - c4_idx = arith.index(4) - base_k_div4 = base_k / c_a_pack * arith.constant(int(elem_bytes), index=True) / arith.index(4) - lds_ptr_i64 = None - for i in range_constexpr(_num_dma_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(T.i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = memref.extract_aligned_pointer_as_index(lds_buffer) + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - lds_ptr_i64 = rocdl.readfirstlane(T.i64, arith.index_cast(T.i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=T.i64) - lds_ptr_type = ir.Type.parse('!llvm.ptr<3>') - lds_ptr = llvm.inttoptr(lds_ptr_type, lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) # 关键行. g2s loads了多少. - - def prefetch_x_to_lds(base_k, lds_buffer): - dma_x_tile_to_lds(base_k, lds_buffer) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): # A s2r - col_base_swz_bytes = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - col_base_swz = col_base_swz_bytes if elem_bytes == 1 else col_base_swz_bytes / arith.index(2) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) # float4 load. - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - a0 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) - a1 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) - return (a0, a1) - - def prefetch_full_a_from_lds(lds_buffer, ku_limit=k_unroll): # 啥时候用? for之前? - """Load entire A tile from LDS into registers before compute.""" - a_regs = [] - for k_idx in range_constexpr(ku_limit): - col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack - for mi_idx in range_constexpr(m_repeat__4): - mi_val = arith.constant(mi_idx * 16, index=True) - curr_row = row_a_lds + mi_val - a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) - a_regs.append((a0, a1)) - return a_regs - - def compute_tile(acc_gate_in, acc_up_in, gate_b_tile_in, up_b_tile_in, a_tile_regs, a_scale=None, gate_b_scale=None, up_b_scale=None, *, prefetch_epilogue=False, ku_count=k_unroll): - gate_list = list(acc_gate_in) - up_list = list(acc_up_in) - mfma_res_ty = vec4_f32 - epilogue_pf = None - c0_i64 = arith.constant(0, type=T.i64) - vec4_i64 = T.vec(4, T.i64) - vec8_i32 = T.vec(8, T.i32) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - _eff_packed = (ku_count + pack_K__2 - 1) // pack_K__2 - for ku128 in range_constexpr(_eff_packed): - for ni in range_constexpr(num_acc_n_packed__1): - gate_bs_i32 = gate_b_scale[ku128 * num_acc_n_packed__1 + ni] - gate_bs_val = vector.extract(gate_bs_i32, static_position=[0], dynamic_position=[]) - up_bs_i32 = up_b_scale[ku128 * num_acc_n_packed__1 + ni] - up_bs_val = vector.extract(up_bs_i32, static_position=[0], dynamic_position=[]) - for ikxdl in range_constexpr(pack_K__2): - k_idx = ku128 * pack_K__2 + ikxdl - if const_expr(k_idx < ku_count): - gate_bp0, gate_bp1 = gate_b_tile_in[k_idx] - up_bp0, up_bp1 = up_b_tile_in[k_idx] - for inxdl in range_constexpr(pack_N__2): - ni_idx = ni * pack_N__2 + inxdl - gb0 = gate_bp0[ni_idx] - gb1 = gate_bp1[ni_idx] - gb128 = pack_i64x4_to_i32x8(gb0, gb1, c0_i64, c0_i64) - ub0 = up_bp0[ni_idx] - ub1 = up_bp1[ni_idx] - ub128 = pack_i64x4_to_i32x8(ub0, ub1, c0_i64, c0_i64) - for mi in range_constexpr(m_repeat_packed__2): - a_scale_i32 = a_scale[ku128 * m_repeat_packed__2 + mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M__2): - mi_idx = mi * pack_M__2 + imxdl - _a_reg_idx = k_idx * m_repeat__4 + mi_idx - a0, a1 = a_tile_regs[_a_reg_idx] - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n__2 + ni_idx - gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, gate_bs_val]) - up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, up_bs_val]) - return (gate_list, up_list, epilogue_pf) - - def load_a_subtile(k_idx, mi_idx, lds_buffer): - """Load a single A sub-tile from LDS (one ds_read).""" - col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack - mi_val = arith.constant(mi_idx * 16, index=True) - curr_row = row_a_lds + mi_val - a0, a1 = lds_load_packs_k64(curr_row, col_base, lds_buffer) - return (a0, a1) - - def compute_bmajor_mfma_phase(all_a_tiles, # 8 个 (ArithValue(type=i64, op=vector.extract), ArithValue(type=i64, op=vector.extract)) - # # A regs: indexed by [k_idx * m_repeat + mi_idx] - gate_b_single, # 2 个 - up_b_single, # 2 - a_scale_vals, # 2 - gate_bs_val, # - up_bs_val, - gate_list, - up_list, - k_idx, - ni_idx, - ikxdl, - inxdl): - """B-major MFMA: fix one B (ni), cycle all A tiles (mi). - - Packs B once and reuses across all mi iterations. - A tiles come from LDS (already available, no VMEM wait). - - all_a_tiles: flat list indexed by [k*m_repeat + mi]. - gate_b_single/up_b_single: (b0, b1) for one specific ni. - a_scale_vals: list of A scale scalars indexed by mi_packed. - """ - c0_i64 = arith.constant(0, type=T.i64) - vec4_i64 = T.vec(4, T.i64) - vec8_i32 = T.vec(8, T.i32) - - def _pack(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - mfma_res_ty = vec4_f32 - gb128 = _pack(gate_b_single[0], gate_b_single[1], c0_i64, c0_i64) - ub128 = _pack(up_b_single[0], up_b_single[1], c0_i64, c0_i64) - for mi_p in range_constexpr(m_repeat_packed__2): - a_scale_val = a_scale_vals[mi_p] - for imxdl in range_constexpr(pack_M__2): - mi_idx = mi_p * pack_M__2 + imxdl - a_reg = all_a_tiles[k_idx * m_repeat__4 + mi_idx] - a128 = _pack(a_reg[0], a_reg[1], c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n__2 + ni_idx - gate_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, gb128, gate_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, gate_bs_val]) - up_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, ub128, up_list[acc_idx], cbsz, blgp, ikxdl * pack_M__2 + imxdl, a_scale_val, ikxdl * pack_N__2 + inxdl, up_bs_val]) - - def _interleaved_half(lds_read, lds_write, next_k_dma_py__todo, next_k_load___256_0, prev_a_tile, prev_gate_w, prev_up_w, prev_a_scale, prev_gate_bs, prev_up_bs, acc_gate, acc_up): # 核心调度. - """One flatmm-style interleaved half-iteration (deep pipeline). - - Generalized for arbitrary m_repeat (block_m=32, 64, ...). - DMA targets lds_write (OTHER buffer) while ds_read uses - lds_read (already DMA'd in previous half). - - Interleaving schedule (per half): - Phase 0: scale VMEM + 2 ds_read(A) -> 4 MFMA(prev) - Phase 1..N: B VMEM(distributed) + 2 ds_read(A, if avail) -> 4 MFMA(prev) - Phase N+1..: remaining B VMEM -> 4 MFMA(prev) - """ - _abs_k = k_base_idx__0 + arith.constant(next_k_load___256_0, index=True) - _bk = _abs_k // arith.constant(2, index=True) - _sk = _abs_k // arith.constant(pack_K__2 * 128, index=True) - _k_off = _sk * layout_b_scale.stride_k0 - print(f"{_abs_k=} {_bk=}, f{_sk=}, f{_k_off=}") - rocdl.sched_barrier(0) - rocdl.s_waitcnt(_vmcnt_before_barrier__9) - _barrier() - rocdl.sched_barrier(0) - _abs_k_dma__gloc = k_base_idx__0 + arith.constant(next_k_dma_py__todo, index=True) - if const_expr(use_async_copy__True and next_k_dma_py__todo < int(_k_dim__7168)): - prefetch_x_to_lds(_abs_k_dma__gloc, lds_write) # g2s_dma - _prev_asvs = [] - for _mi_p in range_constexpr(m_repeat_packed__2): - _prev_asvs.append(vector.extract(prev_a_scale[_mi_p], static_position=[0], dynamic_position=[])) - _prev_gsv_list = [] # gate_scale_value - for _gs_ni in range_constexpr(num_acc_n_packed__1): - _prev_gsv_list.append(vector.extract(prev_gate_bs[_gs_ni], static_position=[0], dynamic_position=[])) - _prev_usv_list = [] - for _us_ni in range_constexpr(num_acc_n_packed__1): - _prev_usv_list.append(vector.extract(prev_up_bs[_us_ni], static_position=[0], dynamic_position=[])) - _a_all = {} - _b_gate_all = {} - _b_up_all = {} - for _p in range_constexpr(_pipe_n_phases__4): - print(f'_pipe_n_phases={_pipe_n_phases__4}, _p={_p}') - if const_expr(_pp_has_scale[_p]): - _new_as_list = [] - for _mi_p in range_constexpr(m_repeat_packed__2): - _raw_as = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[_mi_p] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - _new_as_list.append(_rearrange_a_scale(_raw_as)) - _new_gs_list = [] - for _gs_ni in range_constexpr(num_acc_n_packed__1): - _gs_raw = buffer_ops.buffer_load(sw_rsrc, _gate_scale_bases[_gs_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - _new_gs_list.append(_rearrange_b_scale(_gs_raw)) - _new_us_list = [] - for _us_ni in range_constexpr(num_acc_n_packed__1): - _us_raw = buffer_ops.buffer_load(sw_rsrc, _up_scale_bases[_us_ni] + _k_off, vec_width=1, dtype=T.i32, cache_modifier=0) - _new_us_list.append(_rearrange_b_scale(_us_raw)) - for _b_j in range_constexpr(len(_pp_b_loads[_p])): - _b_type, _b_ku, _b_ni = _pp_b_loads[_p][_b_j] - if const_expr(_b_type == 'gate'): - _b_gate_all[_b_ku, _b_ni] = load_b_packs_k64(_bk, _b_ku, gate_n_blk_list[_b_ni], gate_n_intra_list[_b_ni]) - else: - _b_up_all[_b_ku, _b_ni] = load_b_packs_k64(_bk, _b_ku, up_n_blk_list[_b_ni], up_n_intra_list[_b_ni]) - rocdl.sched_barrier(0) - for _a_j in range_constexpr(len(_pp_a_reads[_p])): - _ak, _ami = _pp_a_reads[_p][_a_j] - _a_all[_ak, _ami] = load_a_subtile(_ak, _ami, lds_read) - rocdl.sched_barrier(0) - rocdl.s_setprio(1) # 4个warp,还用设置这个么... 好像也没有interleave是吧. - for _m_j in range_constexpr(len(_pp_mfma[_p])): - _k_idx, _ni_idx, _ikxdl, _inxdl, _ku128 = _pp_mfma[_p][_m_j] - _ni_packed_idx = _ni_idx // pack_N__2 - _up_b_single = (prev_up_w[_k_idx][0][_ni_idx], prev_up_w[_k_idx][1][_ni_idx]) - compute_bmajor_mfma_phase(prev_a_tile, (prev_gate_w[_k_idx][0][_ni_idx], prev_gate_w[_k_idx][1][_ni_idx]), _up_b_single, _prev_asvs, _prev_gsv_list[_ni_packed_idx], _prev_usv_list[_ni_packed_idx], acc_gate, acc_up, _k_idx, _ni_idx, _ikxdl, _inxdl) # MFMA. 输出到 gate_list 和 up_list 里面来. - rocdl.s_setprio(0) - rocdl.sched_barrier(0) - cur_a_tile = [] - for _k in range_constexpr(k_unroll): - for _mi in range_constexpr(m_repeat__4): - cur_a_tile.append(_a_all[_k, _mi]) - cur_gate_w = [] - cur_up_w = [] - for ku in range_constexpr(k_unroll): - g_packs0, g_packs1 = ([], []) - u_packs0, u_packs1 = ([], []) - for ni in range_constexpr(num_acc_n__2): - g = _b_gate_all[ku, ni] - g_packs0.append(g[0]) - g_packs1.append(g[1]) - u = _b_up_all[ku, ni] - u_packs0.append(u[0]) - u_packs1.append(u[1]) - cur_gate_w.append((g_packs0, g_packs1)) - cur_up_w.append((u_packs0, u_packs1)) - cur_a_scale = [] - for _mi_p in range_constexpr(m_repeat_packed__2): - cur_a_scale.append(vector.from_elements(T.vec(1, T.i32), [_new_as_list[_mi_p]])) - cur_gate_bs = [] - for _gs_ni in range_constexpr(num_acc_n_packed__1): - cur_gate_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_gs_list[_gs_ni]])) - cur_up_bs = [] - for _us_ni in range_constexpr(num_acc_n_packed__1): - cur_up_bs.append(vector.from_elements(T.vec(1, T.i32), [_new_us_list[_us_ni]])) - return (cur_a_tile, cur_gate_w, cur_up_w, cur_a_scale, cur_gate_bs, cur_up_bs, acc_gate, acc_up) - rocdl.sched_barrier(0) - k0 = k_base_idx__0 - prefetch_x_to_lds(k0, lds_x_pong) # TODO(zty) K0是什么意思? pong? 应该是说的 for开始前吧. - rocdl.sched_barrier(0) - _k0_scale = k_base_idx__0 // arith.constant(pack_K__2 * 128, index=True) - a_scale_pong, gate_bs_pong, up_bs_pong = prefetch_ab_scale_tile(_k0_scale) - _c_tile_m_idx = arith.constant(tile_m__64, index=True) - _tid_in_range = arith.cmpi(CmpIPredicate.ult, tx, _c_tile_m_idx) - _if_tid = scf.IfOp(_tid_in_range) - with ir.InsertionPoint(_if_tid.then_block): - _tid_row = bx_m + tx - _tid_val = buffer_ops.buffer_load(sorted_rsrc, _tid_row, vec_width=1, dtype=T.i32) - _tid_vec1 = vector.from_elements(T.vec(1, T.i32), [_tid_val]) - vector.store(_tid_vec1, lds_tid, [tx]) - scf.YieldOp([]) - acc_gate = [acc_init] * num_acc_n__2 * m_repeat__4 - acc_up = [acc_init] * num_acc_n__2 * m_repeat__4 # 这个算是声明了寄存器 C 是吧.. - _k1 = k_base_idx__0 + arith.constant(tile_k__256, index=True) - rocdl.sched_barrier(0) - prefetch_x_to_lds(_k1, lds_x_ping) # TODO(zty) K1是什么意思? ping? 应该是说的 for开始前吧. - _k0_b = k_base_idx__0 // arith.constant(2, index=True) - gate_w0__64_256, up_w0__64_256 = load_b_tile(_k0_b) - rocdl.s_waitcnt(0) - gpu.barrier() - rocdl.sched_barrier(0) - a_tile_pong = prefetch_full_a_from_lds(lds_x_pong) - rocdl.sched_barrier(0) - rocdl.s_waitcnt(6) - num_k_tiles_py__28 = int(_k_dim__7168) // int(tile_k__256) - odd_k_tiles__False = False - tail_tiles__2 = 2 - k_main2_py__6656 = (num_k_tiles_py__28 - 2) * int(tile_k__256) - print(f"k_main2_py: {k_main2_py__6656}", f"num_k_tiles_py: {num_k_tiles_py__28}", f"tail_tiles: {tail_tiles__2}", f"odd_k_tiles: {odd_k_tiles__False}") - gate_w_pong = gate_w0__64_256 # [64, 256) 相当于pong初始成了 gate_w0. - up_w_pong = up_w0__64_256 # [64,256) - rocdl.sched_barrier(0) - for k_iv_py in range_constexpr(0, k_main2_py__6656, tile_k__256 * 2): # (0,K - tile*2, 2*tile). - next_k_load_1 = k_iv_py + tile_k__256 - next_k_load_2 = k_iv_py + tile_k__256 * 2 - next_k_dma_1 = k_iv_py + tile_k__256 * 2 - next_k_dma_2 = k_iv_py + tile_k__256 * 3 - a_tile_ping, gate_w_ping, up_w_ping, a_scale_ping, gate_bs_ping, up_bs_ping, acc_gate, acc_up = _interleaved_half( - lds_x_ping, # lds_read - lds_x_pong, # lds_write - next_k_dma_1, # next_k_dma_py - next_k_load_1, # next_k_load - a_tile_pong, # prev_a_tile - gate_w_pong, # prev_gate_w - up_w_pong, # prev_up_w - a_scale_pong, # prev_a_scale - gate_bs_pong, # prev_gate_bs - up_bs_pong, # prev_up_bs - acc_gate, # acc_gate - acc_up, # acc_up - ) # 我现在起码知道了 interleave_half要做的事情了... 这么多参数. - a_tile_pong, gate_w_pong, up_w_pong, a_scale_pong, gate_bs_pong, up_bs_pong, acc_gate, acc_up = _interleaved_half( - lds_x_pong, - lds_x_ping, - next_k_dma_2, - next_k_load_2, - a_tile_ping, - gate_w_ping, - up_w_ping, - a_scale_ping, - gate_bs_ping, - up_bs_ping, - acc_gate, - acc_up, - ) - if const_expr(odd_k_tiles__False): - acc_gate, acc_up, epilogue_pf = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong, prefetch_epilogue=True, ku_count=_tail_ku if _pad_ku_skip > 0 else k_unroll) - else: - _k_tail_rel = arith.constant(_k_dim__7168 - tile_k__256, index=True) - k_tail1 = k_base_idx__0 + _k_tail_rel - x_regs_ping = [] - prefetch_x_to_lds(k_tail1, lds_x_ping) - if const_expr(_pad_ku_skip > 0): - gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True), ku_limit=_tail_ku) - a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K__2 * 128, index=True), ku_packed_limit=_tail_ku_packed) - else: - gate_w_ping, up_w_ping = load_b_tile(k_tail1 // arith.constant(2, index=True)) - a_scale_ping, gate_bs_ping, up_bs_ping = prefetch_ab_scale_tile(k_tail1 // arith.constant(pack_K__2 * 128, index=True)) - acc_gate, acc_up, _ = compute_tile(acc_gate, acc_up, gate_w_pong, up_w_pong, a_tile_pong, a_scale_pong, gate_bs_pong, up_bs_pong) - rocdl.s_waitcnt(0) - _barrier() - if const_expr(_pad_ku_skip > 0): - a_tile_ping = prefetch_full_a_from_lds(lds_x_ping, ku_limit=_tail_ku) - else: - a_tile_ping = prefetch_full_a_from_lds(lds_x_ping) - acc_gate, acc_up, epilogue_pf = compute_tile(acc_gate, acc_up, gate_w_ping, up_w_ping, a_tile_ping, a_scale_ping, gate_bs_ping, up_bs_ping, prefetch_epilogue=True, ku_count=_tail_ku if _pad_ku_skip > 0 else k_unroll) - def _silu_elem(g): - """silu(x) = x * sigmoid(x); HW fast path: exp2, rcp""" - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, 'llvm.amdgcn.exp2.f32', [t], [], []) - one = arith.constant(1.0, type=f32) - den = one + emu - sig = llvm.call_intrinsic(f32, 'llvm.amdgcn.rcp.f32', [den], [], []) - return g * sig - - def _silu_mul_vec4(gate_v4, up_v4): - """Element-wise silu(gate) * up on vec4_f32.""" - result_elems = [] - for ei in range_constexpr(4): - g = vector.extract(gate_v4, static_position=[ei], dynamic_position=[]) - u = vector.extract(up_v4, static_position=[ei], dynamic_position=[]) - result_elems.append(_silu_elem(g) * u) - return vector.from_elements(vec4_f32, result_elems) - - def _act_vec4(gate_v4, up_v4): - return _silu_mul_vec4(gate_v4, up_v4) - acc = [None] * (int(num_acc_n__2) * int(m_repeat__4)) - for _mi in range_constexpr(m_repeat__4): - for _ni in range_constexpr(num_acc_n__2): - _aidx = _mi * num_acc_n__2 + _ni - acc[_aidx] = _act_vec4(acc_gate[_aidx], acc_up[_aidx]) - mask24_i32 = arith.constant(16777215) - topk_i32_v = topk_i32 - tokens_i32_v = tokens_i32 - out_base_i64 = arith.index_cast(T.i64, fx.ptrtoint(arg_out)) - out_base_idx = arith.index_cast(ir.IndexType.get(), out_base_i64) - if const_expr(lds_out is None): - raise RuntimeError('CShuffle epilogue requires lds_out') - def write_row_to_lds(*, mi: int, ii: int, row_in_tile, row, row_base_lds, col_base_local, num_acc_n: int, lds_out): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + ni * 16 - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v_out = arith.trunc_f(out_elem(), v) - lds_idx = row_base_lds + col_local - vec1_out = T.vec(1, out_elem()) - v1 = vector.from_elements(vec1_out, [v_out]) - vector.store(v1, lds_out, [lds_idx], alignment=2) - _out_row_stride = inter_dim__512 * out_elem_bytes - - def precompute_row(*, row_local, row): - fused2 = memref.load(lds_tid, [row_local]) - row_i32 = arith.index_cast(T.i32, row) - row_valid0 = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) - t = fused2 & mask24_i32 - s = fused2 >> 24 - t_ok = arith.cmpi(CmpIPredicate.ult, t, tokens_i32_v) - s_ok = arith.cmpi(CmpIPredicate.ult, s, topk_i32_v) - row_valid = arith.andi(row_valid0, arith.andi(t_ok, s_ok)) - t_idx = arith.index_cast(ir.IndexType.get(), t) - s_idx = arith.index_cast(ir.IndexType.get(), s) - ts_idx = t_idx * arith.constant(topk__9, index=True) + s_idx - row_byte_base = out_base_idx + ts_idx * arith.constant(_out_row_stride, index=True) - return ((fused2, row_byte_base), row_valid) - - def _idx_to_llvm_ptr(idx_val, addr_space=1): - idx_v = idx_val._value if hasattr(idx_val, '_value') else idx_val - i64_v = arith.index_cast(T.i64, idx_v) - i64_raw = i64_v._value if hasattr(i64_v, '_value') else i64_v - ptr_ty = ir.Type.parse(f'!llvm.ptr<{addr_space}>') - return llvm.inttoptr(ptr_ty, i64_raw) - _e_vec = _e_vec_s1 - _cshuffle_nlane = min(32, tile_n__128 // _e_vec) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - fused, row_byte_base = row_ctx - col_idx = col_g0 - byte_off_col = col_idx * arith.constant(out_elem_bytes, index=True) - ptr_addr_idx = row_byte_base + byte_off_col - out_ptr_v = _idx_to_llvm_ptr(ptr_addr_idx) - frag_v = frag._value if hasattr(frag, '_value') else frag - llvm.StoreOp(frag_v, out_ptr_v, alignment=_e_vec * out_elem_bytes, nontemporal=True) - _frag_elem = ir.BF16Type.get() - c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m__64, tile_n=tile_n__128, e_vec=_e_vec, cshuffle_nlane=_cshuffle_nlane, block_size=total_threads, m_repeat=m_repeat__4, num_acc_n=num_acc_n__2, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=_frag_elem, write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair, lds_out_split=lds_out_B) - _if_blk = scf.IfOp(blk_valid) - with ir.InsertionPoint(_if_blk.then_block): - _ifexpert_of = scf.IfOp(exp_valid) - with ir.InsertionPoint(_ifexpert_of.then_block): - _moe_gemm1_body() - scf.YieldOp([]) - scf.YieldOp([]) - gpu.barrier() - scf.YieldOp([]) - _for_ip.__exit__(None, None, None) - _cache_tag = (module_name, tile_m__64, tile_n__128, tile_k__256, model_dim_pad, inter_dim_pad, persist_m, use_async_copy__True, waves_per_eu, k_batch, xcd_swizzle) - - @flyc.jit - def launch_kimi_fp4_stage1_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_max_token_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_inter_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): - _ = _cache_tag # 让函数和cache_tag绑定,避免重复编译 - allocator_pong.finalized = False - allocator_ping.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): # 前面算好了怎么切,这个真正挂到kernel里面. - allocator_pong.finalize() - allocator_ping.finalize() - inter_dim_pad_total = arith.constant(2 * inter_dim_pad, index=True) # 0 如果存在,*2, gemm1 - tile_k_stage2 = tile_k__256 // 2 # 128 = 256 // 2 - tile2_pad = (tile_k_stage2 - (inter_dim__512 - inter_dim_pad) % tile_k_stage2) % tile_k_stage2 # 0 = div_up(pad, tile_k_stage2) - inter_in = arith.index_cast(ir.IndexType.get(), i32_inter_in.ir_value()) # 1024 - tile_n_index = arith.constant(tile_n__128, index=True) # 128 - gx = (inter_in - inter_dim_pad_total + tile2_pad + 2 * tile_n_index - 1) / tile_n_index / arith.constant(2, index=True) # 4 = div_up(1024, 2*128) # 成对处理tile_n - _c_pm_l = arith.constant(persist_m, index=True) # 这里是1. - gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l # div_up(expert_ids_in, 1) - moe_gemm1(arg_out, arg_x, arg_w, arg_scale_x, arg_scale_w, arg_sorted_token_ids, arg_expert_ids, arg_max_token_ids, i32_tokens_in, i32_inter_in, i32_k_in, i32_size_expert_ids_in).launch(grid=(gx, gy, k_batch), block=(total_threads, 1, 1), stream=stream) - return launch_kimi_fp4_stage1_16384 - -@functools.lru_cache(maxsize=1) -def compile_kimi_fp4_stage2_16384(): - """Compile the fixed Kimi fp4 stage2 kernel selected for M=16384.""" - model_dim = MODEL_DIM - inter_dim = INTER_DIM - experts = EXPERTS - topk = TOPK - tile_m = S2.tile_m - tile_n = S2.tile_n - tile_k = S2.tile_k - model_dim_pad = 0 - inter_dim_pad = 0 - persist_m = S2.persist_m - b_nt = S2.b_nt - xcd_swizzle = S2.xcd_swizzle - _sort_block_m = tile_m - gpu_arch = get_hip_arch() - allocator_pong = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem0') - allocator_ping = SmemAllocator(None, arch=gpu_arch, global_sym_name='smem1') - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = min(_scale_pack_m, tile_m // 16) - pack_N = min(_scale_pack_n, tile_n // 64) - _k_unroll_raw = int(tile_k) // 128 - pack_K = min(_scale_pack_k, _k_unroll_raw) - elem_bytes = 1 - a_elem_bytes = 1 - b_elem_bytes = 1 - tile_k_bytes = int(tile_k) * int(a_elem_bytes) - a_elem_vec_pack = 2 - cbsz = 4 - blgp = 4 - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = inter_dim // _scale_pack_k - _b_c_k0_s = _b_c_k_s * b_elem_bytes // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - assert model_dim % 16 == 0, 'model_dim must be divisible by 16' - _expert_b_stride = model_dim // 16 * _b_stride_n0 - if tile_k_bytes % 64 != 0: - raise ValueError(f'tile_k_bytes must be divisible by 64, got tile_k_bytes={tile_k_bytes} (tile_k={tile_k}, elem_bytes={a_elem_bytes})') - out_s = 'bf16' - w_elem_bytes = 1 - w_elem_pack = 2 - w_nbytes = experts * model_dim * inter_dim * w_elem_bytes // w_elem_pack - - def _x_elem_type(): - return T.i8 - - def _w_elem_type(): - return T.i8 - - def _scale_elem_type(): - return T.i32 - total_threads = 256 - bytes_x_per_tile = int(tile_m) * int(tile_k) * int(a_elem_bytes) - if bytes_x_per_tile % total_threads != 0: - raise ValueError(f'tile_m*tile_k*elem_bytes must be divisible by {total_threads}: tile_m={tile_m}, tile_k={tile_k}, elem_bytes={a_elem_bytes}') - bytes_per_thread_x = bytes_x_per_tile // total_threads - _use_lds128 = os.environ.get('FLIR_CK_LDS128', '1') in ('1', 'true', 'True', 'YES', 'yes') - pad_k = 0 if _use_lds128 else 8 - lds_stride = tile_k + pad_k - if a_elem_vec_pack > 1: - _eff_lds_stride = lds_stride // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - else: - _eff_lds_stride = lds_stride - _eff_tile_k_bytes = tile_k_bytes - _use_cshuffle_epilog = True - - def out_elem(): - return T.bf16 - epilog_tag = 'cshuffle' - _persistent = persist_m <= 0 - if _persistent: - from aiter.jit.utils.chip_info import get_cu_num - _cu_num = get_cu_num() - else: - _cu_num = 0 - _pm_tag = f'_persist_cu{_cu_num}' if _persistent else f'_pm{persist_m}' - _xcd_tag = f'_xcd{xcd_swizzle}' if xcd_swizzle > 0 else '' - module_name = f'mfma_moe2_afp4_wfp4_{out_s}_{epilog_tag}_t{tile_m}x{tile_n}x{tile_k}_vscale_fix3{_pm_tag}{_xcd_tag}' - _single_x_bytes = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) - _cshuffle_elem_bytes_s2 = 2 - lds_out_bytes = _cshuffle_elem_bytes_s2 * int(tile_m) * int(tile_n) if _use_cshuffle_epilog else 0 - lds_tid_bytes = int(tile_m) * 4 - _input_elems = _single_x_bytes if a_elem_bytes == 1 else _single_x_bytes // 2 - _pong_buffer_bytes = max(_single_x_bytes, lds_out_bytes) - _ping_buffer_bytes = _single_x_bytes - - def x_lds_elem(): - return T.f8 - lds_pong_offset = allocator_pong._align(allocator_pong.ptr, 16) - allocator_pong.ptr = lds_pong_offset + _pong_buffer_bytes - _lds_tid_offset_pong = allocator_pong._align(allocator_pong.ptr, 4) - allocator_pong.ptr = _lds_tid_offset_pong + lds_tid_bytes - lds_ping_offset = allocator_ping._align(allocator_ping.ptr, 16) - allocator_ping.ptr = lds_ping_offset + _ping_buffer_bytes - - @flyc.kernel(name=module_name) - def moe_gemm2(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_sorted_weights: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32): - tokens_in = arith.index_cast(ir.IndexType.get(), i32_tokens_in.ir_value()) - n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) - k_in = arith.index_cast(ir.IndexType.get(), i32_k_in.ir_value()) - size_expert_ids_in = arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) - x_elem = T.f8 - f32 = T.f32 - i32 = T.i32 - i64 = T.i64 - vec4_f32 = T.vec(4, f32) - vec4_i32 = T.vec(4, i32) - vec16_elems = 16 if a_elem_bytes == 1 else 8 - vec16_x = T.vec(vec16_elems, x_elem) - vec2_i64 = T.vec(2, i64) - - def _ptr_buffer_resource(ptr, num_records_bytes): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr(addr_i64, num_records_bytes=num_records_bytes) - acc_init = arith.constant_vector(0.0, vec4_f32) - topk_idx = arith.constant(topk, index=True) - m_in = tokens_in * topk_idx - c_n_total = arith.constant(experts * model_dim, index=True) - kpack_bytes = 16 - from aiter.ops.flydsl.kernels.layout_utils import _div_pow2, _mod_pow2 - - def check_c_n_valid_gate(base_n): - return arith.cmpi(CmpIPredicate.ult, base_n, model_dim - model_dim_pad) - - def check_c_k_valid_gate(base_k): - return arith.cmpi(CmpIPredicate.ult, base_k, inter_dim - inter_dim_pad) - c_k_orig = arith.constant(inter_dim, index=True) - layout_a_scale = make_preshuffle_scale_layout(arith, c_mn=m_in, c_k=c_k_orig) - layout_b_scale = make_preshuffle_scale_layout(arith, c_mn=c_n_total, c_k=c_k_orig) - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - tx = gpu.thread_id('x') - by = gpu.block_id('x') - bx_persist = gpu.block_id('y') - if const_expr(xcd_swizzle > 0): - _NUM_XCDS_S = 8 - _c1_sw = arith.constant(1, index=True) - _c_tn_sw = arith.constant(tile_n, index=True) - _c_mdp_sw = arith.constant(model_dim_pad, index=True) - _gx = (n_in - _c_mdp_sw + _c_tn_sw - _c1_sw) / _c_tn_sw - if const_expr(_persistent): - _gy = arith.constant(_cu_num, index=True) - else: - _c_pm_sw = arith.constant(persist_m, index=True) - _gy = (size_expert_ids_in + _c_pm_sw - _c1_sw) / _c_pm_sw - _linear_id = bx_persist * _gx + by - _num_wgs = _gx * _gy - _c_xcds = arith.constant(_NUM_XCDS_S, index=True) - _wgs_per_xcd = _num_wgs / _c_xcds - _wgid = _linear_id % _c_xcds * _wgs_per_xcd + _linear_id / _c_xcds - _WGM_S = xcd_swizzle - _c_wgm = arith.constant(_WGM_S, index=True) - _num_wgid_in_group = _c_wgm * _gx - _group_id = _wgid / _num_wgid_in_group - _first_pid_m = _group_id * _c_wgm - _remaining_m = _gy - _first_pid_m - _cmp_m = arith.cmpi(CmpIPredicate.ult, _remaining_m, _c_wgm) - _group_size_m = arith.select(_cmp_m, _remaining_m, _c_wgm) - _wgid_in_group = _wgid % _num_wgid_in_group - bx_persist = _first_pid_m + _wgid_in_group % _group_size_m - by = _wgid_in_group / _group_size_m - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - base_ptr_pong = allocator_pong.get_base() - base_ptr_ping = allocator_ping.get_base() - lds_x_pong = SmemPtr(base_ptr_pong, lds_pong_offset, x_lds_elem(), shape=(_input_elems,)).get() - lds_x_ping = SmemPtr(base_ptr_ping, lds_ping_offset, x_lds_elem(), shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr_pong, lds_pong_offset, T.bf16, shape=(tile_m * tile_n,)).get() if _use_cshuffle_epilog else None - lds_tid = SmemPtr(base_ptr_pong, _lds_tid_offset_pong, T.i32, shape=(tile_m,)).get() - c_topk = arith.constant(topk, index=True) - c_elem_bytes = arith.constant(int(a_elem_bytes), index=True) - x_nbytes_idx = _div_pow2(tokens_in * c_topk * k_in * c_elem_bytes, int(a_elem_vec_pack)) - x_nbytes_i32 = arith.index_cast(T.i32, x_nbytes_idx) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes_i32) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - out_elem_bytes = 2 - out_nbytes_idx = tokens_in * n_in * arith.constant(out_elem_bytes, index=True) - out_nbytes_idx = tokens_in * arith.index(topk) * n_in * arith.constant(out_elem_bytes, index=True) - out_nbytes_i32 = arith.index_cast(T.i32, out_nbytes_idx) - out_rsrc = _ptr_buffer_resource(arg_out, out_nbytes_i32) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, arith.constant(4, type=T.i32)) - num_valid_i32 = buffer_ops.buffer_load(numids_rsrc, arith.constant(0, index=True), vec_width=1, dtype=T.i32) - num_valid_i32 = rocdl.ReadfirstlaneOp(T.i32, num_valid_i32).res - num_valid_idx = arith.index_cast(ir.IndexType.get(), num_valid_i32) - sx_rsrc = 1 - sw_rsrc = 1 - kblk = _div_pow2(k_in, 32) - sx_nbytes_idx = num_valid_idx * kblk - sx_nbytes_i32 = arith.index_cast(T.i32, sx_nbytes_idx) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, sx_nbytes_i32) - kblk_w = _div_pow2(k_in, 32) - mn_w = arith.constant(experts * model_dim, index=True) - sw_nbytes_idx = mn_w * kblk_w - sw_nbytes_i32 = arith.index_cast(T.i32, sw_nbytes_idx) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, sw_nbytes_i32) - sorted_nbytes_idx = size_expert_ids_in * arith.constant(tile_m, index=True) * arith.constant(4, index=True) - sorted_nbytes_i32 = arith.index_cast(T.i32, sorted_nbytes_idx) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes_i32) - sorted_w_rsrc = _ptr_buffer_resource(arg_sorted_weights, sorted_nbytes_i32) - _c_sbm = arith.constant(_sort_block_m, index=True) - _c_tm = arith.constant(tile_m, index=True) - _c1 = arith.constant(1, index=True) - _sort_blocks_ub = _div_pow2(size_expert_ids_in * _c_tm + _c_sbm - _c1, _sort_block_m) - eid_nbytes_idx = _sort_blocks_ub * arith.constant(4, index=True) - eid_nbytes_i32 = arith.index_cast(T.i32, eid_nbytes_idx) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, eid_nbytes_i32) - _c0_p = arith.constant(0, index=True) - _c1_p = arith.constant(1, index=True) - if const_expr(_persistent): - _c_cu = arith.constant(_cu_num, index=True) - _c_tm_p = arith.constant(tile_m, index=True) - _num_valid_idx = arith.index_cast(ir.IndexType.get(), num_valid_i32) - _total_m_tiles = (_num_valid_idx + _c_tm_p - _c1_p) / _c_tm_p - _tiles_per_block = (_total_m_tiles + _c_cu - _c1_p) / _c_cu - _i1 = ir.IntegerType.get_signless(1) - _init_active = arith.constant(1, type=_i1) - _for_persist = scf.ForOp(_c0_p, _tiles_per_block, _c1_p, [_init_active]) - else: - _c_pm = arith.constant(persist_m, index=True) - _init_prev_expert = arith.constant(0, type=T.i32) - _init_prev_b_base = arith.constant(0, index=True) - _for_persist = scf.ForOp(_c0_p, _c_pm, _c1_p, [_init_prev_expert, _init_prev_b_base]) - _for_ip = ir.InsertionPoint(_for_persist.body) - _for_ip.__enter__() - _mi_p = _for_persist.induction_variable - if const_expr(_persistent): - _still_active = _for_persist.inner_iter_args[0] - bx = bx_persist * _tiles_per_block + _mi_p - else: - _prev_expert_i32 = _for_persist.inner_iter_args[0] - _prev_expert_b_base = _for_persist.inner_iter_args[1] - bx = bx_persist * arith.constant(persist_m, index=True) + _mi_p - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(T.i32, bx_m) - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - sort_blk = _div_pow2(bx_m, _sort_block_m) - expert_i32 = buffer_ops.buffer_load(expert_rsrc, sort_blk, vec_width=1, dtype=T.i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(experts, type=T.i32)) - if const_expr(_persistent): - _expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - else: - _delta_expert = arith.subi(expert_i32, _prev_expert_i32) - _delta_expert_idx = arith.index_cast(ir.IndexType.get(), _delta_expert) - _delta_b = _delta_expert_idx * arith.constant(_expert_b_stride, index=True) - _expert_b_base = _prev_expert_b_base + _delta_b - _first_tok = buffer_ops.buffer_load(sorted_rsrc, bx_m, vec_width=1, dtype=T.i32) - _first_tid = arith.andi(_first_tok, arith.constant(16777215, type=T.i32)) - _tokens_i32_guard = arith.index_cast(T.i32, tokens_in) - tile_has_tokens = arith.cmpi(CmpIPredicate.ult, _first_tid, _tokens_i32_guard) - if const_expr(pack_M < _scale_pack_m): - _m_off = _mod_pow2(_div_pow2(bx_m, 16), _scale_pack_m) - _m_scale_shift_i32 = arith.index_cast(T.i32, _m_off * arith.constant(8, index=True)) - else: - _m_scale_shift_i32 = None - - def _moe_gemm2_then_body(): - n_idx = arith.constant(model_dim, index=True) - expert_off_idx = expert_idx * n_idx - if const_expr(bytes_per_thread_x % 16 == 0): - x_load_bytes = 16 - elif const_expr(bytes_per_thread_x % 8 == 0): - x_load_bytes = 8 - elif const_expr(bytes_per_thread_x % 4 == 0): - x_load_bytes = 4 - else: - raise ValueError(f'bytes_per_thread_x ({bytes_per_thread_x}) must be divisible by 4 to use the dword-indexed load mapping.') - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - vec4_i32 = T.vec(4, i32) - c_k_div4 = _div_pow2(_div_pow2(k_in, int(a_elem_vec_pack)) * arith.constant(int(a_elem_bytes), index=True), 4) - tile_k_dwords = int(tile_k) * int(a_elem_bytes) // (4 * int(a_elem_vec_pack)) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - topk_i32 = arith.constant(topk) - mask24 = arith.constant(16777215) - tokens_i32 = arith.index_cast(T.i32, tokens_in) - - def x_tile_chunk_coord_i32(i: int): - return tile_chunk_coord_i32(arith, tx_i32_base=tx_i32_base, i=i, total_threads=total_threads, layout_tile_div4=layout_x_tile_div4, chunk_i32=chunk_i32) - vec1_i32 = T.vec(1, i32) - vec2_i32 = T.vec(2, i32) - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = x_tile_chunk_coord_i32(i) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - fused_i = buffer_ops.buffer_load(sorted_rsrc, sorted_row_i, vec_width=1, dtype=T.i32) - t_i32 = arith.andi(fused_i, mask24) - s_i32 = arith.shrui(fused_i, arith.constant(24)) - t_valid = arith.cmpi(CmpIPredicate.ult, t_i32, tokens_i32) - s_valid = arith.cmpi(CmpIPredicate.ult, s_i32, topk_i32) - ts_valid = arith.andi(t_valid, s_valid) - t_safe = arith.select(ts_valid, t_i32, arith.constant(0)) - s_safe = arith.select(ts_valid, s_i32, arith.constant(0)) - row_ts_i32 = t_safe * topk_i32 + s_safe - row_ts_idx = arith.index_cast(ir.IndexType.get(), row_ts_i32) - x_row_base_div4.append(row_ts_idx * c_k_div4) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - c_n_per_wave = arith.constant(n_per_wave, index=True) - wave_mod_4 = _mod_pow2(wave_id, 4) - n_tile_base = wave_mod_4 * c_n_per_wave - by_n = by * arith.constant(tile_n, index=True) - if const_expr(pack_N < _scale_pack_n): - _global_n_base = expert_off_idx + by_n + n_tile_base - _n_off = _mod_pow2(_div_pow2(_global_n_base, 16), _scale_pack_n) - _n_scale_shift_i32 = arith.index_cast(T.i32, _n_off * arith.constant(8, index=True)) - else: - _n_scale_shift_i32 = None - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - col_g_list = [None] * num_acc_n - for i in range_constexpr(num_acc_n): - offset = i * 16 - col_g = by_n + n_tile_base - col_g = _div_pow2(col_g, 2) + offset - col_g = col_g + lane_mod_16 - col_g_list[i] = col_g - c_offset = arith.constant(offset, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[i] = _div_pow2(global_n, 16) - n_intra_list[i] = _mod_pow2(global_n, 16) - m_repeat = tile_m // 16 - k_unroll = tile_k_bytes // 128 - k_unroll_packed = k_unroll // pack_K - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - _K_per_ku_s2 = tile_k // k_unroll - _pad_k_elems_s2 = inter_dim_pad % tile_k if inter_dim_pad > 0 else 0 - _pad_ku_skip_s2 = _pad_k_elems_s2 // _K_per_ku_s2 - _tail_ku_s2 = k_unroll - _pad_ku_skip_s2 - _tail_ku_packed_s2 = (_tail_ku_s2 + pack_K - 1) // pack_K if _pad_ku_skip_s2 > 0 else None - - def load_b_packs_k64(base_k, ku: int, ni: int): - """Load one K64-byte B micro-step: single 16B load, split into 2x i64.""" - base_k_bytes = base_k * arith.constant(int(b_elem_bytes), index=True) - k0_base = _div_pow2(base_k_bytes, 64) - k0 = k0_base + arith.constant(ku, index=True) - k1 = lane_div_16 - idx_pack = _expert_b_base + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) + k0 * arith.constant(_b_stride_k0, index=True) + k1 * arith.constant(_b_stride_klane, index=True) + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - vec_elems = kpack_bytes // int(b_elem_bytes) - b16 = _buffer_load_vec(buffer_ops, vector, w_rsrc, idx_pack, elem_type=_w_elem_type(), vec_elems=vec_elems, elem_bytes=b_elem_bytes, offset_in_bytes=b_elem_bytes == 1, cache_modifier=b_nt) - b_i64x2 = vector.bitcast(vec2_i64, b16) - b0 = vector.extract(b_i64x2, static_position=[0], dynamic_position=[]) - b1 = vector.extract(b_i64x2, static_position=[1], dynamic_position=[]) - return (b0, b1) - - def load_b_tile(base_k, ku_limit=k_unroll): - b_tile = [] - for ku in range_constexpr(ku_limit): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - _b_split_enabled = k_unroll >= 2 - _b_split_ku = k_unroll // 2 if _b_split_enabled else k_unroll - - def load_b_tile_lo(base_k): - """Load first half of B tile (ku < _b_split_ku).""" - b_tile = [] - for ku in range_constexpr(_b_split_ku): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def load_b_tile_hi(base_k): - """Load second half of B tile (ku >= _b_split_ku).""" - b_tile = [] - for ku in range_constexpr(_b_split_ku, k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def load_scale(arg_scale, rsrc, scale_info, ku, mni): - k_lane = lane_div_16 - n_lane = lane_mod_16 - idx_pack = mni * scale_info.stride_n0 + ku * scale_info.stride_k0 + k_lane * scale_info.stride_klane + n_lane - s = buffer_ops.buffer_load(rsrc, idx_pack, vec_width=1, dtype=T.i32) - return vector.from_elements(T.vec(1, T.i32), [s]) - - def _apply_k_shift(scale_vec, k_shift_bits): - if const_expr(k_shift_bits > 0): - val = vector.extract(scale_vec, static_position=[0], dynamic_position=[]) - val = arith.shrui(val, arith.constant(k_shift_bits, type=T.i32)) - return vector.from_elements(T.vec(1, T.i32), [val]) - return scale_vec - - def load_b_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): - b_scale_tile = [] - for ku in range_constexpr(ku_packed_limit): - for ni in range_constexpr(num_acc_n_packed): - scale = load_scale(arg_scale_w, sw_rsrc, layout_b_scale, ku + base_k, ni + _div_pow2(_div_pow2(expert_off_idx + by_n + n_tile_base, _scale_pack_n), 16)) - scale = _apply_k_shift(scale, k_shift_bits) - b_scale_tile.append(scale) - return b_scale_tile - - def load_a_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): - a_scale_tile = [] - for ku in range_constexpr(ku_packed_limit): - for mi in range_constexpr(m_repeat_packed): - scale = load_scale(arg_scale_x, sx_rsrc, layout_a_scale, ku + base_k, mi + _div_pow2(_div_pow2(bx_m, _scale_pack_m), 16)) - scale = _apply_k_shift(scale, k_shift_bits) - a_scale_tile.append(scale) - return a_scale_tile - - def prefetch_ab_scale_tile(base_k, k_shift_bits=0, ku_packed_limit=k_unroll_packed): - return [load_a_scale_tile(base_k, k_shift_bits, ku_packed_limit=ku_packed_limit), load_b_scale_tile(base_k, k_shift_bits, ku_packed_limit=ku_packed_limit)] - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz_bytes = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - col_base_swz = col_base_swz_bytes if elem_bytes == 1 else col_base_swz_bytes / arith.index(2) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - a0 = vector.extract(a_i64x2, static_position=[0], dynamic_position=[]) - a1 = vector.extract(a_i64x2, static_position=[1], dynamic_position=[]) - return (a0, a1) - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale=None, b_scale=None, *, prefetch_epilogue: bool=False, a0_prefetch=None, a1_prefetch=None, b_hi_loader=None, ku_count=k_unroll): - if const_expr(b_hi_loader is not None): - b_tile_full = [None] * k_unroll - for i in range_constexpr(_b_split_ku): - b_tile_full[i] = b_tile_in[i] - else: - b_tile_full = b_tile_in - acc_list = list(acc_in) - mfma_res_ty = vec4_f32 - epilogue_pf = None - if const_expr(prefetch_epilogue): - tw_pf = [] - lane_div_16_mul4_pf = lane_div_16 * arith.index(4) - ii_idx_list_pf = [arith.constant(ii, index=True) for ii in range(4)] - for mi in range_constexpr(m_repeat): - mi_base_pf = arith.constant(mi * 16, index=True) - for ii in range_constexpr(4): - row_off_pf = lane_div_16_mul4_pf + ii_idx_list_pf[ii] - row_in_tile_pf = mi_base_pf + row_off_pf - sorted_row_pf = bx_m + row_in_tile_pf - tw_pf.append(buffer_ops.buffer_load(sorted_w_rsrc, sorted_row_pf, vec_width=1, dtype=f32)) - epilogue_pf = tw_pf - c0_i64 = arith.constant(0, type=T.i64) - vec4_i64 = T.vec(4, T.i64) - vec8_i32 = T.vec(8, T.i32) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - _pack_K_shift = (pack_K - 1).bit_length() - _pack_K_mask = pack_K - 1 - if const_expr(b_hi_loader is not None): - _b_hi = b_hi_loader() - for _bhi_i in range_constexpr(len(_b_hi)): - b_tile_full[_b_split_ku + _bhi_i] = _b_hi[_bhi_i] - for k_idx in range_constexpr(ku_count): - ku128 = k_idx >> _pack_K_shift - ikxdl = k_idx & _pack_K_mask - b_packs0, b_packs1 = b_tile_full[k_idx] - col_base = col_offset_base + k_idx * 128 // a_elem_vec_pack - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[ku128 * m_repeat_packed + mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - if const_expr(_m_scale_shift_i32 is not None): - a_scale_val = arith.shrui(a_scale_val, _m_scale_shift_i32) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ku128 * num_acc_n_packed + ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - if const_expr(_n_scale_shift_i32 is not None): - b_scale_val = arith.shrui(b_scale_val, _n_scale_shift_i32) - for imxdl in range_constexpr(pack_M): - col_base0 = col_base - mi_idx = mi * pack_M + imxdl - mi_val = arith.constant(mi_idx * 16, index=True) - curr_row_a_lds = row_a_lds + mi_val - if const_expr(a0_prefetch is not None and k_idx == 0 and (mi_idx == 0)): - a0, a1 = a0_prefetch - elif const_expr(a1_prefetch is not None and k_idx == 1 and (mi_idx == 0)): - a0, a1 = a1_prefetch - else: - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base0, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4(mfma_res_ty, [a128, b128, acc_list[acc_idx], cbsz, blgp, ikxdl * _scale_pack_m + imxdl, a_scale_val, ikxdl * _scale_pack_n + inxdl, b_scale_val]) - return (acc_list, epilogue_pf) - _dma_bytes = 16 - _wave_size = 64 - _eff_bytes_per_buffer = int(tile_m) * int(_eff_lds_stride) * int(a_elem_bytes) - _num_dma_loads = max(1, _eff_bytes_per_buffer // (total_threads * _dma_bytes)) - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, int(a_elem_vec_pack)) * arith.constant(int(a_elem_bytes), index=True), 4) - lds_ptr_i64 = None - for i in range_constexpr(_num_dma_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(T.i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = memref.extract_aligned_pointer_as_index(lds_buffer) + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - lds_ptr_i64 = rocdl.readfirstlane(T.i64, arith.index_cast(T.i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=T.i64) - lds_ptr_type = ir.Type.parse('!llvm.ptr<3>') - lds_ptr = llvm.inttoptr(lds_ptr_type, lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds(x_rsrc, lds_ptr, arith.constant(_dma_bytes, type=T.i32), global_offset, arith.constant(0, type=T.i32), arith.constant(0, type=T.i32), arith.constant(0, type=T.i32)) - - def prefetch_x_to_lds(base_k, lds_buffer): - dma_x_tile_to_lds(base_k, lds_buffer) - rocdl.sched_barrier(0) - - def hot_loop_scheduler(): - rocdl.sched_barrier(0) - - def _k_shift_bits(k_py): - if const_expr(pack_K >= _scale_pack_k): - return 0 - return k_py // 128 % _scale_pack_k * _scale_pack_m * 8 - - def _k_base(k_py): - return k_py // _scale_pack_k // 128 - _c_tile_m_idx = arith.constant(tile_m, index=True) - _tid_in_range = arith.cmpi(CmpIPredicate.ult, tx, _c_tile_m_idx) - _if_tid = scf.IfOp(_tid_in_range) - with ir.InsertionPoint(_if_tid.then_block): - _tid_row = bx_m + tx - _tid_val = buffer_ops.buffer_load(sorted_rsrc, _tid_row, vec_width=1, dtype=T.i32) - _tid_vec1 = vector.from_elements(T.vec(1, T.i32), [_tid_val]) - vector.store(_tid_vec1, lds_tid, [tx]) - scf.YieldOp([]) - gpu.barrier() - k0 = arith.index(0) - if const_expr(_b_split_enabled): - b_cur = load_b_tile_lo(k0) - else: - b_cur = load_b_tile(k0) - a_scale_pong, b_scale_pong = prefetch_ab_scale_tile(_k_base(0), _k_shift_bits(0)) - rocdl.sched_barrier(0) - prefetch_x_to_lds(k0, lds_x_pong) - rocdl.s_waitcnt(0) - gpu.barrier() - acc = [acc_init] * num_acc_n * m_repeat - a0_prefetch_pong = lds_load_packs_k64(row_a_lds, col_offset_base, lds_x_pong) - _a1_col_base = col_offset_base + 128 // a_elem_vec_pack - a1_prefetch_pong = lds_load_packs_k64(row_a_lds, _a1_col_base, lds_x_pong) if pack_K >= 2 else None - num_k_tiles_py = int(inter_dim) // int(tile_k) - odd_k_tiles = num_k_tiles_py % 2 == 1 - tail_tiles = 1 if odd_k_tiles else 2 - k_main2_py = (num_k_tiles_py - tail_tiles) * int(tile_k) - if const_expr(k_main2_py < 0): - k_main2_py = 0 - c2_tile_k = arith.constant(tile_k * 2, index=True) - b_pong = b_cur - k0_pong_bk = k0 - - def _make_b_hi_loader(base_k): - """Create a b_hi_loader callable for a given base_k.""" - return lambda _bk=base_k: load_b_tile_hi(_bk) - if const_expr(odd_k_tiles): - acc, epilogue_pf = compute_tile(acc, b_pong, lds_x_pong, a_scale_pong, b_scale_pong, a0_prefetch=a0_prefetch_pong, a1_prefetch=a1_prefetch_pong, prefetch_epilogue=True, b_hi_loader=_make_b_hi_loader(k0_pong_bk) if _b_split_enabled else None, ku_count=_tail_ku_s2 if _pad_ku_skip_s2 > 0 else k_unroll) - else: - k_tail1 = (k_in + tile_k - 1) // tile_k * tile_k - tile_k - k_tail1_py = (int(inter_dim) + tile_k - 1) // tile_k * tile_k - tile_k - k_tail1_bk = k_tail1 // 2 - prefetch_x_to_lds(k_tail1, lds_x_ping) - if const_expr(_pad_ku_skip_s2 > 0): - b_ping_lo = load_b_tile(k_tail1_bk, ku_limit=_tail_ku_s2) - a_scale_ping, b_scale_ping = prefetch_ab_scale_tile(_k_base(k_tail1_py), _k_shift_bits(k_tail1_py), ku_packed_limit=_tail_ku_packed_s2) - else: - b_ping_lo = load_b_tile_lo(k_tail1_bk) if _b_split_enabled else load_b_tile(k_tail1_bk) - a_scale_ping, b_scale_ping = prefetch_ab_scale_tile(_k_base(k_tail1_py), _k_shift_bits(k_tail1_py)) - acc, _ = compute_tile(acc, b_pong, lds_x_pong, a_scale_pong, b_scale_pong, a0_prefetch=a0_prefetch_pong, a1_prefetch=a1_prefetch_pong, b_hi_loader=_make_b_hi_loader(k0_pong_bk) if _b_split_enabled else None) - rocdl.s_waitcnt(0) - gpu.barrier() - a0_prefetch_ping = lds_load_packs_k64(row_a_lds, col_offset_base, lds_x_ping) - a1_prefetch_ping = lds_load_packs_k64(row_a_lds, _a1_col_base, lds_x_ping) if pack_K >= 2 and (_pad_ku_skip_s2 == 0 or _tail_ku_s2 >= 2) else None - acc, epilogue_pf = compute_tile(acc, b_ping_lo, lds_x_ping, a_scale_ping, b_scale_ping, a0_prefetch=a0_prefetch_ping, a1_prefetch=a1_prefetch_ping, prefetch_epilogue=True, b_hi_loader=None if _pad_ku_skip_s2 > 0 else _make_b_hi_loader(k_tail1_bk) if _b_split_enabled else None, ku_count=_tail_ku_s2 if _pad_ku_skip_s2 > 0 else k_unroll) - tw_pf = None - if const_expr(epilogue_pf is not None): - tw_pf = epilogue_pf - mask24_i32 = arith.constant(16777215) - topk_i32_v = topk_i32 - zero_i32 = arith.constant(0) - - def atomic_add_f16x2(val_f16x2, byte_off_i32): - rocdl.raw_ptr_buffer_atomic_fadd(val_f16x2, out_rsrc, byte_off_i32, zero_i32, zero_i32) - if const_expr(lds_out is None): - raise RuntimeError('FLIR_MOE_STAGE2_CSHUFFLE=1 but lds_out is not allocated/aliased.') - out_base_i64 = arith.index_cast(T.i64, fx.ptrtoint(arg_out)) - out_base_idx = arith.index_cast(ir.IndexType.get(), out_base_i64) - - def write_row_to_lds(*, mi: int, ii: int, row_in_tile, row, row_base_lds, col_base_local, num_acc_n: int, lds_out): - fused2 = buffer_ops.buffer_load(sorted_rsrc, row, vec_width=1, dtype=T.i32) - t2 = fused2 & mask24_i32 - s2 = fused2 >> 24 - t_ok = arith.cmpi(CmpIPredicate.ult, t2, tokens_i32) - s_ok = arith.cmpi(CmpIPredicate.ult, s2, topk_i32_v) - ts_ok = arith.andi(t_ok, s_ok) - t2_safe = arith.select(ts_ok, t2, arith.constant(0)) - s2_safe = arith.select(ts_ok, s2, arith.constant(0)) - t2_safe * topk_i32_v + s2_safe - tw_idx = mi * 4 + ii - if const_expr(tw_pf is not None): - tw = tw_pf[tw_idx] - else: - tw = buffer_ops.buffer_load(sorted_w_rsrc, row, vec_width=1, dtype=f32) - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + ni * 16 - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v = v * tw - v_out = arith.trunc_f(out_elem(), v) - lds_idx = row_base_lds + col_local - vec1_out = T.vec(1, out_elem()) - v1 = vector.from_elements(vec1_out, [v_out]) - vector.store(v1, lds_out, [lds_idx], alignment=2) - - def precompute_row(*, row_local, row): - fused2 = memref.load(lds_tid, [row_local]) - row_i32 = arith.index_cast(T.i32, row) - row_valid0 = arith.cmpi(CmpIPredicate.ult, row_i32, num_valid_i32) - t = fused2 & mask24_i32 - s = fused2 >> 24 - t_ok = arith.cmpi(CmpIPredicate.ult, t, tokens_i32) - s_ok = arith.cmpi(CmpIPredicate.ult, s, topk_i32_v) - row_valid = arith.andi(row_valid0, arith.andi(t_ok, s_ok)) - t_idx = arith.index_cast(ir.IndexType.get(), t) - s_idx = arith.index_cast(ir.IndexType.get(), s) - ts_idx = t_idx * arith.constant(topk, index=True) + s_idx - row_byte_base = out_base_idx + ts_idx * arith.constant(model_dim * out_elem_bytes, index=True) - return ((fused2, row_byte_base), row_valid) - - def _idx_to_llvm_ptr(idx_val, addr_space=1): - """Convert an index-typed byte address to !llvm.ptr.""" - idx_v = idx_val._value if hasattr(idx_val, '_value') else idx_val - i64_v = arith.index_cast(T.i64, idx_v) - i64_raw = i64_v._value if hasattr(i64_v, '_value') else i64_v - ptr_ty = ir.Type.parse(f'!llvm.ptr<{addr_space}>') - return llvm.inttoptr(ptr_ty, i64_raw) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - fused, row_byte_base = row_ctx - col_idx = col_g0 - byte_off_col = col_idx * arith.constant(out_elem_bytes, index=True) - ptr_addr_idx = row_byte_base + byte_off_col - out_ptr_v = _idx_to_llvm_ptr(ptr_addr_idx) - frag_v = frag._value if hasattr(frag, '_value') else frag - llvm.StoreOp(frag_v, out_ptr_v, alignment=_e_vec * out_elem_bytes, nontemporal=True) - _e_vec = min(tile_n // 32, 8) - c_shuffle_epilog(arith=arith, vector=vector, gpu=gpu, scf=scf, range_constexpr=range_constexpr, tile_m=tile_m, tile_n=tile_n, e_vec=_e_vec, m_repeat=m_repeat, num_acc_n=num_acc_n, tx=tx, lane_div_16=lane_div_16, lane_mod_16=lane_mod_16, bx_m=bx_m, by_n=by_n, n_tile_base=n_tile_base, lds_out=lds_out, frag_elem_type=ir.BF16Type.get(), write_row_to_lds=write_row_to_lds, precompute_row=precompute_row, store_pair=store_pair) - _all_valid = arith.andi(blk_valid, arith.andi(exp_valid, tile_has_tokens)) - if const_expr(_persistent): - _cur_active = arith.andi(_still_active, blk_valid) - _do_gemm = arith.andi(_cur_active, arith.andi(exp_valid, tile_has_tokens)) - _if_valid = scf.IfOp(_do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _moe_gemm2_then_body() - scf.YieldOp([]) - gpu.barrier() - scf.YieldOp([_cur_active]) - else: - _if_valid = scf.IfOp(_all_valid) - with ir.InsertionPoint(_if_valid.then_block): - _moe_gemm2_then_body() - scf.YieldOp([]) - gpu.barrier() - scf.YieldOp([expert_i32, _expert_b_base]) - _for_ip.__exit__(None, None, None) - _cache_tag = (module_name, tile_m, tile_n, tile_k, model_dim_pad, inter_dim_pad, persist_m, _sort_block_m, _cu_num if _persistent else 0, xcd_swizzle) - - @flyc.jit - def launch_kimi_fp4_stage2_16384(arg_out: fx.Pointer, arg_x: fx.Pointer, arg_w: fx.Pointer, arg_scale_x: fx.Pointer, arg_scale_w: fx.Pointer, arg_sorted_token_ids: fx.Pointer, arg_expert_ids: fx.Pointer, arg_sorted_weights: fx.Pointer, arg_num_valid_ids: fx.Pointer, i32_tokens_in: fx.Int32, i32_n_in: fx.Int32, i32_k_in: fx.Int32, i32_size_expert_ids_in: fx.Int32, stream: fx.Stream): - _ = _cache_tag - allocator_pong.finalized = False - allocator_ping.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator_pong.finalize() - allocator_ping.finalize() - n_in = arith.index_cast(ir.IndexType.get(), i32_n_in.ir_value()) - _tile_n_idx = arith.constant(tile_n, index=True) - _model_dim_pad_idx = arith.constant(model_dim_pad, index=True) - gx = (n_in - _model_dim_pad_idx + _tile_n_idx - arith.constant(1, index=True)) / _tile_n_idx - if const_expr(_persistent): - gy = arith.constant(_cu_num, index=True) - else: - _c_pm_l = arith.constant(persist_m, index=True) - gy = (arith.index_cast(ir.IndexType.get(), i32_size_expert_ids_in.ir_value()) + _c_pm_l - arith.constant(1, index=True)) / _c_pm_l - moe_gemm2(arg_out, arg_x, arg_w, arg_scale_x, arg_scale_w, arg_sorted_token_ids, arg_expert_ids, arg_sorted_weights, arg_num_valid_ids, i32_tokens_in, i32_n_in, i32_k_in, i32_size_expert_ids_in).launch(grid=(gx, gy, 1), block=(256, 1, 1), stream=stream) - return launch_kimi_fp4_stage2_16384 - -def kimi_fp4_stage1_16384(a: torch.Tensor, w1: torch.Tensor, w1_scale: torch.Tensor, a1_scale: torch.Tensor, sorted_token_ids: torch.Tensor, sorted_expert_ids: torch.Tensor, num_valid_ids: torch.Tensor, out: Optional[torch.Tensor]=None) -> torch.Tensor: - """Launch the fixed fp4 stage1 GEMM. - - Args: - a: fp4x2 activation, shape [16384, 7168 / 2]. - w1: fp4x2 preshuffled weight, shape [385, 1024, 7168 / 2]. - w1_scale: e8m0 scale, shape [385, 1024, 7168 / 32]. - a1_scale: e8m0 activation scale from fused_dynamic_mxfp4_quant_moe_sort. - """ - if a.shape[0] != TOKEN: - raise ValueError(f'expected TOKEN={TOKEN}, got {a.shape[0]}') - dev = a.device - if out is None: - out = torch.empty((TOKEN, TOPK, INTER_DIM), dtype=dtypes.bf16, device=dev) - sort_block_m = S1.tile_m - dense_blocks = min(TOKEN * TOPK * sort_block_m, sorted_token_ids.shape[0]) // sort_block_m - grid_y = min(dense_blocks, sorted_expert_ids.shape[0]) - args = (_ptr_view_safe(out.view(-1)), _ptr_view_safe(a.view(-1)), _ptr_view_safe(w1.view(-1)), _ptr_view_safe(a1_scale.view(-1)), _ptr_view_safe(w1_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(num_valid_ids), TOKEN, INTER_DIM * 2, MODEL_DIM, grid_y, torch.cuda.current_stream()) - _run_compiled(compile_kimi_fp4_stage1_16384(), args) - return out - -def kimi_fp4_stage2_16384(inter_states: torch.Tensor, w2: torch.Tensor, w2_scale: torch.Tensor, a2_scale: torch.Tensor, sorted_token_ids: torch.Tensor, sorted_weights: torch.Tensor, sorted_expert_ids: torch.Tensor, num_valid_ids: torch.Tensor, out: Optional[torch.Tensor]=None) -> torch.Tensor: - """Launch the fixed fp4 reduce-mode stage2 GEMM and reduce TOPK.""" - if inter_states.shape[0] != TOKEN: - raise ValueError(f'expected TOKEN={TOKEN}, got {inter_states.shape[0]}') - dev = inter_states.device - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=dtypes.bf16, device=dev) - target = torch.empty((TOKEN * TOPK * MODEL_DIM,), dtype=out.dtype, device=dev) - m_blocks = min(sorted_expert_ids.shape[0], TOKEN * TOPK) - args = (_ptr_view_safe(target), _ptr_view_safe(inter_states), _ptr_view_safe(w2), _ptr_view_safe(a2_scale.view(-1)), _ptr_view_safe(w2_scale.view(-1)), _ptr_view_safe(sorted_token_ids), _ptr_view_safe(sorted_expert_ids), _ptr_view_safe(sorted_weights), _ptr_view_safe(num_valid_ids), TOKEN, MODEL_DIM, INTER_DIM, m_blocks, torch.cuda.current_stream()) - _run_compiled(compile_kimi_fp4_stage2_16384(), args) - torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1, out=out) - return out - -def run_kimi_fp4_flydsl_moe_16384(hidden_states: torch.Tensor, w1: torch.Tensor, w2: torch.Tensor, topk_ids: torch.Tensor, topk_weight: torch.Tensor, w1_scale: torch.Tensor, w2_scale: torch.Tensor) -> torch.Tensor: - """Run the fixed M=16384 fp4 FlyDSL MoE path end-to-end.""" - sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out = kimi_moe_sorting_16384(topk_ids, topk_weight, hidden_states.dtype) - a1, a1_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort(hidden_states, sorted_ids=sorted_ids, num_valid_ids=num_valid_ids, token_num=TOKEN, topk=TOPK, block_size=BLOCK_M, num_rows=None) - a2 = kimi_fp4_stage1_16384(a1, w1, w1_scale.view(dtypes.fp8_e8m0), a1_scale, sorted_ids, sorted_expert_ids, num_valid_ids) - a2_q, a2_scale = aiter.fused_dynamic_mxfp4_quant_moe_sort(a2.view(-1, INTER_DIM), sorted_ids=sorted_ids, num_valid_ids=num_valid_ids, token_num=TOKEN, topk=TOPK, block_size=BLOCK_M, num_rows=None) - return kimi_fp4_stage2_16384(a2_q.view(TOKEN, TOPK, -1), w2, w2_scale.view(dtypes.fp8_e8m0), a2_scale, sorted_ids, sorted_weights, sorted_expert_ids, num_valid_ids, moe_out) diff --git a/kimi_fp4_moe_16384_opt.py b/kimi_fp4_moe_16384_opt.py deleted file mode 100644 index 3a2beae5d..000000000 --- a/kimi_fp4_moe_16384_opt.py +++ /dev/null @@ -1,2709 +0,0 @@ -"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 128 -MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" -MXFP4_STAGE2_KERNEL = ( - "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a correctness-first BM128 port of aiter's selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" - - @flyc.kernel(name=module_name) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - for mi in range_constexpr(m_repeat): - row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(32, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(128, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - scales_per_mr = [] - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for mr in range_constexpr(m_repeat): - row_local = arith.constant(mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp - up_col = gate_col + arith.constant(128, index=True) - gate_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_local) - byte_pos = ( - by * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - ku = by >> arith.constant(1, index=True) - ikxdl = by % arith.constant(2, index=True) - for sub in range_constexpr(tile_m // 32): - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[sub * 2] - hi = scales_per_mr[sub * 2 + 1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA - # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve - # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=tile_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_row_to_lds, - precompute_row=None, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas* 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = (total + c_bm_minus_1) & c_bm_mask - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start >> arith.constant(7, type=i32) - b1 = end >> arith.constant(7, type=i32) - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_bm128_bn512.py b/kimi_fp4_moe_16384_opt_bm128_bn512.py deleted file mode 100644 index eff13f331..000000000 --- a/kimi_fp4_moe_16384_opt_bm128_bn512.py +++ /dev/null @@ -1,2750 +0,0 @@ -"""BM128/BN512 experiment that skips GEMM2 padding-row output stores.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 128 -MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" -MXFP4_STAGE2_KERNEL = ( - "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a correctness-first BM128 port of aiter's selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" - - @flyc.kernel(name=module_name) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - for mi in range_constexpr(m_repeat): - row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(32, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(128, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - scales_per_mr = [] - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for mr in range_constexpr(m_repeat): - row_local = arith.constant(mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp - up_col = gate_col + arith.constant(128, index=True) - gate_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_local) - byte_pos = ( - by * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - ku = by >> arith.constant(1, index=True) - ikxdl = by % arith.constant(2, index=True) - for sub in range_constexpr(tile_m // 32): - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[sub * 2] - hi = scales_per_mr[sub * 2 + 1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 512 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_m = 32 - acc_segment_m_repeat = acc_segment_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = acc_segment_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # BN512 doubles the per-thread accumulator footprint versus BN256: - # (128 / 16) * (512 / 4 / 16) * 4 = 256 f32 accumulator lanes. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "256,256"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - m_indices_nbytes = max_sorted * 4 - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def precompute_row(*, row_local, row): - row_i32 = arith.index_cast(i32, row) - token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) - row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) - return None, row_valid - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( - col_i32 >> arith.constant(5, type=i32) - ) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - for seg_m in range_constexpr(tile_m // acc_segment_m): - seg_m_repeat_base = seg_m * acc_segment_m_repeat - bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) - - def write_segment_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - mi_full = seg_m_repeat_base + mi - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi_full * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=acc_segment_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=acc_segment_m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m_seg, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_segment_row_to_lds, - precompute_row=precompute_row, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - m_indices: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - m_indices, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = (total + c_bm_minus_1) & c_bm_mask - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start >> arith.constant(7, type=i32) - b1 = end >> arith.constant(7, type=i32) - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_bm128_bn512_all.py b/kimi_fp4_moe_16384_opt_bm128_bn512_all.py deleted file mode 100644 index df4e4e2b6..000000000 --- a/kimi_fp4_moe_16384_opt_bm128_bn512_all.py +++ /dev/null @@ -1,2777 +0,0 @@ -"""BM128/BN512 experiment that skips GEMM2 padding-row output stores.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 128 -MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" -MXFP4_STAGE2_KERNEL = ( - "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a correctness-first BM128 port of aiter's selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 512 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_m = 32 - acc_segment_m_repeat = acc_segment_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = acc_segment_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_BN512_v0_mseg32" - - @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for seg_m in range_constexpr(tile_m // acc_segment_m): - seg_m_repeat_base = seg_m * acc_segment_m_repeat - - for mi_seg in range_constexpr(acc_segment_m_repeat): - mi = seg_m_repeat_base + mi_seg - row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(n_per_wave // 2, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(tile_n // 2, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - for n_half in range_constexpr(tile_n // 256): - scales_per_mr = [] - for mr_pair in range_constexpr(2): - global_mr = seg_m_repeat_base + mr_pair - row_local = arith.constant(mr_pair * 16, index=True) + m_lane - row_global = arith.constant(global_mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = ( - arith.constant(n_half * 128, index=True) - + wave_grp * arith.constant(32, index=True) - + col_in_grp - ) - up_col = gate_col + arith.constant(tile_n // 2, index=True) - gate_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + gate_col], - ), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + up_col], - ), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_global) - byte_pos = ( - by * arith.constant(tile_n // 4, index=True) - + arith.constant(n_half * 64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) - ku = by_scale >> arith.constant(1, index=True) - ikxdl = by_scale % arith.constant(2, index=True) - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(seg_m, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[0] - hi = scales_per_mr[1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast( - i32, - dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), - ) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - gpu.barrier() - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 512 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_m = 32 - acc_segment_m_repeat = acc_segment_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = acc_segment_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # BN512 doubles the per-thread accumulator footprint versus BN256: - # (128 / 16) * (512 / 4 / 16) * 4 = 256 f32 accumulator lanes. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "256,256"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - m_indices_nbytes = max_sorted * 4 - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def precompute_row(*, row_local, row): - row_i32 = arith.index_cast(i32, row) - token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) - row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) - return None, row_valid - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( - col_i32 >> arith.constant(5, type=i32) - ) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - for seg_m in range_constexpr(tile_m // acc_segment_m): - seg_m_repeat_base = seg_m * acc_segment_m_repeat - bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) - - def write_segment_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - mi_full = seg_m_repeat_base + mi - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi_full * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=acc_segment_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=acc_segment_m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m_seg, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_segment_row_to_lds, - precompute_row=precompute_row, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - m_indices: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - m_indices, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = (total + c_bm_minus_1) & c_bm_mask - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start >> arith.constant(7, type=i32) - b1 = end >> arith.constant(7, type=i32) - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_bm128_storemask.py b/kimi_fp4_moe_16384_opt_bm128_storemask.py deleted file mode 100644 index ef3dcbe70..000000000 --- a/kimi_fp4_moe_16384_opt_bm128_storemask.py +++ /dev/null @@ -1,2726 +0,0 @@ -"""BM128 experiment that skips GEMM2 padding-row output stores.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 128 -MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" -MXFP4_STAGE2_KERNEL = ( - "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a correctness-first BM128 port of aiter's selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" - - @flyc.kernel(name=module_name) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - for mi in range_constexpr(m_repeat): - row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(32, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(128, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - scales_per_mr = [] - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for mr in range_constexpr(m_repeat): - row_local = arith.constant(mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp - up_col = gate_col + arith.constant(128, index=True) - gate_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + gate_col]), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op(T.vec(1, f32), lds_acc, [row_local * arith.constant(tile_n, index=True) + up_col]), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_local) - byte_pos = ( - by * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - ku = by >> arith.constant(1, index=True) - ikxdl = by % arith.constant(2, index=True) - for sub in range_constexpr(tile_m // 32): - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[sub * 2] - hi = scales_per_mr[sub * 2 + 1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA - # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve - # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - m_indices_nbytes = max_sorted * 4 - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v10_skip_pad_epilog" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - midx_rsrc = _ptr_buffer_resource(arg_m_indices, m_indices_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def precompute_row(*, row_local, row): - row_i32 = arith.index_cast(i32, row) - token_i32 = buffer_ops.buffer_load(midx_rsrc, row_i32, vec_width=1, dtype=i32) - row_valid = arith.cmpi(CmpIPredicate.ult, token_i32, arith.constant(TOKEN, type=i32)) - return None, row_valid - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + ( - col_i32 >> arith.constant(5, type=i32) - ) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=tile_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_row_to_lds, - precompute_row=precompute_row, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - m_indices: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - m_indices, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = (total + c_bm_minus_1) & c_bm_mask - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start >> arith.constant(7, type=i32) - b1 = end >> arith.constant(7, type=i32) - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_bm128p64.py b/kimi_fp4_moe_16384_opt_bm128p64.py deleted file mode 100644 index b8417a9ee..000000000 --- a/kimi_fp4_moe_16384_opt_bm128p64.py +++ /dev/null @@ -1,2787 +0,0 @@ -"""BM128+64/BN256 experiment for the fixed-shape FlyDSL mxfp4 MoE path.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 192 -MXFP4_STAGE1_KERNEL = "flydsl_experiment_mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128P64_BN256" -MXFP4_STAGE2_KERNEL = ( - "flydsl_experiment_mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128P64_BN256_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a BM128+64/BN256 experiment based on the BM128 aiter-selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_ms = (128, 64) - acc_segment_m_starts = (0, 128) - acc_segment_m_repeats = tuple(seg_m // 16 for seg_m in acc_segment_ms) - acc_segment_m_start_repeats = tuple(seg_start // 16 for seg_start in acc_segment_m_starts) - max_acc_segment_m = max(acc_segment_ms) - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = max_acc_segment_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128P64_BN256_v0_seg128p64" - - @flyc.kernel(name=module_name) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(max_acc_segment_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for seg_i in range_constexpr(len(acc_segment_ms)): - seg_repeat = acc_segment_m_repeats[seg_i] - seg_repeat_base = acc_segment_m_start_repeats[seg_i] - seg_chunk32_base = acc_segment_m_starts[seg_i] // 32 - - for mi_seg in range_constexpr(seg_repeat): - mi = seg_repeat_base + mi_seg - row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(n_per_wave // 2, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(tile_n // 2, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - for chunk32 in range_constexpr(seg_repeat // 2): - for n_half in range_constexpr(tile_n // 256): - scales_per_mr = [] - for mr_pair in range_constexpr(2): - mr_seg = chunk32 * 2 + mr_pair - global_mr = seg_repeat_base + mr_seg - row_local = arith.constant(mr_seg * 16, index=True) + m_lane - row_global = arith.constant(global_mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = ( - arith.constant(n_half * 128, index=True) - + wave_grp * arith.constant(32, index=True) - + col_in_grp - ) - up_col = gate_col + arith.constant(tile_n // 2, index=True) - gate_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + gate_col], - ), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + up_col], - ), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_global) - byte_pos = ( - by * arith.constant(tile_n // 4, index=True) - + arith.constant(n_half * 64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) - ku = by_scale >> arith.constant(1, index=True) - ikxdl = by_scale % arith.constant(2, index=True) - chunk = ( - bx * arith.constant(tile_m // 32, index=True) - + arith.constant(seg_chunk32_base + chunk32, index=True) - ) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[0] - hi = scales_per_mr[1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast( - i32, - dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), - ) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - gpu.barrier() - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_ms = (128, 64) - acc_segment_m_starts = (0, 128) - acc_segment_m_repeats = tuple(seg_m // 16 for seg_m in acc_segment_ms) - acc_segment_m_start_repeats = tuple(seg_start // 16 for seg_start in acc_segment_m_starts) - max_acc_segment_m = max(acc_segment_ms) - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = max_acc_segment_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # Keep the BM192/BN256 accumulator tile in AGPRs. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "192,192"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128P64_BN256_v0_seg128p64" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(max_acc_segment_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - - def _load_sub(sub): - scale_idx = ( - (chunk_base + sub) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = arith.constant(slot, index=True) * scale_slot_dw + sub * scale_sub_dw + lane_word - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - for sub_base in range_constexpr(0, tile_m // 32, num_waves): - sub = arith.constant(sub_base, index=True) + wave_id - if const_expr(sub_base + num_waves <= tile_m // 32): - _load_sub(sub) - else: - valid_sub = arith.cmpi( - CmpIPredicate.ult, - wave_id, - arith.constant(tile_m // 32 - sub_base, index=True), - ) - _if_sub = scf.IfOp(valid_sub) - with ir.InsertionPoint(_if_sub.then_block): - _load_sub(sub) - scf.YieldOp([]) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - for seg_i in range_constexpr(len(acc_segment_ms)): - seg_m = acc_segment_ms[seg_i] - seg_m_repeat = acc_segment_m_repeats[seg_i] - seg_m_repeat_base = acc_segment_m_start_repeats[seg_i] - bx_m_seg = bx_m + arith.constant(acc_segment_m_starts[seg_i], index=True) - - def write_segment_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - mi_full = seg_m_repeat_base + mi - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi_full * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=seg_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=seg_m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m_seg, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_segment_row_to_lds, - precompute_row=None, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 // arith.constant(tile_m, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128P64_v0", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128P64_v0", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_block_m = arith.constant(block_m, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = ((total + c_bm_minus_1) // c_block_m) * c_block_m - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start // c_block_m - b1 = end // c_block_m - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128P64_v0", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128P64_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128P64_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) // arith.constant(block_m, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_bm96.py b/kimi_fp4_moe_16384_opt_bm96.py deleted file mode 100644 index 239140a78..000000000 --- a/kimi_fp4_moe_16384_opt_bm96.py +++ /dev/null @@ -1,2760 +0,0 @@ -"""BM96/BN512 experiment for the fixed-shape FlyDSL mxfp4 MoE path.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _ptr_view_safe, - _run_compiled, -) - - -MXFP4_BLOCK_M = 96 -MXFP4_STAGE1_KERNEL = "flydsl_experiment_mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM96_BN512" -MXFP4_STAGE2_KERNEL = ( - "flydsl_experiment_mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM96_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _ptr_buffer_resource(ptr, num_records_bytes: int): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(ptr): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue( - vector.extract( - route_ids_0_7, - static_position=[i], - dynamic_position=[], - ) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = vector.extract(acc_pair, static_position=[0], dynamic_position=[]) - acc_hi = vector.extract(acc_pair, static_position=[1], dynamic_position=[]) - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(out.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a BM96/BN512 experiment based on the BM128 aiter-selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 512 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_m = 32 - acc_segment_m_repeat = acc_segment_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = acc_segment_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM96_BN512_v3_knownblock" - - @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) - def gemm1( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_a_quant: fx.Pointer, - arg_w: fx.Pointer, - arg_a_scale_sorted: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return vector.bitcast(vec4_i32, v2) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for seg_m in range_constexpr(tile_m // acc_segment_m): - seg_m_repeat_base = seg_m * acc_segment_m_repeat - - for mi_seg in range_constexpr(acc_segment_m_repeat): - mi = seg_m_repeat_base + mi_seg - row_base = arith.constant(mi_seg * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(n_per_wave // 2, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(tile_n // 2, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[mi * num_acc_n + j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - for n_half in range_constexpr(tile_n // 256): - scales_per_mr = [] - for mr_pair in range_constexpr(2): - global_mr = seg_m_repeat_base + mr_pair - row_local = arith.constant(mr_pair * 16, index=True) + m_lane - row_global = arith.constant(global_mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = ( - arith.constant(n_half * 128, index=True) - + wave_grp * arith.constant(32, index=True) - + col_in_grp - ) - up_col = gate_col + arith.constant(tile_n // 2, index=True) - gate_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + gate_col], - ), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + up_col], - ), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_global) - byte_pos = ( - by * arith.constant(tile_n // 4, index=True) - + arith.constant(n_half * 64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - by_scale = by * arith.constant(tile_n // 256, index=True) + arith.constant(n_half, index=True) - ku = by_scale >> arith.constant(1, index=True) - ikxdl = by_scale % arith.constant(2, index=True) - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(seg_m, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[0] - hi = scales_per_mr[1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast( - i32, - dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True), - ) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - gpu.barrier() - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - a_quant: fx.Pointer, - w: fx.Pointer, - a_scale_sorted: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w1).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - _ptr_view_safe(_as_u8_storage(w1_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 512 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - acc_segment_m = 32 - acc_segment_m_repeat = acc_segment_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = acc_segment_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # Keep the BN512 accumulator tile in AGPRs. BM96/BN512 has - # (96/16)*(512/64/16)*4 = 192 f32 accumulator lanes. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "192,192"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM96_BN512_v0_spillcheck" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Pointer, - arg_flat_out_scale: fx.Pointer, - arg_x: fx.Pointer, - arg_w: fx.Pointer, - arg_scale_x: fx.Pointer, - arg_scale_w: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _ptr_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _ptr_buffer_resource(arg_x, x_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _ptr_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _ptr_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _ptr_buffer_resource(arg_num_valid_ids, numids_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - arith.constant(0, index=True), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(acc_segment_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((INTER_DIM // a_elem_vec_pack) // 4, index=True) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = vector.extract(a_scale_i32, static_position=[0], dynamic_position=[]) - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = vector.extract(s_vec, static_position=[0], dynamic_position=[]) - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(vector.extract(frag, static_position=[i], dynamic_position=[])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - for seg_m in range_constexpr(tile_m // acc_segment_m): - seg_m_repeat_base = seg_m * acc_segment_m_repeat - bx_m_seg = bx_m + arith.constant(seg_m * acc_segment_m, index=True) - - def write_segment_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - mi_full = seg_m_repeat_base + mi - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi_full * num_acc_n + ni - v = vector.extract(acc[acc_idx], static_position=[ii], dynamic_position=[]) - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=acc_segment_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=acc_segment_m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m_seg, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_segment_row_to_lds, - precompute_row=None, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 // arith.constant(tile_m, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Pointer, - flat_out_scale: fx.Pointer, - x: fx.Pointer, - w: fx.Pointer, - scale_x: fx.Pointer, - scale_w: fx.Pointer, - expert_ids: fx.Pointer, - num_valid_ids: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _ptr_view_safe(_as_u8_storage(flat_out_q).view(-1)), - _ptr_view_safe(_as_u8_storage(flat_out_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(w2).view(-1)), - _ptr_view_safe(_as_u8_storage(inter_sorted_shuffled_scale).view(-1)), - _ptr_view_safe(_as_u8_storage(w2_scale).view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas * 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM96_v0_spillcheck", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Pointer, arg_block_offsets: fx.Pointer): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_rsrc = _ptr_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _ptr_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - - zero_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_zero = scf.IfOp(zero_valid) - with ir.InsertionPoint(_if_zero.then_block): - memref.store(c0_i32, local_count, [tx]) - scf.YieldOp([]) - gpu.barrier() - - for it in range_constexpr((per_cta + threads - 1) // threads): - idx = c_start + tx + arith.constant(it * threads, index=True) - valid = arith.cmpi(CmpIPredicate.ult, idx, end) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - write_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - _if_write = scf.IfOp(write_valid) - with ir.InsertionPoint(_if_write.then_block): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM96_v0_spillcheck", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_block_m = arith.constant(block_m, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - - e_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_sum = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_sum.then_block): - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue( - vector.extract( - cnts, - static_position=[c_lane], - dynamic_position=[], - ) - ) - total = total + cnt - padded = ((total + c_bm_minus_1) // c_block_m) * c_block_m - memref.store(total, total_count, [tx]) - memref.store(padded, padded_count, [tx]) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - scf.YieldOp([]) - gpu.barrier() - - _if_t0 = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_t0.then_block): - scan = scf.ForOp( - arith.index(0), - arith.index(EXPERTS), - arith.index(1), - [arith._to_raw(c0_i32)], - ) - with ir.InsertionPoint(scan.body): - e = scan.induction_variable - acc_iter = ArithValue(scan.inner_iter_args[0]) - padded = ArithValue(memref.load(padded_count, [e])) - memref.store(arith._to_raw(acc_iter), expert_starts, [e]) - next_acc = acc_iter + padded - scf.YieldOp([arith._to_raw(next_acc)]) - - acc = ArithValue(scan.results[0]) - memref.store(arith._to_raw(acc), expert_starts, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, acc) - scf.YieldOp([]) - gpu.barrier() - - _if_update = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_update.then_block): - acc = memref.load(expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(expert_starts, [tx]) - end = memref.load(expert_starts, [tx + arith.index(1)]) - b0 = start // c_block_m - b1 = end // c_block_m - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM96_v0_spillcheck", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_block_offsets: fx.Pointer, - arg_real_counts: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_m_indices: fx.Pointer, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - memref.store(local, local_offsets, [tx]) - memref.store(start, row_starts, [tx]) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - memref.store(last, row_starts, [arith.index(EXPERTS)]) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - block_offsets: fx.Pointer, - real_counts: fx.Pointer, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - _ptr_view_safe(topk_ids.view(-1)), - _ptr_view_safe(topk_weight.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(block_offsets.view(-1)), - _ptr_view_safe(real_counts.view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM96_v0_spillcheck", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Pointer, arg_a_quant: fx.Pointer, arg_a_scale: fx.Pointer): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _ptr_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _ptr_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Pointer, - a_quant: fx.Pointer, - a_scale: fx.Pointer, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(_as_u8_storage(a_quant).view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM96_v0_spillcheck", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_a_scale_sorted_shuffled: fx.Pointer, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _ptr_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _ptr_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _ptr_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _ptr_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) // arith.constant(block_m, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Pointer, - sorted_token_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - a_scale_sorted_shuffled: fx.Pointer, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _ptr_view_safe(_as_u8_storage(a_scale).view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(_as_u8_storage(a_scale_sorted_shuffled).view(-1)), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_16384_opt_simplify.py b/kimi_fp4_moe_16384_opt_simplify.py deleted file mode 100644 index 0d9ee8595..000000000 --- a/kimi_fp4_moe_16384_opt_simplify.py +++ /dev/null @@ -1,2682 +0,0 @@ -"""Fixed-shape FlyDSL mxfp4 MoE path for Kimi M=16384.""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl._mlir.dialects._math_ops_gen import fma as _math_fma -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T, Vector as Vec -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr, get_index_value, get_op_result_or_value -from kernels.layout_utils import ( - _div_pow2, - crd2idx, - idx2crd, - get as layout_get, -) -from kernels.mfma_epilogues import c_shuffle_epilog -from kernels.mfma_preshuffle_pipeline import ( - _buffer_load_vec, - swizzle_xor16, - tile_chunk_coord_i32, -) - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOKEN, - TOPK, - _run_compiled, -) - - -MXFP4_BLOCK_M = 128 -MXFP4_STAGE1_KERNEL = "mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128" -MXFP4_STAGE2_KERNEL = ( - "mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT" -) -MXFP4_SCATTER_THREADS = 128 -MXFP4_SCATTER_COLS_PER_THREAD = 8 - - -@dataclass -class Mxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - max_sorted: int - block_m: int - - -def _as_u8_storage(t: torch.Tensor) -> torch.Tensor: - if t.element_size() == 1 and t.dtype != torch.uint8: - return t.view(torch.uint8) - return t - - -def _tensor_buffer_resource(tensor, num_records_bytes: int): - return buffer_ops.create_buffer_resource( - tensor, - max_size=False, - num_records_bytes=num_records_bytes, - ) - - -def _extract_global_ptr(tensor): - addr = buffer_ops.extract_base_index(tensor) - addr_i64 = arith.index_cast(T.i64, addr) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<1>"), addr_i64) - - -def _global_load_i32(global_ptr, elem_offset, *, nontemporal: bool = False): - if isinstance(elem_offset, int): - elem_offset = arith.constant(elem_offset, type=T.i32) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - elem_offset_i64 = arith.index_cast(T.i64, elem_offset_raw) - else: - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - elem_offset_i64 = ArithValue(elem_offset_raw) - else: - elem_offset_i64 = ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.i32, ptr, alignment=4, nontemporal=nontemporal).result - - -def smem_store(smem_ptr_or_view, idxs, value): - if not isinstance(idxs, (list, tuple)): - idxs = [idxs] - if isinstance(smem_ptr_or_view, SmemPtr): - return smem_ptr_or_view.store(value, idxs) - return memref.store( - get_op_result_or_value(value), - get_op_result_or_value(smem_ptr_or_view), - [get_index_value(i) for i in idxs], - ) - -def _global_load_f32(global_ptr, elem_offset, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp(T.f32, ptr, alignment=4, nontemporal=nontemporal).result - -def div_up(a, b): - return (a + b - 1) // b - -def _global_load_i32_vec(global_ptr, elem_offset, width: int, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - return llvm.LoadOp( - T.vec(width, T.i32), - ptr, - alignment=4, - nontemporal=nontemporal, - ).result - - -def _global_store_vec4_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=16, nontemporal=nontemporal) - - -def _global_store_i32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _global_store_f32(global_ptr, elem_offset, value, *, nontemporal: bool = False): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - raw_value = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.StoreOp(raw_value, ptr, alignment=4, nontemporal=nontemporal) - - -def _elem_offset_to_i64(elem_offset): - if isinstance(elem_offset, int): - return arith.constant(elem_offset, type=T.i64) - elem_offset_raw = elem_offset.ir_value() if hasattr(elem_offset, "ir_value") else elem_offset - if isinstance(elem_offset_raw.type, ir.IndexType): - return arith.index_cast(T.i64, elem_offset_raw) - int_type = ir.IntegerType(elem_offset_raw.type) - if int_type.width == 64: - return ArithValue(elem_offset_raw) - return ArithValue(arith.ExtSIOp(T.i64, elem_offset_raw).result) - - -def _global_atomic_add_i32(global_ptr, elem_offset, value): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_i64 = elem_offset_i64 * arith.constant(4, type=T.i64) - ptr = buffer_ops.get_element_ptr(global_ptr, byte_offset=byte_offset_i64, elem_type=T.i8) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ).result - - -def _lds_i32_ptr(lds_memref, elem_offset): - elem_offset_i64 = _elem_offset_to_i64(elem_offset) - byte_offset_idx = ArithValue(elem_offset_i64 * arith.constant(4, type=T.i64)).index_cast(T.index) - base_idx = memref.extract_aligned_pointer_as_index(lds_memref) - ptr_i64 = arith.index_cast(T.i64, base_idx + byte_offset_idx) - return llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), ptr_i64) - - -def _lds_atomic_add_i32(lds_memref, elem_offset, value): - ptr = _lds_i32_ptr(lds_memref, elem_offset) - val = value.ir_value() if hasattr(value, "ir_value") else value - return llvm.AtomicRMWOp( - llvm.AtomicBinOp.add, - ptr, - val, - llvm.AtomicOrdering.monotonic, - syncscope="workgroup", - alignment=4, - ).result - - -def _dpp_xor_f32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src.bitcast(T.i32) if hasattr(src, "bitcast") else ArithValue(src).bitcast(T.i32) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - out_i32 = llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - return out_i32.bitcast(T.f32) - - -def _dpp_xor_i32(src, offset: int, *, bound_ctrl: bool = False): - src_i32 = src if hasattr(src, "ir_value") else ArithValue(src) - if offset == 1: - dpp_ctrl = 0xB1 - elif offset == 2: - dpp_ctrl = 0x4E - else: - raise ValueError(f"unsupported DPP xor offset: {offset}") - return llvm.call_intrinsic( - T.i32, - "llvm.amdgcn.update.dpp.i32", - [ - src_i32, - src_i32, - arith.constant(dpp_ctrl, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(0xF, type=T.i32), - arith.constant(bound_ctrl, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_scatter_reduce_q_16384(): - """Compile the fixed Kimi mxfp4 scatter/reduce-q kernel. - - This mirrors aiter's - ``scatter_reduce_mxfp4_kernel``: - each thread decodes one 8-column MXFP4 group for one token and reduces the - nine routed slots into bf16 output. - """ - - cols_per_block = MXFP4_SCATTER_THREADS * MXFP4_SCATTER_COLS_PER_THREAD - grid_x = (MODEL_DIM + cols_per_block - 1) // cols_per_block - qcols_i32 = MODEL_DIM // 2 // 4 - scols_i32 = MODEL_DIM // 32 // 4 - out_i32_stride = MODEL_DIM // 2 - module_name = "flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload" - - @flyc.kernel(name=module_name) - def scatter_reduce_q( - arg_flat_out_q: fx.Tensor, - arg_flat_out_scale: fx.Tensor, - arg_reverse_sorted: fx.Tensor, - arg_sorted_weights: fx.Tensor, - arg_out: fx.Tensor, - ): - i32 = T.i32 - f32 = T.f32 - - q_ptr = _extract_global_ptr(arg_flat_out_q) - scale_ptr = _extract_global_ptr(arg_flat_out_scale) - out_ptr = _extract_global_ptr(arg_out) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - token_idx = gpu.block_id("y") - - col_thread = bx * arith.constant(MXFP4_SCATTER_THREADS, index=True) + tx - col_base = col_thread * arith.constant(MXFP4_SCATTER_COLS_PER_THREAD, index=True) - col_base_i32 = arith.index_cast(i32, col_base) - token_i32 = arith.index_cast(i32, token_idx) - - c1_i32 = arith.constant(1, type=i32) - c3_i32 = arith.constant(3, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c_topk_i32 = arith.constant(TOPK, type=i32) - c_qcols_i32 = arith.constant(qcols_i32, type=i32) - c_scols_i32 = arith.constant(scols_i32, type=i32) - c_out_stride_i32 = arith.constant(out_i32_stride, type=i32) - - vec2_f32 = T.vec(2, f32) - c0_f32 = arith.constant(0.0, type=f32) - c0_v2_f32 = vector.from_elements(vec2_f32, [c0_f32, c0_f32]) - - def _fma_v2_f32(a, b, c): - return ArithValue( - _math_fma( - arith._to_raw(a), - arith._to_raw(b), - arith._to_raw(c), - ) - ) - - acc_pairs = [c0_v2_f32 for _ in range(MXFP4_SCATTER_COLS_PER_THREAD // 2)] - blk = col_base_i32 >> arith.constant(5, type=i32) - scale_word_col = (blk & ~c3_i32) >> arith.constant(2, type=i32) - q_col_word = col_base_i32 >> c3_i32 - - reverse_base = token_i32 * c_topk_i32 - route_ids_0_7 = _global_load_i32_vec(reverse_ptr, reverse_base, 8) - - def accumulate_route(sorted_pos, route_w): - scale_idx = sorted_pos * c_scols_i32 + scale_word_col - scale_word = ArithValue(_global_load_i32(scale_ptr, scale_idx)) - scale_shift = (blk & c3_i32) << c3_i32 - e8 = (scale_word >> scale_shift) & c255_i32 - scale = (e8 << c23_i32).bitcast(f32) - - q_idx = sorted_pos * c_qcols_i32 + q_col_word - packed = ArithValue(_global_load_i32(q_ptr, q_idx, nontemporal=True)) - route_w_pair = vector.from_elements(vec2_f32, [route_w, route_w]) - for pair in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - decoded_pair = ( - llvm.call_intrinsic( - T.vec(2, f32), - "llvm.amdgcn.cvt.scalef32.pk.f32.fp4", - [packed, scale, arith.constant(pair, type=i32)], - [], - [], - ) - ) - acc_pairs[pair] = _fma_v2_f32(decoded_pair, route_w_pair, acc_pairs[pair]) - - route_pos = [] - route_weights = [] - for i in range_constexpr(8): - sorted_pos = ArithValue(Vec(route_ids_0_7)[i]) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - sorted_pos = ArithValue( - _global_load_i32(reverse_ptr, reverse_base + arith.constant(8, type=i32)) - ) - route_pos.append(sorted_pos) - route_weights.append(_global_load_f32(weights_ptr, sorted_pos)) - - for i in range_constexpr(TOPK): - accumulate_route(route_pos[i], route_weights[i]) - - packed_words = [] - for k in range_constexpr(MXFP4_SCATTER_COLS_PER_THREAD // 2): - acc_pair = acc_pairs[k] - acc_lo = Vec(acc_pair)[0] - acc_hi = Vec(acc_pair)[1] - packed_words.append(rocdl.cvt_pk_bf16_f32(acc_lo, acc_hi)) - out_i32_vec = vector.from_elements(T.vec(4, i32), packed_words) - out_word_off = token_i32 * c_out_stride_i32 + (col_base_i32 >> c1_i32) - _global_store_vec4_i32(out_ptr, out_word_off, out_i32_vec, nontemporal=True) - - @flyc.jit - def launch_scatter_reduce_q( - flat_out_q: fx.Tensor, - flat_out_scale: fx.Tensor, - reverse_sorted: fx.Tensor, - sorted_weights: fx.Tensor, - out: fx.Tensor, - stream: fx.Stream, - ): - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - pass - scatter_reduce_q( - flat_out_q, - flat_out_scale, - reverse_sorted, - sorted_weights, - out, - ).launch( - grid=(grid_x, TOKEN, 1), - block=(MXFP4_SCATTER_THREADS, 1, 1), - stream=stream, - ) - - return launch_scatter_reduce_q - - -def kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q: torch.Tensor, - flat_out_scale: torch.Tensor, - reverse_sorted: torch.Tensor, - sorted_weights: torch.Tensor, - out: torch.Tensor | None = None, -) -> torch.Tensor: - """FlyDSL port of aiter's fixed-shape mxfp4 scatter/reduce-q kernel.""" - if tuple(flat_out_q.shape[1:]) != (MODEL_DIM // 2,): - raise ValueError( - f"expected flat_out_q second dim {MODEL_DIM // 2}, got {tuple(flat_out_q.shape)}" - ) - if tuple(flat_out_scale.shape[1:]) != (MODEL_DIM // 32,): - raise ValueError( - "expected flat_out_scale second dim " - f"{MODEL_DIM // 32}, got {tuple(flat_out_scale.shape)}" - ) - if tuple(reverse_sorted.shape) != (TOKEN * TOPK,): - raise ValueError( - f"expected reverse_sorted shape {(TOKEN * TOPK,)}, got {tuple(reverse_sorted.shape)}" - ) - if out is None: - out = torch.empty((TOKEN, MODEL_DIM), dtype=torch.bfloat16, device=flat_out_q.device) - - args = ( - _as_u8_storage(flat_out_q).view(-1), - _as_u8_storage(flat_out_scale).view(-1), - reverse_sorted.view(-1), - sorted_weights.view(-1), - out.view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_scatter_reduce_q_16384(), args) - return out - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_16384(): - """Compile a fixed-shape FlyDSL candidate for aiter mxfp4 GEMM1. - - Contract matched here: - - ``A_q, A_scale_sorted`` x ``W1`` -> ``inter_sorted_quant`` plus - ``inter_sorted_shuffled_scale``. - - This is a correctness-first BM128 port of aiter's selected - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128`` kernel. It keeps GEMM, - SiLU*Up, and MXFP4 quantization in one GPU kernel, so replacing aiter GEMM1 - does not change the end-to-end kernel count. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = (2 * INTER_DIM) // tile_n - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - num_k_tiles = MODEL_DIM // tile_k - - a_elem_vec_pack = 2 - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride - _x_slots_bytes = 2 * _single_x_bytes - _lds_scale_bytes = (tile_m // 32) * num_k_tiles * 256 - _kloop_lds_bytes = _x_slots_bytes + _lds_scale_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + _x_slots_bytes - allocator.ptr = lds_offset + max(_kloop_lds_bytes, _lds_acc_bytes) - - x_nbytes = TOKEN * (MODEL_DIM // 2) - x_scale_nbytes = max_sorted * (MODEL_DIM // 32) * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = num_m_blocks * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = max_sorted * 64 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s - _b_c_k_s = MODEL_DIM // _scale_pack_k - _b_c_k0_s = _b_c_k_s // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = ((2 * INTER_DIM) // 16) * _b_stride_n0 - - k_as_per_chunk_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - - # Output scale layout consumed by GEMM2 for K=INTER_DIM=512. - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm" - - @flyc.kernel(name=module_name) - def gemm1( - arg_inter_sorted_quant: fx.Tensor, - arg_inter_sorted_scale: fx.Tensor, - arg_a_quant: fx.Tensor, - arg_w: fx.Tensor, - arg_a_scale_sorted: fx.Tensor, - arg_w_scale: fx.Tensor, - arg_expert_ids: fx.Tensor, - arg_m_indices: fx.Tensor, - arg_num_valid_ids: fx.Tensor, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i32 = T.vec(4, i32) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - out_q_rsrc = _tensor_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _tensor_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - x_rsrc = _tensor_buffer_resource(arg_a_quant, x_nbytes) - w_rsrc = _tensor_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _tensor_buffer_resource(arg_a_scale_sorted, x_scale_nbytes) - sw_rsrc = _tensor_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.ReadfirstlaneOp(i32, num_valid_i32).res - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(_single_x_bytes,)).get() - lds_x1 = SmemPtr(base_ptr, lds_offset + _single_x_bytes, T.f8, shape=(_single_x_bytes,)).get() - lds_x_slots = [lds_x0, lds_x1] - lds_scale_i8 = SmemPtr(base_ptr, lds_scale_offset, T.i8, shape=(_lds_scale_bytes,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = arith.constant(_eff_tile_k_bytes // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = arith.constant(chunk_i32, index=True) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = arith.constant((MODEL_DIM // a_elem_vec_pack) // 4, index=True) - - x_row_base_div4 = [] - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - sorted_row_i = bx_m + row_local - actual_row = _global_load_i32(m_indices_ptr, sorted_row_i) - row_ok = arith.cmpi(CmpIPredicate.ult, actual_row, arith.constant(TOKEN, type=i32)) - # aiter lets invalid padded rows read one-past the A buffer; MUBUF - # OOB returns zero, which keeps padded inter rows zero. - row_safe = arith.select(row_ok, actual_row, arith.constant(TOKEN, type=i32)) - row_idx = arith.index_cast(ir.IndexType.get(), row_safe) - x_row_base_div4.append(row_idx * c_k_div4) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = Vec(b16).bitcast(fx.Int64) - return ( - b_i64x2[0], - b_i64x2[1], - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def make_empty_b_tile(): - b_packs0 = [] - b_packs1 = [] - for _ku in range_constexpr(k_unroll): - b_packs0.append([None] * num_acc_n) - b_packs1.append([None] * num_acc_n) - return b_packs0, b_packs1 - - def finish_b_tile(b_packs0, b_packs1): - b_tile = [] - for ku in range_constexpr(k_unroll): - b_tile.append((b_packs0[ku], b_packs1[ku])) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - scale_idx = ( - arith.constant(mi * k_as_per_chunk_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = Vec(vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]))[0] - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_x_tile, [idx_a16]) - a_i64x2 = Vec(loaded_a16).bitcast(fx.Int64) - return ( - a_i64x2[0], - a_i64x2[1], - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return Vec(v4).bitcast(fx.Int32) - - def pack_i64x2_to_i32x4(x0, x1): - v2 = vector.from_elements(vec2_i64, [x0, x1]) - return Vec(v2).bitcast(fx.Int32) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def mfma_scale_agpr_init(a128_v4, b128_v4, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, 0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b)], - asm, - "=a,v,v,v,v", - has_side_effects=True, - ) - - def mfma_scale_agpr_accum(a128_v4, b128_v4, acc, op_sel_a: int, scale_a, op_sel_b: int, scale_b): - alo = op_sel_a & 1 - ahi = (op_sel_a >> 1) & 1 - blo = op_sel_b & 1 - bhi = (op_sel_b >> 1) & 1 - asm = ( - "v_mfma_scale_f32_16x16x128_f8f6f4 " - "$0, $1, $2, $0, $3, $4 " - f"op_sel:[{alo},{blo},0] op_sel_hi:[{ahi},{bhi},0] cbsz:4 blgp:4" - ) - return llvm.inline_asm( - vec4_f32, - [_raw(a128_v4), _raw(b128_v4), _raw(scale_a), _raw(scale_b), _raw(acc)], - asm, - "=a,v,v,v,v,0", - has_side_effects=True, - ) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = Vec(a_scale_i32)[0] - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = Vec(b_scale_i32)[0] - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - k_idx * _scale_pack_m + imxdl, - a_scale_val, - k_idx * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_jmajor(acc_in, lds_x_tile, b_tile_in, a_scale, b_scale, init_zero: bool = False): - acc_list = list(acc_in) - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = Vec(b_scale_i32)[0] - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = Vec(a_scale_i32)[0] - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - return acc_list - - def compute_tile_jmajor_prefetch_a_b( - acc_in, - lds_x_tile, - b_tile_in, - a_scale, - b_scale, - next_a_tile: int, - next_a_slot: int, - next_b_tile: int, - init_zero: bool = False, - ): - acc_list = list(acc_in) - next_b_packs0, next_b_packs1 = make_empty_b_tile() - a_pairs_v4 = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi_idx in range_constexpr(m_repeat): - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(lds_x_tile, curr_row_a_lds, col_base) - a_pairs_v4.append(pack_i64x2_to_i32x4(a0, a1)) - - dma_x_tile_to_lds(next_a_tile, lds_x_slots[next_a_slot]) - - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = Vec(b_scale_i32)[0] - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = Vec(a_scale_i32)[0] - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - acc_idx = mi_idx * num_acc_n + ni_idx - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile_in[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - op_sel_a = k_idx * _scale_pack_m + imxdl - op_sel_b = k_idx * _scale_pack_n + inxdl - b128_v4 = pack_i64x2_to_i32x4(b0, b1) - a128_v4 = a_pairs_v4[k_idx * m_repeat + mi_idx] - if const_expr(init_zero and k_idx == 0): - acc_list[acc_idx] = mfma_scale_agpr_init( - a128_v4, - b128_v4, - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - else: - acc_list[acc_idx] = mfma_scale_agpr_accum( - a128_v4, - b128_v4, - acc_list[acc_idx], - op_sel_a, - a_scale_val, - op_sel_b, - b_scale_val, - ) - - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - nb0, nb1 = load_b_packs_k64(next_b_tile, k_idx, ni_idx) - next_b_packs0[k_idx][ni_idx] = nb0 - next_b_packs1[k_idx][ni_idx] = nb1 - rocdl.sched_barrier(0) - - b_scale_next = load_b_scale_tile(next_b_tile) - return acc_list, finish_b_tile(next_b_packs0, next_b_packs1), b_scale_next - - _dma_bytes = 16 - _wave_size = 64 - - def dma_x_tile_to_lds(k_tile: int, lds_x_tile): - c4_idx = arith.index(4) - base_k_div4 = arith.constant(k_tile * tile_k // a_elem_vec_pack // 4, index=True) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_x_tile) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def dma_a_scales_to_lds(): - c4_idx = arith.index(4) - c16_idx = arith.index(16) - scale_chunk_bytes = arith.constant(k_as_per_chunk_dw * 4, index=True) - chunk_base = bx_m / arith.constant(32, index=True) - lds_scale_base = memref.extract_aligned_pointer_as_index(lds_scale_i8) - tx_bytes16 = tx * c16_idx - tx_bytes4 = tx * c4_idx - for sub in range_constexpr(tile_m // 32): - sub_idx = arith.constant(sub, index=True) - global_sub_base = (chunk_base + sub_idx) * scale_chunk_bytes - lds_sub_base = sub_idx * scale_chunk_bytes - - lds_addr = ( - lds_scale_base - + lds_sub_base - + wave_id * arith.constant(1024, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - global_offset = arith.index_cast(i32, global_sub_base + tx_bytes16) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr, - arith.constant(16, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - for tail in range_constexpr(3): - byte_off = arith.constant(4096 + tail * 1024, index=True) - lds_addr_tail = ( - lds_scale_base - + lds_sub_base - + byte_off - + wave_id * arith.constant(256, index=True) - ) - lds_ptr_tail_i64 = rocdl.readfirstlane( - i64, - arith.index_cast(i64, lds_addr_tail), - ) - lds_ptr_tail = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_tail_i64) - global_offset_tail = arith.index_cast( - i32, - global_sub_base + byte_off + tx_bytes4, - ) - rocdl.raw_ptr_buffer_load_lds( - sx_rsrc, - lds_ptr_tail, - arith.constant(4, type=i32), - global_offset_tail, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - dma_a_scales_to_lds() - rocdl.s_waitcnt(0) - gpu.barrier() - - dma_x_tile_to_lds(0, lds_x_slots[0]) - dma_x_tile_to_lds(1, lds_x_slots[1]) - b_tiles = [load_b_tile(0), load_b_tile(1)] - b_scales = [load_b_scale_tile(0), load_b_scale_tile(1)] - # Leave both initial B/B-scale tiles outstanding if possible; A0 - # and A1 must be resident in LDS before the first two compute tiles. - rocdl.s_waitcnt(20) - gpu.barrier() - a_scale = load_a_scale_tile(0) - - for k_tile in range_constexpr(num_k_tiles): - curr_slot = k_tile % 2 - curr_b_slot = k_tile % 2 - next_slot = k_tile % 2 - if const_expr(k_tile + 2 < num_k_tiles): - acc, b_tile_next, b_scale_next = compute_tile_jmajor_prefetch_a_b( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - k_tile + 2, - next_slot, - k_tile + 2, - init_zero=(k_tile == 0), - ) - else: - acc = compute_tile_jmajor( - acc, - lds_x_slots[curr_slot], - b_tiles[curr_b_slot], - a_scale, - b_scales[curr_b_slot], - init_zero=(k_tile == 0), - ) - - if const_expr(k_tile + 1 < num_k_tiles): - # A and B are both two-ahead. When a future tile was - # issued, keep that tile's 4 A + 10 B/B-scale VMEM loads - # outstanding; the next iteration consumes the older tile. - if const_expr(k_tile + 2 < num_k_tiles): - rocdl.s_waitcnt(14) - else: - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale = load_a_scale_tile(k_tile + 1) - if const_expr(k_tile + 2 < num_k_tiles): - b_tiles[curr_b_slot] = b_tile_next - b_scales[curr_b_slot] = b_scale_next - - gpu.barrier() - - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - fm_fast = arith.FastMathFlags.fast - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b), fastmath=fm_fast).result) - - for mi in range_constexpr(m_repeat): - row_base = arith.constant(mi * 16, index=True) + lane_div_16 * arith.constant(4, index=True) - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(32, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(128, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = Vec(acc[mi * num_acc_n + j])[v_i] - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - scales_per_mr = [] - - def _silu_mul(g, u): - t = ArithValue(g) * fx.Float32(-1.4426950408889634) - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return ArithValue(g) * sig * ArithValue(u) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - for mr in range_constexpr(m_repeat): - row_local = arith.constant(mr * 16, index=True) + m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp - up_col = gate_col + arith.constant(128, index=True) - gate_v = Vec( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + gate_col], - ) - )[0] - up_v = Vec( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + up_col], - ) - )[0] - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - local_max = _fmax_num(local_max, abs_v) - - peer1 = _dpp_xor_f32(local_max, 1, bound_ctrl=True) - local_max = _fmax_num(local_max, peer1) - peer2 = _dpp_xor_f32(local_max, 2, bound_ctrl=True) - local_max = _fmax_num(local_max, peer2) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - scales_per_mr.append(e8m0) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_local) - byte_pos = ( - by * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(_if_scale.then_block): - ku = by >> arith.constant(1, index=True) - ikxdl = by % arith.constant(2, index=True) - for sub in range_constexpr(tile_m // 32): - chunk = bx * arith.constant(tile_m // 32, index=True) + arith.constant(sub, index=True) - dword_off = ( - chunk * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - lo = scales_per_mr[sub * 2] - hi = scales_per_mr[sub * 2 + 1] - pair_i32 = lo | (hi << c8_i32) - pair_i16 = arith.TruncIOp(T.i16, pair_i32).result - byte_off = arith.index_cast(i32, dword_off * arith.constant(4, index=True) + ikxdl * arith.constant(2, index=True)) - buffer_ops.buffer_store( - pair_i16, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - _if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(_if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1( - inter_sorted_quant: fx.Tensor, - inter_sorted_scale: fx.Tensor, - a_quant: fx.Tensor, - w: fx.Tensor, - a_scale_sorted: fx.Tensor, - w_scale: fx.Tensor, - expert_ids: fx.Tensor, - m_indices: fx.Tensor, - num_valid_ids: fx.Tensor, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1( - inter_sorted_quant, - inter_sorted_scale, - a_quant, - w, - a_scale_sorted, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - ).launch( - grid=(num_n_blocks, num_m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1 - - -def kimi_mxfp4_gemm1_16384( - a_quant: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi mxfp4 GEMM1 kernel.""" - device = a_quant.device - max_sorted = mxfp4_max_sorted_16384() - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = ((inter_scale_rows + 31) // 32) * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - args = ( - _as_u8_storage(inter_sorted_quant).view(-1), - _as_u8_storage(inter_sorted_shuffled_scale).view(-1), - _as_u8_storage(a_quant).view(-1), - _as_u8_storage(w1).view(-1), - _as_u8_storage(a_scale_sorted_shuffled).view(-1), - _as_u8_storage(w1_scale).view(-1), - sorted_expert_ids.view(-1), - m_indices.view(-1), - cumsum_tensor.view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_16384(), args) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_mxfp4out_16384(): - """Compile a fixed-shape FlyDSL GEMM2 that stages MXFP4 flat output. - - This is the first direct FlyDSL port of aiter's Kimi-only - fixed mxfp4 GEMM2 path. It keeps the public shape fixed: - - - A: sorted fp4, ``[max_sorted, 512 / 2]`` - - B: preshuffled fp4, ``[385, 7168, 512 / 2]`` - - C: packed fp4 plus e8m0 block scales, sorted-row-major - - The current version uses the same 1D persistent CTA grid shape as aiter's - nonatomic mxfp4out kernel. The MFMA and epilogue bodies are still FlyDSL - generated and use VGPR accumulators. - """ - - tile_m = MXFP4_BLOCK_M - tile_n = 256 - tile_k = 256 - total_threads = 256 - max_sorted = mxfp4_max_sorted_16384() - num_m_blocks = max_sorted // tile_m - num_n_blocks = MODEL_DIM // tile_n - persistent_ctas = 256 - - _scale_pack_m = 2 - _scale_pack_n = 2 - _scale_pack_k = 2 - pack_M = 2 - pack_N = 2 - pack_K = 2 - m_repeat = tile_m // 16 - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = 2 - m_repeat_packed = m_repeat // pack_M - num_acc_n_packed = num_acc_n // pack_N - - a_elem_bytes = 1 - b_elem_bytes = 1 - a_elem_vec_pack = 2 - tile_k_bytes = tile_k * a_elem_bytes - _eff_lds_stride = tile_k // a_elem_vec_pack - _eff_tile_k_bytes = tile_k_bytes // a_elem_vec_pack - _single_x_bytes = tile_m * _eff_lds_stride * a_elem_bytes - _input_elems = _single_x_bytes - _lds_acc_bytes = tile_m * tile_n * 4 - _lds_x_bytes = 2 * _single_x_bytes - _lds_scale_bytes = 2 * (tile_m // 32) * 256 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_gemm2") - lds_x0_offset = allocator._align(allocator.ptr, 16) - lds_x1_offset = lds_x0_offset + _single_x_bytes - # Overlay the later f32 epilogue tile with the earlier A staging area. - allocator.ptr = lds_x0_offset + max(_lds_x_bytes, _lds_acc_bytes) - lds_scale_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_scale_offset + _lds_scale_bytes - - q_nbytes = max_sorted * (MODEL_DIM // 2) - out_scale_nbytes = max_sorted * (MODEL_DIM // 32) - x_nbytes = max_sorted * (INTER_DIM // 2) - x_scale_nbytes = max_sorted * (1024 // 64) * 4 - w_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 2) - w_scale_nbytes = EXPERTS * MODEL_DIM * (INTER_DIM // 32) - expert_nbytes = num_m_blocks * 4 - numids_nbytes = 4 - - _b_kpack_bytes_s = 16 - _b_kpack_elems_s = _b_kpack_bytes_s // b_elem_bytes - _b_c_k_s = INTER_DIM // _scale_pack_k - _b_c_k0_s = (_b_c_k_s * b_elem_bytes) // 64 - _b_stride_nlane = _b_kpack_elems_s - _b_stride_klane = 16 * _b_stride_nlane - _b_stride_k0 = 4 * _b_stride_klane - _b_stride_n0 = _b_c_k0_s * _b_stride_k0 - _expert_b_stride = (MODEL_DIM // 16) * _b_stride_n0 - - # aiter scale-layout constants for K=512, N=7168, BM=128. - k_as_per_chunk_dw = 128 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = 128 - k_bs_per_expert_dw = (MODEL_DIM // 16 // 2) * k_bs_stride_n0_dw - - # Match aiter's nonatomic BM128 path more closely: aiter pins MFMA - # accumulators into AGPRs with inline asm. This hint asks LLVM to reserve - # the same AGPR budget and prefer non-VGPR MFMA lowering where possible. - gemm2_agpr_value_attrs = {"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} - gemm2_agpr_llvm_options = {"amdgpu-mfma-vgpr-form": False} - - module_name = "flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax" - - @flyc.kernel(name=module_name) - def gemm2_mxfp4out( - arg_flat_out_q: fx.Tensor, - arg_flat_out_scale: fx.Tensor, - arg_x: fx.Tensor, - arg_w: fx.Tensor, - arg_scale_x: fx.Tensor, - arg_scale_w: fx.Tensor, - arg_expert_ids: fx.Tensor, - arg_num_valid_ids: fx.Tensor, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec4_f32 = T.vec(4, f32) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec16_x = T.vec(16, T.f8) - - q_rsrc = _tensor_buffer_resource(arg_flat_out_q, q_nbytes) - out_scale_rsrc = _tensor_buffer_resource(arg_flat_out_scale, out_scale_nbytes) - x_rsrc = _tensor_buffer_resource(arg_x, x_nbytes) - w_rsrc = _tensor_buffer_resource(arg_w, w_nbytes) - sx_rsrc = _tensor_buffer_resource(arg_scale_x, x_scale_nbytes) - sw_rsrc = _tensor_buffer_resource(arg_scale_w, w_scale_nbytes) - expert_rsrc = _tensor_buffer_resource(arg_expert_ids, expert_nbytes) - numids_rsrc = _tensor_buffer_resource(arg_num_valid_ids, numids_nbytes) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - - num_valid_i32 = buffer_ops.buffer_load( - numids_rsrc, - fx.Index(0), - vec_width=1, - dtype=i32, - ) - num_valid_i32 = rocdl.ReadfirstlaneOp(T.i32, num_valid_i32).res - - base_ptr = allocator.get_base() - lds_x0 = SmemPtr(base_ptr, lds_x0_offset, T.f8, shape=(_input_elems,)).get() - lds_x1 = SmemPtr(base_ptr, lds_x1_offset, T.f8, shape=(_input_elems,)).get() - lds_out = SmemPtr(base_ptr, lds_x0_offset, T.f32, shape=(tile_m * tile_n,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(_lds_scale_bytes // 4,), - ).get() - - shape_lds = fx.make_shape(tile_m, _eff_lds_stride) - stride_lds = fx.make_stride(_eff_lds_stride, 1) - layout_lds = fx.make_layout(shape_lds, stride_lds) - k_blocks16 = fx.Index(_eff_tile_k_bytes // 16) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * fx.Index(16) - n_tile_base = wave_id * fx.Index(n_per_wave) - - bytes_per_thread_x = tile_m * tile_k * a_elem_bytes // a_elem_vec_pack // total_threads - x_load_bytes = 16 - num_x_loads = bytes_per_thread_x // x_load_bytes - chunk_i32 = x_load_bytes // 4 - tile_k_dwords = tile_k * a_elem_bytes // (4 * a_elem_vec_pack) - layout_x_tile_div4 = fx.make_layout((tile_m, tile_k_dwords), stride=(tile_k_dwords, 1)) - c_chunk_i32 = fx.Index(chunk_i32) - tx_i32_base = tx * c_chunk_i32 - c_k_div4 = fx.Index((INTER_DIM // a_elem_vec_pack) // 4) - - x_col_local_i32 = [] - x_row_local = [] - for i in range_constexpr(num_x_loads): - row_local, col_local_i32 = tile_chunk_coord_i32( - arith, - tx_i32_base=tx_i32_base, - i=i, - total_threads=total_threads, - layout_tile_div4=layout_x_tile_div4, - chunk_i32=chunk_i32, - ) - x_row_local.append(row_local) - x_col_local_i32.append(col_local_i32) - - def lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - loaded_a16 = vector.load_op(vec16_x, lds_buffer, [idx_a16]) - a_i64x2 = Vec(loaded_a16).bitcast(fx.Int64) - return ( - a_i64x2[0], - a_i64x2[1], - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return Vec(v4).bitcast(fx.Int32) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def compute_tile(acc_in, b_tile_in, lds_buffer, a_scale, b_scale): - acc_list = list(acc_in) - for k_idx in range_constexpr(k_unroll): - ikxdl = k_idx - b_packs0, b_packs1 = b_tile_in[k_idx] - col_base = col_offset_base + arith.constant(k_idx * 128 // a_elem_vec_pack, index=True) - for mi in range_constexpr(m_repeat_packed): - a_scale_i32 = a_scale[mi] - a_scale_val = Vec(a_scale_i32)[0] - for ni in range_constexpr(num_acc_n_packed): - b_scale_i32 = b_scale[ni] - b_scale_val = Vec(b_scale_i32)[0] - for imxdl in range_constexpr(pack_M): - mi_idx = mi * pack_M + imxdl - curr_row_a_lds = row_a_lds + arith.constant(mi_idx * 16, index=True) - a0, a1 = lds_load_packs_k64(curr_row_a_lds, col_base, lds_buffer) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - for inxdl in range_constexpr(pack_N): - ni_idx = ni * pack_N + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_idx = mi_idx * num_acc_n + ni_idx - acc_list[acc_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[acc_idx], - cbsz, - blgp, - ikxdl * _scale_pack_m + imxdl, - a_scale_val, - ikxdl * _scale_pack_n + inxdl, - b_scale_val, - ], - ) - return acc_list - - _dma_bytes = 16 - _wave_size = 64 - - def run_one(work_i32): - bx_i32 = work_i32 // arith.constant(num_n_blocks, type=i32) - by_i32 = work_i32 % arith.constant(num_n_blocks, type=i32) - bx = arith.index_cast(ir.IndexType.get(), bx_i32) - by = arith.index_cast(ir.IndexType.get(), by_i32) - bx_m_i32 = bx_i32 * arith.constant(tile_m, type=i32) - bx_m = arith.index_cast(ir.IndexType.get(), bx_m_i32) - by_n = by * arith.constant(tile_n, index=True) - - expert_i32 = buffer_ops.buffer_load(expert_rsrc, bx, vec_width=1, dtype=i32) - expert_idx = arith.index_cast(ir.IndexType.get(), expert_i32) - expert_b_base = expert_idx * arith.constant(_expert_b_stride, index=True) - - n_intra_list = [None] * num_acc_n - n_blk_list = [None] * num_acc_n - for ni in range_constexpr(num_acc_n): - c_offset = arith.constant(ni * 16, index=True) - global_n = by_n + n_tile_base + c_offset + lane_mod_16 - n_blk_list[ni] = _div_pow2(global_n, 16) - n_intra_list[ni] = global_n % arith.constant(16, index=True) - - x_row_base_div4 = [] - for i in range_constexpr(num_x_loads): - x_row_base_div4.append((bx_m + x_row_local[i]) * c_k_div4) - - def load_b_packs_k64(base_k_packed, ku: int, ni: int): - k0 = _div_pow2(base_k_packed, 64) + arith.constant(ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(_b_stride_n0, index=True) - + k0 * arith.constant(_b_stride_k0, index=True) - + lane_div_16 * arith.constant(_b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(_b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - b_i64x2 = Vec(b16).bitcast(fx.Int64) - return ( - b_i64x2[0], - b_i64x2[1], - ) - - def load_b_tile(base_k_packed): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(base_k_packed, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - scale_slot_dw = arith.constant((tile_m // 32) * (256 // 4), index=True) - scale_sub_dw = arith.constant(256 // 4, index=True) - - def stage_a_scale_tile(scale_k_tile: int, slot: int): - chunk_base = bx_m // arith.constant(32, index=True) - scale_idx = ( - (chunk_base + wave_id) - * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sx_rsrc, scale_idx, vec_width=1, dtype=i32) - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + wave_id * scale_sub_dw - + lane_word - ) - vector.store( - vector.from_elements(T.vec(1, i32), [s]), - lds_scale_i32, - [lds_idx], - alignment=4, - ) - - def load_a_scale_tile(slot: int): - a_scale_tile = [] - for mi in range_constexpr(m_repeat_packed): - lds_idx = ( - arith.constant(slot, index=True) * scale_slot_dw - + arith.constant(mi, index=True) * scale_sub_dw - + lane_word - ) - s_vec = vector.load_op(T.vec(1, i32), lds_scale_i32, [lds_idx]) - s = Vec(s_vec)[0] - a_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return a_scale_tile - - def load_b_scale_tile(scale_k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n_packed): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(scale_k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - def dma_x_tile_to_lds(base_k, lds_buffer): - c4_idx = arith.index(4) - base_k_div4 = _div_pow2(_div_pow2(base_k, a_elem_vec_pack), 4) - lds_ptr_i64 = None - for i in range_constexpr(num_x_loads): - row_local_i = x_row_local[i] - col_local_i32_i = x_col_local_i32[i] - col_local_sw = swizzle_xor16(row_local_i, col_local_i32_i * c4_idx, k_blocks16) - row_k_dw = x_row_base_div4[i] + base_k_div4 - global_byte_idx = row_k_dw * c4_idx + col_local_sw - global_offset = arith.index_cast(i32, global_byte_idx) - if const_expr(i == 0): - lds_addr = ( - memref.extract_aligned_pointer_as_index(lds_buffer) - + wave_id * arith.constant(_wave_size * _dma_bytes, index=True) - ) - lds_ptr_i64 = rocdl.readfirstlane(i64, arith.index_cast(i64, lds_addr)) - else: - lds_ptr_i64 = lds_ptr_i64 + arith.constant(total_threads * _dma_bytes, type=i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_ptr_i64) - rocdl.raw_ptr_buffer_load_lds( - x_rsrc, - lds_ptr, - arith.constant(_dma_bytes, type=i32), - global_offset, - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def _then_body(): - gpu.barrier() - rocdl.sched_barrier(0) - stage_a_scale_tile(0, 0) - stage_a_scale_tile(1, 1) - dma_x_tile_to_lds(arith.index(0), lds_x0) - dma_x_tile_to_lds(arith.index(tile_k), lds_x1) - b_tile0 = load_b_tile(arith.index(0)) - b_tile1 = load_b_tile(arith.index(tile_k // a_elem_vec_pack)) - b_scale0 = load_b_scale_tile(0) - b_scale1 = load_b_scale_tile(1) - rocdl.s_waitcnt(0) - gpu.barrier() - a_scale0 = load_a_scale_tile(0) - a_scale1 = load_a_scale_tile(1) - - acc = [arith.constant_vector(0.0, vec4_f32)] * (m_repeat * num_acc_n) - acc = compute_tile(acc, b_tile0, lds_x0, a_scale0, b_scale0) - acc = compute_tile(acc, b_tile1, lds_x1, a_scale1, b_scale1) - - c0_f32 = arith.constant(0.0, type=f32) - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c3_i32 = arith.constant(3, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - - def write_row_to_lds( - *, - mi: int, - ii: int, - row_in_tile, - row, - row_base_lds, - col_base_local, - num_acc_n: int, - lds_out, - ): - for ni in range_constexpr(num_acc_n): - col_local = col_base_local + arith.constant(ni * 16, index=True) - acc_idx = mi * num_acc_n + ni - v = Vec(acc[acc_idx])[ii] - v1 = vector.from_elements(T.vec(1, f32), [v]) - vector.store(v1, lds_out, [row_base_lds + col_local], alignment=4) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def store_pair(*, row_local, row, row_ctx, col_pair0, col_g0, frag): - frag_vals = [] - for i in range_constexpr(8): - frag_vals.append(ArithValue(Vec(frag)[i])) - - local_max = c0_f32 - for i in range_constexpr(8): - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [frag_vals[i]], [], []) - local_max = arith.maximumf(local_max, abs_v) - - # Match aiter: reduce bf16-truncated amax across a 4-lane quad. - amax_bf16 = local_max.bitcast(i32) >> c16_i32 - peer1 = _dpp_xor_i32(amax_bf16, 1) - amax_bf16 = _max_u32(amax_bf16, peer1) - peer2 = _dpp_xor_i32(amax_bf16, 2) - amax_bf16 = _max_u32(amax_bf16, peer2) - - f32bits = amax_bf16 << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - frag_vals[2 * pair], - frag_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, row) - col_i32 = arith.index_cast(i32, col_g0) - q_word_off = row_i32 * arith.constant(MODEL_DIM // 8, type=i32) + (col_i32 >> c3_i32) - buffer_ops.buffer_store(packed, q_rsrc, q_word_off, cache_modifier=4) - - lane_in_scale = (col_i32 >> c3_i32) & c3_i32 - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_scale, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - scale_off = row_i32 * arith.constant(MODEL_DIM // 32, type=i32) + (col_i32 >> arith.constant(5, type=i32)) - e8m0_i8 = arith.TruncIOp(T.i8, e8m0).result - buffer_ops.buffer_store(e8m0_i8, out_scale_rsrc, scale_off, cache_modifier=4) - scf.YieldOp([]) - - c_shuffle_epilog( - arith=arith, - vector=vector, - gpu=gpu, - scf=scf, - range_constexpr=range_constexpr, - tile_m=tile_m, - tile_n=tile_n, - e_vec=8, - cshuffle_nlane=32, - block_size=total_threads, - m_repeat=m_repeat, - num_acc_n=num_acc_n, - tx=tx, - lane_div_16=lane_div_16, - lane_mod_16=lane_mod_16, - bx_m=bx_m, - by_n=by_n, - n_tile_base=n_tile_base, - lds_out=lds_out, - frag_elem_type=ir.F32Type.get(), - write_row_to_lds=write_row_to_lds, - precompute_row=None, - store_pair=store_pair, - ) - - _then_body() - - total_m_blocks_i32 = num_valid_i32 >> arith.constant(7, type=i32) - total_work_i32 = total_m_blocks_i32 * arith.constant(num_n_blocks, type=i32) - for work in range(pid, total_work_i32, arith.constant(persistent_ctas, type=i32)): - run_one(work) - - @flyc.jit - def launch_gemm2_mxfp4out( - flat_out_q: fx.Tensor, - flat_out_scale: fx.Tensor, - x: fx.Tensor, - w: fx.Tensor, - scale_x: fx.Tensor, - scale_w: fx.Tensor, - expert_ids: fx.Tensor, - num_valid_ids: fx.Tensor, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_mxfp4out( - flat_out_q, - flat_out_scale, - x, - w, - scale_x, - scale_w, - expert_ids, - num_valid_ids, - value_attrs=gemm2_agpr_value_attrs, - ).launch( - grid=(persistent_ctas, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - launch_gemm2_mxfp4out.compile_hints["llvm_options"] = gemm2_agpr_llvm_options - - return launch_gemm2_mxfp4out - - -def kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - flat_out_q: torch.Tensor | None = None, - flat_out_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL candidate for aiter's fixed Kimi GEMM2 MXFP4-output kernel.""" - max_sorted = inter_sorted_quant.shape[0] - if max_sorted != mxfp4_max_sorted_16384(): - raise ValueError(f"expected max_sorted={mxfp4_max_sorted_16384()}, got {max_sorted}") - if tuple(inter_sorted_quant.shape[1:]) != (INTER_DIM // 2,): - raise ValueError( - "expected inter_sorted_quant shape " - f"(*, {INTER_DIM // 2}), got {tuple(inter_sorted_quant.shape)}" - ) - device = inter_sorted_quant.device - if flat_out_q is None: - flat_out_q = torch.empty((max_sorted, MODEL_DIM // 2), dtype=torch.uint8, device=device) - if flat_out_scale is None: - flat_out_scale = torch.empty((max_sorted, MODEL_DIM // 32), dtype=torch.uint8, device=device) - - args = ( - _as_u8_storage(flat_out_q).view(-1), - _as_u8_storage(flat_out_scale).view(-1), - _as_u8_storage(inter_sorted_quant).view(-1), - _as_u8_storage(w2).view(-1), - _as_u8_storage(inter_sorted_shuffled_scale).view(-1), - _as_u8_storage(w2_scale).view(-1), - sorted_expert_ids.view(-1), - cumsum_tensor.view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_mxfp4out_16384(), args) - return flat_out_q, flat_out_scale - - -def mxfp4_max_sorted_16384(block_m: int = MXFP4_BLOCK_M) -> int: - active = min(EXPERTS, TOKEN * TOPK) - cumsum_max = TOKEN * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 three-stage sorter. - - This mirrors the aiter prologue=1 path: - sort_count -> sort_cumsum -> sort_place_pad. - """ - - sort_ctas = 16 - threads = 1024 - block_m = MXFP4_BLOCK_M - max_sorted = mxfp4_max_sorted_16384(block_m) - max_blocks = max_sorted // block_m - total_pairs = TOKEN * TOPK - per_cta = (total_pairs + sort_ctas - 1) // sort_ctas - experts_per_cta = (EXPERTS + sort_ctas - 1) // sort_ctas - if total_pairs % sort_ctas != 0 or per_cta % threads != 0: - raise ValueError("sort_count assumes routed pairs divide exactly across CTAs and threads") - - topk_nbytes = total_pairs * 4 - weight_nbytes = total_pairs * 4 - sorted_nbytes = max_sorted * 4 - expert_nbytes = max_blocks * 4 - cumsum_nbytes = 4 - reverse_nbytes = total_pairs * 4 - masked_nbytes = EXPERTS * 4 - block_offsets_nbytes = EXPERTS * sort_ctas* 4 - real_counts_nbytes = EXPERTS * 4 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_padded_offset = lds_count_offset + EXPERTS * 4 - lds_starts_offset = lds_padded_offset + EXPERTS * 4 - allocator.ptr = lds_starts_offset + (EXPERTS + 1) * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v1", - known_block_size=[threads, 1, 1], - ) - def sort_count(arg_topk_ids: fx.Tensor, arg_block_offsets: fx.Tensor): - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = fx.Int32(tx) - bx_i32 = fx.Int32(bx) - - topk_rsrc = _tensor_buffer_resource(arg_topk_ids, topk_nbytes) - offsets_rsrc = _tensor_buffer_resource(arg_block_offsets, block_offsets_nbytes) - base_ptr = allocator.get_base() - local_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_start = bx * arith.constant(per_cta, index=True) - - if tx < fx.Index(EXPERTS): - smem_store(local_count, tx, c0_i32) - gpu.barrier() - - for it in range_constexpr(div_up(per_cta,threads)): - idx = c_start + tx + fx.Index(it * threads) - eid = buffer_ops.buffer_load(topk_rsrc, idx, vec_width=1, dtype=i32) - _lds_atomic_add_i32(local_count, eid, c1_i32) - gpu.barrier() - - if tx < fx.Index(EXPERTS): - cnt = memref.load(local_count, [tx]) - off = tx_i32 * c_sort_ctas + bx_i32 - buffer_ops.buffer_store(cnt, offsets_rsrc, off) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio", - known_block_size=[threads, 1, 1], - ) - def sort_cumsum( - arg_block_offsets: fx.Tensor, - arg_masked_m: fx.Tensor, - arg_real_counts: fx.Tensor, - arg_cumsum_tensor: fx.Tensor, - arg_sorted_expert_ids: fx.Tensor, - ): - i32 = T.i32 - tx = gpu.thread_id("x") - tx_i32 = arith.index_cast(i32, tx) - - offsets_ptr = _extract_global_ptr(arg_block_offsets) - masked_ptr = _extract_global_ptr(arg_masked_m) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - base_ptr = allocator.get_base() - s_total_count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - s_padded_count = SmemPtr(base_ptr, lds_padded_offset, T.i32, shape=(EXPERTS,)).get() - s_expert_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = fx.Int32(0) - c_sort_ctas = fx.Int32(sort_ctas) - c_bm_minus_1 = fx.Int32(block_m - 1) - c_bm_mask = fx.Int32(~(block_m - 1)) - e_valid = tx < fx.Index(EXPERTS) - - if e_valid: - total = c0_i32 - e_offsets_base = tx_i32 * c_sort_ctas - for c_group in range_constexpr(sort_ctas // 4): - cnts = _global_load_i32_vec( - offsets_ptr, - e_offsets_base + arith.constant(c_group * 4, type=i32), - 4, - ) - for c_lane in range_constexpr(4): - cnt = ArithValue(Vec(cnts)[c_lane]) - total = total + cnt - padded = (total + c_bm_minus_1) & c_bm_mask - smem_store(s_total_count, tx, total) - smem_store(s_padded_count, tx, padded) - _global_store_i32(real_ptr, tx_i32, total) - _global_store_i32(masked_ptr, tx_i32, padded) - gpu.barrier() - - if tx == fx.Index(0): - for e, state in range(fx.Index(0), fx.Index(EXPERTS), fx.Index(1), init=[c0_i32]): - acc_iter = ArithValue(state[0]) - padded = ArithValue(memref.load(s_padded_count, [e])) - smem_store(s_expert_starts, e, acc_iter) - next_acc = acc_iter + padded - results = yield [next_acc] - - acc = ArithValue(results) - smem_store(s_expert_starts, fx.Index(EXPERTS), acc) - _global_store_i32(cumsum_ptr, c0_i32, acc) - gpu.barrier() - - if e_valid: - acc = memref.load(s_expert_starts, [tx]) - for c in range_constexpr(sort_ctas): - off = tx_i32 * c_sort_ctas + arith.constant(c, type=i32) - cnt = ArithValue(_global_load_i32(offsets_ptr, off)) - _global_store_i32(offsets_ptr, off, acc) - acc = acc + cnt - - start = memref.load(s_expert_starts, [tx]) - end = memref.load(s_expert_starts, [tx + arith.index(1)]) - b0 = start >> arith.constant(7, type=i32) - b1 = end >> arith.constant(7, type=i32) - for b in range( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ): - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask", - known_block_size=[threads, 1, 1], - ) - def sort_place_pad( - arg_topk_ids: fx.Tensor, - arg_topk_weight: fx.Tensor, - arg_block_offsets: fx.Tensor, - arg_real_counts: fx.Tensor, - arg_cumsum_tensor: fx.Tensor, - arg_sorted_token_ids: fx.Tensor, - arg_reverse_sorted: fx.Tensor, - arg_sorted_weights: fx.Tensor, - arg_m_indices: fx.Tensor, - ): - i32 = T.i32 - f32 = T.f32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - topk_weight_ptr = _extract_global_ptr(arg_topk_weight) - offsets_ptr = _extract_global_ptr(arg_block_offsets) - real_ptr = _extract_global_ptr(arg_real_counts) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - weights_ptr = _extract_global_ptr(arg_sorted_weights) - mindices_ptr = _extract_global_ptr(arg_m_indices) - base_ptr = allocator.get_base() - local_offsets = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(EXPERTS,)).get() - row_starts = SmemPtr(base_ptr, lds_starts_offset, T.i32, shape=(EXPERTS + 1,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_sort_ctas = arith.constant(sort_ctas, type=i32) - c_threads_i32 = arith.constant(threads, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c_pad = arith.constant(TOKEN & 0x00FFFFFF, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - init_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(EXPERTS, index=True)) - _if_init = scf.IfOp(init_valid) - with ir.InsertionPoint(_if_init.then_block): - e_i32 = tx_i32 - off = e_i32 * c_sort_ctas + bx_i32 - local = _global_load_i32(offsets_ptr, off) - start = _global_load_i32(offsets_ptr, e_i32 * c_sort_ctas) - smem_store(local_offsets, tx, local) - smem_store(row_starts, tx, start) - scf.YieldOp([]) - - _if_last_start = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(_if_last_start.then_block): - last = _global_load_i32(cumsum_ptr, c0_i32) - smem_store(row_starts, arith.index(EXPERTS), last) - scf.YieldOp([]) - gpu.barrier() - - c_start = bx * arith.constant(per_cta, index=True) - c_end = c_start + arith.constant(per_cta, index=True) - c_total = arith.constant(total_pairs, index=True) - end = arith.select(arith.cmpi(CmpIPredicate.ult, c_end, c_total), c_end, c_total) - place_loop = scf.ForOp(c_start + tx, end, c_threads_idx) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - sp = _lds_atomic_add_i32(local_offsets, eid, c1_i32) - token_id = idx_i32 // c_topk - topk_id = idx_i32 % c_topk - packed_id = (token_id & c_mask_token) | (topk_id << c_topk_shift) - w = _global_load_f32(topk_weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_mask_token) - _global_store_f32(weights_ptr, sp, w) - _global_store_i32(reverse_ptr, idx_i32, sp) - scf.YieldOp([]) - - gpu.barrier() - - # Each expert pads by fewer than block_m rows, so only the first BM lanes can store padding. - pad_lane_valid = arith.cmpi(CmpIPredicate.ult, tx, arith.constant(block_m, index=True)) - _if_pad_lane = scf.IfOp(pad_lane_valid) - with ir.InsertionPoint(_if_pad_lane.then_block): - for ee in range_constexpr(experts_per_cta): - e = bx * arith.constant(experts_per_cta, index=True) + arith.constant(ee, index=True) - e_valid = arith.cmpi(CmpIPredicate.ult, e, arith.constant(EXPERTS, index=True)) - _if_e = scf.IfOp(e_valid) - with ir.InsertionPoint(_if_e.then_block): - e_i32 = arith.index_cast(i32, e) - start = memref.load(row_starts, [e]) - real = ArithValue(_global_load_i32(real_ptr, e_i32)) - padded_end = memref.load(row_starts, [e + arith.index(1)]) - real_end = start + real - j0 = ArithValue(real_end + tx_i32).index_cast(T.index) - j1 = ArithValue(padded_end).index_cast(T.index) - for j in range(j0, j1, c_threads_idx): - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, c_pad) - _global_store_i32(mindices_ptr, j_i32, c_pad) - _global_store_f32(weights_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort( - topk_ids: fx.Tensor, - topk_weight: fx.Tensor, - sorted_token_ids: fx.Tensor, - sorted_expert_ids: fx.Tensor, - cumsum_tensor: fx.Tensor, - reverse_sorted: fx.Tensor, - sorted_weights: fx.Tensor, - masked_m: fx.Tensor, - m_indices: fx.Tensor, - block_offsets: fx.Tensor, - real_counts: fx.Tensor, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_count(topk_ids, block_offsets).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, - ).launch(grid=(1, 1, 1), block=(threads, 1, 1), stream=stream) - sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, - ).launch(grid=(sort_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort - - -def kimi_mxfp4_sort_16384( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - block_m: int = MXFP4_BLOCK_M, -) -> Mxfp4SortBuffers: - """Run the fixed FlyDSL mxfp4 three-stage sorter for Kimi M=16384.""" - if tuple(topk_ids.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_ids shape {(TOKEN, TOPK)}, got {tuple(topk_ids.shape)}" - ) - if tuple(topk_weight.shape) != (TOKEN, TOPK): - raise ValueError( - f"expected topk_weight shape {(TOKEN, TOPK)}, got {tuple(topk_weight.shape)}" - ) - - device = topk_ids.device - max_sorted = mxfp4_max_sorted_16384(block_m) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty( - (max_sorted // block_m,), - device=device, - dtype=torch.int32, - ) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((TOKEN * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - - if block_m != MXFP4_BLOCK_M: - raise ValueError(f"FlyDSL mxfp4 sort only supports block_m={MXFP4_BLOCK_M}") - block_offsets = torch.empty((EXPERTS * 16,), device=device, dtype=torch.int32) - real_counts = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - args = ( - topk_ids.view(-1), - topk_weight.view(-1), - sorted_token_ids.view(-1), - sorted_expert_ids.view(-1), - cumsum_tensor.view(-1), - reverse_sorted.view(-1), - sorted_weights.view(-1), - masked_m.view(-1), - m_indices.view(-1), - block_offsets.view(-1), - real_counts.view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_16384(), args) - return Mxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - max_sorted=max_sorted, - block_m=block_m, - ) - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_quant_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 input quant kernel.""" - - n_ctas = 512 - threads = 1024 - warp_size = 64 - lanes_per_block = 4 - blocks_per_wave = warp_size // lanes_per_block - waves_per_cta = threads // warp_size - blocks_per_cta = blocks_per_wave * waves_per_cta - blocks_per_hidden = MODEL_DIM // 32 - total_blocks = TOKEN * blocks_per_hidden - n_batches = (total_blocks + blocks_per_cta - 1) // blocks_per_cta - batch_per_cta = (n_batches + n_ctas - 1) // n_ctas - - hidden_nbytes = TOKEN * MODEL_DIM * 2 - quant_nbytes = TOKEN * (MODEL_DIM // 2) - scale_nbytes = TOKEN * (MODEL_DIM // 32) - - @flyc.kernel( - name="flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def quant(arg_hidden: fx.Tensor, arg_a_quant: fx.Tensor, arg_a_scale: fx.Tensor): - i8 = T.i8 - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - hidden_rsrc = _tensor_buffer_resource(arg_hidden, hidden_nbytes) - quant_rsrc = _tensor_buffer_resource(arg_a_quant, quant_nbytes) - scale_rsrc = _tensor_buffer_resource(arg_a_scale, scale_nbytes) - - wave_id = tx_i32 // arith.constant(warp_size, type=i32) - lane = tx_i32 % arith.constant(warp_size, type=i32) - block_in_wave = lane // arith.constant(lanes_per_block, type=i32) - lane_in_block = lane % arith.constant(lanes_per_block, type=i32) - - c0_i32 = arith.constant(0, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c255_i32 = arith.constant(255, type=i32) - c254_i32 = arith.constant(254, type=i32) - c64_i32 = arith.constant(64, type=i32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - wi_start_i32 = bx_i32 * arith.constant(batch_per_cta, type=i32) - wi_stop_i32 = wi_start_i32 + arith.constant(batch_per_cta, type=i32) - wi_end_i32 = arith.select( - arith.cmpi(CmpIPredicate.ult, wi_stop_i32, arith.constant(n_batches, type=i32)), - wi_stop_i32, - arith.constant(n_batches, type=i32), - ) - for wi in range( - ArithValue(wi_start_i32).index_cast(T.index), - ArithValue(wi_end_i32).index_cast(T.index), - arith.index(1), - ): - wi_i32 = arith.index_cast(i32, wi) - my_block_i32 = ( - wi_i32 * arith.constant(blocks_per_cta, type=i32) - + wave_id * arith.constant(blocks_per_wave, type=i32) - + block_in_wave - ) - valid = arith.cmpi(CmpIPredicate.ult, my_block_i32, arith.constant(total_blocks, type=i32)) - _if = scf.IfOp(valid) - with ir.InsertionPoint(_if.then_block): - kb_i32 = my_block_i32 * arith.constant(32, type=i32) + lane_in_block * arith.constant(8, type=i32) - h4 = buffer_ops.buffer_load(hidden_rsrc, kb_i32 >> arith.constant(1, type=i32), vec_width=4, dtype=i32) - words = [ - ArithValue(Vec(h4)[j]) - for j in range(4) - ] - - local_amax = c0_i32 - vals = [] - for j in range_constexpr(4): - w = words[j] - lo_abs = (w & cffff_i32) & c7fff_i32 - hi_abs = (w >> c16_i32) & c7fff_i32 - local_amax = _max_u32(local_amax, lo_abs) - local_amax = _max_u32(local_amax, hi_abs) - vals.append(((w & cffff_i32) << c16_i32).bitcast(f32)) - vals.append((w & chi_mask_i32).bitcast(f32)) - - peer1 = local_amax.shuffle_xor(arith.constant(1, type=i32), c64_i32) - local_amax = _max_u32(local_amax, peer1) - peer2 = local_amax.shuffle_xor(c2_i32, c64_i32) - local_amax = _max_u32(local_amax, peer2) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + arith.constant(0x200000, type=i32)) >> c23_i32) & c255_i32 - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - vals[2 * pair], - vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - b_off = lane_in_block * c4_i32 - q_word_off = my_block_i32 * arith.constant(4, type=i32) + (b_off >> c2_i32) - buffer_ops.buffer_store(packed, quant_rsrc, q_word_off) - - _if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, lane_in_block, c0_i32)) - with ir.InsertionPoint(_if_scale.then_block): - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - buffer_ops.buffer_store( - e8m0_i8, - scale_rsrc, - my_block_i32, - offset_is_bytes=True, - ) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_quant( - hidden: fx.Tensor, - a_quant: fx.Tensor, - a_scale: fx.Tensor, - stream: fx.Stream, - ): - quant(hidden, a_quant, a_scale).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_quant - - -def kimi_mxfp4_quant_16384( - hidden_states: torch.Tensor, - a_quant: torch.Tensor | None = None, - a_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """FlyDSL mxfp4 input quantization for the fixed Kimi shape.""" - if tuple(hidden_states.shape) != (TOKEN, MODEL_DIM): - raise ValueError(f"expected hidden shape {(TOKEN, MODEL_DIM)}, got {tuple(hidden_states.shape)}") - device = hidden_states.device - if a_quant is None: - a_quant = torch.empty((TOKEN, MODEL_DIM // 2), device=device, dtype=torch.uint8) - if a_scale is None: - a_scale = torch.empty((TOKEN, MODEL_DIM // 32), device=device, dtype=torch.uint8) - args = ( - hidden_states.view(-1), - _as_u8_storage(a_quant).view(-1), - _as_u8_storage(a_scale).view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_quant_16384(), args) - return a_quant, a_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_scales_16384(): - """FlyDSL port of aiter's fixed Kimi mxfp4 sort_scales kernel.""" - - n_ctas = 512 - threads = 1024 - block_m = MXFP4_BLOCK_M - bk = 256 - max_sorted = mxfp4_max_sorted_16384(block_m) - n_chunks = max_sorted // block_m - a_scale_cols = MODEL_DIM // 32 - mn_pack = 2 - k_pack = bk // 128 - c_m1 = block_m // (16 * mn_pack) - c_k1 = (MODEL_DIM // 32) // (4 * k_pack) - k_lane = 4 - n_lane = 16 - dwords_per_chunk = c_m1 * c_k1 * k_lane * n_lane - total_work = n_chunks * dwords_per_chunk - total_threads = n_ctas * threads - - scale_nbytes = TOKEN * a_scale_cols - sorted_nbytes = max_sorted * 4 - cumsum_nbytes = 4 - out_nbytes = max_sorted * a_scale_cols * 2 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0", - known_block_size=[threads, 1, 1], - ) - def sort_scales( - arg_a_scale: fx.Tensor, - arg_sorted_token_ids: fx.Tensor, - arg_cumsum_tensor: fx.Tensor, - arg_a_scale_sorted_shuffled: fx.Tensor, - ): - i8 = T.i8 - i32 = T.i32 - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - - scale_rsrc = _tensor_buffer_resource(arg_a_scale, scale_nbytes) - sorted_rsrc = _tensor_buffer_resource(arg_sorted_token_ids, sorted_nbytes) - cumsum_rsrc = _tensor_buffer_resource(arg_cumsum_tensor, cumsum_nbytes) - out_rsrc = _tensor_buffer_resource(arg_a_scale_sorted_shuffled, out_nbytes) - - c0_i32 = arith.constant(0, type=i32) - c8_i32 = arith.constant(8, type=i32) - c_mask_token = arith.constant(0x00FFFFFF, type=i32) - c_token = arith.constant(TOKEN, type=i32) - - actual_sorted = buffer_ops.buffer_load(cumsum_rsrc, c0_i32, vec_width=1, dtype=i32) - actual_n_chunks = (actual_sorted + arith.constant(block_m - 1, type=i32)) >> arith.constant(7, type=i32) - global_tid = bx * arith.constant(threads, index=True) + tx - - for work in range(global_tid, arith.index(total_work), arith.index(total_threads)): - work_i32 = arith.index_cast(i32, work) - buffer_ops.buffer_store(c0_i32, out_rsrc, work_i32) - - r0 = work_i32 - n_lane_v = r0 % arith.constant(n_lane, type=i32) - r1 = r0 // arith.constant(n_lane, type=i32) - k_lane_v = r1 % arith.constant(k_lane, type=i32) - r2 = r1 >> arith.constant(2, type=i32) - ku = r2 % arith.constant(c_k1, type=i32) - r3 = r2 // arith.constant(c_k1, type=i32) - mi = r3 % arith.constant(c_m1, type=i32) - chunk = r3 // arith.constant(c_m1, type=i32) - - valid_chunk = arith.cmpi(CmpIPredicate.slt, chunk, actual_n_chunks) - _if = scf.IfOp(valid_chunk) - with ir.InsertionPoint(_if.then_block): - tok_ids = [] - for im_a in range_constexpr(mn_pack): - sorted_row = ( - chunk * arith.constant(block_m, type=i32) - + (mi * arith.constant(mn_pack, type=i32) + arith.constant(im_a, type=i32)) - * arith.constant(16, type=i32) - + n_lane_v - ) - row_valid = arith.cmpi(CmpIPredicate.slt, sorted_row, actual_sorted) - sti = buffer_ops.buffer_load(sorted_rsrc, sorted_row, vec_width=1, dtype=i32, mask=row_valid) - tid = sti & c_mask_token - tid = arith.select(arith.cmpi(CmpIPredicate.slt, tid, c_token), tid, c0_i32) - tok_ids.append(tid) - - packed = c0_i32 - for ikxdl in range_constexpr(k_pack): - for im_a in range_constexpr(mn_pack): - k_idx = ( - ku * arith.constant(k_pack * 4, type=i32) - + arith.constant(ikxdl * 4, type=i32) - + k_lane_v - ) - scale_idx = tok_ids[im_a] * arith.constant(a_scale_cols, type=i32) + k_idx - b = buffer_ops.buffer_load(scale_rsrc, scale_idx, vec_width=1, dtype=i8, cache_modifier=4) - b_i32 = ArithValue(b).extui(i32) - packed = packed | (b_i32 << arith.constant((ikxdl * mn_pack + im_a) * 8, type=i32)) - - buffer_ops.buffer_store(packed, out_rsrc, work_i32) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_scales( - a_scale: fx.Tensor, - sorted_token_ids: fx.Tensor, - cumsum_tensor: fx.Tensor, - a_scale_sorted_shuffled: fx.Tensor, - stream: fx.Stream, - ): - sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, - ).launch(grid=(n_ctas, 1, 1), block=(threads, 1, 1), stream=stream) - - return launch_sort_scales - - -def kimi_mxfp4_sort_scales_16384( - a_scale: torch.Tensor, - sorted_token_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - a_scale_sorted_shuffled: torch.Tensor, -) -> torch.Tensor: - """FlyDSL mxfp4 scale gather/shuffle for the fixed Kimi shape.""" - args = ( - _as_u8_storage(a_scale).view(-1), - sorted_token_ids.view(-1), - cumsum_tensor.view(-1), - _as_u8_storage(a_scale_sorted_shuffled).view(-1), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_scales_16384(), args) - return a_scale_sorted_shuffled - - -def run_kimi_fp4_mxfp4_moe_16384_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Run the fixed Kimi M=16384 mxfp4 MoE path entirely with local FlyDSL kernels.""" - device = hidden_states.device - w1_u8 = _as_u8_storage(w1) - w2_u8 = _as_u8_storage(w2) - sort = kimi_mxfp4_sort_16384(topk_ids, topk_weight) - - a_quant, a_scale = kimi_mxfp4_quant_16384(hidden_states) - - padded_rows = ((sort.max_sorted + 31) // 32) * 32 - a_scale_sorted_shuffled = torch.empty( - (padded_rows * (MODEL_DIM // 32) * 2,), - device=device, - dtype=torch.uint8, - ) - kimi_mxfp4_sort_scales_16384( - a_scale, - sort.sorted_token_ids, - sort.cumsum_tensor, - a_scale_sorted_shuffled, - ) - - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_16384( - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w1=w1_u8, - w1_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - cumsum_tensor=sort.cumsum_tensor, - ) - - flat_out_q, flat_out_scale = kimi_mxfp4_gemm2_mxfp4out_16384( - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w2=w2_u8, - w2_scale=w2_scale, - sorted_expert_ids=sort.sorted_expert_ids, - cumsum_tensor=sort.cumsum_tensor, - ) - - return kimi_mxfp4_scatter_reduce_q_16384( - flat_out_q=flat_out_q, - flat_out_scale=flat_out_scale, - reverse_sorted=sort.reverse_sorted, - sorted_weights=sort.sorted_weights, - ) diff --git a/kimi_fp4_moe_small_bm16.py b/kimi_fp4_moe_small_bm16.py deleted file mode 100644 index 5cc43b2c9..000000000 --- a/kimi_fp4_moe_small_bm16.py +++ /dev/null @@ -1,2053 +0,0 @@ -"""Fixed-shape Kimi mxfp4 MoE BM16 small-M path. - -This file is the small-M counterpart of ``kimi_fp4_moe_16384_opt.py``. The -target aiter route is: - - mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT - mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT - -The first migrated piece is the aiter ``prologue=0`` auxiliary kernel: -single-CTA sort plus full-grid zero-init of the bf16 atomic output buffer. -""" -from __future__ import annotations - -import functools -from dataclasses import dataclass - -import torch - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir import ir -from flydsl._mlir.dialects import llvm, memref, scf -from flydsl._mlir.dialects.arith import CmpIPredicate -from flydsl.compiler.kernel_function import CompilationContext -from flydsl.expr import arith, buffer_ops, const_expr, gpu, range_constexpr, rocdl, vector -from flydsl.expr.arith import ArithValue -from flydsl.expr.typing import T -from flydsl.runtime.device import get_rocm_arch as get_hip_arch -from flydsl.utils.smem_allocator import SmemAllocator, SmemPtr -from kernels.layout_utils import crd2idx, idx2crd, get as layout_get -from kernels.mfma_preshuffle_pipeline import _buffer_load_vec, swizzle_xor16 - -from kimi_fp4_moe_16384 import ( - EXPERTS, - INTER_DIM, - MODEL_DIM, - TOPK, - _barrier, - _ptr_view_safe, - _run_compiled, -) -from kimi_fp4_moe_16384_opt import ( - _extract_global_ptr, - _global_load_i32, - _global_load_i32_vec, - _global_load_f32, - _ptr_buffer_resource, - _global_store_f32, - _global_store_i32, - _global_store_vec4_i32, - _lds_atomic_add_i32, -) - - -BM16 = 16 -THREADS_SORT = 1024 -INLINE_ZERO_CTAS = 128 -SUPPORTED_SMALL_MS = (4, 8, 16, 32, 64, 128) -DPP_ROW_SHR_1 = 0x111 -DPP_ROW_SHR_2 = 0x112 -DPP_ROW_SHR_4 = 0x114 -DPP_ROW_SHR_8 = 0x118 -DPP_ROW_MASK = 0xF -DPP_BANK_MASK = 0xF - - -@dataclass -class SmallMxfp4SortBuffers: - sorted_token_ids: torch.Tensor - sorted_expert_ids: torch.Tensor - cumsum_tensor: torch.Tensor - reverse_sorted: torch.Tensor - sorted_weights: torch.Tensor - masked_m: torch.Tensor - m_indices: torch.Tensor - atomic_output: torch.Tensor - max_sorted: int - block_m: int = BM16 - - -def mxfp4_small_max_sorted(m: int, block_m: int = BM16) -> int: - active = min(EXPERTS, m * TOPK) - cumsum_max = m * TOPK + active * (block_m - 1) - return ((cumsum_max + block_m - 1) // block_m) * block_m - - -def _unwrap_val(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - -def _ptr_buffer_resource_dynamic(ptr, num_records_bytes): - addr = fx.ptrtoint(ptr) - addr_i64 = arith.index_cast(T.i64, addr) - return buffer_ops.create_buffer_resource_from_addr( - addr_i64, - num_records_bytes=num_records_bytes, - ) - - -def _record_current_stream(*items): - stream = torch.cuda.current_stream() - for item in items: - if item is None: - continue - if isinstance(item, SmallMxfp4SortBuffers): - _record_current_stream( - item.sorted_token_ids, - item.sorted_expert_ids, - item.cumsum_tensor, - item.reverse_sorted, - item.sorted_weights, - item.masked_m, - item.m_indices, - item.atomic_output, - ) - elif isinstance(item, torch.Tensor): - item.record_stream(stream) - - -def _dpp_allwave_prefix_sum_i32(val, lane, wave, scratch_mr, *, num_waves: int): - """Inclusive i32 prefix sum across ``num_waves`` waves. - - This matches the shape of aiter's DPP scan: row_shr within each row, then - bpermute for the 16/32-lane row carry, then a tiny LDS cross-wave scan. - """ - - zero = arith.constant(0, type=T.i32) - val_raw = _unwrap_val(val) - zero_raw = _unwrap_val(zero) - for dpp_op, threshold in ( - (DPP_ROW_SHR_1, 1), - (DPP_ROW_SHR_2, 2), - (DPP_ROW_SHR_4, 4), - (DPP_ROW_SHR_8, 8), - ): - remote = rocdl.update_dpp( - T.i32, - zero_raw, - val_raw, - dpp_op, - DPP_ROW_MASK, - DPP_BANK_MASK, - True, - ) - remote = ArithValue(remote) - use_remote = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(threshold, type=T.i32)) - val = arith.select(use_remote, val + remote, val) - val_raw = _unwrap_val(val) - - src_lane_16 = (lane & arith.constant(0x30, type=T.i32)) - arith.constant(1, type=T.i32) - remote16 = rocdl.ds_bpermute(T.i32, src_lane_16 * arith.constant(4, type=T.i32), val) - use16 = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(16, type=T.i32)) - val = arith.select(use16, val + ArithValue(remote16), val) - - src_lane_32 = (lane & arith.constant(0x30, type=T.i32)) - arith.constant(17, type=T.i32) - remote32 = rocdl.ds_bpermute(T.i32, src_lane_32 * arith.constant(4, type=T.i32), val) - use32 = arith.cmpi(CmpIPredicate.sge, lane, arith.constant(32, type=T.i32)) - val = arith.select(use32, val + ArithValue(remote32), val) - - lane_last = arith.cmpi(CmpIPredicate.eq, lane, arith.constant(63, type=T.i32)) - if_last = scf.IfOp(lane_last) - with ir.InsertionPoint(if_last.then_block): - memref.store(arith._to_raw(val), scratch_mr, [ArithValue(wave).index_cast(T.index)]) - scf.YieldOp([]) - gpu.barrier() - - cross = zero - for w in range_constexpr(num_waves - 1): - wt = ArithValue(memref.load(scratch_mr, [arith.index(w)])) - add_w = arith.cmpi(CmpIPredicate.sgt, wave, arith.constant(w, type=T.i32)) - cross = arith.select(add_w, cross + wt, cross) - return val + cross - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_sort_zero_init_bm16(): - """Compile the BM16 inline-quant prologue kernel. - - This mirrors aiter's - ``launch_sort_only_with_zero_init<385,9,16,7168,128,1024>``. - """ - - threads = THREADS_SORT - block_m = BM16 - max_count_slots = max(EXPERTS, threads) - topk_nbytes = 128 * TOPK * 4 - topk_weight_nbytes = 128 * TOPK * 4 - max_sorted = mxfp4_small_max_sorted(128, block_m) - sorted_nbytes = max_sorted * 4 - expert_nbytes = (max_sorted // block_m) * 4 - cumsum_nbytes = 4 - reverse_nbytes = 128 * TOPK * 4 - weights_nbytes = max_sorted * 4 - masked_nbytes = EXPERTS * 4 - output_nbytes = 128 * MODEL_DIM * 2 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_sort") - lds_count_offset = allocator._align(allocator.ptr, 16) - lds_cumsum_offset = lds_count_offset + max_count_slots * 4 - lds_counter_offset = lds_cumsum_offset + (EXPERTS + 1) * 4 - lds_scratch_offset = lds_counter_offset + EXPERTS * 4 - allocator.ptr = lds_scratch_offset + 16 * 4 - - @flyc.kernel( - name="flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v9_cnt_select", - known_block_size=[threads, 1, 1], - ) - def sort_zero_init( - arg_topk_ids: fx.Pointer, - arg_topk_weight: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_reverse_sorted: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_masked_m: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_atomic_output: fx.Pointer, - i32_m: fx.Int32, - ): - i32 = T.i32 - f32 = T.f32 - vec4_i32 = T.vec(4, i32) - - tx = gpu.thread_id("x") - bx = gpu.block_id("x") - tx_i32 = arith.index_cast(i32, tx) - bx_i32 = arith.index_cast(i32, bx) - - topk_ptr = _extract_global_ptr(arg_topk_ids) - weight_ptr = _extract_global_ptr(arg_topk_weight) - sorted_ptr = _extract_global_ptr(arg_sorted_token_ids) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - reverse_ptr = _extract_global_ptr(arg_reverse_sorted) - sorted_weight_ptr = _extract_global_ptr(arg_sorted_weights) - masked_ptr = _extract_global_ptr(arg_masked_m) - mindices_ptr = _extract_global_ptr(arg_m_indices) - output_ptr = _extract_global_ptr(arg_atomic_output) - - base_ptr = allocator.get_base() - count = SmemPtr(base_ptr, lds_count_offset, T.i32, shape=(max_count_slots,)).get() - cumsum = SmemPtr(base_ptr, lds_cumsum_offset, T.i32, shape=(EXPERTS + 1,)).get() - counter = SmemPtr(base_ptr, lds_counter_offset, T.i32, shape=(EXPERTS,)).get() - scratch = SmemPtr(base_ptr, lds_scratch_offset, T.i32, shape=(16,)).get() - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c_topk = arith.constant(TOPK, type=i32) - c_threads_idx = arith.constant(threads, index=True) - c_experts_idx = arith.constant(EXPERTS, index=True) - c_block_m = arith.constant(block_m, type=i32) - c_bm_minus_1 = arith.constant(block_m - 1, type=i32) - c_bm_mask = arith.constant(~(block_m - 1), type=i32) - c_token_mask = arith.constant(0x00FFFFFF, type=i32) - c_topk_shift = arith.constant(24, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - - is_sort_cta = arith.cmpi(CmpIPredicate.eq, bx_i32, c0_i32) - - # CTA0 does the single-CTA sort. The remaining CTAs zero the atomic - # output buffer so the sort CTA does not contend with the streaming - # int4 stores. - sort_if = scf.IfOp(is_sort_cta, has_else=True) - with ir.InsertionPoint(sort_if.then_block): - if tx < c_experts_idx: - memref.store(c0_i32, count, [tx]) - gpu.barrier() - - m_idx = ArithValue(i32_m).index_cast(T.index) - total_pairs_idx = m_idx * arith.constant(TOPK, index=True) - - # Supported BM16 M buckets are multiples of 4, so TOPK routes are - # 4-aligned. Match aiter's int4 count path instead of issuing one - # scalar global load per route. - count_loop = scf.ForOp( - tx * arith.constant(4, index=True), - total_pairs_idx, - c_threads_idx * arith.constant(4, index=True), - ) - with ir.InsertionPoint(count_loop.body): - idx = count_loop.induction_variable - ids = _global_load_i32_vec(topk_ptr, idx, 4) - for lane in range_constexpr(4): - eid = ArithValue( - vector.extract(ids, static_position=[lane], dynamic_position=[]) - ) - _lds_atomic_add_i32(count, eid, c1_i32) - scf.YieldOp([]) - gpu.barrier() - - lane_i32 = tx_i32 % arith.constant(64, type=i32) - wave_i32 = tx_i32 // arith.constant(64, type=i32) - scan_valid = tx < c_experts_idx - cnt = ArithValue( - arith.select(scan_valid, memref.load(count, [tx]), arith._to_raw(c0_i32)) - ) - padded = (cnt + c_bm_minus_1) & c_bm_mask - padded = ArithValue(arith.select(scan_valid, arith._to_raw(padded), arith._to_raw(c0_i32))) - inclusive = _dpp_allwave_prefix_sum_i32( - padded, - lane_i32, - wave_i32, - scratch, - num_waves=16, - ) - start = inclusive - padded - - if_scan_store = scf.IfOp(scan_valid) - with ir.InsertionPoint(if_scan_store.then_block): - memref.store(arith._to_raw(start), cumsum, [tx]) - memref.store(c0_i32, counter, [tx]) - _global_store_i32(masked_ptr, tx_i32, padded) - b0 = start // c_block_m - b1 = inclusive // c_block_m - fill_experts = scf.ForOp( - ArithValue(b0).index_cast(T.index), - ArithValue(b1).index_cast(T.index), - arith.index(1), - ) - with ir.InsertionPoint(fill_experts.body): - b = fill_experts.induction_variable - _global_store_i32(expert_ptr, arith.index_cast(i32, b), tx_i32) - scf.YieldOp([]) - scf.YieldOp([]) - - if_first = scf.IfOp(arith.cmpi(CmpIPredicate.eq, tx_i32, c0_i32)) - with ir.InsertionPoint(if_first.then_block): - memref.store(c0_i32, cumsum, [arith.index(0)]) - scf.YieldOp([]) - - if_last_expert = scf.IfOp( - arith.cmpi(CmpIPredicate.eq, tx_i32, arith.constant(EXPERTS - 1, type=i32)) - ) - with ir.InsertionPoint(if_last_expert.then_block): - memref.store(arith._to_raw(inclusive), cumsum, [arith.index(EXPERTS)]) - _global_store_i32(cumsum_ptr, c0_i32, inclusive) - scf.YieldOp([]) - gpu.barrier() - - token_id_init = tx_i32 // c_topk - topk_id_init = tx_i32 % c_topk - place_loop = scf.ForOp( - tx, - total_pairs_idx, - c_threads_idx, - [arith._to_raw(token_id_init), arith._to_raw(topk_id_init)], - ) - with ir.InsertionPoint(place_loop.body): - idx = place_loop.induction_variable - token_id = ArithValue(place_loop.inner_iter_args[0]) - topk_id = ArithValue(place_loop.inner_iter_args[1]) - idx_i32 = arith.index_cast(i32, idx) - eid = ArithValue(_global_load_i32(topk_ptr, idx_i32)) - eid_idx = eid.index_cast(T.index) - pos = _lds_atomic_add_i32(counter, eid, c1_i32) - start = ArithValue(memref.load(cumsum, [eid_idx])) - sp = start + pos - packed_id = (token_id & c_token_mask) | (topk_id << c_topk_shift) - route_w = _global_load_f32(weight_ptr, idx_i32) - _global_store_i32(sorted_ptr, sp, packed_id) - _global_store_i32(mindices_ptr, sp, token_id & c_token_mask) - _global_store_f32(sorted_weight_ptr, sp, route_w) - _global_store_i32(reverse_ptr, idx_i32, sp) - next_token_id = token_id + arith.constant(threads // TOPK, type=i32) - next_topk_id = topk_id + arith.constant(threads % TOPK, type=i32) - carry = arith.cmpi(CmpIPredicate.sge, next_topk_id, c_topk) - next_topk_id = arith.select(carry, next_topk_id - c_topk, next_topk_id) - next_token_id = arith.select(carry, next_token_id + c1_i32, next_token_id) - scf.YieldOp([arith._to_raw(next_token_id), arith._to_raw(next_topk_id)]) - gpu.barrier() - - pad_valid = arith.cmpi(CmpIPredicate.ult, tx, c_experts_idx) - if_pad = scf.IfOp(pad_valid) - with ir.InsertionPoint(if_pad.then_block): - e = tx - e_i32 = tx_i32 - cnt = ArithValue(memref.load(count, [e])) - start = ArithValue(memref.load(cumsum, [e])) - end = ArithValue(memref.load(cumsum, [e + arith.index(1)])) - real_end = start + cnt - pad = i32_m & c_token_mask - pad_loop = scf.ForOp( - ArithValue(real_end).index_cast(T.index), - ArithValue(end).index_cast(T.index), - arith.index(1), - ) - with ir.InsertionPoint(pad_loop.body): - j = pad_loop.induction_variable - j_i32 = arith.index_cast(i32, j) - _global_store_i32(sorted_ptr, j_i32, pad) - _global_store_i32(mindices_ptr, j_i32, pad) - _global_store_f32(sorted_weight_ptr, j_i32, c0_f32) - scf.YieldOp([]) - scf.YieldOp([]) - scf.YieldOp([]) - - # Full-grid zero-init: int4 stores over M * H * sizeof(bf16). - with ir.InsertionPoint(sort_if.else_block): - zero_vec = vector.from_elements(vec4_i32, [c0_i32, c0_i32, c0_i32, c0_i32]) - m_idx = ArithValue(i32_m).index_cast(T.index) - total_vecs = m_idx * arith.constant((MODEL_DIM * 2) // 16, index=True) - zero_bx = bx - arith.index(1) - gtid = zero_bx * arith.constant(threads, index=True) + tx - step = arith.constant(INLINE_ZERO_CTAS * threads, index=True) - zero_loop = scf.ForOp(gtid, total_vecs, step) - with ir.InsertionPoint(zero_loop.body): - vi = zero_loop.induction_variable - elem_i32 = vi * arith.constant(4, index=True) - _global_store_vec4_i32(output_ptr, elem_i32, zero_vec, nontemporal=True) - scf.YieldOp([]) - scf.YieldOp([]) - - @flyc.jit - def launch_sort_zero_init( - topk_ids: fx.Pointer, - topk_weight: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - reverse_sorted: fx.Pointer, - sorted_weights: fx.Pointer, - masked_m: fx.Pointer, - m_indices: fx.Pointer, - atomic_output: fx.Pointer, - m: fx.Int32, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - sort_zero_init( - topk_ids, - topk_weight, - sorted_token_ids, - sorted_expert_ids, - cumsum_tensor, - reverse_sorted, - sorted_weights, - masked_m, - m_indices, - atomic_output, - m, - ).launch( - grid=(INLINE_ZERO_CTAS + 1, 1, 1), - block=(threads, 1, 1), - stream=stream, - ) - - return launch_sort_zero_init - - -def kimi_mxfp4_sort_zero_init_bm16( - topk_ids: torch.Tensor, - topk_weight: torch.Tensor, - *, - m: int | None = None, - max_sorted: int | None = None, - atomic_output: torch.Tensor | None = None, -) -> SmallMxfp4SortBuffers: - """Run the fixed Kimi BM16 inline-quant prologue in FlyDSL.""" - - if m is None: - m = int(topk_ids.shape[0]) - if m not in SUPPORTED_SMALL_MS: - raise ValueError(f"BM16 small path supports M in {SUPPORTED_SMALL_MS}, got {m}") - if topk_ids.shape != (m, TOPK): - raise ValueError(f"expected topk_ids shape {(m, TOPK)}, got {tuple(topk_ids.shape)}") - if topk_weight.shape != (m, TOPK): - raise ValueError(f"expected topk_weight shape {(m, TOPK)}, got {tuple(topk_weight.shape)}") - - device = topk_ids.device - if max_sorted is None: - max_sorted = mxfp4_small_max_sorted(m, BM16) - sorted_token_ids = torch.empty((max_sorted,), device=device, dtype=torch.int32) - sorted_expert_ids = torch.empty((max_sorted // BM16,), device=device, dtype=torch.int32) - cumsum_tensor = torch.empty((1,), device=device, dtype=torch.int32) - reverse_sorted = torch.empty((m * TOPK,), device=device, dtype=torch.int32) - sorted_weights = torch.empty((max_sorted,), device=device, dtype=torch.float32) - masked_m = torch.empty((EXPERTS,), device=device, dtype=torch.int32) - m_indices = torch.empty((max_sorted,), device=device, dtype=torch.int32) - if atomic_output is None: - atomic_output = torch.empty((m, MODEL_DIM), device=device, dtype=torch.bfloat16) - elif atomic_output.shape != (m, MODEL_DIM): - raise ValueError( - f"expected atomic_output shape {(m, MODEL_DIM)}, got {tuple(atomic_output.shape)}" - ) - - args = ( - _ptr_view_safe(topk_ids.contiguous().view(-1)), - _ptr_view_safe(topk_weight.contiguous().view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(reverse_sorted.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(masked_m.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(atomic_output.view(-1)), - int(m), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_sort_zero_init_bm16(), args) - - buffers = SmallMxfp4SortBuffers( - sorted_token_ids=sorted_token_ids, - sorted_expert_ids=sorted_expert_ids, - cumsum_tensor=cumsum_tensor, - reverse_sorted=reverse_sorted, - sorted_weights=sorted_weights, - masked_m=masked_m, - m_indices=m_indices, - atomic_output=atomic_output, - max_sorted=max_sorted, - ) - _record_current_stream(topk_ids, topk_weight, buffers) - return buffers - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm1_inline_bm16(): - """Compile FlyDSL BM16 inline-quant GEMM1. - - This is the fixed-shape port target for - ``mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT``. - """ - - tile_m = BM16 - tile_n = 256 - tile_k = 256 - total_threads = 256 - num_n_blocks = (2 * INTER_DIM) // tile_n - max_sorted = mxfp4_small_max_sorted(128, BM16) - - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = tile_k // 128 - num_k_tiles = MODEL_DIM // tile_k - k_stages = 2 - a_stages = 3 - a_elem_vec_pack = 2 - eff_lds_stride = tile_k // a_elem_vec_pack - single_x_bytes = tile_m * eff_lds_stride - lds_x_bytes = a_stages * single_x_bytes - lds_scale_bytes = num_k_tiles * 256 - lds_acc_bytes = tile_m * tile_n * 4 - - hidden_max_nbytes = 128 * MODEL_DIM * 2 - w_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 2) - w_scale_nbytes = EXPERTS * (2 * INTER_DIM) * (MODEL_DIM // 32) - expert_nbytes = (max_sorted // BM16) * 4 - m_indices_nbytes = max_sorted * 4 - numids_nbytes = 4 - out_q_nbytes = max_sorted * (INTER_DIM // 2) - out_scale_nbytes = (max_sorted // BM16) * 128 * 4 - - b_kpack_bytes = 16 - b_kpack_elems = b_kpack_bytes - b_c_k = MODEL_DIM // 2 - b_c_k0 = b_c_k // 64 - b_stride_nlane = b_kpack_elems - b_stride_klane = 16 * b_stride_nlane - b_stride_k0 = 4 * b_stride_klane - b_stride_n0 = b_c_k0 * b_stride_k0 - expert_b_stride = ((2 * INTER_DIM) // 16) * b_stride_n0 - - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = ((MODEL_DIM // 32) // 4 // 2) * 64 - k_bs_per_expert_dw = (((2 * INTER_DIM) // 16) // 2) * k_bs_stride_n0_dw - k_out_as_per_chunk_dw = ((INTER_DIM // 32) // 4 // 2) * 64 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_gemm1") - lds_offset = allocator._align(allocator.ptr, 16) - lds_scale_offset = lds_offset + lds_x_bytes - allocator.ptr = lds_offset + max(lds_x_bytes + lds_scale_bytes, lds_acc_bytes) - - module_name = "flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v13_knownblock" - - @flyc.kernel(name=module_name, known_block_size=[total_threads, 1, 1]) - def gemm1_inline( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_hidden: fx.Pointer, - arg_w: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_expert_ids: fx.Pointer, - arg_m_indices: fx.Pointer, - arg_num_valid_ids: fx.Pointer, - i32_m: fx.Int32, - ): - i8 = T.i8 - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec1_i32 = T.vec(1, i32) - vec4_i32 = T.vec(4, i32) - vec2_bf16 = T.vec(2, T.bf16) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec4_f32 = T.vec(4, f32) - vec16_x = T.vec(16, T.f8) - - hidden_bytes_i64 = ( - ArithValue(arith.ExtSIOp(i64, _unwrap_val(i32_m)).result) - * arith.constant(MODEL_DIM * 2, type=i64) - ) - hidden_rsrc = _ptr_buffer_resource_dynamic(arg_hidden, hidden_bytes_i64) - out_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, out_q_nbytes) - out_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, out_scale_nbytes) - w_rsrc = _ptr_buffer_resource(arg_w, w_nbytes) - sw_rsrc = _ptr_buffer_resource(arg_w_scale, w_scale_nbytes) - expert_ptr = _extract_global_ptr(arg_expert_ids) - m_indices_ptr = _extract_global_ptr(arg_m_indices) - numids_ptr = _extract_global_ptr(arg_num_valid_ids) - - tx = gpu.thread_id("x") - by = gpu.block_id("x") - bx = gpu.block_id("y") - tx_i32 = arith.index_cast(i32, tx) - bx_m = bx * arith.constant(tile_m, index=True) - bx_m_i32 = arith.index_cast(i32, bx_m) - - num_valid_i32 = _global_load_i32(numids_ptr, 0) - num_valid_i32 = rocdl.readfirstlane(i32, num_valid_i32) - blk_valid = arith.cmpi(CmpIPredicate.ult, bx_m_i32, num_valid_i32) - expert_i32 = _global_load_i32(expert_ptr, bx) - expert_i32 = rocdl.readfirstlane(i32, expert_i32) - expert_idx = arith.index_cast(T.index, expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - do_gemm = arith.andi(blk_valid, exp_valid) - - base_ptr = allocator.get_base() - lds_x_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(lds_x_bytes,)).get() - lds_x_i32 = SmemPtr(base_ptr, lds_offset, T.i32, shape=(lds_x_bytes // 4,)).get() - lds_scale_i32 = SmemPtr( - base_ptr, - lds_scale_offset, - T.i32, - shape=(lds_scale_bytes // 4,), - ).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, eff_lds_stride) - layout_lds = fx.make_layout(shape_lds, fx.make_stride(eff_lds_stride, 1)) - k_blocks16 = arith.constant(eff_lds_stride // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - wave_i32 = arith.index_cast(i32, wave_id) - lane_i32 = arith.index_cast(i32, lane_id) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - n_tile_base = wave_id * arith.constant(n_per_wave, index=True) - by_n = by * arith.constant(tile_n, index=True) - expert_b_base = expert_idx * arith.constant(expert_b_stride, index=True) - - r_in_chunk = wave_id * arith.constant(4, index=True) + lane_div_16 - r_in_chunk_i32 = arith.index_cast(i32, r_in_chunk) - row_token = _global_load_i32(m_indices_ptr, bx_m_i32 + r_in_chunk_i32) - row_token_idx = ArithValue(row_token).index_cast(T.index) - - n_blk_list = [] - n_intra_list = [] - for ni in range_constexpr(num_acc_n): - global_n = by_n + n_tile_base + arith.constant(ni * 16, index=True) + lane_mod_16 - n_blk_list.append(global_n // arith.constant(16, index=True)) - n_intra_list.append(global_n % arith.constant(16, index=True)) - - def load_b_packs_k64(k_tile: int, ku: int, ni: int): - k0 = arith.constant(k_tile * k_unroll + ku, index=True) - idx_pack = ( - expert_b_base - + n_blk_list[ni] * arith.constant(b_stride_n0, index=True) - + k0 * arith.constant(b_stride_k0, index=True) - + lane_div_16 * arith.constant(b_stride_klane, index=True) - + n_intra_list[ni] * arith.constant(b_stride_nlane, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - w_rsrc, - idx_pack, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=2, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(k_tile: int): - b_tile = [] - for ku in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for ni in range_constexpr(num_acc_n): - b0, b1 = load_b_packs_k64(k_tile, ku, ni) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - def load_a_scale_tile(k_tile: int): - scale_idx = arith.constant(k_tile * 64, index=True) + lane_word - s = vector.extract( - vector.load_op(T.vec(1, i32), lds_scale_i32, [scale_idx]), - static_position=[0], - dynamic_position=[], - ) - return vector.from_elements(T.vec(1, i32), [s]) - - def load_b_scale_tile(k_tile: int): - b_scale_tile = [] - mni_base = by * arith.constant(tile_n // 16 // 2, index=True) - mni_base = mni_base + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - for ni in range_constexpr(num_acc_n // 2): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(ni, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(k_tile * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(sw_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) - b_scale_tile.append(vector.from_elements(T.vec(1, i32), [s])) - return b_scale_tile - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c23_i32 = arith.constant(23, type=i32) - c254_i32 = arith.constant(254, type=i32) - cffff_i32 = arith.constant(0xFFFF, type=i32) - c7fff_i32 = arith.constant(0x7FFF, type=i32) - c7fff7fff_i32 = arith.constant(0x7FFF7FFF, type=i32) - chi_mask_i32 = arith.constant(-65536, type=i32) - c0x200000_i32 = arith.constant(0x200000, type=i32) - c64_i32 = arith.constant(64, type=i32) - c0_f32 = arith.constant(0.0, type=f32) - c1_f32 = arith.constant(1.0, type=f32) - c025_f32 = arith.constant(0.25, type=f32) - neg_log2e = arith.constant(-1.4426950408889634, type=f32) - - def _max_u32(a, b): - return arith.select(arith.cmpi(CmpIPredicate.ugt, b, a), b, a) - - def _raw(v): - return v.ir_value() if hasattr(v, "ir_value") else v - - def _pkmax_u16(a, b): - return ArithValue( - llvm.inline_asm( - i32, - [_raw(a), _raw(b)], - "v_pk_max_u16 $0, $1, $2", - "=v,v,v", - has_side_effects=False, - ) - ) - - def _max_u32_dpp_xor1(src): - peer = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.update.dpp.i32", - [ - _raw(src), - _raw(src), - arith.constant(0xB1, type=i32), - arith.constant(0xF, type=i32), - arith.constant(0xF, type=i32), - arith.constant(True, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - ) - return _max_u32(src, peer) - - def _max_u32_dpp_xor2(src): - peer = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.update.dpp.i32", - [ - _raw(src), - _raw(src), - arith.constant(0x4E, type=i32), - arith.constant(0xF, type=i32), - arith.constant(0xF, type=i32), - arith.constant(True, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - ) - return _max_u32(src, peer) - - def inline_quant_load_half(k_tile: int, b128: int): - lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) - lane_mod4 = lane_id % arith.constant(4, index=True) - v_byte_off = ( - row_token_idx * arith.constant(MODEL_DIM * 2, index=True) - + arith.constant(k_tile * tile_k * 2 + b128 * 256, index=True) - + lane_div4 * arith.constant(64, index=True) - + lane_mod4 * arith.constant(16, index=True) - ) - h16 = _buffer_load_vec( - buffer_ops, - vector, - hidden_rsrc, - v_byte_off, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=0, - ) - return vector.bitcast(vec4_i32, h16) - - def inline_quant_finish_half(a_slot: int, k_tile: int, b128: int, h4): - lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) - lane_mod4 = lane_id % arith.constant(4, index=True) - hm = [] - bf16_pairs = [] - for j in range_constexpr(4): - w = ArithValue(vector.extract(h4, static_position=[j], dynamic_position=[])) - hm.append(w & c7fff7fff_i32) - bf16_pairs.append( - vector.bitcast( - vec2_bf16, - vector.from_elements(vec1_i32, [w]), - ) - ) - - m01 = _pkmax_u16(hm[0], hm[1]) - m23 = _pkmax_u16(hm[2], hm[3]) - m0123 = _pkmax_u16(m01, m23) - lo_abs = m0123 & cffff_i32 - hi_abs = m0123 >> c16_i32 - local_amax = _max_u32(lo_abs, hi_abs) - local_amax = _max_u32_dpp_xor1(local_amax) - local_amax = _max_u32_dpp_xor2(local_amax) - - f32bits = local_amax << c16_i32 - bexp = ((f32bits + c0x200000_i32) >> c23_i32) & arith.constant(255, type=i32) - e8m0 = bexp - c2_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.slt, e8m0, c0_i32), c0_i32, e8m0) - e8m0 = arith.select(arith.cmpi(CmpIPredicate.sgt, e8m0, c254_i32), c254_i32, e8m0) - quant_scale = (e8m0 << c23_i32).bitcast(f32) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.bf16", - [ - packed, - bf16_pairs[pair], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - kb_in_kt = arith.constant(b128 * 4, index=True) + lane_div4 - col_sw = swizzle_xor16(r_in_chunk, kb_in_kt * arith.constant(16, index=True), k_blocks16) - byte_idx = crd2idx( - [r_in_chunk, col_sw + lane_mod4 * arith.constant(4, index=True)], - layout_lds, - ) - word_idx = byte_idx // arith.constant(4, index=True) - word_idx = word_idx + arith.constant(a_slot * (single_x_bytes // 4), index=True) - vector.store( - vector.from_elements(T.vec(1, i32), [packed]), - lds_x_i32, - [word_idx], - alignment=4, - ) - return e8m0 - - def inline_quant_write_scale(k_tile: int, e8m0_0, e8m0_1): - lane_div4 = (lane_id // arith.constant(4, index=True)) % arith.constant(4, index=True) - lane_tgt = lane_div4 * arith.constant(16, index=True) + r_in_chunk - scale_idx = arith.constant(k_tile * 64, index=True) + lane_tgt - scale_accum = e8m0_0 | (e8m0_1 << c16_i32) - vector.store( - vector.from_elements(T.vec(1, i32), [scale_accum]), - lds_scale_i32, - [scale_idx], - alignment=4, - ) - - def inline_quant_tile(k_tile: int, a_slot: int): - h4_0 = inline_quant_load_half(k_tile, 0) - e8m0_0 = inline_quant_finish_half(a_slot, k_tile, 0, h4_0) - h4_1 = inline_quant_load_half(k_tile, 1) - e8m0_1 = inline_quant_finish_half(a_slot, k_tile, 1, h4_1) - inline_quant_write_scale(k_tile, e8m0_0, e8m0_1) - - def lds_load_packs_k64(curr_row_a_lds, col_base, a_slot: int): - col_base_swz = swizzle_xor16(curr_row_a_lds, col_base, k_blocks16) - idx_a16 = crd2idx([curr_row_a_lds, col_base_swz], layout_lds) - idx_a16 = idx_a16 + arith.constant(a_slot * single_x_bytes, index=True) - loaded_a16 = vector.load_op(vec16_x, lds_x_i8, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded_a16) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - c0_i64 = arith.constant(0, type=i64) - cbsz = 4 - blgp = 4 - - def load_a128_tile(a_slot: int): - a128_vals = [] - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 64, index=True) - a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) - a128_vals.append(pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64)) - return a128_vals - - def compute_tile(acc_in, b_tile, a_scale, b_scale, a_slot: int): - acc_list = list(acc_in) - a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) - for k_idx in range_constexpr(k_unroll): - col_base = col_offset_base + arith.constant(k_idx * 64, index=True) - a0, a1 = lds_load_packs_k64(row_a_lds, col_base, a_slot) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - b_packs0, b_packs1 = b_tile[k_idx] - for ni in range_constexpr(num_acc_n // 2): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(2): - ni_idx = ni * 2 + inxdl - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_list[ni_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[ni_idx], - cbsz, - blgp, - k_idx * 2, - a_scale_val, - k_idx * 2 + inxdl, - b_scale_val, - ], - ) - return acc_list - - def compute_tile_prefetch_b(acc_in, b_tile, a128_vals, a_scale, b_scale, next_k_tile: int): - acc_list = list(acc_in) - a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) - next_b_tile = [] - for k_idx in range_constexpr(k_unroll): - next_b_tile.append(([], [])) - - for ni in range_constexpr(num_acc_n // 2): - b_scale_i32 = b_scale[ni] - b_scale_val = vector.extract(b_scale_i32, static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(2): - ni_idx = ni * 2 + inxdl - rocdl.sched_barrier(0) - rocdl.s_setprio(1) - for k_idx in range_constexpr(k_unroll): - b_packs0, b_packs1 = b_tile[k_idx] - b0 = b_packs0[ni_idx] - b1 = b_packs1[ni_idx] - b128 = pack_i64x4_to_i32x8(b0, b1, c0_i64, c0_i64) - acc_list[ni_idx] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128_vals[k_idx], - b128, - acc_list[ni_idx], - cbsz, - blgp, - k_idx * 2, - a_scale_val, - k_idx * 2 + inxdl, - b_scale_val, - ], - ) - rocdl.s_setprio(0) - rocdl.sched_barrier(0) - for k_idx in range_constexpr(k_unroll): - next_b0, next_b1 = load_b_packs_k64(next_k_tile, k_idx, ni_idx) - next_b_tile[k_idx][0].append(next_b0) - next_b_tile[k_idx][1].append(next_b1) - rocdl.sched_barrier(0) - - return acc_list, next_b_tile - - def _fmax_num(a, b): - return ArithValue(arith.MaxNumFOp(arith._to_raw(a), arith._to_raw(b)).result) - - def _fmax_dpp_xor1(src): - src_i32 = src.bitcast(i32) - peer_i32 = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.update.dpp.i32", - [ - _raw(src_i32), - _raw(src_i32), - arith.constant(0xB1, type=i32), - arith.constant(0xF, type=i32), - arith.constant(0xF, type=i32), - arith.constant(True, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - ) - return _fmax_num(src, peer_i32.bitcast(f32)) - - def _fmax_dpp_xor2(src): - src_i32 = src.bitcast(i32) - peer_i32 = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.update.dpp.i32", - [ - _raw(src_i32), - _raw(src_i32), - arith.constant(0x4E, type=i32), - arith.constant(0xF, type=i32), - arith.constant(0xF, type=i32), - arith.constant(True, type=ir.IntegerType.get_signless(1)), - ], - [], - [], - ) - ) - return _fmax_num(src, peer_i32.bitcast(f32)) - - def _silu_mul(g, u): - t = g * neg_log2e - emu = llvm.call_intrinsic(f32, "llvm.amdgcn.exp2.f32", [t], [], []) - den = c1_f32 + emu - sig = llvm.call_intrinsic(f32, "llvm.amdgcn.rcp.f32", [den], [], []) - return g * sig * u - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * num_acc_n - b_stages = [] - b_scale_stages = [] - for k_tile in range_constexpr(k_stages): - inline_quant_tile(k_tile, k_tile) - b_stages.append(load_b_tile(k_tile)) - b_scale_stages.append(load_b_scale_tile(k_tile)) - - for offset in range_constexpr(0, num_k_tiles - k_stages): - read_slot = offset % a_stages - slot_b = offset % k_stages - next_k_tile = offset + k_stages - write_slot = next_k_tile % a_stages - _barrier(lgkmcnt=0) - a128_vals = load_a128_tile(read_slot) - a_scale = load_a_scale_tile(offset) - h4_0 = inline_quant_load_half(next_k_tile, 0) - h4_1 = inline_quant_load_half(next_k_tile, 1) - rocdl.sched_barrier(0) - acc, next_b_tile = compute_tile_prefetch_b( - acc, - b_stages[slot_b], - a128_vals, - a_scale, - b_scale_stages[slot_b], - next_k_tile, - ) - b_scale_stages[slot_b] = load_b_scale_tile(next_k_tile) - e8m0_0 = inline_quant_finish_half(write_slot, next_k_tile, 0, h4_0) - e8m0_1 = inline_quant_finish_half(write_slot, next_k_tile, 1, h4_1) - inline_quant_write_scale(next_k_tile, e8m0_0, e8m0_1) - b_stages[slot_b] = next_b_tile - - for tail in range_constexpr(0, k_stages): - k_tile = num_k_tiles - k_stages + tail - read_slot = k_tile % a_stages - slot_b = k_tile % k_stages - _barrier(lgkmcnt=0) - a_scale = load_a_scale_tile(k_tile) - acc = compute_tile( - acc, - b_stages[slot_b], - a_scale, - b_scale_stages[slot_b], - read_slot, - ) - - gpu.barrier() - - for j in range_constexpr(num_acc_n): - j_local = j // 2 - col_local = ( - wave_id * arith.constant(32, index=True) - + arith.constant(j_local * 16, index=True) - + lane_mod_16 - ) - if const_expr(j % 2 == 1): - col_local = col_local + arith.constant(128, index=True) - row_base = lane_div_16 * arith.constant(4, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx / arith.constant(16, index=True) - n_lane = tx % arith.constant(16, index=True) - wave_grp = n_lane / arith.constant(4, index=True) - kk = n_lane % arith.constant(4, index=True) - row_local = m_lane - result_vals = [] - local_max = c0_f32 - for e in range_constexpr(8): - col_in_grp = kk * arith.constant(8, index=True) + arith.constant(e, index=True) - gate_col = wave_grp * arith.constant(32, index=True) + col_in_grp - up_col = gate_col + arith.constant(128, index=True) - gate_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + gate_col], - ), - static_position=[0], - dynamic_position=[], - ) - up_v = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_local * arith.constant(tile_n, index=True) + up_col], - ), - static_position=[0], - dynamic_position=[], - ) - res = _silu_mul(gate_v, up_v) - result_vals.append(res) - abs_v = llvm.call_intrinsic(f32, "llvm.fabs.f32", [res], [], []) - if const_expr(e == 0): - local_max = abs_v - else: - local_max = _fmax_num(local_max, abs_v) - - local_max = _fmax_dpp_xor1(local_max) - local_max = _fmax_dpp_xor2(local_max) - - amax_i32 = local_max.bitcast(i32) - quant_scale = (amax_i32 + c0x200000_i32).bitcast(f32) * c025_f32 - sb_raw = quant_scale.bitcast(i32) >> c23_i32 - e8m0 = arith.select(arith.cmpi(CmpIPredicate.ugt, sb_raw, c254_i32), c254_i32, sb_raw) - - packed = c0_i32 - for pair in range_constexpr(4): - packed = ArithValue( - llvm.call_intrinsic( - i32, - "llvm.amdgcn.cvt.scalef32.pk.fp4.f32", - [ - packed, - result_vals[2 * pair], - result_vals[2 * pair + 1], - quant_scale, - arith.constant(pair, type=i32), - ], - [], - [], - ) - ) - - row_i32 = arith.index_cast(i32, bx_m + row_local) - byte_pos = ( - by * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + kk * arith.constant(4, index=True) - ) - byte_pos_i32 = arith.index_cast(i32, byte_pos) - q_word_off = row_i32 * arith.constant((INTER_DIM // 2) // 4, type=i32) + (byte_pos_i32 >> c2_i32) - buffer_ops.buffer_store(packed, out_q_rsrc, q_word_off, cache_modifier=4) - - if_scale = scf.IfOp(arith.cmpi(CmpIPredicate.eq, kk, arith.constant(0, index=True))) - with ir.InsertionPoint(if_scale.then_block): - ku = by >> arith.constant(1, index=True) - ikxdl = by % arith.constant(2, index=True) - dword_off = ( - bx * arith.constant(k_out_as_per_chunk_dw, index=True) - + ku * arith.constant(64, index=True) - + wave_grp * arith.constant(16, index=True) - + m_lane - ) - e8m0_i8 = arith.TruncIOp(i8, e8m0).result - byte_off = arith.index_cast( - i32, - dword_off * arith.constant(4, index=True) - + ikxdl * arith.constant(2, index=True), - ) - buffer_ops.buffer_store( - e8m0_i8, - out_scale_rsrc, - byte_off, - cache_modifier=4, - offset_is_bytes=True, - ) - scf.YieldOp([]) - - if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm1_inline( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - hidden: fx.Pointer, - w: fx.Pointer, - w_scale: fx.Pointer, - expert_ids: fx.Pointer, - m_indices: fx.Pointer, - num_valid_ids: fx.Pointer, - m: fx.Int32, - m_blocks: fx.Int32, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm1_inline( - inter_sorted_quant, - inter_sorted_scale, - hidden, - w, - w_scale, - expert_ids, - m_indices, - num_valid_ids, - m, - ).launch( - grid=(num_n_blocks, m_blocks, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm1_inline - - -def kimi_mxfp4_gemm1_inline_bm16( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w1_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - m_indices: torch.Tensor, - cumsum_tensor: torch.Tensor, - *, - m: int | None = None, - inter_sorted_quant: torch.Tensor | None = None, - inter_sorted_shuffled_scale: torch.Tensor | None = None, -) -> tuple[torch.Tensor, torch.Tensor]: - """Run the local FlyDSL BM16 inline-quant GEMM1.""" - - if m is None: - m = int(hidden_states.shape[0]) - max_sorted = int(sorted_expert_ids.shape[0]) * BM16 - device = hidden_states.device - if inter_sorted_quant is None: - inter_sorted_quant = torch.empty((max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8) - if inter_sorted_shuffled_scale is None: - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = (inter_scale_rows + 31) // 32 * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), - device=device, - dtype=torch.uint8, - ) - - if w1.element_size() == 1 and w1.dtype != torch.uint8: - w1 = w1.view(torch.uint8) - args = ( - _ptr_view_safe(inter_sorted_quant.view(-1)), - _ptr_view_safe(inter_sorted_shuffled_scale.view(-1)), - _ptr_view_safe(hidden_states.view(-1)), - _ptr_view_safe(w1.view(-1)), - _ptr_view_safe(w1_scale.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(m_indices.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - int(m), - int(sorted_expert_ids.shape[0]), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm1_inline_bm16(), args) - _record_current_stream( - hidden_states, - w1, - w1_scale, - sorted_expert_ids, - m_indices, - cumsum_tensor, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - return inter_sorted_quant, inter_sorted_shuffled_scale - - -@functools.lru_cache(maxsize=1) -def compile_kimi_mxfp4_gemm2_atomic_bm16(): - """Compile FlyDSL BM16 atomic GEMM2. - - Fixed-shape port target: - ``mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT``. - """ - - tile_m = BM16 - tile_n = 256 - tile_k = 256 - total_threads = 256 - num_n_blocks = MODEL_DIM // tile_n - max_sorted = mxfp4_small_max_sorted(128, BM16) - - num_waves = 4 - n_per_wave = tile_n // num_waves - num_acc_n = n_per_wave // 16 - k_unroll = INTER_DIM // tile_k - k_half = INTER_DIM // 2 - single_a_bytes = tile_m * (tile_k // 2) - lds_a_bytes = k_unroll * single_a_bytes - lds_acc_bytes = tile_m * tile_n * 4 - - a_q_nbytes = max_sorted * k_half - k_as_c_k1 = (INTER_DIM // 32) // 4 // 2 - k_as_per_chunk_dw = k_as_c_k1 * 64 - a_scale_nbytes = (max_sorted // BM16) * k_as_per_chunk_dw * 4 - b_q_nbytes = EXPERTS * MODEL_DIM * k_half - k_bs_c_n1 = MODEL_DIM // 16 // 2 - k_bs_c_k1 = (INTER_DIM // 32) // 4 // 2 - k_bs_stride_k0_dw = 64 - k_bs_stride_n0_dw = k_bs_c_k1 * 64 - k_bs_per_expert_dw = k_bs_c_n1 * k_bs_stride_n0_dw - b_scale_nbytes = EXPERTS * k_bs_per_expert_dw * 4 - sorted_nbytes = max_sorted * 4 - out_nbytes = 128 * MODEL_DIM * 2 - - gpu_arch = get_hip_arch() - allocator = SmemAllocator(None, arch=gpu_arch, global_sym_name="smem_mxfp4_bm16_gemm2") - lds_offset = allocator._align(allocator.ptr, 16) - allocator.ptr = lds_offset + max(lds_a_bytes, lds_acc_bytes) - - module_name = "flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v11" - - @flyc.kernel(name=module_name) - def gemm2_atomic( - arg_inter_sorted_quant: fx.Pointer, - arg_inter_sorted_scale: fx.Pointer, - arg_w: fx.Pointer, - arg_w_scale: fx.Pointer, - arg_sorted_expert_ids: fx.Pointer, - arg_cumsum_tensor: fx.Pointer, - arg_sorted_token_ids: fx.Pointer, - arg_sorted_weights: fx.Pointer, - arg_out: fx.Pointer, - i32_m: fx.Int32, - ): - i32 = T.i32 - i64 = T.i64 - f32 = T.f32 - vec2_bf16 = T.vec(2, T.bf16) - vec2_i64 = T.vec(2, i64) - vec4_i64 = T.vec(4, i64) - vec8_i32 = T.vec(8, i32) - vec4_f32 = T.vec(4, f32) - vec16_x = T.vec(16, T.f8) - - a_q_rsrc = _ptr_buffer_resource(arg_inter_sorted_quant, a_q_nbytes) - a_scale_rsrc = _ptr_buffer_resource(arg_inter_sorted_scale, a_scale_nbytes) - b_q_rsrc = _ptr_buffer_resource(arg_w, b_q_nbytes) - b_scale_rsrc = _ptr_buffer_resource(arg_w_scale, b_scale_nbytes) - out_ptr = _extract_global_ptr(arg_out) - expert_ptr = _extract_global_ptr(arg_sorted_expert_ids) - cumsum_ptr = _extract_global_ptr(arg_cumsum_tensor) - sorted_token_ptr = _extract_global_ptr(arg_sorted_token_ids) - sorted_weights_ptr = _extract_global_ptr(arg_sorted_weights) - - tx = gpu.thread_id("x") - pid = gpu.block_id("x") - m_block_idx = pid // arith.constant(num_n_blocks, index=True) - n_block_idx = pid % arith.constant(num_n_blocks, index=True) - m_row = m_block_idx * arith.constant(tile_m, index=True) - - expert_i32 = _global_load_i32(expert_ptr, m_block_idx) - expert_i32 = rocdl.readfirstlane(i32, expert_i32) - expert_idx = arith.index_cast(T.index, expert_i32) - exp_valid = arith.cmpi(CmpIPredicate.ult, expert_i32, arith.constant(EXPERTS, type=i32)) - num_valid_i32 = _global_load_i32(cumsum_ptr, 0) - num_valid_i32 = rocdl.readfirstlane(i32, num_valid_i32) - m_row_i32 = arith.index_cast(i32, m_row) - blk_valid = arith.cmpi(CmpIPredicate.ult, m_row_i32, num_valid_i32) - do_gemm = arith.andi(exp_valid, blk_valid) - - base_ptr = allocator.get_base() - lds_a_i8 = SmemPtr(base_ptr, lds_offset, T.f8, shape=(lds_a_bytes,)).get() - lds_acc = SmemPtr(base_ptr, lds_offset, T.f32, shape=(tile_m * tile_n,)).get() - - shape_lds = fx.make_shape(tile_m, tile_k // 2) - layout_lds = fx.make_layout(shape_lds, fx.make_stride(tile_k // 2, 1)) - k_blocks16 = arith.constant((tile_k // 2) // 16, index=True) - layout_tx_wave_lane = fx.make_layout((4, 64), stride=(64, 1)) - layout_lane16 = fx.make_layout((4, 16), stride=(16, 1)) - coord_wl = idx2crd(tx, layout_tx_wave_lane) - wave_id = layout_get(coord_wl, 0) - lane_id = layout_get(coord_wl, 1) - wave_i32 = arith.index_cast(i32, wave_id) - lane_i32 = arith.index_cast(i32, lane_id) - coord_l16 = idx2crd(lane_id, layout_lane16) - lane_div_16 = layout_get(coord_l16, 0) - lane_mod_16 = layout_get(coord_l16, 1) - row_a_lds = lane_mod_16 - col_offset_base = lane_div_16 * arith.constant(16, index=True) - lane_word = lane_div_16 * arith.constant(16, index=True) + lane_mod_16 - - c0_i32 = arith.constant(0, type=i32) - c1_i32 = arith.constant(1, type=i32) - c2_i32 = arith.constant(2, type=i32) - c4_i32 = arith.constant(4, type=i32) - c8_i32 = arith.constant(8, type=i32) - c16_i32 = arith.constant(16, type=i32) - c64_i32 = arith.constant(64, type=i32) - c0_i64 = arith.constant(0, type=i64) - zero_i32 = arith.constant(0) - c0_f32 = arith.constant(0.0, type=f32) - - def load_a_to_lds(slot: int, kt: int): - row_off = lane_id // arith.constant(8, index=True) - lane_mod8 = lane_id % arith.constant(8, index=True) - lds_row_base = wave_id * arith.constant(8, index=True) - lds_row = lds_row_base + row_off - actual_row = m_row + lds_row - col_sw = swizzle_xor16( - lds_row, - lane_mod8 * arith.constant(16, index=True), - k_blocks16, - ) - global_off = ( - actual_row * arith.constant(k_half, index=True) - + arith.constant(kt * (tile_k // 2), index=True) - + col_sw - ) - byte_idx = ( - arith.constant(slot * single_a_bytes, index=True) - + crd2idx([lds_row_base, arith.index(0)], layout_lds) - ) - lds_addr = memref.extract_aligned_pointer_as_index(lds_a_i8) + byte_idx - lds_addr_i64 = arith.index_cast(i64, lds_addr) - lds_addr_i64 = rocdl.readfirstlane(i64, lds_addr_i64) - lds_ptr = llvm.inttoptr(ir.Type.parse("!llvm.ptr<3>"), lds_addr_i64) - rocdl.raw_ptr_buffer_load_lds( - a_q_rsrc, - lds_ptr, - arith.constant(16, type=i32), - arith.index_cast(i32, global_off), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - arith.constant(0, type=i32), - ) - - def guarded_load_a_to_lds(slot: int, kt: int): - if_wave = scf.IfOp(arith.cmpi(CmpIPredicate.ult, wave_i32, c2_i32)) - with ir.InsertionPoint(if_wave.then_block): - load_a_to_lds(slot, kt) - scf.YieldOp([]) - - def load_a_packs_from_lds(slot: int, k_idx: int): - col_base = col_offset_base + arith.constant(k_idx * 64, index=True) - col_sw = swizzle_xor16(row_a_lds, col_base, k_blocks16) - idx_a16 = ( - arith.constant(slot * single_a_bytes, index=True) - + crd2idx([row_a_lds, col_sw], layout_lds) - ) - loaded = vector.load_op(vec16_x, lds_a_i8, [idx_a16]) - a_i64x2 = vector.bitcast(vec2_i64, loaded) - return ( - vector.extract(a_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(a_i64x2, static_position=[1], dynamic_position=[]), - ) - - def pack_i64x4_to_i32x8(x0, x1, x2, x3): - v4 = vector.from_elements(vec4_i64, [x0, x1, x2, x3]) - return vector.bitcast(vec8_i32, v4) - - n_base = n_block_idx * arith.constant(tile_n, index=True) - n_wave_base = n_base + wave_id * arith.constant(n_per_wave, index=True) - b_load_s_bases = [] - for j in range_constexpr(num_acc_n): - col = n_wave_base + arith.constant(j * 16, index=True) - b_load_s_bases.append( - expert_idx * arith.constant(MODEL_DIM * k_half, index=True) - + col * arith.constant(k_half, index=True) - ) - - def load_b_pack(kt: int, k_idx: int, j: int): - v_off = ( - lane_div_16 * arith.constant(256, index=True) - + lane_mod_16 * arith.constant(16, index=True) - + arith.constant(kt * 2048 + k_idx * 1024, index=True) - ) - b16 = _buffer_load_vec( - buffer_ops, - vector, - b_q_rsrc, - b_load_s_bases[j] + v_off, - elem_type=T.i8, - vec_elems=16, - elem_bytes=1, - offset_in_bytes=True, - cache_modifier=2, - ) - b_i64x2 = vector.bitcast(vec2_i64, b16) - return ( - vector.extract(b_i64x2, static_position=[0], dynamic_position=[]), - vector.extract(b_i64x2, static_position=[1], dynamic_position=[]), - ) - - def load_b_tile(kt: int): - b_tile = [] - for k_idx in range_constexpr(k_unroll): - packs0 = [] - packs1 = [] - for j in range_constexpr(num_acc_n): - b0, b1 = load_b_pack(kt, k_idx, j) - packs0.append(b0) - packs1.append(b1) - b_tile.append((packs0, packs1)) - return b_tile - - def load_a_scale_kt(kt: int): - scale_idx = ( - m_block_idx * arith.constant(k_as_per_chunk_dw, index=True) - + arith.constant(kt * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(a_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) - return vector.from_elements(T.vec(1, i32), [s]) - - def load_b_scale_kt(kt: int): - mni_base = ( - n_block_idx * arith.constant(tile_n // 16 // 2, index=True) - + wave_id * arith.constant(n_per_wave // 16 // 2, index=True) - ) - vals = [] - for mw in range_constexpr(num_acc_n // 2): - scale_idx = ( - expert_idx * arith.constant(k_bs_per_expert_dw, index=True) - + (mni_base + arith.constant(mw, index=True)) - * arith.constant(k_bs_stride_n0_dw, index=True) - + arith.constant(kt * k_bs_stride_k0_dw, index=True) - + lane_word - ) - s = buffer_ops.buffer_load(b_scale_rsrc, scale_idx, vec_width=1, dtype=i32, cache_modifier=0) - vals.append(vector.from_elements(T.vec(1, i32), [s])) - return vals - - cbsz = 4 - blgp = 4 - - def compute_kt(acc_in, slot: int, kt: int, b_tile, a_scale, b_scale): - acc_list = list(acc_in) - a_scale_val = vector.extract(a_scale, static_position=[0], dynamic_position=[]) - for k_idx in range_constexpr(k_unroll): - a0, a1 = load_a_packs_from_lds(slot, k_idx) - a128 = pack_i64x4_to_i32x8(a0, a1, c0_i64, c0_i64) - b_packs0, b_packs1 = b_tile[k_idx] - for mni in range_constexpr(num_acc_n // 2): - b_scale_val = vector.extract(b_scale[mni], static_position=[0], dynamic_position=[]) - for inxdl in range_constexpr(2): - j = mni * 2 + inxdl - b128 = pack_i64x4_to_i32x8(b_packs0[j], b_packs1[j], c0_i64, c0_i64) - acc_list[j] = rocdl.mfma_scale_f32_16x16x128_f8f6f4( - vec4_f32, - [ - a128, - b128, - acc_list[j], - cbsz, - blgp, - k_idx * 2, - a_scale_val, - k_idx * 2 + inxdl, - b_scale_val, - ], - ) - return acc_list - - def _then_body(): - acc = [arith.constant_vector(0.0, vec4_f32)] * num_acc_n - - guarded_load_a_to_lds(0, 0) - guarded_load_a_to_lds(1, 1) - b0 = load_b_tile(0) - b1 = load_b_tile(1) - a_scale0 = load_a_scale_kt(0) - a_scale1 = load_a_scale_kt(1) - b_scale0 = load_b_scale_kt(0) - b_scale1 = load_b_scale_kt(1) - - rocdl.s_waitcnt(0) - gpu.barrier() - acc = compute_kt(acc, 0, 0, b0, a_scale0, b_scale0) - acc = compute_kt(acc, 1, 1, b1, a_scale1, b_scale1) - - for j in range_constexpr(num_acc_n): - col_local = wave_id * arith.constant(n_per_wave, index=True) - col_local = col_local + arith.constant(j * 16, index=True) + lane_mod_16 - row_base = lane_div_16 * arith.constant(4, index=True) - for v_i in range_constexpr(4): - row = row_base + arith.constant(v_i, index=True) - val = vector.extract(acc[j], static_position=[v_i], dynamic_position=[]) - vector.store( - vector.from_elements(T.vec(1, f32), [val]), - lds_acc, - [row * arith.constant(tile_n, index=True) + col_local], - alignment=4, - ) - - gpu.barrier() - - m_lane = tx // arith.constant(32, index=True) - n_lane = tx % arith.constant(32, index=True) - col_start = n_lane * arith.constant(2, index=True) - col_start_i32 = arith.index_cast(i32, col_start) - n_block_elem_i32 = arith.index_cast( - i32, - n_block_idx * arith.constant(tile_n, index=True), - ) - - for mr in range_constexpr(BM16 // 8): - row_in_block = arith.constant(mr * 8, index=True) + m_lane - sorted_pos = m_row + row_in_block - sorted_pos_i32 = arith.index_cast(i32, sorted_pos) - packed = _global_load_i32(sorted_token_ptr, sorted_pos) - token_id = packed & arith.constant(0x00FFFFFF, type=i32) - token_ok = arith.cmpi(CmpIPredicate.ult, token_id, i32_m) - if_token = scf.IfOp(token_ok) - with ir.InsertionPoint(if_token.then_block): - weight = _global_load_f32(sorted_weights_ptr, sorted_pos) - for s_idx in range_constexpr(4): - lds_col = ( - col_start - + arith.constant(s_idx * 64, index=True) - ) - v0 = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [row_in_block * arith.constant(tile_n, index=True) + lds_col], - ), - static_position=[0], - dynamic_position=[], - ) - v1 = vector.extract( - vector.load_op( - T.vec(1, f32), - lds_acc, - [ - row_in_block * arith.constant(tile_n, index=True) - + lds_col - + arith.constant(1, index=True) - ], - ), - static_position=[0], - dynamic_position=[], - ) - b0 = arith.trunc_f(T.bf16, v0 * weight) - b1 = arith.trunc_f(T.bf16, v1 * weight) - frag = vector.from_elements(vec2_bf16, [b0, b1]) - elem_off = ( - token_id * arith.constant(MODEL_DIM, type=i32) - + n_block_elem_i32 - + col_start_i32 - + arith.constant(s_idx * 64, type=i32) - ) - byte_off = elem_off * c2_i32 - byte_off_i64 = arith.ExtSIOp(i64, arith._to_raw(byte_off)).result - atomic_ptr = buffer_ops.get_element_ptr( - out_ptr, - byte_offset=byte_off_i64, - elem_type=T.i8, - ) - frag_v = frag.ir_value() if hasattr(frag, "ir_value") else frag - llvm.AtomicRMWOp( - llvm.AtomicBinOp.fadd, - atomic_ptr, - frag_v, - llvm.AtomicOrdering.monotonic, - syncscope="agent", - alignment=4, - ) - scf.YieldOp([]) - - if_valid = scf.IfOp(do_gemm) - with ir.InsertionPoint(if_valid.then_block): - _then_body() - scf.YieldOp([]) - - @flyc.jit - def launch_gemm2_atomic( - inter_sorted_quant: fx.Pointer, - inter_sorted_scale: fx.Pointer, - w: fx.Pointer, - w_scale: fx.Pointer, - sorted_expert_ids: fx.Pointer, - cumsum_tensor: fx.Pointer, - sorted_token_ids: fx.Pointer, - sorted_weights: fx.Pointer, - out: fx.Pointer, - m: fx.Int32, - m_blocks: fx.Int32, - stream: fx.Stream, - ): - allocator.finalized = False - ctx = CompilationContext.get_current() - with ir.InsertionPoint(ctx.gpu_module_body): - allocator.finalize() - gemm2_atomic( - inter_sorted_quant, - inter_sorted_scale, - w, - w_scale, - sorted_expert_ids, - cumsum_tensor, - sorted_token_ids, - sorted_weights, - out, - m, - ).launch( - grid=(m_blocks * num_n_blocks, 1, 1), - block=(total_threads, 1, 1), - stream=stream, - ) - - return launch_gemm2_atomic - - -def kimi_mxfp4_gemm2_atomic_bm16( - inter_sorted_quant: torch.Tensor, - inter_sorted_shuffled_scale: torch.Tensor, - w2: torch.Tensor, - w2_scale: torch.Tensor, - sorted_expert_ids: torch.Tensor, - cumsum_tensor: torch.Tensor, - sorted_token_ids: torch.Tensor, - sorted_weights: torch.Tensor, - atomic_output: torch.Tensor, - *, - m: int, -) -> torch.Tensor: - """Run the local FlyDSL BM16 atomic GEMM2. - - ``atomic_output`` must already be zero-initialized. The fused BM16 sort - kernel in this file does that, matching the aiter small-M pipeline. - """ - - if w2.element_size() == 1 and w2.dtype != torch.uint8: - w2 = w2.view(torch.uint8) - args = ( - _ptr_view_safe(inter_sorted_quant.view(-1)), - _ptr_view_safe(inter_sorted_shuffled_scale.view(-1)), - _ptr_view_safe(w2.view(-1)), - _ptr_view_safe(w2_scale.view(-1)), - _ptr_view_safe(sorted_expert_ids.view(-1)), - _ptr_view_safe(cumsum_tensor.view(-1)), - _ptr_view_safe(sorted_token_ids.view(-1)), - _ptr_view_safe(sorted_weights.view(-1)), - _ptr_view_safe(atomic_output.view(-1)), - int(m), - int(sorted_expert_ids.shape[0]), - torch.cuda.current_stream(), - ) - _run_compiled(compile_kimi_mxfp4_gemm2_atomic_bm16(), args) - _record_current_stream( - inter_sorted_quant, - inter_sorted_shuffled_scale, - w2, - w2_scale, - sorted_expert_ids, - cumsum_tensor, - sorted_token_ids, - sorted_weights, - atomic_output, - ) - return atomic_output - - -def run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_gemm1_aiter_gemm2( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_weight: torch.Tensor, - topk_ids: torch.Tensor, - *, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """FlyDSL sort + FlyDSL GEMM1 + aiter GEMM2 validation harness.""" - - import aiter - - m = int(hidden_states.shape[0]) - if w2.element_size() == 1 and w2.dtype != torch.uint8: - w2 = w2.view(torch.uint8) - - sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_inline_bm16( - hidden_states, - w1, - w1_scale, - sort.sorted_expert_ids, - sort.m_indices, - sort.cumsum_tensor, - m=m, - ) - aiter.mxfp4_moe_gemm2_a4w4( - cumsum_tensor=sort.cumsum_tensor, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w3_shuffled_quant=w2, - w3_shuffled_scale=w2_scale, - sorted_token_ids=sort.sorted_token_ids, - sorted_expert_ids=sort.sorted_expert_ids, - sorted_weights=sort.sorted_weights, - flat_out=sort.atomic_output, - M_logical=m, - max_sorted=sort.max_sorted, - kernelName="mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT", - ) - _record_current_stream( - hidden_states, - w1, - w1_scale, - w2, - w2_scale, - topk_weight, - topk_ids, - sort, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - sort.atomic_output._flydsl_keepalive = ( - sort, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - return sort.atomic_output - - -def run_kimi_fp4_mxfp4_moe_small_bm16_all_flydsl( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_weight: torch.Tensor, - topk_ids: torch.Tensor, - *, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """FlyDSL-only BM16 small-M mxfp4 MoE path.""" - - m = int(hidden_states.shape[0]) - sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) - inter_sorted_quant, inter_sorted_shuffled_scale = kimi_mxfp4_gemm1_inline_bm16( - hidden_states, - w1, - w1_scale, - sort.sorted_expert_ids, - sort.m_indices, - sort.cumsum_tensor, - m=m, - ) - kimi_mxfp4_gemm2_atomic_bm16( - inter_sorted_quant, - inter_sorted_shuffled_scale, - w2, - w2_scale, - sort.sorted_expert_ids, - sort.cumsum_tensor, - sort.sorted_token_ids, - sort.sorted_weights, - sort.atomic_output, - m=m, - ) - _record_current_stream( - hidden_states, - w1, - w1_scale, - w2, - w2_scale, - topk_weight, - topk_ids, - sort, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - sort.atomic_output._flydsl_keepalive = ( - sort, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - return sort.atomic_output - - -def run_kimi_fp4_mxfp4_moe_small_bm16_flydsl_sort_aiter_gemm( - hidden_states: torch.Tensor, - w1: torch.Tensor, - w2: torch.Tensor, - topk_weight: torch.Tensor, - topk_ids: torch.Tensor, - *, - w1_scale: torch.Tensor, - w2_scale: torch.Tensor, -) -> torch.Tensor: - """Small-M BM16 pipeline harness. - - The prologue is the local FlyDSL port above. GEMM1/GEMM2 still call the - aiter BM16 mxfp4 kernels and are kept here only to validate the migrated - sort buffers before replacing those GEMMs with FlyDSL bodies. - """ - - import aiter - - m = int(hidden_states.shape[0]) - if hidden_states.shape != (m, MODEL_DIM): - raise ValueError( - f"expected hidden_states shape {(m, MODEL_DIM)}, got {tuple(hidden_states.shape)}" - ) - if w1.element_size() == 1 and w1.dtype != torch.uint8: - w1 = w1.view(torch.uint8) - if w2.element_size() == 1 and w2.dtype != torch.uint8: - w2 = w2.view(torch.uint8) - - sort = kimi_mxfp4_sort_zero_init_bm16(topk_ids, topk_weight, m=m) - device = hidden_states.device - max_sorted = sort.max_sorted - - a_quant = torch.empty((m, MODEL_DIM // 2), device=device, dtype=torch.uint8) - a_scale = torch.empty((m, MODEL_DIM // 32), device=device, dtype=torch.uint8) - a_scale_sorted_shuffled = torch.empty((0,), device=device, dtype=torch.uint8) - - inter_sorted_quant = torch.empty( - (max_sorted, INTER_DIM // 2), device=device, dtype=torch.uint8 - ) - inter_scale_cols = INTER_DIM // 32 - inter_scale_bytes = max_sorted * (1024 // 64) * 4 - inter_scale_rows = (inter_scale_bytes + inter_scale_cols - 1) // inter_scale_cols - inter_scale_rows = (inter_scale_rows + 31) // 32 * 32 - inter_sorted_shuffled_scale = torch.empty( - (inter_scale_rows, inter_scale_cols), device=device, dtype=torch.uint8 - ) - - aiter.mxfp4_moe_gemm1_a4w4( - cumsum_tensor=sort.cumsum_tensor, - a_quant=a_quant, - a_scale_sorted_shuffled=a_scale_sorted_shuffled, - w12_shuffled_quant=w1, - w12_shuffled_scale=w1_scale, - sorted_expert_ids=sort.sorted_expert_ids, - m_indices=sort.m_indices, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - hidden_states=hidden_states, - kernelName="mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT", - ) - - aiter.mxfp4_moe_gemm2_a4w4( - cumsum_tensor=sort.cumsum_tensor, - inter_sorted_quant=inter_sorted_quant, - inter_sorted_shuffled_scale=inter_sorted_shuffled_scale, - w3_shuffled_quant=w2, - w3_shuffled_scale=w2_scale, - sorted_token_ids=sort.sorted_token_ids, - sorted_expert_ids=sort.sorted_expert_ids, - sorted_weights=sort.sorted_weights, - flat_out=sort.atomic_output, - M_logical=m, - max_sorted=max_sorted, - kernelName="mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT", - ) - _record_current_stream( - hidden_states, - w1, - w1_scale, - w2, - w2_scale, - topk_weight, - topk_ids, - sort, - a_quant, - a_scale, - a_scale_sorted_shuffled, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - sort.atomic_output._flydsl_keepalive = ( - sort, - a_quant, - a_scale, - a_scale_sorted_shuffled, - inter_sorted_quant, - inter_sorted_shuffled_scale, - ) - return sort.atomic_output - -if __name__ == "__main__": - compile_kimi_mxfp4_sort_zero_init_bm16() diff --git a/profile_flydsl_16384.py b/profile_flydsl_16384.py deleted file mode 100644 index f1695513c..000000000 --- a/profile_flydsl_16384.py +++ /dev/null @@ -1,468 +0,0 @@ -import argparse -import statistics -import sys -from collections import defaultdict -from pathlib import Path - -from gpu_select import bind_empty_gpu_for_torch - -bind_empty_gpu_for_torch("profile_flydsl_16384") - -import torch -from torch.profiler import ProfilerActivity, profile - - -THIS_DIR = Path(__file__).resolve().parent -UP_AITER = Path("/root/up-aiter") -sys.path.insert(0, str(UP_AITER)) -sys.path.insert(0, str(THIS_DIR)) - -from bench_flydsl_16384 import ( # noqa: E402 - M, - SHAPE, - build_inputs, - build_weights, - make_runners, -) - - -# Profiler windows need to be longer than smoke tests for stable per-kernel -# averages, especially in graph mode where the interesting unit is one logical -# pipeline iteration inside the captured graph. -DEFAULT_PROFILE_WARMUP = 300 -DEFAULT_PROFILE_ITERS = 12 -DEFAULT_PROFILE_GRAPH_ITERS = 128 -DEFAULT_PROFILE_REPEAT = 31 -DEFAULT_PROFILE_MAX_RETRIES = 800 - - -def _is_cuda_event(evt) -> bool: - device_type = str(getattr(evt, "device_type", "")) - device_time = float(getattr(evt, "self_device_time_total", 0.0) or 0.0) - return device_time > 0.0 and "CUDA" in device_type.upper() - - -def _event_name(evt) -> str: - return getattr(evt, "name", None) or getattr(evt, "key", "") - - -def _profile_runner(fn, *, warmup: int, iters: int, trace_path: Path | None): - for _ in range(warmup): - fn() - torch.cuda.synchronize() - - with profile(activities=[ProfilerActivity.CUDA], record_shapes=False, acc_events=True) as prof: - for _ in range(iters): - fn() - torch.cuda.synchronize() - - if trace_path is not None: - trace_path.parent.mkdir(parents=True, exist_ok=True) - prof.export_chrome_trace(str(trace_path)) - - events = [ - (_event_name(evt), float(evt.self_device_time_total)) - for evt in prof.events() - if _is_cuda_event(evt) - ] - return events - - -def _capture_graph(fn, *, warmup: int, graph_iters: int): - side = torch.cuda.Stream() - side.wait_stream(torch.cuda.current_stream()) - with torch.cuda.stream(side): - for _ in range(warmup): - fn() - torch.cuda.current_stream().wait_stream(side) - torch.cuda.synchronize() - - graph = torch.cuda.CUDAGraph() - with torch.cuda.graph(graph): - for _ in range(graph_iters): - fn() - - graph.replay() - torch.cuda.synchronize() - return graph - - -def _profile_runner_graph( - fn, - *, - warmup: int, - graph_iters: int, - replays: int, - trace_path: Path | None, -): - graph = _capture_graph(fn, warmup=warmup, graph_iters=graph_iters) - - with profile(activities=[ProfilerActivity.CUDA], record_shapes=False, acc_events=True) as prof: - for _ in range(replays): - graph.replay() - torch.cuda.synchronize() - - if trace_path is not None: - trace_path.parent.mkdir(parents=True, exist_ok=True) - prof.export_chrome_trace(str(trace_path)) - - events = [ - (_event_name(evt), float(evt.self_device_time_total)) - for evt in prof.events() - if _is_cuda_event(evt) - ] - return events - - -def _split_by_iteration(events, iters: int): - if not events: - return [] - if len(events) % iters != 0: - return [] - per_iter = len(events) // iters - chunks = [] - for i in range(iters): - chunks.append(events[i * per_iter : (i + 1) * per_iter]) - return chunks - - -STAGE_NAMES = ( - "sort_count", - "sort_cumsum", - "sort_place_pad", - "quant", - "sort_scales", - "GEMM1", - "GEMM2", - "scatter_reduce", -) - - -def _median(values) -> float: - return float(statistics.median(values)) if values else 0.0 - - -def _ordered_rows(events, iters: int): - chunks = _split_by_iteration(events, iters) - total_us = sum(us for _, us in events) / iters if iters else 0.0 - if not chunks: - return None - - rows = [] - for idx in range(len(chunks[0])): - names = [chunk[idx][0] for chunk in chunks] - times = [chunk[idx][1] for chunk in chunks] - same_name = all(item == names[0] for item in names) - kernel = names[0] if same_name else "" - avg_us = sum(times) / len(times) - pct = 100.0 * avg_us / total_us if total_us else 0.0 - rows.append( - { - "idx": idx, - "avg_us": avg_us, - "pct": pct, - "kernel": kernel, - } - ) - return { - "events": events, - "total_us": total_us, - "kernel_calls_per_iter": len(chunks[0]), - "rows": rows, - } - - -def _print_ordered_report(name: str, events, iters: int, top: int | None): - report = _ordered_rows(events, iters) - total_us = sum(us for _, us in events) / iters if iters else 0.0 - print() - print(f"== {name} ==") - print(f"device_total_us_per_iter={total_us:.1f}") - - if report is None: - print(f"device_kernel_events={len(events)}") - print("warning=kernel sequence could not be evenly split by iteration") - return - - per_iter = report["kernel_calls_per_iter"] - print(f"device_kernel_calls_per_iter={per_iter}") - print("ordered kernels:") - print(f"{'idx':>3} {'avg_us':>9} {'pct':>6} kernel") - rows = report["rows"] - - rows_to_print = rows if top is None else rows[:top] - for row in rows_to_print: - print( - f"{row['idx']:3d} {row['avg_us']:9.1f} " - f"{row['pct']:5.1f}% {row['kernel']}" - ) - - if top is not None and len(rows) > top: - hidden_us = sum(row["avg_us"] for row in rows[top:]) - print(f"... hidden_tail_us={hidden_us:.1f}") - - grouped = defaultdict(lambda: [0, 0.0]) - for kernel, us in events: - item = grouped[kernel] - item[0] += 1 - item[1] += us - - print("grouped kernels:") - print(f"{'calls/it':>8} {'avg_us/it':>10} {'avg_us/call':>12} kernel") - grouped_rows = [] - for kernel, (count, total) in grouped.items(): - calls_per_iter = count / iters - avg_per_iter = total / iters - avg_per_call = total / count - grouped_rows.append((avg_per_iter, calls_per_iter, avg_per_call, kernel)) - grouped_rows.sort(reverse=True) - grouped_to_print = grouped_rows if top is None else grouped_rows[:top] - for avg_per_iter, calls_per_iter, avg_per_call, kernel in grouped_to_print: - print( - f"{calls_per_iter:8.1f} {avg_per_iter:10.1f} " - f"{avg_per_call:12.1f} {kernel}" - ) - - -def _collect_reports( - name: str, - fn, - *, - mode: str, - warmup: int, - iters: int, - graph_iters: int, - logical_iters: int, - repeat: int, - max_retries: int, - trace_dir: Path | None, - expected_kernel_calls: int | None, -): - reports = [] - attempts = 0 - max_attempts = repeat + max_retries - while len(reports) < repeat and attempts < max_attempts: - attempts += 1 - trace_path = None - if trace_dir is not None: - trace_path = trace_dir / f"profile_16384_{name}_sample{len(reports) + 1}.json.gz" - if mode == "graph": - events = _profile_runner_graph( - fn, - warmup=warmup, - graph_iters=graph_iters, - replays=iters, - trace_path=trace_path, - ) - else: - events = _profile_runner( - fn, - warmup=warmup, - iters=iters, - trace_path=trace_path, - ) - report = _ordered_rows(events, logical_iters) - if report is None: - print( - f"{name} sample attempt {attempts}: dropped " - f"(device_kernel_events={len(events)})" - ) - continue - if ( - expected_kernel_calls is not None - and report["kernel_calls_per_iter"] != expected_kernel_calls - ): - print( - f"{name} sample attempt {attempts}: dropped " - f"(kernels/iter={report['kernel_calls_per_iter']}, " - f"expected={expected_kernel_calls})" - ) - continue - reports.append(report) - print( - f"{name} sample {len(reports)}/{repeat}: " - f"device_total_us_per_iter={report['total_us']:.1f}, " - f"kernels/iter={report['kernel_calls_per_iter']}" - ) - if trace_path is not None: - print(f"trace={trace_path}") - - if len(reports) < repeat: - raise RuntimeError( - f"{name}: only collected {len(reports)} valid profiler samples " - f"after {attempts} attempts" - ) - return reports - - -def _summarize_reports(name: str, reports, top: int | None): - total_us = _median([report["total_us"] for report in reports]) - per_iter = reports[0]["kernel_calls_per_iter"] - rows = [] - for idx in range(per_iter): - values = [report["rows"][idx]["avg_us"] for report in reports] - kernels = [report["rows"][idx]["kernel"] for report in reports] - kernel = kernels[0] if all(item == kernels[0] for item in kernels) else "" - avg_us = _median(values) - rows.append( - { - "idx": idx, - "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", - "avg_us": avg_us, - "pct": 100.0 * avg_us / total_us if total_us else 0.0, - "kernel": kernel, - "min_us": min(values), - "max_us": max(values), - } - ) - - print() - print(f"== {name} median over {len(reports)} samples ==") - print(f"device_total_us_per_iter={total_us:.1f}") - print(f"device_kernel_calls_per_iter={per_iter}") - print(f"{'idx':>3} {'stage':<15} {'median_us':>10} {'range_us':>17} {'pct':>6} kernel") - rows_to_print = rows if top is None else rows[:top] - for row in rows_to_print: - range_text = f"{row['min_us']:.1f}..{row['max_us']:.1f}" - print( - f"{row['idx']:3d} {row['stage']:<15} {row['avg_us']:10.1f} " - f"{range_text:>17} {row['pct']:5.1f}% {row['kernel']}" - ) - if top is not None and len(rows) > top: - hidden_us = sum(row["avg_us"] for row in rows[top:]) - print(f"... hidden_tail_us={hidden_us:.1f}") - return {"name": name, "total_us": total_us, "rows": rows} - - -def _print_diff_report(base, candidate): - if len(base["rows"]) != len(candidate["rows"]): - print() - print("== kernel diff ==") - print("warning=runner kernel counts differ; ordered diff skipped") - return - - print() - print(f"== kernel diff: {candidate['name']} - {base['name']} ==") - print(f"{'stage':<15} {'base_us':>9} {'cand_us':>9} {'diff_us':>9} {'diff_pct':>9}") - for base_row, cand_row in zip(base["rows"], candidate["rows"]): - diff_us = cand_row["avg_us"] - base_row["avg_us"] - diff_pct = 100.0 * diff_us / base_row["avg_us"] if base_row["avg_us"] else 0.0 - print( - f"{base_row['stage']:<15} {base_row['avg_us']:9.1f} " - f"{cand_row['avg_us']:9.1f} {diff_us:9.1f} {diff_pct:8.1f}%" - ) - total_diff = candidate["total_us"] - base["total_us"] - total_pct = 100.0 * total_diff / base["total_us"] if base["total_us"] else 0.0 - print( - f"{'total':<15} {base['total_us']:9.1f} " - f"{candidate['total_us']:9.1f} {total_diff:9.1f} {total_pct:8.1f}%" - ) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--runners", - default="aiter_mxfp4_moe,local_mxfp4_all_flydsl", - help="comma-separated runner names from bench_flydsl_16384.py", - ) - parser.add_argument( - "--mode", - choices=("graph", "eager"), - default="graph", - help="profile CUDA/HIP graph replay by default; use eager for normal launch profiling", - ) - parser.add_argument("--warmup", type=int, default=DEFAULT_PROFILE_WARMUP) - parser.add_argument( - "--iters", - type=int, - default=DEFAULT_PROFILE_ITERS, - help="eager iterations, or graph replay count in graph mode", - ) - parser.add_argument( - "--graph-iters", - type=int, - default=DEFAULT_PROFILE_GRAPH_ITERS, - help="pipeline iterations captured inside each graph replay", - ) - parser.add_argument( - "--repeat", - type=int, - default=DEFAULT_PROFILE_REPEAT, - help="valid profiler samples to collect per runner", - ) - parser.add_argument( - "--max-retries", - type=int, - default=DEFAULT_PROFILE_MAX_RETRIES, - help="extra profiler attempts allowed when event sequences are incomplete", - ) - parser.add_argument( - "--expected-kernels", - type=int, - default=8, - help="expected device kernels per logical iteration; set 0 to disable", - ) - parser.add_argument("--top", type=int, default=None) - parser.add_argument( - "--trace-dir", - default=None, - help="optional directory for Chrome trace .json.gz files", - ) - args = parser.parse_args() - - device = torch.device("cuda") - print(f"GPU: {torch.cuda.get_device_name(0)}") - print( - f"M={M} NE={SHAPE.experts} H={SHAPE.model_dim} " - f"INTER={SHAPE.inter_dim} TOPK={SHAPE.topk}" - ) - if args.mode == "graph" and args.graph_iters <= 0: - raise ValueError("--graph-iters must be positive in graph mode") - if args.iters <= 0: - raise ValueError("--iters must be positive") - if args.repeat <= 0: - raise ValueError("--repeat must be positive") - if args.max_retries < 0: - raise ValueError("--max-retries must be non-negative") - - logical_iters = args.iters * args.graph_iters if args.mode == "graph" else args.iters - print( - f"mode={args.mode} warmup={args.warmup} " - f"iters={args.iters} graph_iters={args.graph_iters if args.mode == 'graph' else 0} " - f"logical_iters={logical_iters} repeat={args.repeat}" - ) - - weights = build_weights(SHAPE, device) - hidden, topk_ids, topk_weight = build_inputs(SHAPE, device) - runners = make_runners(hidden, topk_ids, topk_weight, weights) - - requested = [item.strip() for item in args.runners.split(",") if item.strip()] - unknown = [item for item in requested if item not in runners] - if unknown: - raise ValueError(f"unknown runners: {', '.join(unknown)}") - - trace_dir = Path(args.trace_dir) if args.trace_dir else None - summaries = [] - for name in requested: - reports = _collect_reports( - name, - runners[name], - mode=args.mode, - warmup=args.warmup, - iters=args.iters, - graph_iters=args.graph_iters, - logical_iters=logical_iters, - repeat=args.repeat, - max_retries=args.max_retries, - trace_dir=trace_dir, - expected_kernel_calls=args.expected_kernels or None, - ) - summaries.append(_summarize_reports(name, reports, args.top)) - - if len(summaries) >= 2: - _print_diff_report(summaries[0], summaries[1]) - - -if __name__ == "__main__": - main() diff --git a/profile_small_bm16.py b/profile_small_bm16.py deleted file mode 100644 index 064d47512..000000000 --- a/profile_small_bm16.py +++ /dev/null @@ -1,454 +0,0 @@ -import argparse -import statistics -from pathlib import Path - -import bench_small_bm16 as small -import bench as b -from torch.profiler import ProfilerActivity, profile - - -STAGE_NAMES = ("sort_zero_init", "GEMM1", "GEMM2") -# Default to a fast iteration preset. The final preset keeps the old long-run -# settings for handoff numbers. -PROFILE_PRESETS = { - "smoke": { - "warmup": 100, - "graph_iters": 32, - "replays": 1, - "repeat": 5, - "max_retries": 100, - "aggregation": "by-kernel", - }, - "quick": { - "warmup": 500, - "graph_iters": 64, - "replays": 2, - "repeat": 21, - "max_retries": 400, - "aggregation": "by-kernel", - }, - "final": { - "warmup": 3000, - "graph_iters": 128, - "replays": 4, - "repeat": 101, - "max_retries": 2000, - "aggregation": "by-kernel", - }, -} -DEFAULT_PROFILE_PRESET = "quick" - - -def _is_cuda_event(evt) -> bool: - device_type = str(getattr(evt, "device_type", "")) - device_time = float(getattr(evt, "self_device_time_total", 0.0) or 0.0) - return device_time > 0.0 and "CUDA" in device_type.upper() - - -def _event_name(evt) -> str: - return getattr(evt, "name", None) or getattr(evt, "key", "") - - -def _capture_graph(fn, *, warmup: int, graph_iters: int): - side = b.torch.cuda.Stream() - side.wait_stream(b.torch.cuda.current_stream()) - with b.torch.cuda.stream(side): - for _ in range(warmup): - fn() - b.torch.cuda.current_stream().wait_stream(side) - b.torch.cuda.synchronize() - - graph = b.torch.cuda.CUDAGraph() - with b.torch.cuda.graph(graph): - for _ in range(graph_iters): - fn() - - graph.replay() - b.torch.cuda.synchronize() - return graph - - -def _profile_runner_graph( - fn, - *, - warmup: int, - graph_iters: int, - replays: int, - trace_path: Path | None, -): - graph = _capture_graph(fn, warmup=warmup, graph_iters=graph_iters) - - with profile( - activities=[ProfilerActivity.CUDA], - record_shapes=False, - acc_events=True, - ) as prof: - for _ in range(replays): - graph.replay() - b.torch.cuda.synchronize() - - if trace_path is not None: - trace_path.parent.mkdir(parents=True, exist_ok=True) - prof.export_chrome_trace(str(trace_path)) - - return [ - (_event_name(evt), float(evt.self_device_time_total)) - for evt in prof.events() - if _is_cuda_event(evt) - ] - - -def _ordered_rows(events, logical_iters: int): - if not events or logical_iters <= 0 or len(events) % logical_iters != 0: - return None - - per_iter = len(events) // logical_iters - chunks = [ - events[i * per_iter : (i + 1) * per_iter] - for i in range(logical_iters) - ] - total_us = sum(us for _, us in events) / logical_iters - rows = [] - for idx in range(per_iter): - names = [chunk[idx][0] for chunk in chunks] - times = [chunk[idx][1] for chunk in chunks] - kernel = ( - names[0] - if all(name == names[0] for name in names) - else "" - ) - rows.append( - { - "idx": idx, - "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", - "avg_us": sum(times) / len(times), - "kernel": kernel, - "event_count": len(times), - } - ) - return { - "total_us": total_us, - "kernel_calls_per_iter": per_iter, - "rows": rows, - "aggregation": "ordered", - } - - -def _stage_rank(kernel: str, first_seen: int) -> tuple[int, int]: - lower = kernel.lower() - if "sort" in lower or "zero_init" in lower: - return 0, first_seen - if "gemm1" in lower or "mxfp4_moe_g1" in lower or "_g1_" in lower: - return 1, first_seen - if "gemm2" in lower or "mxfp4_moe_g2" in lower or "_g2_" in lower: - return 2, first_seen - return len(STAGE_NAMES) + first_seen, first_seen - - -def _by_kernel_rows(events, expected_kernels: int | None): - if not events: - return None - - buckets = {} - for first_seen, (name, us) in enumerate(events): - if name not in buckets: - buckets[name] = {"first_seen": first_seen, "times": []} - buckets[name]["times"].append(us) - - if expected_kernels is not None and len(buckets) != expected_kernels: - return None - - ordered = sorted( - buckets.items(), - key=lambda item: _stage_rank(item[0], item[1]["first_seen"]), - ) - rows = [] - total_us = 0.0 - for idx, (kernel, bucket) in enumerate(ordered): - times = bucket["times"] - avg_us = sum(times) / len(times) - total_us += avg_us - rows.append( - { - "idx": idx, - "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", - "avg_us": avg_us, - "kernel": kernel, - "event_count": len(times), - } - ) - - return { - "total_us": total_us, - "kernel_calls_per_iter": len(rows), - "rows": rows, - "aggregation": "by-kernel", - } - - -def _collect_reports( - m: int, - name: str, - fn, - *, - warmup: int, - graph_iters: int, - replays: int, - repeat: int, - max_retries: int, - expected_kernels: int | None, - trace_dir: Path | None, - aggregation: str, -): - logical_iters = graph_iters * replays - reports = [] - attempts = 0 - dropped = 0 - while len(reports) < repeat and attempts < repeat + max_retries: - attempts += 1 - trace_path = None - if trace_dir is not None: - trace_path = ( - trace_dir - / f"profile_small_bm16_M{m}_{name}_sample{len(reports) + 1}.json.gz" - ) - events = _profile_runner_graph( - fn, - warmup=warmup, - graph_iters=graph_iters, - replays=replays, - trace_path=trace_path, - ) - if aggregation == "ordered": - report = _ordered_rows(events, logical_iters) - elif aggregation == "by-kernel": - report = _by_kernel_rows(events, expected_kernels) - else: - raise ValueError(f"unknown aggregation mode: {aggregation}") - if report is None: - dropped += 1 - if dropped <= 3 or dropped % 25 == 0: - print( - f"M={m} {name}: dropped profiler sample {dropped} " - f"(attempt={attempts}, device_kernel_events={len(events)})", - flush=True, - ) - continue - if ( - expected_kernels is not None - and report["kernel_calls_per_iter"] != expected_kernels - ): - dropped += 1 - if dropped <= 3 or dropped % 25 == 0: - print( - f"M={m} {name}: dropped profiler sample {dropped} " - f"(attempt={attempts}, kernels/iter={report['kernel_calls_per_iter']}, " - f"expected={expected_kernels})", - flush=True, - ) - continue - reports.append(report) - print( - f"M={m} {name} sample {len(reports)}/{repeat}: " - f"device_total_us_per_iter={report['total_us']:.3f}, " - f"kernels/iter={report['kernel_calls_per_iter']}, " - f"aggregation={report['aggregation']}", - flush=True, - ) - if len(reports) < repeat: - raise RuntimeError( - f"M={m} {name}: only collected {len(reports)} valid profiler " - f"samples after {attempts} attempts" - ) - if dropped: - print( - f"M={m} {name}: accepted {len(reports)} samples after {attempts} " - f"attempts; dropped {dropped} incomplete profiler samples", - flush=True, - ) - return reports - - -def _median(values) -> float: - return float(statistics.median(values)) - - -def _summarize_reports(m: int, name: str, reports): - per_iter = reports[0]["kernel_calls_per_iter"] - aggregation = reports[0].get("aggregation", "ordered") - total_us = _median([report["total_us"] for report in reports]) - rows = [] - for idx in range(per_iter): - values = [report["rows"][idx]["avg_us"] for report in reports] - kernels = [report["rows"][idx]["kernel"] for report in reports] - event_counts = [report["rows"][idx].get("event_count", 0) for report in reports] - kernel = ( - kernels[0] - if all(item == kernels[0] for item in kernels) - else "" - ) - rows.append( - { - "idx": idx, - "stage": STAGE_NAMES[idx] if idx < len(STAGE_NAMES) else f"kernel_{idx}", - "avg_us": _median(values), - "min_us": min(values), - "max_us": max(values), - "kernel": kernel, - "min_events": min(event_counts), - "max_events": max(event_counts), - } - ) - - print() - print( - f"== M={m} {name} median over {len(reports)} profiler samples " - f"({aggregation}) ==" - ) - print(f"device_total_us_per_iter={total_us:.3f}") - print(f"device_kernel_calls_per_iter={per_iter}") - print( - f"{'idx':>3} {'stage':<14} {'median_us':>10} " - f"{'range_us':>17} {'events':>13} kernel" - ) - for row in rows: - range_text = f"{row['min_us']:.3f}..{row['max_us']:.3f}" - events_text = f"{row['min_events']}..{row['max_events']}" - print( - f"{row['idx']:3d} {row['stage']:<14} {row['avg_us']:10.3f} " - f"{range_text:>17} {events_text:>13} {row['kernel']}" - ) - return {"m": m, "name": name, "total_us": total_us, "rows": rows} - - -def _print_diff(base, candidate): - if len(base["rows"]) != len(candidate["rows"]): - print( - f"M={candidate['m']} {candidate['name']}: " - "kernel count differs; diff skipped" - ) - return - print() - print(f"== M={candidate['m']} kernel diff: {candidate['name']} - {base['name']} ==") - print( - f"{'stage':<14} {'base_us':>10} {'cand_us':>10} " - f"{'diff_us':>10} {'diff_pct':>9}" - ) - for base_row, cand_row in zip(base["rows"], candidate["rows"]): - diff = cand_row["avg_us"] - base_row["avg_us"] - pct = 100.0 * diff / base_row["avg_us"] if base_row["avg_us"] else 0.0 - print( - f"{base_row['stage']:<14} {base_row['avg_us']:10.3f} " - f"{cand_row['avg_us']:10.3f} {diff:10.3f} {pct:8.1f}%" - ) - total_diff = candidate["total_us"] - base["total_us"] - total_pct = 100.0 * total_diff / base["total_us"] if base["total_us"] else 0.0 - print( - f"{'total':<14} {base['total_us']:10.3f} " - f"{candidate['total_us']:10.3f} {total_diff:10.3f} {total_pct:8.1f}%" - ) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("-M", "--M-list", default="64,128") - parser.add_argument( - "--runners", - default="aiter,sort_aiter,gemm1fly_aiter,allfly", - help=f"comma-separated subset of: {','.join(small.RUNNER_ORDER)}", - ) - parser.add_argument( - "--preset", - choices=tuple(PROFILE_PRESETS), - default=DEFAULT_PROFILE_PRESET, - help=( - "profiling budget: smoke is a quick sanity check, quick is the " - "default iteration mode, final uses long handoff settings" - ), - ) - parser.add_argument("--warmup", type=int, default=None) - parser.add_argument("--graph-iters", type=int, default=None) - parser.add_argument("--replays", type=int, default=None) - parser.add_argument("--repeat", type=int, default=None) - parser.add_argument("--max-retries", type=int, default=None) - parser.add_argument("--expected-kernels", type=int, default=3) - parser.add_argument( - "--aggregation", - choices=("ordered", "by-kernel"), - default=None, - help=( - "ordered requires a complete event sequence for every graph replay; " - "by-kernel estimates per-iteration time from each kernel's captured " - "per-call average and is more robust when torch profiler drops events" - ), - ) - parser.add_argument("--trace-dir", default=None) - args = parser.parse_args() - - preset = PROFILE_PRESETS[args.preset] - for key, value in preset.items(): - if getattr(args, key) is None: - setattr(args, key, value) - - if args.graph_iters <= 0 or args.replays <= 0 or args.repeat <= 0: - raise ValueError("--graph-iters, --replays, and --repeat must be positive") - if args.max_retries < 0: - raise ValueError("--max-retries must be non-negative") - - shape = b.KIMI - device = b.torch.device("cuda") - ms = [int(item) for item in args.M_list.split(",") if item.strip()] - requested = [item.strip() for item in args.runners.split(",") if item.strip()] - unknown = [item for item in requested if item not in small.RUNNER_ORDER] - if unknown: - raise ValueError(f"unknown runners: {', '.join(unknown)}") - trace_dir = Path(args.trace_dir) if args.trace_dir else None - expected_kernels = args.expected_kernels or None - - print(f"GPU: {b.torch.cuda.get_device_name(0)}") - print(f"Shape: NE={shape.NE} H={shape.H} INTER={shape.INTER} TOPK={shape.TOPK}") - print( - f"mode=graph preset={args.preset} warmup={args.warmup} graph_iters={args.graph_iters} " - f"replays={args.replays} logical_iters={args.graph_iters * args.replays} " - f"repeat={args.repeat} " - f"logical_iters_per_runner={args.graph_iters * args.replays * args.repeat} " - f"aggregation={args.aggregation}" - ) - print("Preparing weights...", flush=True) - weights = b.build_weights(shape, device) - - for m in ms: - hidden, topk_ids, topk_weight = b.build_inputs(shape, m, device) - runners = small._make_runners( - shape, - m, - hidden, - topk_ids, - topk_weight, - weights, - device, - ) - summaries = [] - for name in requested: - reports = _collect_reports( - m, - name, - runners[name], - warmup=args.warmup, - graph_iters=args.graph_iters, - replays=args.replays, - repeat=args.repeat, - max_retries=args.max_retries, - expected_kernels=expected_kernels, - trace_dir=trace_dir, - aggregation=args.aggregation, - ) - summaries.append(_summarize_reports(m, name, reports)) - if summaries: - base = summaries[0] - for candidate in summaries[1:]: - _print_diff(base, candidate) - - -if __name__ == "__main__": - main() From b32cbdc2cf692115c25f7c1109af418418e4ef42 Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 10:19:28 +0000 Subject: [PATCH 114/118] add --- .gitignore | 34 +- docs/kimi_fp4_moe_16384_dataflow.md | 537 ---- docs/kimi_fp4_moe_16384_mxfp4_flow.md | 782 ------ docs/kimi_fp4_moe_16384_opt_notes.md | 3289 ------------------------- experiments/bf16_gemm_single_block.py | 276 --- fast_run.sh | 6 - hgemm_wave0_compact_schedule.txt | 193 -- kernels/fp8_gemm_4wave_opt.py | 461 ---- learn.md | 162 -- profile.sh | 9 - 10 files changed, 3 insertions(+), 5746 deletions(-) delete mode 100644 docs/kimi_fp4_moe_16384_dataflow.md delete mode 100644 docs/kimi_fp4_moe_16384_mxfp4_flow.md delete mode 100644 docs/kimi_fp4_moe_16384_opt_notes.md delete mode 100644 experiments/bf16_gemm_single_block.py delete mode 100644 fast_run.sh delete mode 100644 hgemm_wave0_compact_schedule.txt delete mode 100644 kernels/fp8_gemm_4wave_opt.py delete mode 100644 learn.md delete mode 100644 profile.sh diff --git a/.gitignore b/.gitignore index 66354168f..0fb95bbef 100644 --- a/.gitignore +++ b/.gitignore @@ -65,38 +65,10 @@ Thumbs.db docs/_build/ python/flydsl/_mlir -*.hsaco -core -core.gpu -*.mlir -*.ll -*.out -*.bc -*.stderr -*.stdout - -# Profiler / ATT trace outputs and packaged traces -*.zip -profiler_traces/ -profiler_traces_grid/ -.rocprofv3/ -resource_inspect/*_dump/ -resource_inspect/aiter_*/ -resource_inspect/bm16_*/ - -# Agent / tooling scratch -.agents/ -codexhook.sh - -# Scratch / WIP experiments and handoff notes (not for tracking) -experiments/ -handoff.md -handoff_moe_gemm1.md -handoff_fp4_scale.md -resource_inspect/snapshots/ -scripts/run_bf16_gemm_att.sh - # Benchmark/accuracy CSVs emitted by tests/kernels harnesses fmha_perf_*.csv run_pa_decode_ps_test.*.csv .humanize/ + +# rocprofv3 raw counter/trace output +.rocprofv3/ diff --git a/docs/kimi_fp4_moe_16384_dataflow.md b/docs/kimi_fp4_moe_16384_dataflow.md deleted file mode 100644 index 1a2a59722..000000000 --- a/docs/kimi_fp4_moe_16384_dataflow.md +++ /dev/null @@ -1,537 +0,0 @@ -# Kimi FP4 MoE 16384 FlyDSL Dataflow - -这份文档只解释 `kimi_fp4_moe_16384.py` 里固定 M=16384 这条 FlyDSL 路径的 GEMM1 和 GEMM2 数据流。重点是 kernel tiling: 每个 CTA/wave 负责哪块 C,A/B 怎么搬,K loop 怎么走,以及按 tile 之后一次 forward 大概要发多少 A/B load。 - -## 固定形状 - -| 项 | 值 | -| --- | ---: | -| `TOKEN` | 16384 | -| `TOPK` | 9 | -| routed rows, no padding | `TOKEN * TOPK = 147456` | -| `EXPERTS` | 385 | -| model dim | 7168 | -| intermediate dim | 512 | -| sort block | 64 | -| CTA threads | 256 | -| waves per CTA | 4 | - -所有 A/W 都是 fp4 packed 成 `fp4x2` byte。代码里很多地方的 `tile_k=256` 表示 256 个 fp4 K 元素;按 global memory 字节算时要除以 2。 - -本文的数据量默认是每个 active CTA 自己发出的 logical traffic,不扣 L2/cache 命中,也不计很小的 sorted id、scale、topk weight 读流量。真实 DRAM traffic 会被 cache、expert 分布、padding 和 guard 影响。 - -## FlyDSL 数据流术语 - -这份 kernel 的主数据路径可以按下面几层看: - -| 动作 | FlyDSL/ROCDL 位置 | 含义 | -| --- | --- | --- | -| global pointer 变成 resource | `_ptr_buffer_resource` | 给 `buffer_ops` / raw buffer load 用 | -| A global -> LDS | `rocdl.raw_ptr_buffer_load_lds` in `dma_x_tile_to_lds` | 256 threads 合作把一个 A tile 搬进 ping/pong LDS | -| A LDS -> VGPR | `vector.load_op` in `lds_load_packs_k64` | 每个 wave 从 LDS 读它要喂给 MFMA 的 A subtile | -| B global -> VGPR | `_buffer_load_vec` in `load_b_packs_k64` | B 不进 LDS,按当前 wave 的 N slice 直接进寄存器 | -| scales global -> VGPR | `buffer_ops.buffer_load` in `prefetch_ab_scale_tile` | e8m0 scale,给 `mfma_scale` 用 | -| matrix compute | `rocdl.mfma_scale_f32_16x16x128_f8f6f4` | 真正发 MFMA 指令的地方 | -| C fragment -> LDS | `write_row_to_lds` | 把 lane-fragment 格式的 accumulator 整理进 LDS | -| LDS -> global C | `c_shuffle_epilog(... store_pair ...)` | C shuffle 后用 `llvm.StoreOp` 写回 global | - -直观理解:A 放 LDS 是因为同一个 A tile 会被 4 个 waves 分别乘不同 N slice 的 B;B 是每个 wave 独有的 N slice,直接进寄存器更合适。 - -## GEMM1: Stage1 Tiling - -Stage1 做的是: - -```text -gate = hidden @ W_gate -up = hidden @ W_up -out = silu(gate) * up -``` - -输出是 bf16 intermediate: - -```text -[TOKEN, TOPK, INTER_DIM] = [16384, 9, 512] -``` - -固定 tile: - -| 项 | 值 | -| --- | ---: | -| `tile_m` | 64 routed rows | -| `tile_n` | 128 intermediate columns | -| `tile_k` | 256 model-dim fp4 elements | -| K tiles | `7168 / 256 = 28` | -| N tiles | `512 / 128 = 4` | -| waves | 4 | -| `n_per_wave` | `128 / 4 = 32` | -| `m_repeat` | `64 / 16 = 4` | -| `num_acc_n` | `32 / 16 = 2` | -| `k_unroll` | `256 / 128 = 2` MFMA K chunks | - -### CTA 和 Wave 负责的 C 块 - -一个 Stage1 CTA 负责一个 logical C tile: - -```text -M: 64 sorted routed rows -N: 128 intermediate columns -K: loop over 7168 -``` - -4 个 waves 平分 N 维: - -| wave | N columns | -| ---: | --- | -| 0 | `by_n + 0..31` | -| 1 | `by_n + 32..63` | -| 2 | `by_n + 64..95` | -| 3 | `by_n + 96..127` | - -每个 wave 内部再拆成 16x16 MFMA tile: - -```text -M side: 4 blocks of 16 rows -> mi_idx = 0..3 -N side: 2 blocks of 16 cols -> ni_idx = 0..1 -``` - -所以每个 wave 同时维护: - -```text -4 * 2 = 8 accumulator fragments for gate -4 * 2 = 8 accumulator fragments for up -``` - -`acc_idx = mi_idx * num_acc_n + ni_idx`。每个 accumulator 是一个 `vec4_f32` lane fragment,整个 wave 合起来表示一个 16x16 C micro-tile。K loop 结束后,gate/up accumulator 先做 `silu(gate) * up`,再进入 C shuffle epilogue。 - -### GEMM1 Per K Tile 数据流 - -一个 Stage1 CTA 的一个 K tile 是: - -```text -A: 64 x 256 fp4 -> 64 * 256 / 2 = 8192 B = 8 KiB -B_gate: 128 x 256 fp4 -> 16 KiB -B_up: 128 x 256 fp4 -> 16 KiB -``` - -也就是每个 K tile: - -| 数据 | 路径 | 每 CTA footprint | -| --- | --- | ---: | -| A | global -> LDS | 8 KiB | -| A | LDS -> VGPR, all waves total | 32 KiB LDS reads | -| B gate | global -> VGPR | 16 KiB | -| B up | global -> VGPR | 16 KiB | -| B total | global -> VGPR | 32 KiB | - -A 的 global load 是整个 CTA 合作完成的。`_num_dma_loads = 2`,所以每个 thread 发 2 次 16B raw LDS load: - -```text -256 threads * 2 * 16 B = 8192 B -``` - -B 的 load 是按 wave 的 N slice 发的。每个 wave 每个 K tile 的 B footprint: - -```text -gate: 32 N cols * 256 K / 2 = 4 KiB -up: 32 N cols * 256 K / 2 = 4 KiB -total per wave = 8 KiB -``` - -4 waves 加起来就是 32 KiB。 - -### GEMM1 MFMA 数量 - -每个 wave 每个 K tile: - -```text -m_repeat(4) * num_acc_n(2) * k_unroll(2) * gate/up(2) -= 32 MFMA -``` - -每个 CTA 每个 K tile: - -```text -4 waves * 32 = 128 MFMA -``` - -整个 K=7168: - -```text -28 K tiles * 128 = 3584 MFMA per CTA -``` - -### GEMM1 K Loop - -Stage1 的 K 维有 28 个 tile。代码里的关键变量是: - -```text -num_k_tiles_py = 28 -tail_tiles = 2 -k_main2_py = (28 - 2) * 256 = 6656 -``` - -主循环: - -```text -for k_iv_py in range(0, 6656, 512): - _interleaved_half(...) - _interleaved_half(...) -``` - -一个 `_interleaved_half` 可以理解成: - -```text -compute previous K tile -load current K tile's B and scales into VGPR -read current K tile's A from LDS into VGPR -DMA a future A tile into the other LDS buffer -return current tile as next half's previous tile -``` - -启动阶段先准备: - -```text -K0 A -> lds_x_pong -K0 scales -K1 A -> lds_x_ping -K0 B gate/up -> regs -K0 A LDS -> regs -``` - -主循环的 26 个 half 会计算 K0..K25,并持续把未来的 A tile 填到 ping/pong LDS。最后 tail 处理 K26 和 K27: - -```text -compute K26 -compute K27 -``` - -所以 Stage1 每个 CTA 总 global load footprint 约为: - -| 数据 | 公式 | 每 CTA | -| --- | --- | ---: | -| A | `28 * 8 KiB` | 224 KiB | -| B gate+up | `28 * 32 KiB` | 896 KiB | -| C store | `64 * 128 * 2 B` | 16 KiB | -| 合计, 不含 scales/sorted ids | | 1136 KiB | - -### GEMM1 写回 - -每个 wave 得到的是 MFMA lane-fragment layout,不是 contiguous C layout。写回分两步: - -1. `write_row_to_lds` 把 `acc[mi, ni]` 中的 f32 转 bf16,按 row/col 写到 `lds_out`。 -2. `c_shuffle_epilog` 让线程从 LDS 读出连续片段,再由 `store_pair` 用 `llvm.StoreOp` 写到 global。 - -Stage1 的 global out row 是 `(token_id, topk_id)` 对应的 `ts_idx = token * TOPK + topk`,列是 `INTER_DIM` 里的 `by_n + local_n`。padding row 会被 `row_valid` guard 掉。 - -## GEMM2: Stage2 Tiling - -Stage2 做的是: - -```text -out_topk_slot = intermediate @ W_down -out_topk_slot *= topk_weight -``` - -当前实现先写一个很大的 bf16 staging buffer: - -```text -target: [TOKEN, TOPK, MODEL_DIM] -``` - -然后 Python wrapper 里再做: - -```python -torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1, out=out) -``` - -固定 tile: - -| 项 | 值 | -| --- | ---: | -| `tile_m` | 64 routed rows | -| `tile_n` | 256 model columns | -| `tile_k` | 256 intermediate fp4 elements | -| K tiles | `512 / 256 = 2` | -| N tiles | `7168 / 256 = 28` | -| waves | 4 | -| `n_per_wave` | `256 / 4 = 64` | -| `m_repeat` | `64 / 16 = 4` | -| `num_acc_n` | `64 / 16 = 4` | -| `k_unroll` | `256 / 128 = 2` MFMA K chunks | - -Stage2 是 persistent-M grid: - -```text -grid.x = 28 N tiles -grid.y = CU count -``` - -每个 launched block 不是只做一个 fixed M tile,而是在 `scf.ForOp` 里按 CU 分配到多个 sorted M tiles。逻辑上仍然可以把它理解成很多 `(M tile, N tile)` CTA work items: - -```text -M tile = 64 sorted routed rows -N tile = 256 model columns -``` - -### CTA 和 Wave 负责的 C 块 - -一个 logical Stage2 CTA 负责: - -```text -M: 64 sorted routed rows -N: 256 model columns -K: 512 intermediate dim -``` - -4 个 waves 平分 N 维: - -| wave | N columns | -| ---: | --- | -| 0 | `by_n + 0..63` | -| 1 | `by_n + 64..127` | -| 2 | `by_n + 128..191` | -| 3 | `by_n + 192..255` | - -每个 wave 内部: - -```text -M side: 4 blocks of 16 rows -> mi_idx = 0..3 -N side: 4 blocks of 16 cols -> ni_idx = 0..3 -``` - -所以每个 wave 维护: - -```text -4 * 4 = 16 accumulator fragments -``` - -GEMM2 没有 gate/up 双 accumulator,只有一套 `acc`。 - -### GEMM2 Per K Tile 数据流 - -一个 Stage2 CTA 的一个 K tile: - -```text -A: 64 x 256 fp4 -> 8 KiB -B: 256 x 256 fp4 -> 32 KiB -``` - -| 数据 | 路径 | 每 CTA footprint | -| --- | --- | ---: | -| A | global -> LDS | 8 KiB | -| A | LDS -> VGPR, all waves total | 32 KiB LDS reads | -| B | global -> VGPR | 32 KiB | - -和 Stage1 对比: - -```text -Stage1: tile_n=128, 但要同时读 gate/up 两套 B -> 32 KiB B per K tile -Stage2: tile_n=256, 只读一套 down B -> 32 KiB B per K tile -``` - -所以两者每个 K tile 的 B global footprint 恰好一样大。 - -### GEMM2 MFMA 数量 - -每个 wave 每个 K tile: - -```text -m_repeat(4) * num_acc_n(4) * k_unroll(2) -= 32 MFMA -``` - -每个 logical CTA 每个 K tile: - -```text -4 waves * 32 = 128 MFMA -``` - -整个 K=512: - -```text -2 K tiles * 128 = 256 MFMA per logical CTA -``` - -### GEMM2 K Loop - -GEMM2 的 K 只有两个 tile,所以没有长 main loop: - -```text -num_k_tiles = 2 -tail_tiles = 2 -k_main2_py = 0 -``` - -实际路径是 even-tail: - -1. load K0 的 B low half、scales。 -2. DMA K0 的 A 到 `lds_x_pong`。 -3. 从 `lds_x_pong` 预取 K0 的 A subtile。 -4. DMA K1 的 A 到 `lds_x_ping`。 -5. load K1 的 B、scales。 -6. compute K0。 -7. wait/barrier。 -8. 从 `lds_x_ping` 读 K1 的 A subtile。 -9. compute K1,并预取 epilogue 需要的 `sorted_weights`。 - -每个 logical CTA 总 global load/store footprint 约为: - -| 数据 | 公式 | 每 logical CTA | -| --- | --- | ---: | -| A | `2 * 8 KiB` | 16 KiB | -| B | `2 * 32 KiB` | 64 KiB | -| C staging store | `64 * 256 * 2 B` | 32 KiB | -| 合计, 不含 scales/sorted ids/topk weights | | 112 KiB | - -### GEMM2 写回和 TOPK Reduce - -GEMM2 epilogue 在 `write_row_to_lds` 里多做了一步: - -```text -v = accumulator * sorted_weight -``` - -然后和 Stage1 一样走 `c_shuffle_epilog` 写回 global。不过它写回的不是最终 `[TOKEN, MODEL_DIM]`,而是 topk slot staging: - -```text -target[token, topk, model_col] -``` - -最后 `torch.sum(target.view(TOKEN, TOPK, MODEL_DIM), dim=1)` 再把 9 个 topk slot 合并。这是当前 FlyDSL 路径最显眼的数据流开销之一: - -| buffer | 大小 | -| --- | ---: | -| Stage1 intermediate `[16384, 9, 512]` bf16 | 144 MiB | -| Stage2 staging `[16384, 9, 7168]` bf16 | 2016 MiB | -| `torch.sum` 读取 staging | 2016 MiB | -| `torch.sum` 写最终 out `[16384, 7168]` bf16 | 224 MiB | - -这里的 MiB 按 1024 进制算。 - -## 一次 Forward 的 Tile 级 Traffic 公式 - -令: - -```text -M_tiles = ceil(num_valid_ids[0] / 64) -``` - -`num_valid_ids[0]` 由 sort kernel 产生,可能包含为了 expert/block 对齐产生的 padding。没有 padding 的理论下界是: - -```text -ceil(16384 * 9 / 64) = 2304 -``` - -当前 wrapper 分配的 `sorted_token_ids` 上界接近: - -```text -max_sorted = TOKEN * TOPK + EXPERTS * BLOCK_M - TOPK = 172087 -floor(max_sorted / 64) = 2688 blocks -``` - -真实 active work 由 `num_valid_ids[0]`、`exp_valid`、`tile_has_tokens` 和 row guard 共同决定。 - -### Stage1 - -Stage1 logical CTA 数: - -```text -CTA_s1 = M_tiles * 4 -``` - -因为 N tile 数是 4。 - -Traffic 公式: - -```text -A_s1 = CTA_s1 * 28 * 8 KiB -B_s1 = CTA_s1 * 28 * 32 KiB -C_s1 = CTA_s1 * 16 KiB -``` - -如果只按没有 padding 的 2304 个 M tiles 算: - -| 项 | 约 GiB | -| --- | ---: | -| A global load | 1.97 | -| B global load, logical | 7.88 | -| C store | 0.14 | -| total | 9.98 | - -如果按 2688 个 M tiles 上界算: - -| 项 | 约 GiB | -| --- | ---: | -| A global load | 2.30 | -| B global load, logical | 9.19 | -| C store | 0.16 | -| total | 11.65 | - -### Stage2 - -Stage2 logical CTA 数: - -```text -CTA_s2 = M_tiles * 28 -``` - -因为 N tile 数是 28。 - -Traffic 公式: - -```text -A_s2 = CTA_s2 * 2 * 8 KiB -B_s2 = CTA_s2 * 2 * 32 KiB -C_s2 = CTA_s2 * 32 KiB -``` - -如果只按没有 padding 的 2304 个 M tiles 算: - -| 项 | 约 GiB | -| --- | ---: | -| A global load | 0.98 | -| B global load, logical | 3.94 | -| C staging store | 1.97 | -| total | 6.89 | - -如果按 2688 个 M tiles 上界算: - -| 项 | 约 GiB | -| --- | ---: | -| A global load | 1.15 | -| B global load, logical | 4.59 | -| C staging store | 2.30 | -| total | 8.04 | - -Stage2 后面的 `torch.sum` 还会额外读约 1.97 GiB staging,并写约 0.22 GiB final output。 - -## 读代码时的最短路径 - -GEMM1 建议按这个顺序看: - -1. `Stage1Config`: 确认 `tile_m/tile_n/tile_k`。 -2. `compile_kimi_fp4_stage1_16384`: 看 derived constants,比如 `n_per_wave`、`m_repeat`、`k_unroll`。 -3. `moe_gemm1`: 看 grid/block id 怎么映射到 `by_n` 和 `bx_m`。 -4. `dma_x_tile_to_lds`: 看 A global -> LDS。 -5. `load_b_packs_k64`: 看 B global -> VGPR。 -6. `compute_bmajor_mfma_phase`: 看 MFMA 真正在哪里发。 -7. `_interleaved_half`: 看 K loop pipeline。 -8. `write_row_to_lds` + `c_shuffle_epilog`: 看 accumulator 怎么变成 global C。 - -GEMM2 建议按这个顺序看: - -1. `Stage2Config`: 确认 `64x256x256` 和 `persist_m=-1`。 -2. `compile_kimi_fp4_stage2_16384`: 看 persistent grid 和 derived constants。 -3. `_moe_gemm2_then_body`: 看一个 logical M tile 的实际工作。 -4. `load_b_tile_lo/load_b_tile_hi`: 看 B split load。 -5. `compute_tile`: 看 A LDS read、B pack、scale、MFMA。 -6. `write_row_to_lds`: 看 topk weight 乘在哪里做。 -7. wrapper `kimi_fp4_stage2_16384`: 看 `target` staging 和最终 `torch.sum`。 - -## 最重要的性能理解点 - -1. 每个 CTA 的 A global load 很小,但同一个 M tile 会被不同 N tiles 重复加载到 LDS。Stage1 重复 4 次,Stage2 重复 28 次。 -2. B global logical traffic 比 A 大很多,尤其 Stage1 的 28 个 K tiles 每 CTA 要读 896 KiB 的 gate/up B。实际 DRAM 是否这么大取决于 expert 分布和 L2 复用。 -3. Stage1 和 Stage2 每个 K tile 每个 CTA 都是 128 条 wave-level MFMA,但 Stage1 有 28 个 K tiles,Stage2 只有 2 个 K tiles。 -4. 当前 Stage2 的 GEMM 本身不是唯一问题。它写 bf16 `[TOKEN, TOPK, MODEL_DIM]` staging,再用 PyTorch reduce,这会带来约 2 GiB 级别的额外读写。 -5. 对齐 mxfp4 性能时,除了 GEMM tile 本身,还要对齐 Stage2 输出格式和 reduce 路径,否则 `torch.sum` 这段数据流会一直留在 critical path 上。 diff --git a/docs/kimi_fp4_moe_16384_mxfp4_flow.md b/docs/kimi_fp4_moe_16384_mxfp4_flow.md deleted file mode 100644 index 6f73ea4a8..000000000 --- a/docs/kimi_fp4_moe_16384_mxfp4_flow.md +++ /dev/null @@ -1,782 +0,0 @@ -# Kimi FP4 MoE 16384 MXFP4 Flow - -This note is a map for the current all-FlyDSL MXFP4 path in -`kimi_fp4_moe_16384_opt_simplify.py`, centered on: - -```python -run_kimi_fp4_mxfp4_moe_16384_all_flydsl(...) -``` - -It is meant as a reading guide. The detailed GEMM scheduling, MFMA tiling, and -LDS pipeline are still in the kernel code; this document focuses on which -buffers exist, how rows are rearranged, and why the final scatter/reduce is -needed. - -## Fixed Shape - -| name | value | -| --- | ---: | -| `TOKEN` | 16384 | -| `TOPK` | 9 | -| `EXPERTS` | 385 | -| `MODEL_DIM` | 7168 | -| `INTER_DIM` | 512 | -| `MXFP4_BLOCK_M` | 128 | -| routed pairs before padding | `TOKEN * TOPK = 147456` | -| worst-case padded sorted rows | `max_sorted = 196352` | -| sorted expert blocks | `max_sorted / 128 = 1534` | - -MXFP4 storage convention in this file: - -| logical data | packed value shape | scale shape | -| --- | --- | --- | -| hidden `[TOKEN, MODEL_DIM]` | `[16384, 3584]` uint8 | `[16384, 224]` uint8 | -| intermediate `[sorted, INTER_DIM]` | `[196352, 256]` uint8 | logical `[196352, 16]`, but stored in GEMM2 shuffled layout | -| output per routed row `[sorted, MODEL_DIM]` | `[196352, 3584]` uint8 | `[196352, 224]` uint8 | - -## Stage Count vs Kernel Count - -There are 6 high-level Python stages in `run_kimi_fp4_mxfp4_moe_16384_all_flydsl`, -but 8 actual GPU kernel launches. The difference is that the first stage, -`kimi_mxfp4_sort_16384`, launches three kernels internally. - -| high-level stage | actual GPU launches | -| --- | --- | -| 1. `kimi_mxfp4_sort_16384` | `sort_count`, `sort_cumsum`, `sort_place_pad` | -| 2. `kimi_mxfp4_quant_16384` | `quant` | -| 3. `kimi_mxfp4_sort_scales_16384` | `sort_scales` | -| 4. `kimi_mxfp4_gemm1_16384` | `gemm1` | -| 5. `kimi_mxfp4_gemm2_mxfp4out_16384` | `gemm2_mxfp4out` | -| 6. `kimi_mxfp4_scatter_reduce_q_16384` | `scatter_reduce_q` | - -So if "kernel" means Python wrapper stage, there are 6. If it means GPU launch, -there are 8. - -## Main Dataflow - -```mermaid -flowchart TD - HS["hidden_states
(16384, 7168) bf16"] --> Q["kimi_mxfp4_quant_16384
per 32 model values:
fp4x2 bytes + e8m0 scale"] - Q --> AQ["a_quant
(16384, 3584) uint8"] - Q --> AS["a_scale
(16384, 224) uint8"] - - TOPKID["topk_ids
(16384, 9) int32"] --> SORT - TOPKW["topk_weight
(16384, 9) f32"] --> SORT - - subgraph SORT["kimi_mxfp4_sort_16384
expert-major sort + BM128 padding"] - direction TB - SC["sort_count
count routed pairs per expert
block_offsets: (385, 16)"] - SP["sort_cumsum
sum counts, round each expert to BM128,
prefix starts, fill sorted_expert_ids"] - SPL["sort_place_pad
place real rows, write inverse map,
append padding rows"] - SC --> SP --> SPL - end - - SORT --> STI["sorted_token_ids
(196352) int32
packed token/topk; pad token = TOKEN"] - SORT --> SEI["sorted_expert_ids
(1534) int32
one expert id per BM128 block"] - SORT --> CS["cumsum_tensor(0)
actual padded sorted rows"] - SORT --> REV["reverse_sorted
(147456) int32
original token/topk pair -> sorted row"] - SORT --> SW["sorted_weights
(196352) f32
topk weight in sorted-row order"] - SORT --> MI["m_indices
(196352) int32
token id in sorted-row order"] - - AS --> SS["kimi_mxfp4_sort_scales_16384
gather hidden scales by sorted_token_ids
and swizzle for GEMM1"] - STI --> SS - CS --> SS - SS --> ASS["a_scale_sorted_shuffled
flat uint8
196352 * 224 * 2 bytes"] - - AQ --> G1["kimi_mxfp4_gemm1_16384
expert-major GEMM1:
hidden @ W_gate/up,
SiLU(gate) * up,
quantize intermediate to MXFP4"] - ASS --> G1 - W1["w1 packed
(385, 1024, 3584) uint8"] --> G1 - W1S["w1_scale
(385, 1024, 224) uint8"] --> G1 - SEI --> G1 - MI --> G1 - CS --> G1 - G1 --> IQ["inter_sorted_quant
(196352, 256) uint8"] - G1 --> IS["inter_sorted_shuffled_scale
GEMM2-ready scale layout
(785408, 16) uint8"] - - IQ --> G2["kimi_mxfp4_gemm2_mxfp4out_16384
expert-major GEMM2:
intermediate @ W_down,
quantize output rows to MXFP4"] - IS --> G2 - W2["w2 packed
(385, 7168, 256) uint8"] --> G2 - W2S["w2_scale
(385, 7168, 16) uint8"] --> G2 - SEI --> G2 - CS --> G2 - G2 --> OQ["flat_out_q
(196352, 3584) uint8"] - G2 --> OS["flat_out_scale
(196352, 224) uint8"] - - OQ --> SR["kimi_mxfp4_scatter_reduce_q_16384
for each token and topk slot:
reverse lookup sorted row,
dequantize, multiply topk weight,
sum 9 routes"] - OS --> SR - REV --> SR - SW --> SR - SR --> OUT["out
(16384, 7168) bf16"] -``` - -## Sort Internals - -The sort stage converts row order from token-major routing: - -```text -original pair index = token_id * TOPK + topk_slot -``` - -to expert-major, BM128-padded rows: - -```text -sorted rows = expert 0 rows, expert 0 padding, - expert 1 rows, expert 1 padding, - ... -``` - -```mermaid -flowchart LR - P["original routed pairs
147456 = 16384 * 9"] --> C["sort_count
per expert counts split over 16 CTAs"] - C --> BO["block_offsets
(385, 16) int32
temporary per-expert partial counts"] - BO --> X["sort_cumsum
total count per expert
padded = round_up(count, 128)
exclusive prefix"] - X --> RC["real_counts
(385) int32"] - X --> MM["masked_m
(385) int32
padded counts"] - X --> CS2["cumsum_tensor(0)
actual padded total"] - X --> EBLK["sorted_expert_ids
expert id per 128-row block"] - X --> P2["sort_place_pad
atomic local offset per expert"] - TOPKID2["topk_ids"] --> P2 - TOPKW2["topk_weight"] --> P2 - P2 --> STI2["sorted_token_ids(row)
low 24 bits: token id
high bits: topk slot"] - P2 --> MI2["m_indices(row)
token id only"] - P2 --> SW2["sorted_weights(row)
route weight"] - P2 --> REV2["reverse_sorted(token*TOPK+topk)
sorted row"] - P2 --> PAD["padding rows
token id = TOKEN
weight = 0"] -``` - -Three buffers are easy to confuse: - -| buffer | direction | used by | -| --- | --- | --- | -| `sorted_token_ids[row]` | sorted row -> packed `(token, topk)` | `sort_scales`, padding checks | -| `m_indices[row]` | sorted row -> token id | GEMM1 A-row lookup | -| `reverse_sorted[token * TOPK + topk]` | original routed pair -> sorted row | final scatter/reduce | - -## Kernel 1: `sort_count` - -The first actual GPU launch is: - -```python -sort_count(topk_ids, block_offsets).launch( - grid=(16, 1, 1), - block=(1024, 1, 1), -) -``` - -Its job is only to count how many routed pairs in each CTA chunk go to each -expert. It does not place rows yet. - -Fixed constants: - -| item | value | -| --- | ---: | -| total routed pairs | `16384 * 9 = 147456` | -| `sort_ctas` | 16 | -| threads per CTA | 1024 | -| routed pairs per CTA chunk | `147456 / 16 = 9216` | -| exact coverage check | `147456 % 16 == 0`, `9216 % 1024 == 0` | -| loop expression in code | `range_constexpr(div_up(per_cta, threads))` | -| loop iterations per thread, fixed shape | `ceil(9216 / 1024) = 9` | -| experts | 385 | -| output entries | `385 * 16 = 6160` | - -```mermaid -flowchart TD - IN["topk_ids flattened
(147456) int32
idx = token * 9 + topk"] --> CTA0 - - subgraph CTA["sort_count CTA work"] - direction TB - CTA0["one CTA
bx in 0..15
1024 threads"] - R["CTA range
start = bx * 9216
end = start + 9216
exactly covers valid idxs"] - Z["threads tx < 385
local_count(tx) = 0
shared memory: 385 x i32"] - B0["barrier"] - LOOP["for it in range_constexpr(div_up(per_cta, threads))
fixed shape: it = 0..8
idx = start + tx + it * 1024"] - LOAD["eid = topk_ids(idx)"] - ATOM["atomic_add
local_count(eid) += 1"] - B1["barrier"] - WR["threads tx < 385
cnt = local_count(tx)
block_offsets(tx * 16 + bx) = cnt"] - - CTA0 --> R --> Z --> B0 --> LOOP --> LOAD --> ATOM --> LOOP - LOOP --> B1 --> WR - end - - WR --> OUT["block_offsets
(385, 16) int32
partial count per expert per CTA"] -``` - -Equivalent scalar pseudocode: - -```python -for bx in parallel_range(16): - local_count = [0] * 385 - - start = bx * 9216 - end = start + 9216 - - for tx in parallel_range(1024): - for it in range_constexpr(div_up(per_cta, threads)): # 9 for this shape - idx = start + tx + it * 1024 - eid = topk_ids[idx] - atomic_add(local_count[eid], 1) - - for expert in parallel_range(385): - block_offsets[expert, bx] = local_count[expert] -``` - -The output layout is expert-major: - -```text -block_offsets[e, bx] = count of routes to expert e inside CTA chunk bx -flat offset = e * 16 + bx -``` - -## Kernel 2: `sort_cumsum` - -The second actual GPU launch is: - -```python -sort_cumsum( - block_offsets, - masked_m, - real_counts, - cumsum_tensor, - sorted_expert_ids, -).launch( - grid=(1, 1, 1), - block=(1024, 1, 1), -) -``` - -Its job is to turn the per-CTA partial counts from `sort_count` into global -row ranges for each expert. This is the kernel that decides the padded sorted -layout. - -Inputs and outputs: - -| buffer | before `sort_cumsum` | after `sort_cumsum` | -| --- | --- | --- | -| `block_offsets(e, c)` | count of expert `e` in CTA chunk `c` | absolute row start for expert `e`, CTA chunk `c` | -| `real_counts(e)` | uninitialized | true routed count for expert `e` | -| `masked_m(e)` | uninitialized | BM128-padded count for expert `e` | -| `cumsum_tensor(0)` | uninitialized | total padded sorted rows | -| `sorted_expert_ids(b)` | uninitialized | expert id for BM128 block `b` | - -```text -real_count(e) = sum(block_offsets(e, 0:16)) -padded(e) = round_up(real_count(e), 128) -start(e) = sum_{k < e} padded(k) -end(e) = start(e) + padded(e) -``` - -```mermaid -flowchart TD - BOIN["block_offsets
(385, 16) int32
partial counts from sort_count"] --> K2 - - subgraph K2["sort_cumsum single CTA"] - direction TB - T0["1024 threads
only tx < 385 are expert lanes"] - - SUM["per expert lane tx
load 16 partial counts
4 vector loads x 4 lanes
total = sum counts"] - PAD["padded = round_up(total, 128)
store s_total_count(tx)
store s_padded_count(tx)
real_counts(tx) = total
masked_m(tx) = padded"] - B0["barrier"] - - SCAN["tx == 0 serial prefix scan
for e = 0..384
s_expert_starts(e) = acc
acc += s_padded_count(e)"] - FINAL["s_expert_starts(385) = acc
cumsum_tensor(0) = acc"] - B1["barrier"] - - REWRITE["per expert lane tx
acc = s_expert_starts(tx)
for c = 0..15:
cnt = old block_offsets(tx, c)
block_offsets(tx, c) = acc
acc += cnt"] - FILL["fill sorted_expert_ids
start = s_expert_starts(tx)
end = s_expert_starts(tx + 1)
for b in start/128 .. end/128 - 1:
sorted_expert_ids(b) = tx"] - - T0 --> SUM --> PAD --> B0 --> SCAN --> FINAL --> B1 --> REWRITE --> FILL - end - - PAD --> RC["real_counts
(385) int32"] - PAD --> MM["masked_m
(385) int32"] - FINAL --> CS["cumsum_tensor(0)
actual padded sorted row count"] - REWRITE --> BOOUT["block_offsets
(385, 16) int32
now per-chunk absolute starts"] - FILL --> SEI["sorted_expert_ids
(1534) int32
one id per BM128 block"] -``` - -Equivalent scalar pseudocode: - -```python -# Parallel across expert lanes tx = 0..384. -for e in parallel_range(385): - total = 0 - for c in range_constexpr(16): - total += block_offsets[e, c] - - padded = round_up(total, 128) - s_total_count[e] = total - s_padded_count[e] = padded - real_counts[e] = total - masked_m[e] = padded - -barrier() - -# One thread computes the expert prefix ranges. -acc = 0 -for e in range(385): - s_expert_starts[e] = acc - acc += s_padded_count[e] -s_expert_starts[385] = acc -cumsum_tensor[0] = acc - -barrier() - -# Parallel across expert lanes again. -for e in parallel_range(385): - acc = s_expert_starts[e] - for c in range_constexpr(16): - cnt = block_offsets[e, c] - block_offsets[e, c] = acc - acc += cnt - - for b in range(s_expert_starts[e] // 128, s_expert_starts[e + 1] // 128): - sorted_expert_ids[b] = e -``` - -The key mutation is `block_offsets`: - -```text -before: block_offsets(e, c) = local count from sort_count CTA c -after: block_offsets(e, c) = absolute start row for sort_place_pad CTA c -``` - -## Kernel 3: `sort_place_pad` - -The third actual GPU launch is: - -```python -sort_place_pad( - topk_ids, - topk_weight, - block_offsets, - real_counts, - cumsum_tensor, - sorted_token_ids, - reverse_sorted, - sorted_weights, - m_indices, -).launch( - grid=(16, 1, 1), - block=(1024, 1, 1), -) -``` - -This is the kernel that actually writes the sorted row buffers. It consumes the -absolute starts produced by `sort_cumsum`, places all real routed pairs, then -fills each expert's BM128 padding rows. - -Fixed constants: - -| item | value | -| --- | ---: | -| `sort_ctas` | 16 | -| threads per CTA | 1024 | -| routed pairs per CTA chunk | 9216 | -| place-loop iterations per thread | 9 | -| `experts_per_cta` for padding | `ceil(385 / 16) = 25` | -| padding lanes | 128 | - -```mermaid -flowchart TD - TOPK["topk_ids
(147456) int32"] --> K3 - TOPKW["topk_weight
(147456) f32"] --> K3 - BO["block_offsets
(385, 16) int32
absolute starts from sort_cumsum"] --> K3 - RC["real_counts
(385) int32"] --> K3 - CS["cumsum_tensor(0)
total padded sorted rows"] --> K3 - - subgraph K3["sort_place_pad CTA work"] - direction TB - CTA0["one CTA
bx in 0..15
1024 threads"] - - INIT["init expert metadata
threads tx < 385:
local_offsets(tx) = block_offsets(tx, bx)
row_starts(tx) = block_offsets(tx, 0)
thread 0: row_starts(385) = cumsum_tensor(0)"] - B0["barrier"] - - PLACE["place real rows loop
for idx = bx*9216 + tx; idx < end; idx += 1024"] - EID["eid = topk_ids(idx)
sp = atomic_add(local_offsets(eid), 1)"] - PACK["token_id = idx / 9
topk_id = idx % 9
packed = token_id | topk_id << 24"] - STORE["sorted_token_ids(sp) = packed
m_indices(sp) = token_id
sorted_weights(sp) = topk_weight(idx)
reverse_sorted(idx) = sp"] - B1["barrier"] - - PADLANE["padding phase
only tx < 128"] - EXPLOOP["for ee = 0..24
e = bx * 25 + ee
skip if e >= 385"] - PADRANGE["real_end = row_starts(e) + real_counts(e)
padded_end = row_starts(e + 1)
for j = real_end + tx; j < padded_end; j += 1024"] - PADSTORE["sorted_token_ids(j) = TOKEN
m_indices(j) = TOKEN
sorted_weights(j) = 0"] - - CTA0 --> INIT --> B0 --> PLACE --> EID --> PACK --> STORE - STORE --> B1 --> PADLANE --> EXPLOOP --> PADRANGE --> PADSTORE - end - - STORE --> STI["sorted_token_ids
(196352) int32
real rows packed token/topk"] - STORE --> MI["m_indices
(196352) int32
real rows token id"] - STORE --> SW["sorted_weights
(196352) f32
real rows route weight"] - STORE --> REV["reverse_sorted
(147456) int32
original pair -> sorted row"] - PADSTORE --> PADOUT["padding rows
token id TOKEN
weight 0"] -``` - -Equivalent scalar pseudocode: - -```python -for bx in parallel_range(16): - # Shared state for this CTA. - for e in parallel_range(385): - local_offsets[e] = block_offsets[e, bx] - row_starts[e] = block_offsets[e, 0] - row_starts[385] = cumsum_tensor[0] - - barrier() - - # Place real routed pairs from this CTA chunk. - start = bx * 9216 - end = min(start + 9216, 147456) - for tx in parallel_range(1024): - for idx in range(start + tx, end, 1024): - eid = topk_ids[idx] - sp = atomic_add(local_offsets[eid], 1) - - token_id = idx // 9 - topk_id = idx % 9 - packed = (token_id & 0x00FFFFFF) | (topk_id << 24) - - sorted_token_ids[sp] = packed - m_indices[sp] = token_id - sorted_weights[sp] = topk_weight[idx] - reverse_sorted[idx] = sp - - barrier() - - # Fill padding rows for up to 25 experts assigned to this CTA. - for tx in parallel_range(128): - for ee in range_constexpr(25): - e = bx * 25 + ee - if e < 385: - real_end = row_starts[e] + real_counts[e] - padded_end = row_starts[e + 1] - for j in range(real_end + tx, padded_end, 1024): - sorted_token_ids[j] = TOKEN - m_indices[j] = TOKEN - sorted_weights[j] = 0.0 -``` - -After this kernel, the sort stage is complete: - -| output | meaning | -| --- | --- | -| `sorted_token_ids(row)` | sorted-row order, packed token/topk; padding rows use token `TOKEN` | -| `m_indices(row)` | sorted-row order token id, consumed by GEMM1 | -| `sorted_weights(row)` | sorted-row order route weight, consumed by scatter/reduce | -| `reverse_sorted(orig)` | token-major original route index -> sorted row, consumed by scatter/reduce | - -## Kernel 4: `quant` - -The fourth actual GPU launch is: - -```python -quant(hidden, a_quant, a_scale).launch( - grid=(512, 1, 1), - block=(1024, 1, 1), -) -``` - -This kernel quantizes the original bf16 hidden matrix into MXFP4. It does not -use the sorted row order yet. - -Work unit: - -```text -one MXFP4 block = 32 consecutive hidden values -one MXFP4 block produces 16 packed fp4 bytes + 1 e8m0 scale byte -``` - -Fixed constants: - -| item | value | -| --- | ---: | -| hidden shape | `(16384, 7168)` bf16 | -| blocks per token | `7168 / 32 = 224` | -| total MXFP4 blocks | `16384 * 224 = 3670016` | -| CTAs | 512 | -| threads per CTA | 1024 | -| waves per CTA | `1024 / 64 = 16` | -| MXFP4 blocks per wave | `64 / 4 = 16` | -| MXFP4 blocks per CTA iteration | `16 * 16 = 256` | -| CTA iterations | `3670016 / (512 * 256) = 28` | - -```mermaid -flowchart TD - HS["hidden_states
(16384, 7168) bf16"] --> K4 - - subgraph K4["quant CTA work"] - direction TB - CTA["one CTA
bx in 0..511
1024 threads"] - WILOOP["wi range for this CTA
wi = bx*28 .. bx*28+27"] - MAP["per thread mapping
wave_id = tx / 64
lane = tx % 64
block_in_wave = lane / 4
lane_in_block = lane % 4"] - BLOCK["my_block = wi*256 + wave_id*16 + block_in_wave
fixed shape covers every block exactly once"] - LOAD["4-lane group handles one 32-value MXFP4 block
each lane loads 8 bf16 values
as 4 i32 words"] - AMAX["compute abs max
local lane max over 8 values
quad reduce with shuffle_xor offsets 1 and 2"] - SCALE["derive e8m0 scale
bexp from max exponent
e8m0 = clamp(bexp - 2, 0, 254)
quant_scale = e8m0 as f32 power-of-two"] - PACK["pack 8 values for this lane
llvm.amdgcn.cvt.scalef32.pk.fp4.f32
4 pair conversions -> one i32"] - STOREQ["a_quant word store
q_word = my_block*4 + lane_in_block"] - STORES["lane_in_block == 0
a_scale byte store
a_scale(my_block) = e8m0"] - - CTA --> WILOOP --> MAP --> BLOCK --> LOAD --> AMAX --> SCALE --> PACK --> STOREQ - SCALE --> STORES - end - - STOREQ --> AQ["a_quant
(16384, 3584) uint8"] - STORES --> AS["a_scale
(16384, 224) uint8"] -``` - -Equivalent scalar pseudocode: - -```python -for bx in parallel_range(512): - for wi in range(bx * 28, bx * 28 + 28): - for tx in parallel_range(1024): - wave_id = tx // 64 - lane = tx % 64 - block_in_wave = lane // 4 - lane_in_block = lane % 4 - - my_block = wi * 256 + wave_id * 16 + block_in_wave - - # The code still has a my_block < total_blocks guard, but this - # fixed shape covers exactly 3670016 blocks. - base = my_block * 32 + lane_in_block * 8 - vals = load_8_bf16_values(hidden_states, base) - - local_amax = max(abs(vals)) - block_amax = quad_reduce_max(local_amax) - e8m0 = clamp(exponent(block_amax) - 2, 0, 254) - quant_scale = e8m0_to_f32_scale(e8m0) - - packed_i32 = pack_8_values_to_fp4(vals, quant_scale) - a_quant_words[my_block * 4 + lane_in_block] = packed_i32 - - if lane_in_block == 0: - a_scale[my_block] = e8m0 -``` - -Output layout: - -| output | meaning | -| --- | --- | -| `a_quant(token, model_byte)` | packed fp4 hidden values; two fp4 values per byte | -| `a_scale(token, model_block32)` | one e8m0 scale per 32 hidden values | - -## Kernel 5: `sort_scales` - -The fifth actual GPU launch is: - -```python -sort_scales( - a_scale, - sorted_token_ids, - cumsum_tensor, - a_scale_sorted_shuffled, -).launch( - grid=(512, 1, 1), - block=(1024, 1, 1), -) -``` - -This kernel gathers the token-major activation scales into the shuffled layout -that GEMM1 expects. `a_quant` itself is not sorted; GEMM1 uses `m_indices` to -load token rows. The scales are sorted and swizzled ahead of time because the -MFMA scale path consumes them in a compact packed order. - -Fixed constants: - -| item | value | -| --- | ---: | -| input `a_scale` | `(16384, 224)` uint8 | -| sorted chunks | `max_sorted / 128 = 1534` | -| scale columns per token | `7168 / 32 = 224` | -| row groups per BM128 chunk | `c_m1 = 4` | -| K groups | `c_k1 = 28` | -| output dwords per chunk | `4 * 28 * 4 * 16 = 7168` | -| total work dwords | `1534 * 7168 = 10995712` | -| launch threads | `512 * 1024 = 524288` | -| loop trips per thread upper bound | `ceil(10995712 / 524288) = 21` | -| output bytes | `196352 * 224 * 2 = 87965696` | - -```mermaid -flowchart TD - AS["a_scale
(16384, 224) uint8
token-major"] --> K5 - STI["sorted_token_ids
(196352) int32
sorted row -> packed token/topk"] --> K5 - CS["cumsum_tensor(0)
actual padded sorted rows"] --> K5 - - subgraph K5["sort_scales CTA work"] - direction TB - CTA["one thread owns a strided sequence of work dwords
global_tid = bx*1024 + tx
work += 512*1024"] - ZERO["zero output dword first
a_scale_sorted_shuffled(work) = 0"] - DECODE["decode flat work id
n_lane = work % 16
k_lane = work / 16 % 4
ku = work / 64 % 28
mi = work / 1792 % 4
chunk = work / 7168"] - VALID["valid chunk check
chunk < ceil(cumsum_tensor(0) / 128)"] - ROWS["select two sorted rows
row0 = chunk*128 + (mi*2 + 0)*16 + n_lane
row1 = chunk*128 + (mi*2 + 1)*16 + n_lane"] - TOK["load sorted_token_ids(row0,row1)
extract token id
padding token TOKEN maps to token 0 for safe scale load"] - GATHER["gather four scale bytes
two rows x two k-pack positions
k_idx = ku*8 + ikxdl*4 + k_lane"] - PACK["pack bytes into one i32
byte0 row0 k0
byte1 row1 k0
byte2 row0 k1
byte3 row1 k1"] - STORE["store packed dword
a_scale_sorted_shuffled(work) = packed"] - - CTA --> ZERO --> DECODE --> VALID --> ROWS --> TOK --> GATHER --> PACK --> STORE - end - - STORE --> ASS["a_scale_sorted_shuffled
flat uint8
GEMM1 scale layout"] -``` - -Equivalent scalar pseudocode: - -```python -actual_sorted = cumsum_tensor[0] -actual_n_chunks = ceil(actual_sorted / 128) - -for work in parallel_strided_range(total_work, stride=512 * 1024): - a_scale_sorted_shuffled_dwords[work] = 0 - - n_lane = work % 16 - k_lane = (work // 16) % 4 - ku = (work // 64) % 28 - mi = (work // (16 * 4 * 28)) % 4 - chunk = work // (16 * 4 * 28 * 4) - - if chunk < actual_n_chunks: - packed = 0 - - tok_ids = [] - for im_a in range_constexpr(2): - sorted_row = chunk * 128 + (mi * 2 + im_a) * 16 + n_lane - packed_token_topk = sorted_token_ids[sorted_row] - token = packed_token_topk & 0x00FFFFFF - token = token if token < TOKEN else 0 - tok_ids.append(token) - - for ikxdl in range_constexpr(2): - for im_a in range_constexpr(2): - k_idx = ku * 8 + ikxdl * 4 + k_lane - byte = a_scale[tok_ids[im_a], k_idx] - packed |= byte << ((ikxdl * 2 + im_a) * 8) - - a_scale_sorted_shuffled_dwords[work] = packed -``` - -The packed output is deliberately not a readable `(sorted_row, scale_col)` -matrix. It is a GEMM1 input stream arranged to match the later -`mfma_scale_f32_16x16x128_f8f6f4` scale operand pattern. - -## Stage Notes - -### 1. Quantize Hidden - -`kimi_mxfp4_quant_16384(hidden_states)` reads bf16 hidden states in original -token order and writes: - -```text -a_quant: (TOKEN, MODEL_DIM / 2) = (16384, 3584) -a_scale: (TOKEN, MODEL_DIM / 32) = (16384, 224) -``` - -Each scale covers 32 bf16 values. The data is still token-major at this point. - -### 2. Sort Scales - -`a_quant` is not physically sorted before GEMM1. GEMM1 uses `m_indices` to -lookup the source token row. The scale layout is different: GEMM1 expects a -GEMM-friendly shuffled scale stream, so `kimi_mxfp4_sort_scales_16384` gathers -`a_scale[token]` through `sorted_token_ids` and writes -`a_scale_sorted_shuffled`. - -The output is not a plain matrix. The wrapper allocates: - -```text -padded_rows * (MODEL_DIM / 32) * 2 -= 196352 * 224 * 2 bytes -``` - -### 3. GEMM1 - -`kimi_mxfp4_gemm1_16384` works in sorted expert-major row order: - -```text -for each sorted BM128 block: - expert = sorted_expert_ids[block] - token rows = m_indices[sorted rows] - load hidden MXFP4 from a_quant[token] - load W_gate and W_up for expert - compute gate/up - compute SiLU(gate) * up - quantize intermediate to MXFP4 -``` - -Outputs: - -```text -inter_sorted_quant: (196352, 256) uint8 -inter_sorted_shuffled_scale: (785408, 16) uint8 -``` - -`inter_sorted_shuffled_scale` is already in the scale layout expected by GEMM2, -so it is larger than the logical `(196352, 16)` scale matrix. - -### 4. GEMM2 MXFP4OUT - -`kimi_mxfp4_gemm2_mxfp4out_16384` keeps the sorted row order: - -```text -inter_sorted_quant @ W_down[expert] -``` - -It does not reduce TOPK and it does not write bf16 staging. It writes an MXFP4 -output row per sorted routed row: - -```text -flat_out_q: (196352, 3584) uint8 -flat_out_scale: (196352, 224) uint8 -``` - -This is the important difference from the older bf16 staging path. The older -path materialized `[TOKEN, TOPK, MODEL_DIM]` bf16 and then called `torch.sum`. -This path keeps output packed and delays the weighted TOPK reduce to the next -kernel. - -### 5. Scatter/Reduce - -`kimi_mxfp4_scatter_reduce_q_16384` switches back to token-major output order. -For each token and output column group, it walks `TOPK=9` routes: - -```text -orig = token * TOPK + topk_slot -sorted_row = reverse_sorted[orig] -weight = sorted_weights[sorted_row] -value = dequant(flat_out_q[sorted_row], flat_out_scale[sorted_row]) -acc += value * weight -``` - -The final result is: - -```text -out: (16384, 7168) bf16 -``` - -## Reading Order In Code - -Use this order if you want to understand or edit the file: - -1. `run_kimi_fp4_mxfp4_moe_16384_all_flydsl` -2. `kimi_mxfp4_sort_16384` -3. `compile_kimi_mxfp4_sort_16384` -4. `kimi_mxfp4_quant_16384` -5. `kimi_mxfp4_sort_scales_16384` -6. `kimi_mxfp4_gemm1_16384` -7. `kimi_mxfp4_gemm2_mxfp4out_16384` -8. `kimi_mxfp4_scatter_reduce_q_16384` - -When debugging correctness, keep these invariants in mind: - -| invariant | why it matters | -| --- | --- | -| `cumsum_tensor[0] <= max_sorted` | actual padded rows must fit allocated buffers | -| `sorted_expert_ids` is per BM128 block | GEMM kernels pick expert weights by block | -| padding token id is `TOKEN` | GEMM kernels can guard invalid rows | -| `reverse_sorted` maps original pair to sorted row | scatter/reduce needs original token-major route order | -| `sorted_weights` is sorted-row aligned | final reduce multiplies each decoded row by the route weight | diff --git a/docs/kimi_fp4_moe_16384_opt_notes.md b/docs/kimi_fp4_moe_16384_opt_notes.md deleted file mode 100644 index 5bee391a2..000000000 --- a/docs/kimi_fp4_moe_16384_opt_notes.md +++ /dev/null @@ -1,3289 +0,0 @@ -# Kimi FP4 MoE 16384 Opt Notes - -## Scope - -This note tracks the migration experiment for the fixed Kimi M=16384 row: - -- `TOKEN=16384` -- `EXPERTS=385` -- `MODEL_DIM=7168` -- `INTER_DIM=512` -- `TOPK=9` -- current FlyDSL kernels: - - `flydsl_moe1_afp4_wfp4_bf16_t64x128x256_w4_bnt0_xcd4` - - `flydsl_moe2_afp4_wfp4_bf16_t64x256x256_reduce_xcd4` -- mxfp4 row selected by aiter for this same shape: - - `mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128` - - `mxfp4_moe_g2_a4w4_NE385_H7168_E512_BM128_NONATOMIC_MXFP4OUT` - -The new experiment file is `kimi_fp4_moe_16384_opt.py`. - -## Current FlyDSL Path - -`kimi_fp4_moe_16384.py` is already specialized to the single CSV-selected -FlyDSL row. Its end-to-end path is: - -1. `moe_sorting_opus_fwd` with `BLOCK_M=64`. - It produces `sorted_ids`, `sorted_weights`, `sorted_expert_ids`, and - `num_valid_ids`. -2. `fused_dynamic_mxfp4_quant_moe_sort(hidden_states, ...)`. - For M=16384 this is the large-M split path: per-token fp4 quant first, - then scale sorting/swizzle through `mxfp4_moe_sort_hip`. -3. FlyDSL stage1 writes bf16 intermediate `[TOKEN, TOPK, INTER_DIM]`. -4. `fused_dynamic_mxfp4_quant_moe_sort(a2.view(-1, INTER_DIM), ...)`. -5. FlyDSL stage2 writes weighted bf16 per topk slot into a large - `[TOKEN, TOPK, MODEL_DIM]` staging buffer, then `torch.sum(..., dim=1)`. - -The important point: the current FlyDSL path already uses the mxfp4 scale-sort -helper for activation scales. It does not use the mxfp4 MoE sorter or the -mxfp4 output/scatter-reduce path. - -## Aiter mxfp4 Path - -The aiter mxfp4 route in `fused_moe.py` does a different pipeline: - -1. `mxfp4_moe_sort` with `BM=128`. - This emits `sorted_token_ids`, `sorted_expert_ids`, `cumsum_tensor`, - `reverse_sorted`, `sorted_weights`, `masked_m`, and `m_indices`. -2. `mxfp4_moe_quant` quantizes the original hidden states once. -3. `mxfp4_moe_sort_scales` produces the GEMM-consumed scale layout. -4. `mxfp4_moe_gemm1_a4w4` consumes `m_indices` and the mxfp4 preshuffled - weight/scale layout. -5. For this M=16384 row, stage2 uses `_MXFP4OUT`: - `mxfp4_moe_gemm2_a4w4_mxfp4out` writes packed fp4 output plus e8m0 scales, - then `mxfp4_moe_scatter_reduce_q` does weighted topk reduce. - -This avoids the FlyDSL path's large bf16 `[TOKEN, TOPK, MODEL_DIM]` stage2 -buffer and the final `torch.sum`. - -## Experiments Added - -`kimi_fp4_moe_16384_opt.py` has two entry points: - -- `run_kimi_fp4_flydsl_mxfp4_sort_16384` - - runs `mxfp4_moe_sort(BM=128)`; - - expands `sorted_expert_ids` from BM128 to BM64 with `repeat_interleave`; - - reuses the existing FlyDSL stage1/stage2 kernels. -- `run_kimi_fp4_flydsl_atomic_stage2_16384` - - keeps the current FlyDSL stage1; - - calls the generic FlyDSL stage2 in `mode="atomic"` to avoid the explicit - `[TOKEN, TOPK, MODEL_DIM]` bf16 staging buffer plus final `torch.sum`; - - this is a direct test of whether output accumulation, not mxfp4out, is - enough to close the gap. -- `run_kimi_fp4_mxfp4_moe_16384_opt` - - fixed-shape extraction of aiter's mxfp4 pipeline; - - no CSV dispatch; - - uses the mxfp4 sort, quant, sort_scales, gemm1, gemm2_mxfp4out, and - scatter_reduce_q operations directly. - -`bench_flydsl_16384.py` now compares: - -- `aiter_moe` -- `aiter_mxfp4_moe` -- `local_kimi_fp4` -- `local_kimi_fp4_mxfp4_sort` -- `local_kimi_fp4_atomic_stage2` -- `local_mxfp4_opt` - -## Validation - -Command: - -```bash -CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python bench_flydsl_16384.py --warmup 5 --graph-iters 5 --measure 5 -``` - -Result: - -```text -aiter_mxfp4_vs_aiter_cos=0.981046 aiter_mxfp4_vs_aiter_max_abs=1.828125 -local_vs_aiter_cos=1.000000 local_vs_aiter_max_abs=0.000000 -local_mxfp4_sort_vs_aiter_cos=1.000000 local_mxfp4_sort_vs_aiter_max_abs=0.000000 -local_atomic_stage2_vs_aiter_cos=0.999991 local_atomic_stage2_vs_aiter_max_abs=0.093750 -local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.000000 -aiter_moe_us=2289.4 -aiter_mxfp4_moe_us=1811.5 -local_kimi_fp4_us=2311.2 -local_kimi_fp4_mxfp4_sort_us=2375.4 -local_kimi_fp4_atomic_stage2_us=2745.6 -local_mxfp4_opt_us=1830.6 -``` - -Syntax check: - -```bash -/opt/venv/bin/python -m py_compile \ - kimi_fp4_moe_16384.py \ - kimi_fp4_moe_16384_opt.py \ - bench_flydsl_16384.py \ - profile_flydsl_16384.py -``` - -## Torch Profiler Snapshot - -Command: - -```bash -CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_kimi_fp4,local_mxfp4_opt \ - --warmup 3 --iters 5 --trace-dir profiler_traces -``` - -Profiler traces: - -- `profiler_traces/profile_16384_aiter_mxfp4_moe.json.gz` -- `profiler_traces/profile_16384_local_kimi_fp4.json.gz` -- `profiler_traces/profile_16384_local_mxfp4_opt.json.gz` - -### `aiter_mxfp4_moe` - -Total device time: `1920.5us/iter`, `8` kernels per iter. - -| idx | avg us | note | -| --- | ---: | --- | -| 0 | 6.4 | mxfp4 sort count | -| 1 | 10.7 | mxfp4 sort cumsum | -| 2 | 33.1 | mxfp4 sort place/pad | -| 3 | 52.4 | `mxfp4_moe_quant` | -| 4 | 59.5 | `mxfp4_moe_sort_scales` | -| 5 | 722.0 | `mxfp4_moe_gemm1_a4w4` | -| 6 | 905.7 | `mxfp4_moe_gemm2_a4w4_mxfp4out` | -| 7 | 130.7 | `mxfp4_moe_scatter_reduce_q` | - -### `local_kimi_fp4` - -Total device time: `2351.9us/iter`, `11` kernels per iter. - -| idx | avg us | note | -| --- | ---: | --- | -| 0 | 4.9 | Opus sort clear workspace | -| 1 | 4.8 | Opus sort phase 0 | -| 2 | 5.0 | Opus sort phase 1 | -| 3 | 65.0 | Opus sort phase 2/3 | -| 4 | 69.3 | quant hidden | -| 5 | 42.7 | scale sort hidden | -| 6 | 806.3 | FlyDSL stage1 | -| 7 | 31.4 | quant intermediate | -| 8 | 6.1 | scale sort intermediate | -| 9 | 928.9 | FlyDSL stage2 bf16 topk staging | -| 10 | 387.4 | PyTorch `torch.sum(TOPK)` reduce | - -### `local_mxfp4_opt` - -Total device time: `1872.4us/iter`, `8` kernels per iter. - -| idx | avg us | note | -| --- | ---: | --- | -| 0 | 6.6 | mxfp4 sort count | -| 1 | 10.7 | mxfp4 sort cumsum | -| 2 | 33.0 | mxfp4 sort place/pad | -| 3 | 53.2 | `mxfp4_moe_quant` | -| 4 | 58.7 | `mxfp4_moe_sort_scales` | -| 5 | 709.8 | `mxfp4_moe_gemm1_a4w4` | -| 6 | 870.6 | `mxfp4_moe_gemm2_a4w4_mxfp4out` | -| 7 | 129.7 | `mxfp4_moe_scatter_reduce_q` | - -### Delta Summary - -Compared with `aiter_mxfp4_moe`, `local_kimi_fp4` spends roughly: - -- `+84us` in stage1 (`806us` vs `722us`). -- `+23us` in stage2 GEMM itself (`929us` vs `906us`), but this is not the main - issue. -- `+387us` in the separate PyTorch TOPK reduce after stage2. -- `+50us` more in sort/quant/scale-sort orchestration because the current path - uses Opus sort plus two generic quant+scale-sort pairs instead of the mxfp4 - BM128 prologue. - -The main gap is therefore the stage2 output/reduce design: current FlyDSL -materializes bf16 `[TOKEN, TOPK, MODEL_DIM]` and then reduces it, while mxfp4 -materializes packed fp4 output plus scales and uses a specialized -scatter/reduce kernel. - -## Conclusions - -The "maybe sort should be written into the kernel" hypothesis is not enough by -itself. Replacing Opus sorting with `mxfp4_moe_sort` is correct after expanding -BM128 expert ids to BM64, but it does not improve performance for the current -FlyDSL GEMMs. It is slightly slower in the measured run because it pads to -BM128 and still executes the same FlyDSL stage2 bf16 staging plus `torch.sum`. - -The speed gap is more likely in the stage2 output/reduce design: - -- FlyDSL current path materializes bf16 topk output and reduces with - `torch.sum`. -- mxfp4 uses `_MXFP4OUT` to materialize packed fp4 output and reduces with - `mxfp4_moe_scatter_reduce_q`. - -The atomic FlyDSL experiment confirms that plain atomic accumulation is not the -missing piece for this shape. It avoids the explicit `torch.sum`, but bf16 -atomics are much slower here and introduce small order-dependent numeric drift: -`local_kimi_fp4_atomic_stage2_us=2745.0`, slower than both the current reduce -path and mxfp4. - -The current performance-aligned optimized path is `local_mxfp4_opt`. It is a -fixed-shape extraction of the mxfp4 pipeline and lands within about 1% of -`aiter_mxfp4_moe` in the measured run (`1822.4us` vs `1804.1us`) while avoiding -the dynamic CSV/fused_moe dispatch. - -The next useful migration step is therefore not just moving sort into FlyDSL. -It should be one of: - -1. Add a FlyDSL stage2 mxfp4out epilogue and use `mxfp4_moe_scatter_reduce_q`. -2. Port the scatter-reduce-q logic to FlyDSL after stage2 can emit packed fp4 - output plus e8m0 scales. -3. Then revisit a native FlyDSL sorter or BM128 stage1/stage2 tiling if the - remaining overhead is still sorting-related. - -The fixed `local_mxfp4_opt` path is useful as the migration reference because -it strips away the CSV/dynamic fused_moe dispatch and leaves only the exact -ops needed for this Kimi row. - -## Migration Plan - -The migration is tracked as one kernel at a time, with a fixed-shape aiter -oracle kept next to the active FlyDSL candidate: - -- `run_kimi_fp4_mxfp4_moe_16384_aiter_ref` - keeps the extracted Kimi M=16384 mxfp4 pipeline on aiter kernels only. -- `run_kimi_fp4_mxfp4_moe_16384_opt` - is the active migration candidate. -- `_run_mxfp4_pipeline_16384(...)` - has explicit switches for `gemm1`, `gemm2`, and `scatter_reduce_q`. - -The intended order remains: - -1. Port `scatter_reduce_q`. -2. Port `gemm2_a4w4_mxfp4out`. -3. Port `gemm1_a4w4`. -4. Revisit the aux kernels only after the GEMM/reduce path is performance - aligned. - -## Migration Log - -### Step 0: Fixed Aiter Oracle - -`local_mxfp4_aiter_ref` was added to `bench_flydsl_16384.py`. It calls the -same fixed-shape pipeline as `local_mxfp4_opt`, but leaves all kernels on -aiter. This gives a local oracle that avoids CSV dispatch while preserving the -exact mxfp4 behavior. - -Validation: - -```text -local_mxfp4_aiter_ref_vs_aiter_mxfp4 cos=1.000000 max_abs=0.000000 -``` - -### Step 1: FlyDSL `scatter_reduce_q` - -`kimi_fp4_moe_16384_opt.py` now contains -`kimi_mxfp4_scatter_reduce_q_16384`, a fixed-shape FlyDSL port of aiter's -`scatter_reduce_mxfp4_kernel<7168, 9, 8, true>`. - -The kernel shape is fixed to: - -- `D_HIDDEN=7168` -- `TOPK=9` -- `THREADS_PER_CTA=128` -- `COLS_PER_THREAD=8` -- grid `x=7`, grid `y=16384` - -The first correct version decoded each FP4 nibble with scalar select logic. -It was bitwise correct after using `math.fma` and `v_cvt_pk_bf16_f32`, but -the scatter kernel took about `514us`, far slower than aiter's `~132us`. - -The optimized version uses the gfx950 intrinsic -`llvm.amdgcn.cvt.scalef32.pk.f32.fp4`, matching aiter's -`__builtin_amdgcn_cvt_scalef32_pk_f32_fp4` path. Each thread loads one packed -`u32`, calls the intrinsic four times to decode 8 FP4 values to f32 with the -E8M0 scale applied, accumulates with `math.fma`, then packs the final 8 values -to 4 bf16 words with `v_cvt_pk_bf16_f32`. - -The attempted `vector<8xf4E2M1FN>` route does not currently lower cleanly in -FlyDSL/LLVM: it leaves an unrealized conversion cast from `vector<8xi4>` to -`vector<8xf4E2M1FN>`. Keep using the AMD intrinsic for this port. - -Validation: - -```text -local_mxfp4_opt_vs_aiter_mxfp4 cos=1.000000 max_abs=0.000000 -``` - -Profiler snapshot after intrinsic decode: - -```text -local_mxfp4_aiter_ref device_total_us_per_iter=1927.1 - scatter_reduce_mxfp4_kernel ~132.7us - -local_mxfp4_opt device_total_us_per_iter=1958.8 - flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9 ~144.2us -``` - -CUDAGraph snapshot: - -```text -aiter_mxfp4_moe_us=1798.2 -local_mxfp4_aiter_ref_us=1794.3 -local_mxfp4_opt_us=1825.1 -``` - -Selected bench command after adding `--runners`: - -```bash -CUDA_VISIBLE_DEVICES=5 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_aiter_ref,local_mxfp4_opt \ - --warmup 3 --graph-iters 5 --measure 3 -``` - -Result: - -```text -local_mxfp4_ref_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_ref_vs_aiter_mxfp4_max_abs=0.000000 -local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1822.3 -local_mxfp4_aiter_ref_us=1820.4 -local_mxfp4_opt_us=1829.0 -``` - -Current status: the first real migrated kernel is bitwise correct and within -roughly `+11-12us` of the aiter scatter kernel in profiler, `+31us` end to end -in one CUDAGraph run and `+9us` in the selected bench run above. The next step -is `gemm2_a4w4_mxfp4out`, because -that is the largest remaining single kernel and it defines the packed FP4 -output contract consumed by this scatter/reduce kernel. - -### Step 2: FlyDSL `gemm2_a4w4_mxfp4out` Candidate - -`kimi_fp4_moe_16384_opt.py` now contains -`kimi_mxfp4_gemm2_mxfp4out_16384`, an experimental fixed-shape FlyDSL port of -aiter's Kimi-only `mxfp4_moe_gemm2_a4w4_mxfp4out` path. - -The implemented contract matches the aiter mxfp4-out path: - -- input A is already sorted flat: `[max_sorted, 512 / 2]` packed FP4 -- input A scale is the shuffled scale buffer produced by aiter GEMM1 -- input B is the mxfp4 preshuffled W2 buffer -- output is sorted-row-major `flat_out_q` plus `flat_out_scale` -- output is consumed by `kimi_mxfp4_scatter_reduce_q_16384` - -The first version intentionally prioritizes correctness over scheduling: - -- BM=128, BN=256, BK=256, K=512 -- 2D grid: N block by sorted-M block -- no persistent work loop yet -- no AGPR accumulator inline-asm path yet -- f32 CShuffle-style epilogue quantizes 8 contiguous f32 values per thread -- uses `llvm.amdgcn.cvt.scalef32.pk.fp4.f32` for FP4 packing - -Validation: - -```text -local_mxfp4_opt_gemm2_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm2_vs_aiter_mxfp4_max_abs=0.000000 -``` - -CUDAGraph snapshot: - -```text -aiter_mxfp4_moe_us=1831.7 -local_mxfp4_aiter_ref_us=1822.5 -local_mxfp4_opt_us=1819.1 -local_mxfp4_opt_gemm2_us=2089.7 -``` - -Profiler snapshot: - -```text -local_mxfp4_aiter_ref: - aiter gemm2 mxfp4out ~856.4us - aiter scatter_reduce_q ~128.9us - -local_mxfp4_opt_gemm2: - flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0 ~1172.2us - flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9 ~139.9us -``` - -Conclusion: the GEMM2 port is bitwise correct, but not performance aligned. -The current gap is dominated by GEMM2 itself (`~+315us` in the profiler -snapshot). The most likely reasons are exactly the deliberate omissions: -aiter uses a persistent 1D grid capped around CU count and pins the BM=128 -non-atomic path accumulators into AGPRs; this FlyDSL v0 uses many more CTAs and -regular MFMA accumulator values. The next optimization target is to change the -FlyDSL GEMM2 launch/body to a persistent work loop, then investigate AGPR MFMA -inline asm or compiler support if the remaining gap is still large. - -### Step 3: FlyDSL `gemm1_a4w4` Candidate - -`kimi_fp4_moe_16384_opt.py` now contains -`kimi_mxfp4_gemm1_16384`, a fixed-shape FlyDSL candidate for aiter's selected -Kimi mxfp4 GEMM1: - -```text -mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128 -``` - -The runner wired into `bench_flydsl_16384.py` is: - -```text -local_mxfp4_opt_gemm1 -``` - -That path uses aiter sort, quant, sort_scales, a FlyDSL GEMM1, aiter GEMM2 -mxfp4out, and the existing FlyDSL scatter/reduce-q. - -Correctness fixes made during the port: - -- GEMM1 scale indexing must advance one `kBS_stride_k0_dw` per BK=256 tile. - The first draft used `k_tile * k_unroll * kBS_stride_k0_dw`, which skipped - every other scale block after tile 0. -- Invalid padded `m_indices` rows must read one-past the A buffer, matching - aiter's MUBUF OOB-zero behavior. Falling back to token 0 made padded rows - nonzero and broke the GEMM1 output. -- After those fixes, `inter_sorted_quant[:cumsum]` is bitwise exact versus - aiter GEMM1. The used prefix of `inter_sorted_shuffled_scale` is also exact; - unused tail bytes may differ because both outputs are allocated with - `torch.empty`. - -CUDAGraph snapshot on `CUDA_VISIBLE_DEVICES=6`: - -```text -local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_vs_aiter_mxfp4_max_abs=0.023438 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.023438 -aiter_mxfp4_moe_us=1850.6 -local_mxfp4_opt_us=1840.2 -local_mxfp4_opt_gemm1_us=2298.9 -``` - -Profiler snapshot on `CUDA_VISIBLE_DEVICES=6`: - -```text -local_mxfp4_aiter_ref: - device_kernel_calls_per_iter=8 - aiter gemm1 ~727.3us - aiter gemm2 mxfp4out ~916.3us - aiter scatter_reduce_q ~134.3us - -local_mxfp4_opt_gemm1: - device_kernel_calls_per_iter=8 - flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v0 ~1228.1us - aiter gemm2 mxfp4out ~861.4us - flydsl scatter_reduce_q ~137.5us -``` - -Kernel count status: aligned. The aiter reference, `local_mxfp4_opt`, and -`local_mxfp4_opt_gemm1` all launch 8 kernels per iteration: - -```text -sort_count -sort_cumsum -sort_place_pad -quant -sort_scales -gemm1 -gemm2_mxfp4out -scatter_reduce_q -``` - -Performance status: GEMM1 is functionally aligned but not performance aligned. -The current gap is about `+500us` in profiler (`~1228us` FlyDSL vs `~727us` -aiter). The known missing pieces are aiter's overlapped A/B/scale pipeline and -BM=128 AGPR accumulator inline-asm path. A quick attempt to express ping-pong A -staging at the Python level was not kept because it broke correctness and did -not improve time; this needs a more literal port of aiter's physical LDS slots -and wait/barrier schedule. - -### Step 4: GEMM1 Resource Inspection - -The selected aiter HIP GEMM1 instance was compiled with: - -```text --Rpass-analysis=kernel-resource-usage -``` - -Selected source: - -```text -/root/up-aiter/aiter/jit/build/module_moe_mxfp4_gemm/blob/instances/mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128.cu -``` - -Compiler resource report: - -```text -TotalSGPRs: 49 -VGPRs: 165 -AGPRs: 168 -ScratchSize [bytes/lane]: 0 -Dynamic Stack: False -Occupancy [waves/SIMD]: 1 -SGPRs Spill: 0 -VGPRs Spill: 0 -LDS Size [bytes/block]: 131072 -``` - -The FlyDSL GEMM1 hsaco metadata currently reports: - -```text -agpr_count: 0 -sgpr_count: 46 -vgpr_count: 222 -sgpr_spill_count: 0 -vgpr_spill_count: 0 -private_segment_fixed_size: 0 -group_segment_fixed_size: 131072 -max_flat_workgroup_size: 256 -wavefront_size: 64 -``` - -Disassembly confirms the structural difference. aiter's MFMA accumulators are -allocated in AGPRs: - -```asm -v_mfma_scale_f32_16x16x128_f8f6f4 a[0:3], ... -v_mfma_scale_f32_16x16x128_f8f6f4 a[4:7], ... -``` - -The FlyDSL candidate currently accumulates into VGPRs: - -```asm -v_mfma_scale_f32_16x16x128_f8f6f4 v[2:5], ... -v_mfma_scale_f32_16x16x128_f8f6f4 v[6:9], ... -``` - -Local artifacts: - -```text -resource_inspect/aiter_gemm1_rpass/compile.stderr -resource_inspect/aiter_gemm1_rpass/aiter_gemm1_bm128.hsaco -resource_inspect/aiter_gemm1_rpass/aiter_gemm1_bm128.s -resource_inspect/flydsl_gemm1.hsaco -resource_inspect/flydsl_gemm1.s -``` - -Conclusion: this is not a spill problem. Both kernels have zero scratch and the -same 128KiB LDS allocation. The main confirmed resource gap is that aiter uses -168 AGPRs for accumulators while FlyDSL uses 0 AGPRs and raises VGPR pressure to -222. The next GEMM1 optimization should port the AGPR MFMA inline-asm path from -aiter before spending time on smaller schedule tweaks. - -### Step 5: Grid and Waitcnt Comparison - -Current grid status for the fixed M=16384 mxfp4 path: - -```text -sort_count: grid=[16, 1, 1] block=[1024, 1, 1] -sort_cumsum: grid=[1, 1, 1] block=[1024, 1, 1] -sort_place_pad: grid=[16, 1, 1] block=[1024, 1, 1] -quant: grid=[512, 1, 1] block=[1024, 1, 1] -sort_scales: grid=[512, 1, 1] block=[1024, 1, 1] -aiter GEMM1: grid=[6136, 1, 1] block=[256, 1, 1] -FlyDSL GEMM1: grid=[4, 1534, 1] block=[256, 1, 1] -aiter GEMM2: grid=[256, 1, 1] block=[256, 1, 1] -FlyDSL GEMM2: grid=[28, 1534, 1] block=[256, 1, 1] -scatter_reduce_q: grid=[7, 16384, 1] block=[128, 1, 1] -``` - -GEMM1 launches the same number of CTAs: - -```text -1534 M blocks * 4 N blocks = 6136 CTAs -``` - -aiter expresses this as a 1D grid and maps `pid / 4` to M and `pid % 4` to N. -FlyDSL expresses the same logical work as a 2D grid with `x=N` and `y=M`. -This grid shape is not the main GEMM1 gap. - -GEMM2 is different: aiter's nonatomic mxfp4out path is persistent and launches -only `NUM_CU=256` CTAs, while the current FlyDSL GEMM2 candidate launches the -full logical tile grid: - -```text -28 N blocks * 1534 M blocks = 42952 CTAs -``` - -That explains why the GEMM2 candidate is also slower; it is not just a local -MFMA schedule issue. - -Static GEMM1 ISA counts before the waitcnt tweak: - -```text - aiter GEMM1 FlyDSL GEMM1 v0 -mfma_scale 1792 1792 -buffer_load 408 622 -ds_read 536 480 -ds_write 128 96 -s_waitcnt 320 499 -s_barrier 30 58 -s_nop 123 455 -``` - -The MFMA count is aligned, so the gap is in load/wait/barrier scheduling and -epilogue/control overhead. The original FlyDSL loop did: - -```text -barrier -A raw load -> LDS -B load -> VGPR -A/B scale load -> VGPR -s_waitcnt(0) -barrier -compute -``` - -The first small optimization keeps the single-LDS-buffer structure but changes -the pre-compute wait from `s_waitcnt(0)` to `s_waitcnt(14)`. For this GEMM1 -tile, each K tile issues: - -```text -8 A raw LDS VMEM loads -8 B vector VMEM loads -6 scale VMEM loads -``` - -Waiting until `vmcnt <= 14` is enough for the older 8 A->LDS loads to complete -before the cross-wave barrier. The newer B and scale loads can continue until -their values are actually consumed by the MFMA path. This mirrors the aiter -idea of not draining all VMEM before the barrier. - -Validated result for `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v1`: - -```text -CUDAGraph: - local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 - local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 - aiter_mxfp4_moe_us=1804.5 - local_mxfp4_opt_gemm1_us=2248.6 - -Profiler: - FlyDSL GEMM1 v1 ~1184.5us - previous FlyDSL GEMM1 v0 snapshot ~1226.6us - aiter GEMM1 snapshot ~725.0us -``` - -The v1 resource metadata remains: - -```text -agpr_count=0 -sgpr_count=46 -vgpr_count=222 -spill=0 -LDS=131072 -``` - -Because VGPR does not spill, AGPR is not the first required porting target. It -may still help occupancy or scheduling later, but the confirmed gap is currently -extra load/wait/barrier work in the FlyDSL GEMM1 body. - -An attempted one-ahead LDS double-buffer/prefetch experiment reduced time a -little but produced incorrect output, so it was not kept. A correct version -needs to match aiter's physical LDS slot lifetime and explicit LDS read/write -ordering more closely instead of just moving Python-level loads. - -### Step 6: GEMM1 Load Reduction Checkpoint - -The next two changes were kept in `kimi_fp4_moe_16384_opt.py` after validating -correctness against aiter mxfp4. - -First, the A raw LDS DMA byte count was fixed for packed FP4: - -```python -bytes_per_thread_x = tile_m * tile_k // a_elem_vec_pack // total_threads -``` - -The old expression missed the FP4 pack ratio and loaded twice the required A -bytes per K tile. Static ISA counts changed from: - -```text -FlyDSL v1 buffer_load total: 622 - buffer_load_dwordx4 lds,offen: 224 -``` - -to: - -```text -FlyDSL v2 buffer_load total: 510 - buffer_load_dwordx4 lds,offen: 112 -``` - -That aligns the A raw vector load count with aiter, whose corresponding -`buffer_load_dwordx4 lds,offen` count is 116. - -Second, A scales were moved from per-K-tile global scalar loads into a CTA-level -LDS preload that mirrors aiter's `issue_a_scale_load` / `issue_a_scale_ds_read` -structure: - -```text -A scale global -> LDS once per CTA -MFMA loop reads A scale dwords from LDS -``` - -Validated CUDAGraph result for -`flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v3`: - -```text -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1813.3 -local_mxfp4_opt_gemm1_us=2148.7 -``` - -This is a runnable checkpoint. It improves the earlier v1 CUDAGraph snapshot -(`2248.6us`) but GEMM1 is still not fully aligned with aiter. - -### Step 7: GEMM1 Two-Slot A Pipeline - -The next useful optimization is `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v5`. -It changes the GEMM1 K loop from a single A LDS slot to two A LDS slots: - -```text -slot 0: compute K tile i -slot 1: preload A for K tile i + 1 -``` - -B and B-scale for the next tile are also issued before computing the current -tile. This mirrors the important part of aiter's two-stage GEMM1 pipeline -without changing FlyDSL compiler passes. - -The launch grid is not the main GEMM1 issue: - -```text -aiter GEMM1 CTA grid: 6136 x 1 x 1, block 256 -FlyDSL GEMM1 CTA grid: 4 x 1534 x 1, block 256 -``` - -Both are 6136 CTAs. `rocprofv3` reports global work-items, so the same launch -appears as: - -```text -aiter: Grid_Size=(1570816, 1, 1) -FlyDSL: Grid_Size=(1024, 1534, 1) -``` - -Static GEMM1 ISA counts after v5: - -```text - aiter GEMM1 FlyDSL GEMM1 v3 FlyDSL GEMM1 v5 -mfma_scale 1792 1792 1792 -buffer_load 408 414 414 -ds_read 536 543 543 -ds_write 128 96 96 -s_waitcnt 320 599 492 -s_barrier 30 58 31 -s_nop 123 388 416 -``` - -Validated CUDAGraph result for v5: - -```text -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1805.4 -local_mxfp4_opt_gemm1_us=2128.0 -``` - -Torch profiler snapshot for the GEMM1 kernel itself: - -```text -aiter GEMM1: 733.9us -FlyDSL v5: 1070.8us -``` - -Resource metadata from the FlyDSL cached artifact: - -```text -agpr_count=0 -sgpr_count=42 -vgpr_count=238 -spill=0 -LDS=131072 -``` - -This confirms the current remaining GEMM1 gap is no longer grid or raw load -count. The biggest static differences are now the extra `s_waitcnt` count and -the much larger `s_nop` scheduler padding. A tried source-level reorder that -held A fixed while sweeping N groups stayed correct but regressed CUDAGraph -time to about `2286.8us`, so it was not kept. - -### Step 8: v7 Load Count and ATT Checkpoint - -The current committed checkpoint is: - -```text -c4a9fbf4 Checkpoint runnable Kimi mxfp4 GEMM1 optimization -``` - -`kimi_fp4_moe_16384_opt.py` is back at module suffix `v7`. This version is -bit-exact against aiter mxfp4 for GEMM1: - -```text -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -``` - -The pipeline kernel count is aligned with aiter mxfp4: both paths launch 8 -kernels. GEMM1 launch shape is also equivalent in CTA count: - -```text -aiter GEMM1: wg=(256,1,1), grid=(1570816,1,1) threads = 6136 CTAs -FlyDSL v7: wg=(256,1,1), grid=(1024,1534,1) threads = 6136 CTAs -``` - -Static ISA confirms the important global load widths/counts are now aligned: - -```text - aiter GEMM1 FlyDSL GEMM1 v7 -v_mfma 1792 1792 -buffer_load 408 408 -buffer_load_x4 340 340 -buffer_load_dw 68 68 -global_load 4 4 -ds_read 536 543 -ds_write 128 96 -s_waitcnt 320 121 -s_barrier 30 31 -s_nop 123 441 -``` - -So the remaining gap is not extra `buffer_load` instructions or a different -preshuffle load width. The remaining differences are scheduling/LDS details: -FlyDSL still has more compiler scheduler padding and slightly different LDS -traffic. - -ATT decode for v7 shows the practical bottleneck more clearly: - -```text -aiter GEMM1: - total cycles 5.49M - total stalls 3.62M (65.9%) - MFMA/FMA 1.43M - VMEM-load 740.9K - VMEM-wait 644.9K - LDS 386.6K - barrier 166.8K - -FlyDSL GEMM1 v7: - total cycles 8.20M - total stalls 6.61M (80.6%) - VMEM-wait 2.54M - MFMA/FMA 1.71M - VMEM-load 1.28M - barrier 656.8K - LDS 147K - LDS/SMEMwait 129.7K -``` - -The next optimization target is therefore source scheduling: preserve the -matched load counts but make the K loop closer to aiter's `run_one` sequence, -where B/B-scale loads are issued per J cluster around MFMA clusters instead of -creating long outstanding VMEM regions that later force large waits. - -A v8 experiment moved A LDS reads before issuing the next tile's A/B VMEM -prefetch. It remained correct: - -```text -cos=1.000000 -max_abs=0.000000 -``` - -but regressed CUDAGraph time from the v7 range (`~2059-2078us`) to -`~2105-2148us`, likely because it reduced useful B-load overlap. That source -change was removed and should not be used as the next baseline. - -### Step 9: v9-v11 GEMM1 Scheduling Alignment - -The next successful direction was to match aiter's K-loop schedule more closely -instead of changing load counts. - -`v9` changed B from one-ahead to two-ahead: - -```text -initial: load B0 and B1 -loop K=i: compute with B_i, issue B_{i+2} by J cluster -``` - -This stayed bit-exact and improved GEMM1 from the v7 `~997-1042us` profiler -range to: - -```text -FlyDSL GEMM1 v9: 964.3us -``` - -ATT showed this was directionally useful but still wrong for A scheduling: -issuing future A before reading current A caused many compiler-inserted -`s_waitcnt vmcnt(0)` waits at the current A LDS read. - -`v10` fixed the order to the aiter shape: - -```text -read current A from LDS -issue future A -> LDS -compute current J cluster -issue future B for that J -``` - -This removed the large pre-A-read VMEM wait cluster. Results: - -```text -CUDAGraph short: - aiter_mxfp4_moe_us=1824.7 - local_mxfp4_opt_gemm1_us=1851.2 - -Torch profiler: - aiter GEMM1=729.8us - FlyDSL GEMM1 v10=752.7us - -ATT v10: - total cycles 5.63M - total stalls 3.89M (69.1%) - MFMA/FMA 1.47M - VMEM-wait 894.6K - VMEM-load 576.0K - LDS 413.2K - barrier 150.5K -``` - -`v11` then made A two-ahead as well: - -```text -initial: load A0/A1 and B0/B1 -loop K=i: read A_i, issue A_{i+2}, compute B_i, issue B_{i+2} -barrier wait keeps the newest future A+B tile outstanding -``` - -This remains bit-exact: - -```text -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -``` - -Longer CUDAGraph run: - -```text -CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ - --warmup 5 --graph-iters 20 --measure 20 - -aiter_mxfp4_moe_us=1816.8 -local_mxfp4_opt_gemm1_us=1845.2 -``` - -Profiler snapshot from a separate run: - -```text -aiter GEMM1=729.7us -FlyDSL GEMM1 v11=761.5us -``` - -ATT v11: - -```text -instructions 4479 -total cycles 5.83M -total stalls 4.01M (68.8%) -MFMA/FMA 1.53M -VMEM-wait 792.1K -VMEM-load 669.3K -LDS 430.2K -barrier 211.5K -``` - -Current conclusion: the main scheduling gap has been closed at the Python -level. Static load counts still match aiter (`buffer_load=408`, `MFMA=1792`). -The remaining GEMM1 difference is now small and is likely in lower-level -scheduling details, MFMA operand/register allocation, and the FlyDSL lowering -around waits/barriers rather than missing Python-level work. - -## GEMM1 Grid / Resource Audit - -The current saved code is commit `1af39d1f Optimize Kimi mxfp4 GEMM1 scheduling`. -The code state intentionally remains v11 after later experiments did not give a -stable win. - -GEMM1 launch/resource comparison from rocprof kernel traces: - -| kernel | workgroup | grid reported by rocprof | CTA count | LDS | VGPR | AGPR | SGPR | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| aiter GEMM1 | 256 | `(1570816, 1, 1)` | `1570816 / 256 = 6136` | 131072 | 168 | 0 | 112 | -| FlyDSL GEMM1 v11 | 256 | `(1024, 1534, 1)` | `(1024 / 256) * 1534 = 6136` | 131072 | 168 | 0 | 112 | -| FlyDSL GEMM1 v18 experiment | 256 | `(1024, 1534, 1)` | `(1024 / 256) * 1534 = 6136` | 131072 | 168 | 0 | 112 | - -So the grid shape differs (`aiter` flattens to 1D, FlyDSL uses `(N block, M -block)`), but the physical CTA count and resource numbers match. Since `N` -has four blocks, FlyDSL's 2D launch maps to the same logical tile order aiter -gets from `pid / 4` and `pid % 4`; changing to 1D would mainly add block-id -decode arithmetic unless the backend scheduler treats 1D/2D dispatch -differently. - -Static ATT instruction counts also show that the suspected extra preshuffle -loads are not the remaining issue: - -| instruction group | aiter | FlyDSL v11/v18 | -| --- | ---: | ---: | -| `v_mfma` | 1792 | 1792 | -| `buffer_load_dwordx4` | 340 | 340 | -| `buffer_load_dword` | 68 | 68 | -| `global_load` | 4 | 4 | - -Remaining notable static differences: - -| group | aiter | FlyDSL v11 | -| --- | ---: | ---: | -| total instructions | 4368 | 4479 | -| `s_waitcnt` | 320 | 375 | -| `s_barrier` | 30 | 31 | -| `ds_read` | 536 | 543 | -| `ds_write` | 128 | 96 | -| `v_add*` bucket | 143 | 255 | -| `v_or*` bucket | 55 | 133 | -| max ops | `v_max_f32/v_max3_f32` | `v_maximum3_f32` | - -Negative experiments after v11: - -- v18 changed MFMA operand packing from padded `i32x8` to direct `i32x4`. - It stayed bit-exact, but static ISA stayed effectively unchanged and long - CUDAGraph/profiler runs were not consistently faster. Not retained. -- Waitcnt bitfield encoder experiments with explicit `vmcnt=15/13` were - bit-exact but slower than the existing raw wait values. Not retained. -- Epilogue `local_max = fabs(result[0])` matched aiter source more closely but - slowed the measured GEMM1 path. Not retained. -- v20 forced volatile scalar LDS stores in the C-shuffle epilogue to avoid - `ds_write2_b32`. Without an explicit wait it was numerically unstable; with - the wait it was bit-exact but slower (`aiter_mxfp4_moe_us=1815.6`, - `local_mxfp4_opt_gemm1_us=1838.0` in a short graph run). Not retained. - -Next optimization targets: - -1. Reduce FlyDSL's extra epilogue/address arithmetic (`v_add*`, `v_or*`) if it - can be done without changing correctness. -2. Investigate why FlyDSL emits more `s_waitcnt` and one extra barrier in the - generated ISA. -3. Treat the Python-level GEMM1 schedule as close to the current ceiling until - a lowering/pass or targeted inline-asm change removes static instruction - differences. - -## Relaxed-Correctness GEMM1 v21 - -The correctness target was relaxed from bit-exact replacement to cosine-level -similarity. Under that target, v21 keeps the v11 schedule and changes only the -epilogue max reduction used for MXFP4 scale selection: - -```python -arith.maximumf(...) -``` - -becomes: - -```python -arith.MaxNumFOp(..., fastmath=arith.FastMathFlags.fast) -``` - -This aligns the generated max instructions more closely with aiter and removes -the `v_maximum3_f32` sequence from FlyDSL GEMM1. - -ATT static comparison: - -| group | aiter | FlyDSL v11 | FlyDSL v21 | -| --- | ---: | ---: | ---: | -| total instructions | 4368 | 4480 | 4480 | -| `v_mfma` | 1792 | 1792 | 1792 | -| `buffer_load_dwordx4` | 340 | 340 | 340 | -| `buffer_load_dword` | 68 | 68 | 68 | -| `global_load` | 4 | 4 | 4 | -| `v_maximum3` | 0 | 48 | 0 | -| `v_max3_f32` | 24 | 0 | 32 | -| `v_max_f32` | 40 | 0 | 16 | -| `s_waitcnt` | 320 | 375 | 375 | -| `s_barrier` | 30 | 31 | 31 | - -The full buffer-load variant breakdown remains exactly matched in v21: - -| buffer-load variant | count | -| --- | ---: | -| `buffer_load_dword lds,offen` | 12 | -| `buffer_load_dword offen` | 4 | -| `buffer_load_dword offen,offset` | 52 | -| `buffer_load_dwordx4 lds,offen` | 116 | -| `buffer_load_dwordx4 offen` | 56 | -| `buffer_load_dwordx4 offen,offset` | 168 | - -Measurements on GPU 6: - -```text -CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ - --warmup 8 --graph-iters 40 --measure 40 - -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1811.1 -local_mxfp4_opt_gemm1_us=1833.2 -``` - -Sanity rerun: - -```text -CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_opt_gemm1 \ - --warmup 5 --graph-iters 20 --measure 20 - -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1814.4 -local_mxfp4_opt_gemm1_us=1836.7 -``` - -A direct global-store experiment (`v23`) was also tested to mimic aiter's -`global_store` epilogue instead of FlyDSL `buffer_store`. It was not retained: -it produced `cos=0.999992`, `max_abs=1.007812`, and `local_mxfp4_opt_gemm1_us=1841.0` -in a short graph run. - -Current acceptance rule: the GEMM1 replacement no longer needs to be bit-exact -against aiter. Candidate kernels are acceptable when their final MoE output is -finite and cosine-similar to the aiter mxfp4 path. This keeps fastmath, -instruction-order, and scale/rounding variants in scope even when `max_abs` -changes. - -Additional negative experiments after v21: - -- v24 initialized the epilogue max from `fabs(result[0])` like the aiter C++ - source, then reduced the remaining seven values. It stayed cosine-equivalent - but regressed the short graph run to about `1839.3us`. Not retained. -- v25 merged the initial A-scale wait/barrier with the A0/A1/B0/B1 prologue - wait. It stayed cosine-equivalent but regressed to about `1840.3us`. Not - retained. -- v26 replaced the main-loop `rocdl.s_waitcnt(14)` with inline asm - `s_waitcnt vmcnt(10)`. It was slower at about `1840.7us`. Not retained. -- v27 moved the initial A-scale wait into a combined `vmcnt(20)` prologue wait. - It stayed cosine-equivalent with small `max_abs` drift but measured about - `1838.7us`. Not retained. -- v28 changed B-q loads to use scalar `soffset` plus per-lane `voffset`, closer - to aiter's source. It regressed to about `1847.1us`. Not retained. -- v29 simplified the B-q N address formula using lane-local constants. It stayed - cosine-equivalent but regressed to about `1851.0us`. Not retained. -- v30 added fastmath to the SiLU add/mul chain. It stayed cosine-equivalent but - regressed to about `1851.1us`. Not retained. - -Follow-up relaxed-scale experiments: - -- v31 forced GEMM1 output scale to exponent byte `123`, which is the dominant - byte in the aiter output scale distribution for this synthetic benchmark. It - failed the relaxed correctness target (`cos=0.790916`) and did not improve - speed (`local_mxfp4_opt_gemm1_us=1837.5` in a short graph run). Not retained. -- v32 removed the cross-kk max reduction and broadcast the kk0 lane's scale - across the 32-column group. It also failed the relaxed correctness target - (`cos=0.891668`) and regressed speed (`local_mxfp4_opt_gemm1_us=1841.8` in a - short graph run). Not retained. - -The best retained GEMM1 was v21 until the later DPP bound-control cleanup below. - -### GEMM1 v34 DPP Bound Control - -The saved GEMM1 kernel is now: - -```text -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v34_dppbound -``` - -This keeps the v21 schedule and f32 amax reduction, but changes the explicit -DPP exchange used by the epilogue quad reduction to request `bound_ctrl:1`. -That matches the DPP form emitted by aiter GEMM1: - -```text -v_mov_b32_dpp ... quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf bound_ctrl:1 -v_mov_b32_dpp ... quad_perm:[2,3,0,1] row_mask:0xf bank_mask:0xf bound_ctrl:1 -``` - -The change is deliberately narrow: MFMA schedule, global/LDS load counts, -wait/barrier placement, and the scale math stay unchanged. The DPP helper now -accepts an optional `bound_ctrl` argument; existing GEMM2/scatter uses keep the -old default. - -Validation: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --graph-iters 20 --measure 20 - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1853.5 -local_mxfp4_all_flydsl_us=1872.0 -``` - -Graph-profiler GEMM1 samples after the change landed around `705-706us` -(`705.9us` in the last valid ordered run). For comparison, the previous v21 -snapshots in the same graph-profiling setup were typically in the `714-723us` -range. End-to-end graph replay still has several microseconds of run-to-run -noise, so this is treated as a small GEMM1-local win rather than a full pipeline -match. - -Rejected follow-up checks: - -- `v33_i32dppamax` replaced the two post-DPP f32 max ops with unsigned integer - max on the nonnegative f32 bit patterns. It sometimes measured similarly to - v34, but it changed the scale-selection path more than necessary and was not - more stable end-to-end. -- `v34_i32dpp_noexpguard` removed the expert-id validity check after the same - i32 DPP change. It stayed correct for the fixed benchmark but did not improve - GEMM1 timing, so the guard was restored. - -Latest CUDAGraph total timings on GPU 6: - -```text -CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_opt,local_mxfp4_opt_gemm1 \ - --warmup 5 --graph-iters 20 --measure 20 - -local_mxfp4_opt_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_opt_gemm1_vs_aiter_mxfp4_cos=1.000000 -aiter_mxfp4_moe_us=1813.2 -local_mxfp4_opt_us=1833.8 -local_mxfp4_opt_gemm1_us=1835.9 -``` - -Latest non-CUDAGraph torch-profiler per-kernel breakdown on GPU 6 -(`warmup=3`, `iters=5`): - -| path / kernel | avg us | -| --- | ---: | -| aiter sort_count | 6.7 | -| aiter sort_cumsum | 10.7 | -| aiter sort_place_pad | 33.3 | -| aiter quant | 53.3 | -| aiter sort_scales | 60.2 | -| aiter GEMM1 | 718.9 | -| aiter GEMM2 | 907.0 | -| aiter scatter_reduce | 131.1 | -| aiter total | 1921.3 | -| local opt sort_count | 6.7 | -| local opt sort_cumsum | 11.9 | -| local opt sort_place_pad | 35.0 | -| local opt quant | 58.7 | -| local opt sort_scales | 65.2 | -| local opt aiter GEMM1 | 733.1 | -| local opt aiter GEMM2 | 906.4 | -| local opt FlyDSL scatter_reduce | 137.6 | -| local opt total | 1954.6 | -| local opt GEMM1 sort_count | 6.6 | -| local opt GEMM1 sort_cumsum | 10.9 | -| local opt GEMM1 sort_place_pad | 33.7 | -| local opt GEMM1 quant | 58.8 | -| local opt GEMM1 sort_scales | 61.4 | -| local opt GEMM1 FlyDSL GEMM1 v21 | 741.0 | -| local opt GEMM1 aiter GEMM2 | 906.8 | -| local opt GEMM1 FlyDSL scatter_reduce | 137.6 | -| local opt GEMM1 total | 1956.9 | - -## Full FlyDSL Initial Migration - -The first all-FlyDSL mxfp4 pipeline is now wired as -`local_mxfp4_all_flydsl`. This path uses fixed-shape FlyDSL kernels for every -runtime stage: - -1. `flydsl_kimi_mxfp4_sort_count_NE385_TOPK9_M16384_BM128_v0` -2. `flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v0` -3. `flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v0` -4. `flydsl_kimi_mxfp4_quant_NE385_TOPK9_H7168_M16384_BM128_v0` -5. `flydsl_kimi_mxfp4_sort_scales_NE385_H7168_E512_M16384_BM128_v0` -6. `flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v21` -7. `flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v0` -8. `flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9` - -Correctness checks: - -- FlyDSL sort now matches aiter's `cumsum`, `masked_m`, full - `sorted_expert_ids` including the unused tail, `reverse_sorted` token/topk - mapping, `m_indices`, and `sorted_weights`. -- FlyDSL quant is bitwise equal to aiter for both `a_quant` and `a_scale`. -- FlyDSL sort_scales is bitwise equal to aiter for the consumed shuffled scale - byte range. -- End-to-end all-FlyDSL output matches aiter mxfp4: - -```text -CUDA_VISIBLE_DEVICES=6 /opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 0 --graph-iters 1 --measure 1 - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=2245.7 -local_mxfp4_all_flydsl_us=2738.0 -``` - -Initial non-CUDAGraph profiler breakdown (`warmup=1`, `iters=2`): - -| stage | kernel | avg us | -| --- | --- | ---: | -| sort_count | FlyDSL v0 | 189.2 | -| sort_cumsum | FlyDSL v0 | 227.1 | -| sort_place_pad | FlyDSL v0 | 194.8 | -| quant | FlyDSL v0 | 61.1 | -| sort_scales | FlyDSL v0 | 58.7 | -| GEMM1 | FlyDSL v21 | 738.6 | -| GEMM2 | FlyDSL v0 | 1233.4 | -| scatter_reduce_q | FlyDSL | 138.4 | -| total | all FlyDSL | 2841.3 | - -The aux kernels intentionally prioritize algorithm/precision alignment over -performance. The obvious next optimization targets are the three sort kernels -and GEMM2 v0. - -## Sort Kernel v1 Optimization - -The initial FlyDSL sort used global atomics directly in `sort_count` and -`sort_place_pad`, and did most of `sort_cumsum` on thread 0. v1 ports the key -aiter structure: - -- `sort_count`: per-CTA `local_count[NE]` in LDS with LDS atomic add, then one - global write per expert. -- `sort_place_pad`: per-CTA `local_offsets[NE]` plus `row_starts[NE+1]` in LDS, - with LDS atomic add for placement. -- `sort_cumsum`: each thread handles one expert's 16 CTA counts, thread 0 only - performs the prefix scan over padded counts, then experts update - `block_offsets` and `sorted_expert_ids` in parallel. - -Correctness after v1: - -- `cumsum`, `masked_m`, full `sorted_expert_ids`, `reverse_sorted` token/topk - mapping, `m_indices`, and `sorted_weights` match the aiter three-stage sort. -- End-to-end all-FlyDSL output remains bitwise equal to aiter mxfp4: - -```text -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -``` - -Profiler comparison for the three FlyDSL sort kernels: - -| kernel | v0 avg us | v1 avg us | -| --- | ---: | ---: | -| sort_count | 189.2 | 7.2 | -| sort_cumsum | 227.1 | 16.6 | -| sort_place_pad | 194.8 | 35.8 | -| sort total | 611.1 | 59.6 | - -The remaining sort gap versus aiter is now small enough that GEMM2 v0 is again -the dominant all-FlyDSL bottleneck. - -## Pure Aiter vs Pure FlyDSL Snapshot - -`bench_flydsl_16384.py` and `profile_flydsl_16384.py` now auto-select a clean -GPU before importing torch. The selector uses `rocm-smi`, chooses the physical -GPU with the lowest process VRAM, and exits if no GPU has process VRAM below -1KB. It binds the process by setting `HIP_VISIBLE_DEVICES`, -and `CUDA_VISIBLE_DEVICES`. It intentionally does not set -`ROCR_VISIBLE_DEVICES`, because combining ROCR and HIP filters can hide the -selected device when the physical GPU index is not zero. - -Measured with the current all-FlyDSL path and no mixed local-opt middle variant: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 3 --iters 10 --top 30 - -[profile_flydsl_16384] Auto-selected GPU 0 (process_vram=0B, total_used=297766912B) -``` - -| stage | pure aiter | pure FlyDSL | delta | ratio | -| --- | ---: | ---: | ---: | ---: | -| sort_count | 6.4 us | 6.7 us | +0.3 us | 1.05x | -| sort_cumsum | 10.3 us | 16.2 us | +5.9 us | 1.57x | -| sort_place_pad | 32.4 us | 36.8 us | +4.4 us | 1.14x | -| quant | 58.6 us | 63.0 us | +4.4 us | 1.08x | -| sort_scales | 56.8 us | 57.6 us | +0.8 us | 1.01x | -| GEMM1 | 716.5 us | 735.3 us | +18.8 us | 1.03x | -| GEMM2 | 892.8 us | 1176.8 us | +284.0 us | 1.32x | -| scatter_reduce | 135.2 us | 148.4 us | +13.2 us | 1.10x | -| total | 1909.1 us | 2240.8 us | +331.7 us | 1.17x | - -Both paths launch 8 device kernels. On a clean GPU, sort_scales is essentially -matched; the remaining all-FlyDSL gap is dominated by GEMM2. - -CUDAGraph end-to-end timing from the same snapshot: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --graph-iters 20 --measure 20 - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1855.2 -local_mxfp4_all_flydsl_us=2146.7 -``` - -GEMM2 v1 persistent resource comparison: - -| kernel | grid | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| aiter GEMM2 nonatomic mxfp4out | 256 CTAs | 133120 B | 66 | 288 | 128 | 0 | 0 | 0 B | -| FlyDSL GEMM2 v1 persistent | 256 CTAs | 133120 B | 53 | 272 | 16 | 0 | 0 | 0 B | - -So the remaining GEMM2 gap is not a scratch-spill problem. Both kernels use -the same LDS allocation and neither spills SGPR/VGPR. The main remaining -resource/scheduling difference is accumulator placement and generated schedule: -aiter reserves 128 AGPRs for the nonatomic BM128 path, while the current FlyDSL -kernel reports only 16 AGPRs and relies mostly on VGPR/ordinary generated MFMA -values. - -## GEMM2 v2 AGPR Hint and GPU Selection Audit - -The GPU selector now checks both process VRAM and instantaneous GPU busy -percentage before binding torch. It still uses the physical `rocm-smi` -`cardN` / `GPU[N]` index for `HIP_VISIBLE_DEVICES` and -`CUDA_VISIBLE_DEVICES`, but now requires: - -```text -process_vram < 1024 B -GPU use <= 0% -``` - -This avoids the ROCm-SMI `showpids` table ambiguity where the `GPU(s)` column -can show per-process visible ordinals; the selector uses the physical -`showpidgpus` DRM-device mapping plus total card memory and `showuse`. - -GEMM2 v2 changed only codegen hints: - -```python -value_attrs={"passthrough": [["amdgpu-agpr-alloc", "128,128"]]} -compile_hints["llvm_options"] = {"amdgpu-mfma-vgpr-form": False} -``` - -Resource metadata for v2: - -| kernel | grid | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| FlyDSL GEMM2 v2 agprhint | 256 CTAs | 133120 B | 53 | 348 | 128 | 0 | 0 | 0 B | - -The AGPR count now matches aiter, but VGPR rises substantially. A profiler run -on a clean GPU measured: - -```text -aiter GEMM2: 902.3 us -FlyDSL GEMM2 v2 agprhint: 1072.3 us -``` - -An additional v3 experiment staged A scales through LDS, matching aiter's -nonatomic scale path more closely. It stayed correct but regressed: - -```text -aiter GEMM2: 911.4 us -FlyDSL GEMM2 v3 agpr_scalelds: 1090.9 us -``` - -The v3 scale-staging edit was rejected; the saved GEMM2 code is v2 agprhint. - -## GEMM2 v4-v8 Cleanup and DPP Amax - -The later GEMM2 experiments were kept in -`kimi_fp4_moe_16384_opt.py` only. The current saved kernel is: - -```text -flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_v8_dppamax -``` - -Accumulated changes after v2: - -| version | change | result | -| --- | --- | --- | -| v4_noguard | Removed redundant block/expert/row validity checks after switching to persistent work over valid blocks. | Correct, small speedup. | -| v5_xloadpacked | Fixed X DMA byte count to use packed fp4 bytes, reducing A `buffer_load_dwordx4` from 32 to 24. | Correct by cosine, large speedup. | -| v6_scalelds | Staged A scales through LDS, matching aiter's scale-sharing path more closely. | Correct, reduced scalar global loads. | -| v7_noendbar | Removed the end-of-work barrier and relied on the next persistent iteration's entry barrier. | Correct, small speedup. | -| v8_dppamax | Replaced epilogue `shuffle_xor` amax reduction with explicit DPP update intrinsic. | Correct, large speedup; GEMM2 nearly matches aiter. | - -Profiler command: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 3 --iters 10 --top 30 -``` - -Latest clean-GPU profiler snapshot: - -| stage | pure aiter | pure FlyDSL v8 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.7 us | 7.2 us | +0.5 us | -| sort_cumsum | 10.9 us | 16.4 us | +5.5 us | -| sort_place_pad | 33.1 us | 37.6 us | +4.5 us | -| quant | 60.0 us | 63.0 us | +3.0 us | -| sort_scales | 61.2 us | 57.8 us | -3.4 us | -| GEMM1 | 752.0 us | 748.4 us | -3.6 us | -| GEMM2 | 912.6 us | 917.2 us | +4.6 us | -| scatter_reduce | 138.0 us | 156.4 us | +18.4 us | -| total | 1974.5 us | 2004.0 us | +29.5 us | - -Both paths still launch 8 device kernels per iteration. GEMM2 is no longer the -dominant gap in this snapshot; the remaining all-FlyDSL gap is mostly -scatter_reduce plus small sort/cumsum overhead. - -CUDAGraph end-to-end timing: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --graph-iters 20 --measure 20 - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_us=1859.3 -local_mxfp4_all_flydsl_us=1909.0 -``` - -v8 ISA comparison against the aiter mxfp4out kernel: - -| instruction/resource | aiter | FlyDSL v8 | -| --- | ---: | ---: | -| `v_mfma_scale_f32_16x16x128_f8f6f4` | 128 | 128 | -| `buffer_load_dwordx4` | 24 | 24 | -| `buffer_load_dword` | 6 | 8 | -| `ds_write_b32` | 128 | 128 | -| `ds_read_b128` | 64 | 64 | -| `s_barrier` | 4 | 4 | -| `s_waitcnt` | 54 | 46 | -| amax quad reduction | `v_max_u32_dpp` x32 | `v_mov_b32_dpp` x32 + `v_max_u32_e32` x32 | -| output stores | `global_store_*` x32 | `buffer_store_*` x32 | -| LDS | 133120 B | 133120 B | -| AGPR | 128 | 128 | -| VGPR | 384 | 364 | -| SGPR | 73 | 48 | -| spills/private segment | 0 / 0 B | 0 / 0 B | - -The v8 DPP change removes the previous `ds_swizzle_b32` epilogue lowering. The -remaining low-level differences worth checking next are the output store form -(`global_store_* nt` in aiter versus `buffer_store_*` in FlyDSL) and the -FlyDSL scatter_reduce kernel. - -## Scatter Reduce v4 Route Vector - -The saved scatter kernel in `kimi_fp4_moe_16384_opt.py` is now: - -```text -flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v4_routevec -``` - -The v4 change keeps the v3 raw global I/O path and adds one vector preload for -the first eight `reverse_sorted[token, topk]` route ids: - -- routes 0..7: one `vector<8xi32>` load, lowering to `s_load_dwordx8` -- route 8: one scalar `s_load_dword` - -Correctness remains exact against aiter for the fixed test input: - -```text -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -``` - -Profiler snapshot: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --iters 30 --top 30 -``` - -| stage | aiter | FlyDSL v4 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.3 us | 6.7 us | +0.4 us | -| sort_cumsum | 10.4 us | 15.6 us | +5.2 us | -| sort_place_pad | 32.3 us | 35.9 us | +3.6 us | -| quant | 58.4 us | 58.9 us | +0.5 us | -| sort_scales | 55.8 us | 54.3 us | -1.5 us | -| GEMM1 | 706.8 us | 718.8 us | +12.0 us | -| GEMM2 | 875.5 us | 865.8 us | -9.7 us | -| scatter_reduce | 134.5 us | 140.0 us | +5.5 us | -| total | 1880.0 us | 1896.1 us | +16.1 us | - -CUDAGraph end-to-end timing: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --graph-iters 20 --measure 20 - -aiter_mxfp4_moe_us=1859.5 -local_mxfp4_all_flydsl_us=1883.3 -``` - -Scatter ISA/resource comparison: - -| instruction/resource | aiter NT | FlyDSL v3 globalio | FlyDSL v4 routevec | -| --- | ---: | ---: | ---: | -| `v_pk_fma_f32` | 36 | 36 | 36 | -| `v_cvt_scalef32_pk_f32_fp4` | 36 | 36 | 36 | -| `v_cvt_pk_bf16_f32` | 4 | 4 | 4 | -| `global_load_dword` | 18 | 18 | 18 | -| `s_load_dword` | 11 | 18 | 10 | -| `s_load_dwordx8` | 2 | 1 | 2 | -| `global_store_dwordx4` | 1 | 1 | 1 | -| `s_waitcnt` | 19 | 35 | 27 | -| SGPR | 34 | 36 | 38 | -| VGPR | 62 | 28 | 29 | -| spills/private segment | 0 / 0 B | 0 / 0 B | 0 / 0 B | - -v4 reduces the remaining scatter gap from the earlier `~18us` snapshot to about -`5.5us` in the latest profiler run. A v5 experiment staged all route -weight/scale/q values before decode to increase ILP, but it measured -`141.1us`, so it was rejected. The remaining difference is likely mostly -instruction scheduling: aiter spends many more VGPRs to keep more memory results -live, while the current FlyDSL version is still more serialized around waits. - -## Sort Cumsum v2-v4 - -After committing scatter v4, the sort-cumsum path was optimized in -`kimi_fp4_moe_16384_opt.py`. The saved cumsum kernel is now: - -```text -flydsl_kimi_mxfp4_sort_cumsum_NE385_TOPK9_M16384_BM128_v4_globalio -``` - -Changes: - -- v2 removed the global `expert_starts` scratch buffer. `sort_cumsum` now keeps - expert starts only in LDS, and `sort_place_pad` reads the final row start from - `cumsum_tensor[0]`, matching aiter's data flow more closely. -- v2 also removed the single-thread tail clear of `sorted_expert_ids`; aiter - does not clear blocks after `cumsum_tensor[0]`. -- v3 changed the tid0 prefix scan over `NE=385` experts from a fully unrolled - `range_constexpr` to an explicit dynamic `scf.for`, reducing the huge unrolled - LDS read/write sequence. -- v4 switched `sort_cumsum` I/O from buffer resources to raw global pointer - loads/stores. The first pass over `block_offsets[e, 0:16]` uses - `vector<4xi32>` loads, lowering closer to aiter's `global_load_dwordx4`. - -Validation: - -```text -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -``` - -Profiler snapshot: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --iters 30 --top 30 -``` - -| stage | aiter | FlyDSL after cumsum v4 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 5.9 us | 6.8 us | +0.9 us | -| sort_cumsum | 10.2 us | 9.6 us | -0.6 us | -| sort_place_pad | 32.4 us | 35.7 us | +3.3 us | -| quant | 58.4 us | 59.5 us | +1.1 us | -| sort_scales | 55.9 us | 55.1 us | -0.8 us | -| GEMM1 | 702.5 us | 723.5 us | +21.0 us | -| GEMM2 | 863.4 us | 871.0 us | +7.6 us | -| scatter_reduce | 134.9 us | 140.6 us | +5.7 us | -| total | 1863.6 us | 1901.7 us | +38.1 us | - -The cumsum kernel itself moved from the previous `~15.6us` range to `9.6us`, -slightly faster than aiter in this run. v4 was kept; v2/v3 were intermediate. - -CUDAGraph end-to-end timing after cumsum v4: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 5 --graph-iters 20 --measure 20 - -aiter_mxfp4_moe_us=1851.1 -local_mxfp4_all_flydsl_us=1878.7 -``` - -At this point `sort_cumsum` is no longer a remaining gap. The still-visible -sort-side delta is mostly `sort_place_pad`. - -## GPU Selection Note - -`gpu_select.py` intentionally treats `rocm-smi cardN` / `GPU[N]` as the -physical GPU index. It binds the process with: - -```text -HIP_VISIBLE_DEVICES=N -CUDA_VISIBLE_DEVICES=N -``` - -Torch then sees the selected physical GPU as logical `cuda:0`. The selector -does not set `ROCR_VISIBLE_DEVICES`, because setting both HIP and ROCR filters -can remap or hide devices unexpectedly. The current safety gate requires -process VRAM below 1024 bytes and GPU use at 0 percent before selecting a card. - -## Graph Replay Measurement Defaults - -`bench_flydsl_16384.py` now defaults to a longer graph replay measurement: - -```text ---warmup 20 --graph-iters 40 --measure 40 --repeat 3 -``` - -Each repeat captures a fresh graph and reports the median elapsed time per -logical MoE invocation. The printed `_us` value is the median across -the repeats, with `_samples_us` showing the individual sample medians. - -`profile_flydsl_16384.py` now profiles graph replay by default with: - -```text ---warmup 20 --iters 5 --graph-iters 20 --repeat 5 --expected-kernels 8 -``` - -The profiler keeps the per-sample window at 100 logical iterations because -larger windows on this setup often drop device events. The script rejects -samples whose device event stream cannot be split into exactly 8 kernels per -logical iteration, then reports median per-kernel timings and an ordered kernel -diff. - -Latest graph replay end-to-end timing on auto-selected GPU/card 3: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl - -aiter_mxfp4_moe_samples_us=1847.5,1841.6,1841.3 range_us=1841.3..1847.5 -aiter_mxfp4_moe_us=1841.6 -local_mxfp4_all_flydsl_samples_us=1864.0,1865.8,1863.5 range_us=1863.5..1865.8 -local_mxfp4_all_flydsl_us=1864.0 -``` - -Latest graph replay profiler median over 5 valid samples: - -| stage | aiter | FlyDSL all | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.4 us | 6.4 us | +0.1 us | -| sort_cumsum | 10.3 us | 9.6 us | -0.7 us | -| sort_place_pad | 32.0 us | 35.0 us | +3.0 us | -| quant | 59.8 us | 59.8 us | -0.0 us | -| sort_scales | 55.2 us | 54.5 us | -0.7 us | -| GEMM1 | 698.9 us | 703.9 us | +5.0 us | -| GEMM2 | 855.0 us | 852.0 us | -3.0 us | -| scatter_reduce | 135.6 us | 139.7 us | +4.1 us | -| total kernel sum | 1853.2 us | 1861.2 us | +8.0 us | - -The profiler kernel sum is useful for stage attribution, but the event-timed -bench graph replay remains the authoritative end-to-end number. In this -snapshot the main remaining profiler-visible gaps are `GEMM1`, `scatter_reduce`, -and `sort_place_pad`; `GEMM2`, `sort_cumsum`, and `sort_scales` are roughly -matched or slightly ahead in FlyDSL. - -## Sort Place/Scatter v4-v6 Alignment - -The saved sort placement kernel is now: - -```text -flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v4_globalio -``` - -Changes: - -- Match aiter's phase order: place real routed tokens first, then barrier, then - fill the padded tail for each expert. -- Switch `sort_place_pad` from buffer resources to raw global loads/stores, - matching the plain pointer access style used by aiter's HIP kernel. - -The saved scatter kernel is now: - -```text -flydsl_kimi_mxfp4_scatter_reduce_q_NE385_H7168_E512_M16384_TOPK9_v6_weightpreload -``` - -Change: - -- Keep the v4 route-vector preload and raw global I/O, but preload only the 9 - route weights before entering the decode/FMA body. Unlike the rejected v5 - experiment, this does not stage all q/scale payloads, so it adds latency - hiding without substantially increasing vector-register pressure. - -Validation: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --warmup 5 \ - --graph-iters 20 --measure 10 --repeat 1 - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -``` - -Profiler baseline at the start of this round, before the changes: - -| stage | aiter | previous FlyDSL | delta | -| --- | ---: | ---: | ---: | -| sort_place_pad | 32.2 us | 35.2 us | +3.0 us | -| scatter_reduce | 135.0 us | 140.2 us | +5.2 us | - -Profiler after the changes, run 1: - -| stage | aiter | FlyDSL v4/v6 | delta | -| --- | ---: | ---: | ---: | -| sort_place_pad | 32.1 us | 34.1 us | +2.0 us | -| scatter_reduce | 135.5 us | 130.5 us | -5.0 us | -| total kernel sum | 1860.1 us | 1860.1 us | +0.0 us | - -Profiler after the changes, run 2: - -| stage | aiter | FlyDSL v4/v6 | delta | -| --- | ---: | ---: | ---: | -| sort_place_pad | 31.8 us | 34.3 us | +2.5 us | -| scatter_reduce | 134.6 us | 130.6 us | -4.0 us | -| total kernel sum | 1853.4 us | 1861.7 us | +8.3 us | - -Default graph replay end-to-end timing after the changes: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl - -aiter_mxfp4_moe_samples_us=1872.3,1876.8,1856.9 range_us=1856.9..1876.8 -aiter_mxfp4_moe_us=1872.3 -local_mxfp4_all_flydsl_samples_us=1864.4,1864.2,1862.8 range_us=1862.8..1864.4 -local_mxfp4_all_flydsl_us=1864.2 -``` - -Interpretation: `scatter_reduce` is now faster than aiter in the graph-profiler -breakdown. `sort_place_pad` improved by about 1 us but is still roughly -2-2.5 us slower than aiter, so the next sort-side work should focus there. - -## Sort Place v5 Dynamic Placement Loop - -Current saved sort placement kernel: - -```text -flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v5_placeloop -``` - -Change from v4: - -- Keep the raw global I/O and aiter-like phase order from v4. -- Replace the compile-time unrolled real-token placement loop with one dynamic - `scf.ForOp(c_start + tx, end, 1024)`. -- Keep the padding loop compile-time unrolled. A dynamic padding-loop - experiment did not improve the graph-profiler timing. - -Rejected follow-up: - -- `v6_exactend` removed the `min(c_start + per_cta, total_pairs)` end bound - because this shape has exactly `16 * 9216 == 16384 * 9` routed pairs. It was - slower in the graph profiler, so the saved version keeps the v5 bound form. - -Graph replay profiler median over 5 valid samples: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --max-retries 10 -``` - -| stage | aiter | FlyDSL v5 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.0 us | 6.4 us | +0.5 us | -| sort_cumsum | 10.2 us | 9.7 us | -0.5 us | -| sort_place_pad | 31.9 us | 32.9 us | +1.0 us | -| quant | 58.8 us | 59.4 us | +0.6 us | -| sort_scales | 55.1 us | 54.9 us | -0.2 us | -| GEMM1 | 698.9 us | 710.9 us | +12.0 us | -| GEMM2 | 859.9 us | 858.2 us | -1.6 us | -| scatter_reduce | 134.5 us | 130.5 us | -4.1 us | -| total kernel sum | 1855.0 us | 1863.3 us | +8.3 us | - -Default graph replay end-to-end timing: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_samples_us=1864.9,1856.7,1853.7 range_us=1853.7..1864.9 -aiter_mxfp4_moe_us=1856.7 -local_mxfp4_all_flydsl_samples_us=1862.3,1863.3,1862.6 range_us=1862.3..1863.3 -local_mxfp4_all_flydsl_us=1862.6 -``` - -Interpretation: v5 recovers most of the previous `sort_place_pad` gap, from -roughly +2-3 us down to about +1 us in graph replay profiling. The all-FlyDSL -path still launches the same 8 kernels as aiter; the remaining graph-profiler -gap is mostly `GEMM1`, with `sort_place_pad` now a smaller residual item. - -Rejected v7 padding-loop follow-up: - -- `v7_hippadloop` changed the padding expert loop to an explicit dynamic - `scf.ForOp(e_lo, e_hi, 1)`, closer to the aiter HIP source. -- Static ISA became much smaller: v5 `sort_place_pad` was about 1079 assembly - lines with 79 static `global_store_dword` and 79 static `s_cbranch` - occurrences; v7 dropped to about 201 lines, 7 stores, and 8 branches. -- Measured graph performance did not improve. A 3-sample graph profiler saw - `sort_place_pad` around 33.0 us, and the default graph replay bench reported - `local_mxfp4_all_flydsl_us=1864.1`, slightly slower than saved v5's - `1862.6`. The saved code therefore remains v5. - -## Sort Place v14 Padding Lane Mask - -Current saved sort placement kernel: - -```text -flydsl_kimi_mxfp4_sort_place_pad_NE385_TOPK9_M16384_BM128_v14_padlanemask -``` - -Change from v5: - -- Keep the v5 dynamic placement loop. -- Add a padding-phase guard `tx < BM` before the unrolled expert padding loop. - Padding per expert is always in `[0, BM)`, because `sort_cumsum` rounds each - expert's real count up to a multiple of `BM=128`. Therefore lanes - `tx>=128` cannot write padding and can skip the whole padding phase. - -Rejected follow-ups while searching for this: - -- `v8_udivrem`, `v9_udivmulsub`, `v10_divsimulsub`, and `v13_magicdiv9` - tried to replace `token_id = idx / 9` and `topk_id = idx % 9` lowering. - All were correct but slower in graph profiling. -- `v11_ldsorder` changed sort-place LDS layout to look more like aiter's - compiler-chosen layout. It was correct but slower in the short graph bench. -- `v12_i32while` changed the placement loop from index `scf.ForOp` to an i32 - `scf.WhileOp`. It was correct but did not improve `sort_place_pad`. - -Graph replay profiler median over 5 valid samples: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl --max-retries 15 -``` - -| stage | aiter | FlyDSL v14 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.3 us | 6.5 us | +0.2 us | -| sort_cumsum | 10.4 us | 9.7 us | -0.7 us | -| sort_place_pad | 32.0 us | 32.1 us | +0.1 us | -| quant | 59.5 us | 59.7 us | +0.1 us | -| sort_scales | 55.4 us | 55.0 us | -0.4 us | -| GEMM1 | 699.3 us | 711.8 us | +12.4 us | -| GEMM2 | 861.8 us | 855.4 us | -6.4 us | -| scatter_reduce | 135.3 us | 130.4 us | -4.8 us | -| total kernel sum | 1860.6 us | 1860.7 us | +0.1 us | - -Default graph replay end-to-end timing: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_samples_us=1890.5,1852.8,1855.9 range_us=1852.8..1890.5 -aiter_mxfp4_moe_us=1855.9 -local_mxfp4_all_flydsl_samples_us=1879.8,1865.2,1864.9 range_us=1864.9..1879.8 -local_mxfp4_all_flydsl_us=1865.2 -``` - -Interpretation: `sort_place_pad` is now effectively aligned in graph replay -profiling, with the remaining measured gap around +0.1 us. End-to-end graph -timing is still dominated by GEMM variance and should not be used to judge this -specific sort-place change in isolation. - -## GEMM1 v36 AGPR Inline MFMA - -Current saved GEMM1 kernel: - -```text -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_v36_agprasm -``` - -Motivation: - -- aiter BM128 GEMM1 uses inline asm constraints to keep accumulators in AGPR: - `=a` for the first zero-init MFMA and tied `+a` for accumulation. -- The previous FlyDSL `v34_dppbound` used the ROCDL MFMA intrinsic for the main - loop. Its final ISA had all MFMA destinations in VGPR, with resource usage - around `VGPR=256, AGPR=80` and graph-profiler GEMM1 medians about - `707-709 us`, roughly `+10-14 us` slower than aiter. - -Change: - -- Keep the v34 schedule, loads, waits, barriers, and epilogue. -- Replace only the GEMM1 main-loop MFMA calls in `compute_tile_jmajor*` with - inline asm using the same instruction: - `v_mfma_scale_f32_16x16x128_f8f6f4`. -- Use `=a,v,v,v,v` for the first MFMA of each accumulator and - `=a,v,v,v,v,0` for subsequent tied accumulation. The tied form maps to the - same LLVM constraint shape emitted by clang for HIP `"+a"` inline asm. - -Rejected checks while developing v36: - -- `v35_agprinit` changed only the first MFMA to `=a` and left later MFMA calls - as ROCDL intrinsics. It compiled but failed correctness - (`cos=0.960782`), because LLVM did not preserve the AGPR accumulator chain in - the same way aiter's tied asm does. -- `v35_inlinevgprtest` used the same inline asm text with `=v` output. It was - bitwise correct, proving the operand packing and `op_sel` mapping were - correct; the issue was specifically the incomplete AGPR constraint chain. - -Resource / ISA checks: - -| kernel | MFMA dest AGPR | MFMA src acc AGPR | VGPR / AGPR | spills | -| --- | ---: | ---: | ---: | ---: | -| aiter BM128 | 1792 / 1792 | 1760 / 1792 | 165 / 168 | 0 | -| FlyDSL v34 | 0 / 1792 | 0 / 1792 | 256 / 80 | 0 | -| FlyDSL v36 | 1792 / 1792 | 1760 / 1792 | 169 / 128 | 0 | - -Static instruction counts relevant to scheduling: - -| kernel | `s_waitcnt` | `s_barrier` | `buffer_load_dwordx4` | `buffer_load_lds` | `ds_read_b128` | -| --- | ---: | ---: | ---: | ---: | ---: | -| aiter BM128 | 320 | 30 | 340 | 128 | 480 | -| FlyDSL v34 | 375 | 31 | 340 | 128 | 480 | -| FlyDSL v36 | 287 | 31 | 340 | 128 | 480 | - -Default graph-profiler validation (`warmup=20`, `iters=5`, -`graph_iters=20`, `repeat=5`; only `--max-retries 30` was changed to tolerate -profiler event drops): - -| run | aiter GEMM1 | FlyDSL v36 GEMM1 | delta | -| --- | ---: | ---: | ---: | -| 1 | 695.5 us | 694.5 us | -1.1 us | -| 2 | 696.9 us | 693.5 us | -3.4 us | -| 3 | 695.1 us | 694.1 us | -1.0 us | - -Full graph-profiler totals from the same runs: - -| run | aiter total | FlyDSL all-FlyDSL total | delta | -| --- | ---: | ---: | ---: | -| 1 | 1856.8 us | 1843.5 us | -13.4 us | -| 2 | 1858.4 us | 1842.3 us | -16.1 us | -| 3 | 1851.5 us | 1842.7 us | -8.8 us | - -Default graph replay correctness / timing: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl - -local_mxfp4_all_flydsl_vs_aiter_mxfp4_cos=1.000000 -local_mxfp4_all_flydsl_vs_aiter_mxfp4_max_abs=0.000000 -aiter_mxfp4_moe_samples_us=1859.5,1855.5,1850.2 range_us=1850.2..1859.5 -aiter_mxfp4_moe_us=1855.5 -local_mxfp4_all_flydsl_samples_us=1841.5,1839.9,1841.0 range_us=1839.9..1841.5 -local_mxfp4_all_flydsl_us=1841.0 -``` - -Interpretation: GEMM1 is now effectively aligned with aiter for the fixed -M=16384 Kimi mxfp4 path. In the three default graph-profiler runs above, -FlyDSL v36 GEMM1 is slightly faster than aiter by about `1-3 us`, and the -all-FlyDSL pipeline remains bitwise equal to aiter for the benchmark output. - -## Small-M BM16 GEMM1 Pipeline v1 - -Target: - -```text -mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM16_INLINEQUANT -mxfp4_moe_g2_a4w4_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT -``` - -Change in `kimi_fp4_moe_small_bm16.py`: - -- Switch GEMM1 inline quant packing from the f32 fp4 intrinsic to the bf16 - intrinsic used by aiter: - `llvm.amdgcn.cvt.scalef32.pk.fp4.bf16`. -- Split inline quant into hidden load and finish/write phases. -- Add 3 physical A LDS slots and 2 B register stages. -- Preload the first two K tiles, then in the main K loop compute the current - tile while issuing the next tile's B loads and finishing the next tile's - hidden inline quant into a separate LDS slot. -- Keep the drained last two K tiles as pure compute, matching the aiter - `kStages=2` structure. - -Default graph replay measurement used the then-current longer `bench.py` -defaults: - -```text -warmup=100 graph_iters=2000 measure=51 graph_warmup_replays=5 -``` - -Stage-delta graph replay result after the pipeline change: - -| M | aiter | FlyDSL sort + aiter GEMM | FlyDSL GEMM1 + aiter GEMM2 | all FlyDSL | sort delta | GEMM1 delta | GEMM2 delta | -| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| 4 | 39.164 us | 40.300 us | 52.012 us | 53.232 us | +1.135 us | +11.712 us | +1.220 us | -| 8 | 58.727 us | 59.326 us | 66.738 us | 68.100 us | +0.599 us | +7.412 us | +1.362 us | -| 16 | 96.095 us | 97.186 us | 99.299 us | 100.989 us | +1.091 us | +2.113 us | +1.690 us | -| 32 | 146.344 us | 147.723 us | 152.987 us | 154.751 us | +1.380 us | +5.264 us | +1.764 us | -| 64 | 200.434 us | 202.720 us | 211.454 us | 214.212 us | +2.286 us | +8.734 us | +2.758 us | -| 128 | 251.650 us | 255.206 us | 261.301 us | 265.713 us | +3.556 us | +6.095 us | +4.412 us | - -Correctness stayed close to aiter for every row above: - -```text -cos(sort_aiter, aiter) >= 0.999996 -cos(gemm1fly_aiter, aiter) >= 0.999997 -cos(allfly, aiter) >= 0.999997 -``` - -Interpretation: the previous BM16 FlyDSL GEMM1 path serialized inline quant, -B loads, wait/barrier, and MFMA for every K tile. The v1 pipeline removes a -large part of that bubble. The largest remaining gaps are now `M=4` -(`+11.7 us` GEMM1) and `M=64` (`+8.7 us` GEMM1), while `M=16` is within about -`+2.1 us` for GEMM1. - -## Bench.py Accurate Small-M Defaults - -`bench.py` defaults were increased again for small-M decisions, where the -pipeline is only tens of microseconds and single replay/event overhead can hide -real differences: - -```text -warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 -eager_iters=5000 -``` - -Validation command: - -```text -/opt/venv/bin/python bench.py -M 4,8,16,32,64,128 --ref-max-M 128 -``` - -This run compares aiter's `mxfp4_moe` CSV path against the original untagged -`fused_moe` FlyDSL CSV path, not the local extracted BM16 file. - -| M | mxfp4 | FlyDSL fused_moe | ratio | mx.fly | mx.ref | fly.ref | -| ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| 4 | 39.2 us | 52.3 us | 1.34x | 0.9845 | 0.9533 | 0.9482 | -| 8 | 58.4 us | 71.9 us | 1.23x | 0.9868 | 0.9524 | 0.9485 | -| 16 | 95.9 us | 115.4 us | 1.20x | 0.9876 | 0.9538 | 0.9515 | -| 32 | 145.8 us | 160.7 us | 1.10x | 0.9868 | 0.9548 | 0.9520 | -| 64 | 200.3 us | 209.7 us | 1.05x | 0.9874 | 0.9555 | 0.9529 | -| 128 | 251.4 us | 262.8 us | 1.05x | 0.9875 | 0.9562 | 0.9536 | - -## Small-M BM16 Stage Split - -`bench_small_bm16.py` was added to make the BM16 stage split reproducible. It -compares: - -- `aiter`: aiter `mxfp4_moe` CSV path. -- `sort_aiter`: FlyDSL sort/zero-init plus aiter GEMM1/GEMM2. -- `gemm1fly_aiter`: FlyDSL sort/GEMM1 plus aiter GEMM2. -- `allfly`: FlyDSL sort/GEMM1/GEMM2. - -Default command: - -```text -/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 -``` - -Default graph timing was: - -```text -warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 repeat=1 -``` - -Results: - -| M | aiter | sort_aiter | gemm1fly_aiter | allfly | sort delta | GEMM1 delta | GEMM2 delta | cos all | max abs all | -| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| 4 | 39.351 us | 42.560 us | 42.446 us | 42.535 us | +3.210 us | -0.114 us | +0.089 us | 0.999996305 | 0.031250 | -| 8 | 59.011 us | 59.411 us | 60.372 us | 61.925 us | +0.400 us | +0.962 us | +1.553 us | 0.999998152 | 0.015625 | -| 16 | 96.219 us | 97.519 us | 100.646 us | 102.193 us | +1.300 us | +3.128 us | +1.547 us | 0.999998629 | 0.015625 | -| 32 | 145.850 us | 147.566 us | 150.351 us | 153.022 us | +1.717 us | +2.785 us | +2.671 us | 0.999999046 | 0.015625 | -| 64 | 200.427 us | 202.655 us | 207.603 us | 210.420 us | +2.228 us | +4.948 us | +2.816 us | 0.999998689 | 0.031250 | -| 128 | 251.346 us | 254.723 us | 260.665 us | 264.844 us | +3.377 us | +5.942 us | +4.179 us | 0.999998510 | 0.031250 | - -Interpretation: after the BM16 GEMM1 v4 alignment, the remaining small-M gap is -not one uniform issue. M=4 is almost entirely sort/prologue overhead. M=64 and -M=128 are dominated by GEMM1, with GEMM2 as the second largest term. The next -kernel-level optimization should therefore start from GEMM1 for M=64/128, while -keeping sort/prologue in mind for the very small M=4 case. - -Profiler sanity check for M=64 (`warmup=20`, `graph_iters=20`, `replays=5`) -confirmed the stage split is real kernel time, not extra graph kernels: - -| runner | sort | GEMM1 | GEMM2 | total | -| --- | ---: | ---: | ---: | ---: | -| `aiter` | 5.391 us | 135.481 us | 66.707 us | 207.579 us | -| `sort_aiter` | 7.324 us | 135.804 us | 66.822 us | 209.950 us | -| `gemm1fly_aiter` | 7.275 us | 142.643 us | 66.625 us | 216.543 us | -| `allfly` | 7.233 us | 142.682 us | 69.813 us | 219.727 us | - -Rejected follow-ups: - -- GEMM2 barrier relaxation: replacing the pre-compute - `rocdl.s_waitcnt(0); gpu.barrier()` with `_barrier(lgkmcnt=0)` was not - correct. M=8/16 cosine dropped to about `0.80`, so the current GEMM2 path - still needs a stronger VMEM/LDS ordering point. -- GEMM1 preload v5: interleaving the initial two K-tile preload as - half-quant/B-load/half-quant/B-load was correct (`min_cos=0.999997199`) but - did not improve performance. Short graph profiler changed M=64 GEMM1 only - from about `142.643 us` to `142.564 us`, and long graph timing made the - M=64 GEMM1 stage delta worse (`+6.861 us`). The saved code stays at GEMM1 - v4. - -## Small-M BM16 GEMM1 v7 Epilogue Cleanup - -Change: - -- Match aiter BM16 scale epilogue and write only the low scale byte. The - adjacent byte is padding for BM16 and is not read by GEMM2. -- Replace the epilogue f32 amax `shuffle_xor` reductions with DPP controls - `0xB1` and `0x4E`, matching aiter's `apply_cshuffle_quant_epilog`. - -Correctness sweep against aiter mxfp4: - -```text -M=4 cos=0.999997199 max_abs=0.031250 -M=8 cos=0.999997497 max_abs=0.031250 -M=16 cos=0.999998033 max_abs=0.015625 -M=32 cos=0.999997973 max_abs=0.031250 -M=64 cos=0.999998271 max_abs=0.031250 -M=128 cos=0.999999046 max_abs=0.031250 -min_cos=0.999997199 -``` - -Static ISA comparison: - -| kernel | `s_waitcnt` | `buffer_store_byte` | `ds_swizzle_b32` | `v_mov_b32_dpp` | -| --- | ---: | ---: | ---: | ---: | -| FlyDSL GEMM1 v4 | 152 | 2 | 2 | 0 | -| FlyDSL GEMM1 v7 | 150 | 1 | 0 | 2 | - -Short graph profiler (`warmup=20`, `graph_iters=20`, `replays=5`) shows the -GEMM1 kernel body moving in the right direction: - -| M | aiter GEMM1 | FlyDSL v7 GEMM1 | delta | -| ---: | ---: | ---: | ---: | -| 64 | 135.123 us | 141.395 us | +6.272 us | -| 128 | 172.911 us | 170.789 us | -2.122 us | - -The M=128 profiler sample is noisy on the aiter side, but the static diff is -strictly closer to aiter and correctness is unchanged. A long graph sample -with `--no-check` was noisy (`M=64` sort/GEMM stages all inflated together), so -the retained evidence for this small cleanup is correctness plus direct kernel -profiler/ISA alignment. - -## Small-M BM16 GEMM2 v2 LDS Load Alignment - -Change: - -- Replace GEMM2's A path from `buffer_load_dwordx4` into VGPR followed by - `ds_write*` with `raw_ptr_buffer_load_lds`, matching aiter's direct - global-to-LDS load for the two K tiles. -- Keep the stronger pre-compute `s_waitcnt(0); s_barrier` ordering. The earlier - `lgkmcnt=0` relaxation was not correct. - -Correctness sweep against aiter mxfp4: - -```text -M=4 cos=0.999997437 max_abs=0.031250 -M=8 cos=0.999998689 max_abs=0.015625 -M=16 cos=0.999999166 max_abs=0.015625 -M=32 cos=0.999998748 max_abs=0.031250 -M=64 cos=0.999998808 max_abs=0.023438 -M=128 cos=0.999999225 max_abs=0.031250 -min_cos=0.999997437 -``` - -Static ISA comparison: - -| kernel | `s_waitcnt` | `buffer_load ... lds` | `ds_write_b128` | `ds_write_b32` | -| --- | ---: | ---: | ---: | ---: | -| aiter GEMM2 | 34 | 2 | 0 | 0 | -| FlyDSL GEMM2 v0 | 19 | 0 | 1 | 4 | -| FlyDSL GEMM2 v2 | 17 | 2 | 0 | 0 | - -Short graph profiler (`warmup=20`, `graph_iters=20`, `replays=5`) for the -kernel body: - -| M | aiter GEMM2 | FlyDSL v2 GEMM2 | delta | -| ---: | ---: | ---: | ---: | -| 64 | 67.528 us | 69.296 us | +1.768 us | -| 128 | 84.206 us | 88.799 us | +4.593 us | - -Interpretation: v2 removes the obvious extra LDS writes and makes the static -A-load sequence closer to aiter. The measured M=64 gap is slightly smaller -than the earlier `~3 us` snapshot, while M=128 still has a meaningful gap. The -remaining GEMM2 difference is now more likely in the atomic epilogue form -(`buffer_atomic_pk_add_bf16` vs aiter's `global_atomic_pk_add_bf16`) and/or the -exact wait scheduling around the epilogue, rather than the A-load staging. - -## Small-M BM16 Stable Bench / Profiler Defaults - -`bench_small_bm16.py` now defaults to `repeat=5` on top of the long graph -timing inherited from `bench.py`: - -```text -warmup=200 graph_iters=5000 measure=101 graph_warmup_replays=10 repeat=5 -``` - -This is intentionally slow. A repeat-3 run before the default was raised showed -why repeated captures are needed: most samples are tight, but individual graph -captures can still produce outliers. - -```text -/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 -``` - -| M | aiter | sort_aiter | gemm1fly_aiter | allfly | sort delta | GEMM1 delta | GEMM2 delta | cos all | -| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| 4 | 39.250 us | 40.235 us | 41.192 us | 42.650 us | +0.985 us | +0.957 us | +1.459 us | 0.999996483 | -| 8 | 58.433 us | 59.186 us | 59.749 us | 61.833 us | +0.753 us | +0.563 us | +2.083 us | 0.999998450 | -| 16 | 97.599 us | 97.425 us | 99.425 us | 100.636 us | -0.174 us | +2.000 us | +1.210 us | 0.999998927 | -| 32 | 146.151 us | 147.739 us | 150.295 us | 152.101 us | +1.588 us | +2.556 us | +1.806 us | 0.999998868 | -| 64 | 200.347 us | 204.580 us | 210.103 us | 210.362 us | +4.234 us | +5.522 us | +0.259 us | 0.999998212 | -| 128 | 251.843 us | 254.975 us | 261.167 us | 265.062 us | +3.132 us | +6.192 us | +3.895 us | 0.999999166 | - -The long graph bench is the end-to-end timing source, but per-stage deltas are -still sensitive to adjacent runner noise. `profile_small_bm16.py` was added to -profile the graph replay directly as three kernel bodies per logical iteration: - -```text -/opt/venv/bin/python profile_small_bm16.py -M 64,128 -``` - -The profiler default is deliberately shorter than the bench default -(`warmup=20 graph_iters=20 replays=5 repeat=5`). Longer profiler windows caused -ROCProfiler event drops for `M=128`; the shorter window keeps the event sequence -complete while still averaging 100 logical iterations per sample. - -## Small-M BM16 Sort v2 and GEMM2 v3 - -Sort changes: - -- `flydsl_kimi_mxfp4_sort_zero_init_NE385_TOPK9_H7168_BM16_v2` -- Count phase now matches aiter's `int4` route-id load path. -- Place phase carries `token_id/topk_id` through the loop, avoiding per-route - division/modulo and matching aiter's `place_tokens` update pattern. - -GEMM2 change: - -- `flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v3` -- Replace `raw_ptr_buffer_atomic_fadd` with LLVM `atomicrmw fadd` on the global - pointer, which lowers to `global_atomic_pk_add_bf16`. -- ISA check: - -```text -v2: buffer_atomic_pk_add_bf16 -v3: global_atomic_pk_add_bf16 -aiter: global_atomic_pk_add_bf16 -``` - -Correctness sweep: - -```text -M=4 cos=0.999997497 max_abs=0.031250 -M=8 cos=0.999997735 max_abs=0.031250 -M=16 cos=0.999998033 max_abs=0.023438 -M=32 cos=0.999998331 max_abs=0.031250 -M=64 cos=0.999998808 max_abs=0.015625 -M=128 cos=0.999999166 max_abs=0.031250 -min_cos=0.999997497 -``` - -Latest graph-profiler median over 5 samples: - -| M | stage | aiter | allfly | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 4.945 us | 7.064 us | +2.118 us | -| 64 | GEMM1 | 134.625 us | 135.204 us | +0.579 us | -| 64 | GEMM2 | 66.341 us | 67.899 us | +1.558 us | -| 64 | total | 205.865 us | 210.209 us | +4.344 us | -| 128 | sort_zero_init | 6.339 us | 8.491 us | +2.152 us | -| 128 | GEMM1 | 164.029 us | 169.704 us | +5.674 us | -| 128 | GEMM2 | 81.698 us | 86.086 us | +4.388 us | -| 128 | total | 252.123 us | 264.297 us | +12.173 us | - -Interpretation: v2/v3 are correct and statically closer to aiter. The sort -changes only give small profiler movement, so the remaining sort gap is probably -not just scalar route counting or div/mod. The global-atomic GEMM2 form matches -aiter ISA, but the measured GEMM2 gap remains meaningful, especially at `M=128`. -The next work should look at GEMM1/GEMM2 resource scheduling and exact wait/DS -traffic rather than only the atomic opcode form. - -## Accuracy-First BM16 Measurement Defaults - -The small-M BM16 timing scripts now default to longer graph measurements because -the kernels are short and launch/event overhead can otherwise move the conclusion: - -```text -bench.py shared defaults: - warmup=5000 - eager_iters=200000 - graph_iters=512 - measure=101 - graph_warmup_replays=20 - repeat=15 - -bench_small_bm16.py defaults: - warmup=20000 - eager_iters=500000 - graph_iters=2048 - measure=101 - graph_warmup_replays=20 - repeat=21 - -profile_small_bm16.py defaults: - warmup=3000 - graph_iters=128 - replays=4 - logical_iters_per_sample=512 - repeat=101 - max_retries=2000 -``` - -Use the default commands for final comparison: - -```text -/opt/venv/bin/python bench_small_bm16.py -M 4,8,16,32,64,128 -/opt/venv/bin/python profile_small_bm16.py -M 64,128 -``` - -For smoke checks only, override these values explicitly with small numbers. -The defaults are intentionally slower than smoke tests: for BM16 the end-to-end -bench measures `2048 * 101` graph calls per sample and reports 21 independent -graph captures. The profiler uses `128 * 4` logical graph iterations per -sample and `repeat=101`. This is large enough to stabilize small-kernel -medians while still finishing during iterative kernel work. - -`bench.py` now also has a `--repeat` loop and prints the per-backend timing -samples. This makes the root sweep usable for final conclusions without relying -on a single CUDA-event median. - -Two larger `profile_small_bm16.py` windows were rejected for default use: -`graph_iters=512, replays=8` repeatedly captured incomplete CUDA event streams -(`~10.8k` kernel events instead of the expected `12.3k` for M=64 aiter), and -`graph_iters=128, replays=4` again had near-zero acceptance in this environment. -`graph_iters=64, replays=2` accepted complete 3-kernel/iteration samples -reliably in the spot check, while `64,4` already showed substantial drops. - -## BM16 GEMM2 v4 Packed-Multiply Trial - -Tried replacing GEMM2 v3's epilogue route-weight multiply from two scalar -`v_mul_f32` instructions per bf16 pair to one inline-asm `v_pk_mul_f32`. - -Correctness against aiter remained within the accepted cosine band: - -```text -M=4 cos=0.999997199 max_abs=0.031250 -M=8 cos=0.999997437 max_abs=0.031250 -M=16 cos=0.999997318 max_abs=0.015625 -M=32 cos=0.999998748 max_abs=0.031250 -M=64 cos=0.999998152 max_abs=0.031250 -M=128 cos=0.999999046 max_abs=0.023438 -min_cos=0.999997199 -``` - -ISA moved closer to aiter: - -```text -v3: v_pk_mul_f32=0, v_mul_f32=16, s_waitcnt=17, VGPR=98, SGPR=34, spills=0 -v4: v_pk_mul_f32=8, v_mul_f32=0, s_waitcnt=19, VGPR=98, SGPR=34, spills=0 -``` - -Graph-profiler medians with the longer default profiler window: - -| M | stage | aiter | allfly v4 | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 4.907 us | 7.026 us | +2.119 us | -| 64 | GEMM1 | 130.719 us | 135.476 us | +4.757 us | -| 64 | GEMM2 | 65.340 us | 67.746 us | +2.405 us | -| 64 | total | 200.713 us | 210.226 us | +9.513 us | -| 128 | sort_zero_init | 6.248 us | 8.420 us | +2.172 us | -| 128 | GEMM1 | 163.551 us | 169.731 us | +6.180 us | -| 128 | GEMM2 | 81.690 us | 86.114 us | +4.423 us | -| 128 | total | 251.468 us | 264.259 us | +12.791 us | - -Conclusion: v4 is correct and statically closer, but does not produce a -stable runtime win over v3. The two extra `s_waitcnt` instructions appear to -erase the scalar-multiply reduction. Reverted to GEMM2 v3 as the current stable -performance baseline. - -Previous v3 baseline collected before the accuracy-first profiler defaults were -raised (`warmup=100`, `graph_iters=64`, `replays=16`, `repeat=9`): - -| M | stage | aiter | allfly v3 | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 4.953 us | 7.057 us | +2.103 us | -| 64 | GEMM1 | 135.529 us | 136.310 us | +0.781 us | -| 64 | GEMM2 | 65.772 us | 68.188 us | +2.417 us | -| 64 | total | 207.244 us | 211.560 us | +4.316 us | -| 128 | sort_zero_init | 6.273 us | 8.423 us | +2.150 us | -| 128 | GEMM1 | 164.476 us | 170.508 us | +6.032 us | -| 128 | GEMM2 | 82.186 us | 86.617 us | +4.431 us | -| 128 | total | 252.823 us | 265.521 us | +12.698 us | - -## BM16 Sort DPP Scan Trials - -The FlyDSL sort v2 cumsum used DPP row shifts plus two `ds_bpermute` steps for -the 16/32-lane carry. Aiter's `dpp_inclusive_scan_wave` uses pure DPP for the -whole wave: - -```text -row_shr 1/2/4/8, then update_dpp 0x142 row_mask=0xA, 0x143 row_mask=0xC -``` - -Two FlyDSL variants were tested: - -- Sort v3: exact aiter-style wave scan and wave-total scan. Static ISA removed - `ds_bpermute` and reduced `s_waitcnt` from 22 to 15, but added one extra - `s_barrier`. -- Sort v4: pure-DPP wave scan while keeping v2's single-barrier cross-wave LDS - accumulation. - -Both variants remained correct: - -```text -v3 min_cos=0.999997258 -v4 min_cos=0.999997020 -``` - -Profiler medians: - -| M | variant | sort | total | result | -| ---: | --- | ---: | ---: | --- | -| 64 | v2 baseline | 7.057 us | 211.560 us | baseline | -| 64 | v3 exact wave_totals | 6.869 us | 211.030 us | small sort win | -| 64 | v4 DPP + old cross-wave | 6.954 us | 213.828 us | noisy total regression | -| 128 | v2 baseline | 8.423 us | 265.521 us | baseline | -| 128 | v3 exact wave_totals | 8.917 us | 266.945 us | regression | -| 128 | v4 DPP + old cross-wave | 8.552 us | 267.231 us | regression | - -Conclusion: reducing `s_waitcnt` alone did not improve the stable small-M sort -path. The extra barrier in v3 is harmful at M=128, and v4 did not beat the v2 -baseline. Keep sort v2 for now; the remaining sort gap likely needs ATT/Pmc -analysis rather than scan-shape tweaks. - -## Small-M BM16 GEMM2 ATT Waitcnt Trial - -Analyzed the existing FlyDSL GEMM2 v3 ATT trace with -`.claude/skills/kernel-trace-analysis/scripts/hotspot_analyzer.py`. The trace is -dominated by VMEM waits rather than MFMA issue: - -```text -VMEM-wait ~5.01M stall cycles, 50.0% -VMEM-load ~3.75M stall cycles, 37.4% -barrier ~0.47M stall cycles, 4.7% -LDS/SMEM-wait ~0.31M stall cycles, 3.1% -MFMA/FMA ~0.08M stall cycles, 0.8% -``` - -Largest source-level hotspots: - -| rank | source | dominant issue | -| ---: | --- | --- | -| 1 | GEMM2 epilogue sorted-token wait (`line ~1672`) | `s_waitcnt vmcnt(0)` | -| 2 | B tile loads (`mfma_preshuffle_pipeline.py:83`) | `buffer_load_dwordx4` | -| 3 | GEMM2 precompute wait (`line ~1637`) | full `s_waitcnt` before barrier | -| 4 | GEMM2 epilogue weight/LDS wait (`line ~1704`) | `s_waitcnt vmcnt(0) lgkmcnt(0)` | - -Two partial-wait experiments were tried and rejected: - -- v5/v6: replace the precompute full `s_waitcnt(0); s_barrier` with partial - waits around `vmcnt(23/22)` and `vmcnt(20/19)`. Both produced finite outputs - but poor cosine, so the waits were not strong enough for the current FlyDSL - instruction ordering. -- v7: add aiter-style per-MFMA descending `vmcnt` waits while keeping the current - FlyDSL compute loop shape. This also failed correctness. The aiter schedule - interleaves LDS reads, barriers, and MFMA in a different order; the wait - counts cannot be transplanted without matching that order. - -Keep GEMM2 v3 for now. A correct GEMM2 waitcnt optimization needs a full -schedule rewrite to mirror aiter's LDS-read/MFMA sequence, not only local -wait-count edits. - -## Small-M BM16 GEMM1 v8 Epilogue Amax Cleanup - -Changed GEMM1 requant epilogue to match aiter's local amax pattern: initialize -`local_max` from `fabs(result[0])` and reduce only results 1..7, instead of -starting at zero and doing eight `fmax` operations. This is a -semantics-preserving cleanup of the epilogue dependency chain. - -Correctness against aiter remains in the accepted band: - -```text -M=4 cos=0.999996305 max_abs=0.015625 -M=8 cos=0.999998391 max_abs=0.015625 -M=16 cos=0.999998331 max_abs=0.031250 -M=32 cos=0.999998212 max_abs=0.031250 -M=64 cos=0.999998927 max_abs=0.023438 -M=128 cos=0.999998927 max_abs=0.031250 -min_cos=0.999996305 -``` - -Graph-profiler check (`warmup=300`, `graph_iters=128`, `replays=4`, -`repeat=5`) showed a small positive movement: - -| M | stage | aiter | allfly v8 | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 4.899 us | 7.091 us | +2.191 us | -| 64 | GEMM1 | 130.791 us | 135.658 us | +4.868 us | -| 64 | GEMM2 | 65.285 us | 67.807 us | +2.521 us | -| 64 | total | 200.889 us | 210.606 us | +9.717 us | -| 128 | sort_zero_init | 6.275 us | 8.453 us | +2.178 us | -| 128 | GEMM1 | 163.757 us | 169.965 us | +6.208 us | -| 128 | GEMM2 | 81.784 us | 86.257 us | +4.473 us | -| 128 | total | 251.823 us | 264.641 us | +12.818 us | - -An allfly-only repeat-21 check had noisy M=64 outliers but stable medians: - -| M | sort | GEMM1 v8 | GEMM2 | total | -| ---: | ---: | ---: | ---: | ---: | -| 64 | 7.229 us | 135.824 us | 67.880 us | 210.958 us | -| 128 | 8.652 us | 170.064 us | 86.302 us | 265.016 us | - -The improvement is small, but the code is cleaner and statically closer to the -aiter epilogue, so keep GEMM1 v8. - -## Small-M BM16 Stable Profile Window and Rejected Follow-ups - -The default `profile_small_bm16.py` window was adjusted after testing larger -graph-replay samples. `graph_iters=512, replays=8` and then -`graph_iters=128, replays=4` repeatedly produced incomplete torch-profiler CUDA -event streams for M=64 aiter. The retained default is a bounded window with -more independent samples: - -```text -warmup=1000 -graph_iters=64 -replays=2 -repeat=101 -max_retries=1500 -``` - -The retained window was later kept at `graph_iters=64, replays=2`, but the -default was raised to `warmup=2000`, `repeat=201`, and `max_retries=4000` so -the small-kernel profiler conclusions use more accepted graph samples without -reintroducing incomplete event streams from a larger single profiler window. - -With a development repeat of 21, the current v8/v3 all-FlyDSL baseline remains: - -| M | stage | aiter | allfly | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 4.912 us | 7.044 us | +2.132 us | -| 64 | GEMM1 v8 | 130.852 us | 135.523 us | +4.672 us | -| 64 | GEMM2 v3 | 65.364 us | 67.740 us | +2.376 us | -| 64 | total | 200.929 us | 210.284 us | +9.355 us | -| 128 | sort_zero_init | 6.291 us | 8.473 us | +2.183 us | -| 128 | GEMM1 v8 | 163.787 us | 169.849 us | +6.062 us | -| 128 | GEMM2 v3 | 81.691 us | 86.111 us | +4.420 us | -| 128 | total | 251.759 us | 264.474 us | +12.715 us | - -Rejected follow-ups: - -- GEMM1 early expert-load guard: moving the `sorted_expert_ids` load behind the - `cumsum`/block-valid check was correct but did not improve performance. M=64 - GEMM1 measured `135.695 us`; M=128 measured `170.001 us`, both slightly worse - than v8. -- GEMM2 LDS-value preload epilogue: reading all four bf16-pair LDS values before - issuing atomics was correct but did not improve performance. M=64 GEMM2 - measured `67.868 us`; M=128 measured `86.163 us`, effectively equal or worse - than v3. -- GEMM1 1D-grid remap: changing from `(num_n_blocks, m_blocks)` grid to aiter's - one-dimensional `pid -> (m_block,n_block)` mapping was correct but slower. - M=64 GEMM1 measured `136.435 us`; M=128 measured `170.354 us`. - -Keep GEMM1 v8 and GEMM2 v3 as the stable BM16 kernel baselines. The next -useful GEMM1 work likely needs deeper schedule/resource changes rather than -small launch or epilogue reshaping. - -## BM16 GEMM1 v9 A-Read Hoist - -Moved the main-loop A LDS reads for the BM16 inline-quant GEMM1 out of -`compute_tile_prefetch_b()` and into the loop body immediately after the LDS -barrier, before the inline hidden-state quant loads. This matches the aiter -ordering more closely: barrier, A ds-read, A-scale ds-read, hidden load/quant, -then MFMA cluster. - -Correctness against aiter remained within the accepted cosine band: - -```text -M=4 cos=0.999997437 max_abs=0.015625 -M=8 cos=0.999998808 max_abs=0.015625 -M=16 cos=0.999998629 max_abs=0.015625 -M=32 cos=0.999998689 max_abs=0.023438 -M=64 cos=0.999998569 max_abs=0.031250 -M=128 cos=0.999999046 max_abs=0.031250 -``` - -Static GEMM1 ISA counts moved in the intended direction: - -```text - aiter FlyDSL v8 FlyDSL v9 -s_waitcnt 126 150 126 -v_mfma 224 224 224 -buffer_load 336 336 336 -DS read 88 88 88 -DS write 92 92 92 -s_barrier 30 30 30 -s_setprio 208 208 208 -``` - -Long graph-profiler check using the current default profiler settings -(`warmup=2000`, `graph_iters=64`, `replays=2`, `repeat=201`) measured: - -| M | stage | aiter | allfly v9 | delta | -| ---: | --- | ---: | ---: | ---: | -| 64 | sort_zero_init | 5.157 us | 7.272 us | +2.115 us | -| 64 | GEMM1 v9 | 130.773 us | 135.489 us | +4.716 us | -| 64 | GEMM2 v3 | 65.227 us | 67.720 us | +2.493 us | -| 64 | total | 201.152 us | 210.503 us | +9.352 us | -| 128 | sort_zero_init | 6.627 us | 8.662 us | +2.035 us | -| 128 | GEMM1 v9 | 163.527 us | 169.310 us | +5.784 us | -| 128 | GEMM2 v3 | 81.570 us | 85.976 us | +4.405 us | -| 128 | total | 251.730 us | 263.970 us | +12.240 us | - -Conclusion: v9 is retained. It removes the static extra waitcnts and gives a -small, stable M=128 GEMM1 improvement, but the remaining GEMM1 gap is not simply -static waitcnt count. The next target is the residual hot-loop wait placement -and dataflow: FlyDSL still has an early `s_waitcnt vmcnt(2)` between the first -pair of MFMA instructions in the first cluster, while aiter waits differently -before entering that pair. - -Rejected follow-up: - -- v10 inserted an explicit `rocdl.s_waitcnt(2)` at each MFMA cluster entry to - pull the pair-internal VMEM wait forward. Static ISA moved the wait before the - two MFMA instructions, but total `s_waitcnt` increased from 126 to 151, so it - was not retained. - -## BM16 GEMM2 v8 J-Major MFMA Trial - -Tried changing the FlyDSL BM16 GEMM2 compute order to mirror aiter's local -`issue_a_ds_read()` / `issue_mfma_cluster()` shape more closely. The trial -preloaded both A LDS packs for a K-stage first, then iterated by output J so -each J consumed the two K half-tiles back-to-back: - -```text -old v3: for k in [0,1]: ds_read A[k]; for J in [0..3]: mfma(J,k) -trial: ds_read A[0]; ds_read A[1]; for J in [0..3]: mfma(J,0); mfma(J,1) -``` - -Correctness was within the accepted cosine band: - -```text -M=4 cos=0.999997795 max_abs=0.015625 -M=8 cos=0.999998868 max_abs=0.015625 -M=16 cos=0.999998808 max_abs=0.015625 -M=32 cos=0.999997795 max_abs=0.031250 -M=64 cos=0.999998808 max_abs=0.031250 -M=128 cos=0.999998569 max_abs=0.031250 -min_cos=0.999997795 -``` - -However, the graph-mode profiler did not show a runtime win. With -`profile_small_bm16.py -M 64 --runners aiter,gemm1fly_aiter,allfly` and the -current long profiler defaults, the M=64 allfly trial measured: - -| stage | aiter | allfly v8 trial | delta | -| --- | ---: | ---: | ---: | -| sort_zero_init | 6.632 us | 7.267 us | +0.635 us | -| GEMM1 v9 | 130.987 us | 135.174 us | +4.187 us | -| GEMM2 v8 trial | 65.428 us | 67.808 us | +2.380 us | -| total | 203.381 us | 210.253 us | +6.872 us | - -This is effectively equal to the retained GEMM2 v3 baseline -(`~67.7 us` on M=64), so the j-major compute order was reverted. The next -GEMM2 work still needs to address the full VMEM wait/barrier schedule rather -than only the local MFMA loop order. - -## BM16 GEMM1 v11 Tail J-Major Trial - -Tried applying the same J-major idea only to GEMM1's final two drain/tail -K-tiles: preload both A LDS packs with `load_a128_tile()`, then iterate by -output J and issue the two K-half MFMA instructions back-to-back. This matched -the aiter source shape more closely for the tail path while leaving the main -pipeline unchanged. - -Correctness stayed in the accepted band: - -```text -M=4 cos=0.999997139 max_abs=0.015625 -M=8 cos=0.999998391 max_abs=0.015625 -M=16 cos=0.999998689 max_abs=0.023438 -M=32 cos=0.999998629 max_abs=0.015625 -M=64 cos=0.999998689 max_abs=0.031250 -M=128 cos=0.999998927 max_abs=0.031250 -min_cos=0.999997139 -``` - -Graph-mode profiler checks with `repeat=101` measured: - -| M | aiter GEMM1 | FlyDSL trial GEMM1 | delta | -| ---: | ---: | ---: | ---: | -| 64 | 130.333 us | 135.311 us | +4.977 us | -| 128 | 163.324 us | 169.223 us | +5.899 us | - -The trial did not give a meaningful runtime win versus the retained v9 numbers. -The static ISA diff between v9 and the trial contained only the kernel symbol -rename; instruction counts, VGPR/SGPR usage, waits, MFMA count, and barriers -were identical: - -```text - aiter FlyDSL v9 FlyDSL trial -s_waitcnt 126 126 126 -v_mfma 224 224 224 -ds_read 94 88 88 -ds_write 92 92 92 -s_barrier 30 30 30 -s_setprio 208 208 208 -VGPR 139 140 140 -SGPR 41 34 34 -spills 0 0 0 -``` - -Because the compiler already emitted the same ISA for the retained v9 schedule, -the source-only tail reorder was reverted. - -## BM16 Sort v5 Normal Zero-Store Trial - -Tried changing the BM16 fused sort/zero-init kernel from non-temporal int4 -stores back to normal int4 stores for the bf16 atomic output zero-fill. This -was motivated by the aiter C++ source using plain `out_v[i] = zero` in -`zero_init_bf16_out_impl`. - -The graph-mode profiler did not show a win. With -`profile_small_bm16.py -M 64,128 --runners aiter,sort_aiter` after increasing -the default profiler graph window to 128 captured calls and 4 graph replays per -sample, the no-NT v5 sort measured: - -| M | aiter sort | FlyDSL sort v5 | sort delta | total delta | -| ---: | ---: | ---: | ---: | ---: | -| 64 | 5.068 us | 7.270 us | +2.202 us | +2.175 us | -| 128 | 6.602 us | 8.742 us | +2.140 us | +2.889 us | - -The normal store variant did not improve the retained v2 behavior, so v5 was -reverted to the v2 kernel name and non-temporal zero-fill store. - -## BM16 Sort v6 Seven-Wave Cross-Prefix Trial - -Tried reducing the retained v2 cross-wave LDS prefix loop from all 16 CTA waves -to only the `ceil(385 / 64) = 7` waves that can contain valid expert rows. This -kept the v2 DPP plus `ds_bpermute` wave-local scan shape and did not add the -extra wave-total scan barrier from the rejected v3 trial. - -Correctness stayed in the accepted cosine band: - -```text -M=4 cos=0.999997497 max_abs=0.015625 -M=8 cos=0.999997973 max_abs=0.023438 -M=16 cos=0.999997675 max_abs=0.023438 -M=32 cos=0.999998569 max_abs=0.015625 -M=64 cos=0.999998808 max_abs=0.031250 -M=128 cos=0.999998927 max_abs=0.023438 -min_cos=0.999997497 -``` - -The graph profiler did not show a runtime win. On an otherwise idle GPU 3, -`profile_small_bm16.py -M 64 --runners aiter,sort_aiter` measured: - -| stage | aiter | FlyDSL sort v6 path | delta | -| --- | ---: | ---: | ---: | -| sort_zero_init | 4.970 us | 7.451 us | +2.481 us | -| total | 201.295 us | 207.391 us | +6.096 us | - -The v6 sort median was worse than the retained v2/v5 measurements, so it was -reverted. The remaining sort gap is not fixed by simply trimming unused -cross-wave LDS reads. - -## BM16 GEMM2 v9 Split-Barrier Trial - -Tried replacing the retained GEMM2 v3 precompute `s_waitcnt(0); s_barrier()` -with aiter-style split barriers around the two A LDS slots: - -```text -wait vmcnt(23); barrier; compute slot 0 -wait vmcnt(22); barrier; compute slot 1 -``` - -This matched the high-level atomic BM16 source shape more closely than the -earlier partial-wait-only attempts, but it was still not correct without -aiter's full per-MFMA descending VMEM waits and exact instruction schedule. - -Correctness failed the accepted cosine band: - -```text -M=4 cos=0.993439555 max_abs=3.984375 -M=8 cos=0.993382812 max_abs=5.243408 -M=16 cos=0.999997556 max_abs=0.054688 -M=32 cos=0.994739234 max_abs=6.148438 -M=64 cos=0.998132169 max_abs=5.007812 -M=128 cos=0.997795224 max_abs=5.382812 -min_cos=0.993382812 -``` - -The trial was reverted. This reinforces the prior ATT conclusion: GEMM2 wait -optimization has to transplant the full aiter schedule, including the -per-MFMA `vmcnt` ladder, rather than only splitting the coarse barrier. - -## BM16 GEMM2 v10 A-Load Schedule Barrier Trial - -Tried adding `rocdl.sched_barrier(0)` immediately after the two GEMM2 A -direct-to-LDS loads, matching the source-level aiter atomic BM16 sequence before -issuing scale and B loads. This does not relax the retained full -`s_waitcnt(0); s_barrier()` correctness fence; it only nudges compiler -scheduling. - -Correctness stayed in the accepted cosine band: - -```text -M=4 cos=0.999996245 max_abs=0.031250 -M=8 cos=0.999998748 max_abs=0.031250 -M=16 cos=0.999998868 max_abs=0.015625 -M=32 cos=0.999998331 max_abs=0.015625 -M=64 cos=0.999999106 max_abs=0.031250 -M=128 cos=0.999999225 max_abs=0.031250 -min_cos=0.999996245 -``` - -M=64 graph-profiler comparison with -`profile_small_bm16.py -M 64,128 --runners gemm1fly_aiter,allfly` was enough to -reject it: - -| stage | gemm1fly_aiter | allfly v10 | delta | -| --- | ---: | ---: | ---: | -| sort_zero_init | 7.085 us | 7.079 us | -0.006 us | -| GEMM1 | 135.224 us | 135.091 us | -0.133 us | -| GEMM2 | 64.880 us | 67.731 us | +2.852 us | -| total | 207.179 us | 209.894 us | +2.715 us | - -The GEMM2 time is effectively unchanged from retained v3 (`~67.72 us`), so the -schedule barrier was reverted. - -## BM16 GEMM2 v11 B-Scale Cache Modifier - -Changed the retained BM16 GEMM2 B-scale scalar load from non-temporal -`cache_modifier=2` to normal cached `cache_modifier=0`: - -```text -flydsl_kimi_mxfp4_gemm2_NE385_H7168_E512_TOPK9_BM16_ATOMIC_NT_v11 -``` - -This matches the aiter GEMM2 ISA shape more closely for the scale path: aiter's -B-scale `buffer_load_dword` does not carry the non-temporal modifier. Correctness -remained within the accepted cosine band for `M=4,8,16,32,64,128` -(`min_cos=0.9999963045120239`). - -The profiler was also updated with a `by-kernel` aggregation mode. Ordered graph -event slicing requires every captured replay event to be present; on this ROCm -stack torch profiler can drop some CUDA events in large replay windows. The -`by-kernel` mode still profiles graph replay, but aggregates each kernel name's -captured per-call average, making the default long window usable for `M=128`. - -Default `profile_small_bm16.py` settings after the update: - -```text -warmup=3000 -graph_iters=128 -replays=4 -repeat=101 -logical_iters_per_runner=51712 -aggregation=by-kernel -``` - -Graph-profiler comparisons against pure aiter: - -| M | stage | aiter | allfly v11 | delta | -| ---: | --- | ---: | ---: | ---: | -| 4 | sort_zero_init | 4.289 us | 4.140 us | -0.149 us | -| 4 | GEMM1 v9 | 24.504 us | 25.984 us | +1.480 us | -| 4 | GEMM2 v11 | 10.949 us | 12.351 us | +1.402 us | -| 4 | total | 39.720 us | 42.469 us | +2.749 us | -| 16 | sort_zero_init | 4.530 us | 4.604 us | +0.075 us | -| 16 | GEMM1 v9 | 60.845 us | 63.897 us | +3.052 us | -| 16 | GEMM2 v11 | 30.970 us | 30.967 us | -0.003 us | -| 16 | total | 96.359 us | 99.477 us | +3.118 us | -| 64 | sort_zero_init | 4.956 us | 7.213 us | +2.257 us | -| 64 | GEMM1 v9 | 130.204 us | 135.310 us | +5.106 us | -| 64 | GEMM2 v11 | 65.075 us | 65.078 us | +0.003 us | -| 64 | total | 200.233 us | 207.638 us | +7.405 us | -| 128 | sort_zero_init | 8.422 us | 8.430 us | +0.007 us | -| 128 | GEMM1 v9 | 169.249 us | 169.200 us | -0.049 us | -| 128 | GEMM2 v11 | 82.199 us | 82.440 us | +0.241 us | -| 128 | total | 259.858 us | 260.048 us | +0.189 us | - -Conclusion: keep GEMM2 v11. It effectively closes the retained GEMM2 gap for -`M=16,64` and keeps `M=128` within `+0.241 us` on GEMM2. The remaining BM16 -work should start with `M=64` GEMM1, then the `M=64` sort gap. `M=4` still has -a GEMM2 fixed-cost gap, but it is no longer the main throughput bucket. - -## BM16 GEMM1 v12 B-Scale Cache Modifier - -Changed the retained BM16 GEMM1 B-scale scalar load from non-temporal -`cache_modifier=2` to normal cached `cache_modifier=0`: - -```text -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v12 -``` - -This mirrors the successful GEMM2 v11 change and matches aiter's B-scale load -shape more closely: the B data loads remain non-temporal, but the scale dword -loads use the normal cached path. - -Short correctness smoke for `M=64` stayed in the accepted cosine band: - -```text -cos_sort=0.999998689 -cos_gemm1=0.999998927 -cos_all=0.999998927 -max_abs_all=0.031250 -``` - -Default graph-profiler comparison: - -```text -/opt/venv/bin/python profile_small_bm16.py -M 64 --runners sort_aiter,gemm1fly_aiter -``` - -| runner | sort_zero_init | GEMM1 | GEMM2 | total | -| --- | ---: | ---: | ---: | ---: | -| `sort_aiter` | 7.171 us | 131.178 us | 65.568 us | 203.946 us | -| `gemm1fly_aiter` | 7.131 us | 131.829 us | 65.520 us | 204.557 us | -| delta | -0.040 us | +0.651 us | -0.048 us | +0.611 us | - -Conclusion: keep v12. The previous retained M=64 GEMM1 gap was about -`+5.106 us`; v12 reduces the isolated GEMM1 gap to about `+0.651 us` in the -graph-profiler run. The remaining M=64 work is now small enough that further -GEMM1 changes should be validated with the full default profile window. - -## BM16 GEMM1 v13 Known Block Size - -Added an explicit FlyDSL kernel block-size declaration to the retained BM16 -GEMM1: - -```python -@flyc.kernel(name=module_name, known_block_size=[256, 1, 1]) -``` - -The retained kernel name is now: - -```text -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM16_INLINEQUANT_v13_knownblock -``` - -This is a codegen metadata change only; the GEMM schedule and math are -unchanged. The goal is to make the backend's flat workgroup-size knowledge -match the actual launch more explicitly. - -Default graph-profiler comparison for `M=64`: - -```text -/opt/venv/bin/python profile_small_bm16.py -M 64 --runners sort_aiter,gemm1fly_aiter -``` - -| runner | sort_zero_init | GEMM1 | GEMM2 | total | -| --- | ---: | ---: | ---: | ---: | -| `sort_aiter` | 7.112 us | 130.750 us | 65.342 us | 203.199 us | -| `gemm1fly_aiter` | 7.110 us | 130.943 us | 65.335 us | 203.389 us | -| delta | -0.002 us | +0.193 us | -0.007 us | +0.189 us | - -Smoke correctness with `M=4,16,64` stayed within the accepted cosine band: - -```text -M=4 cos_all=0.999995410 max_abs_all=0.031250 -M=16 cos_all=0.999998987 max_abs_all=0.015625 -M=64 cos_all=0.999998987 max_abs_all=0.031250 -``` - -Rejected related trials: - -- `v13_scalar_scale`: kept A-scale/B-scale as raw scalar SSA values instead of - wrapping them in `vec<1xi32>`. It was correct but measured M=64 GEMM1 at - `+0.764 us` versus aiter, worse than retained v12/v13. -- `v13_noexpguard`: removed the explicit `expert_i32 < EXPERTS` guard. It was - correct on the tested data but measured M=64 GEMM1 at `+0.669 us`, and the - safety tradeoff was not worth keeping. - -Conclusion: keep v13 known-block. It reduces the retained M=64 GEMM1 gap from -about `+0.651 us` to about `+0.193 us` in the default graph-profiler window. - -## BM96 GEMM1 v2 64+32 LDS Staging Trial - -Tried replacing the retained BM96/BN512 GEMM1 accumulator epilogue staging from -three 32-row LDS stages to two stages of 64 rows then 32 rows: - -```text -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM96_BN512_v2_seg64p32 -``` - -Correctness remained in the accepted approximate band for the full all-FlyDSL -path: - -```text -cos=0.972634 max_abs=7.007812 -``` - -Graph event timing: - -| runner | median | -| --- | ---: | -| `aiter_mxfp4_moe` | 1846.5 us | -| `local_mxfp4_all_flydsl_bm96` | 1907.0 us | - -Graph profiler median by kernel: - -| stage | aiter | BM96 v2 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.2 us | 6.7 us | +0.5 us | -| sort_cumsum | 10.2 us | 10.9 us | +0.7 us | -| sort_place_pad | 31.6 us | 32.6 us | +0.9 us | -| quant | 58.4 us | 59.2 us | +0.8 us | -| sort_scales | 55.4 us | 53.1 us | -2.3 us | -| GEMM1 | 691.0 us | 741.2 us | +50.2 us | -| GEMM2 | 859.5 us | 871.0 us | +11.5 us | -| scatter_reduce | 133.8 us | 130.1 us | -3.7 us | -| total | 1846.2 us | 1905.7 us | +59.5 us | - -Conclusion: reject v2. Reducing the number of accumulator staging phases did -not move GEMM1 relative to the retained 32-row segmented version (`~740.5 us` in -prior graph-profiler runs), while doubling the epilogue LDS footprint from 64 KiB -to 128 KiB. The active BM96 file is kept on the cleaner three-stage -`v1_mseg32_spillcheck` variant. - -Post-revert graph event smoke with the active `v1_mseg32_spillcheck` file: - -```text -aiter_mxfp4_moe_us=1844.1 -local_mxfp4_all_flydsl_bm96_us=1897.1 -cos=0.972026 max_abs=7.292969 -``` - -## BM128 GEMM2 BN512 Trial - -Added an isolated BM128/BN512 GEMM2 experiment: - -```text -kimi_fp4_moe_16384_opt_bm128_bn512.py -flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog -``` - -The GEMM1 path is unchanged from the retained BM128 kernel. GEMM2 changes: - -- `tile_m = 128`, `tile_n = 512`, `tile_k = 256` -- persistent CTA grid stays at 256 CTAs -- output epilogue uses 32-row segmented LDS staging so the f32 LDS tile is - `32 * 512 * 4 = 65536 B` instead of the impossible full - `128 * 512 * 4 = 262144 B` -- padding-row store mask from the BM128/storemask trial is preserved -- accumulator hint is raised to `amdgpu-agpr-alloc = 256,256` - -Resource metadata from `resource_inspect/bm128_bn512_gemm2_dump`: - -| kernel | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| BM128/BN256 storemask | 133120 B | 52 | 364 | 128 | 0 | 0 | 0 B | -| BM128/BN512 segmented | 67584 B | 56 | 440 | 256 | 0 | 0 | 0 B | - -So the user's hunch was right on spill: the BN512 variant compiles without -SGPR/VGPR spills and has no private segment. It does, however, push AGPR usage -to 256 and VGPR usage to 440. - -Medium graph-event comparison: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512 \ - --warmup 100 --graph-iters 128 --measure 31 --repeat 3 -``` - -| runner | samples | median | -| --- | --- | ---: | -| `aiter_mxfp4_moe` | 1836.3, 1845.3, 1845.0 us | 1845.0 us | -| `local_mxfp4_all_flydsl_bm128_storemask` | 1896.2, 1895.0, 1899.3 us | 1896.2 us | -| `local_mxfp4_all_flydsl_bm128_bn512` | 1923.5, 1920.0, 1920.1 us | 1920.1 us | - -Graph profiler with one captured logical iteration per replay: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512 \ - --mode graph --warmup 50 --iters 20 --graph-iters 1 --repeat 5 \ - --max-retries 20 --expected-kernels 8 --top 12 -``` - -| stage | BM128/storemask | BM128/BN512 | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.5 us | 6.5 us | -0.0 us | -| sort_cumsum | 9.8 us | 9.7 us | -0.2 us | -| sort_place_pad | 32.2 us | 32.1 us | -0.2 us | -| quant | 54.3 us | 54.5 us | +0.2 us | -| sort_scales | 55.6 us | 55.3 us | -0.2 us | -| GEMM1 | 694.6 us | 695.7 us | +1.2 us | -| GEMM2 | 930.3 us | 952.2 us | +22.0 us | -| scatter_reduce | 129.6 us | 129.8 us | +0.2 us | -| total | 1914.5 us | 1938.1 us | +23.6 us | - -Conclusion: reject BM128/BN512 for now. It halves the N-block count but the -larger accumulator footprint and segmented epilogue make GEMM2 about `+22 us` -slower than the retained BM128/BN256 storemask path. - -## BM128 GEMM1+GEMM2 BN512 Trial - -Tried changing GEMM1 as well, in a separate experiment file: - -```text -kimi_fp4_moe_16384_opt_bm128_bn512_all.py -flydsl_kimi_mxfp4_gemm1_NE385_H7168_E512_BM128_BN512_v0_mseg32 -flydsl_kimi_mxfp4_gemm2_mxfp4out_NE385_H7168_E512_BM128_BN512_v0_skip_pad_epilog -``` - -GEMM1 changes: - -- `tile_m = 128`, `tile_n = 512`, `tile_k = 256` -- output epilogue uses 32-row segmented LDS staging copied from the BM96/BN512 - path, so the accumulator staging buffer is `32 * 512 * 4 = 65536 B` -- launch grid becomes `(2, 1534, 1)`, i.e. the same `3068` CTAs as the BM128 - BN256 GEMM1 path `(4, 1534, 1)` - -Correctness is close enough for the relaxed criterion: - -```text -local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4_cos=0.999806 -local_mxfp4_all_flydsl_bm128_bn512_all_vs_aiter_mxfp4_max_abs=2.000000 -``` - -Medium graph-event comparison: - -```text -/opt/venv/bin/python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512,local_mxfp4_all_flydsl_bm128_bn512_all \ - --warmup 100 --graph-iters 128 --measure 31 --repeat 3 -``` - -| runner | samples | median | -| --- | --- | ---: | -| `aiter_mxfp4_moe` | 1850.8, 1840.6, 1851.5 us | 1850.8 us | -| `local_mxfp4_all_flydsl_bm128_storemask` | 1896.0, 1898.1, 1896.4 us | 1896.4 us | -| `local_mxfp4_all_flydsl_bm128_bn512` | 1917.7, 1918.6, 1923.7 us | 1918.6 us | -| `local_mxfp4_all_flydsl_bm128_bn512_all` | 2066.2, 2066.9, 2067.5 us | 2066.9 us | - -Resource metadata: - -| GEMM1 kernel | LDS | SGPR | VGPR | AGPR | SGPR spill | VGPR spill | private segment | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| BM128/BN256 v36 | 131072 B | 38 | 300 | 128 | 0 | 0 | 0 B | -| BM128/BN512 mseg32 | 65536 B | 44 | 512 | 256 | 0 | 56 | 180 B | - -Graph profiler with one captured logical iteration per replay: - -```text -/opt/venv/bin/python profile_flydsl_16384.py \ - --runners local_mxfp4_all_flydsl_bm128_storemask,local_mxfp4_all_flydsl_bm128_bn512_all \ - --mode graph --warmup 50 --iters 20 --graph-iters 1 --repeat 3 \ - --max-retries 20 --expected-kernels 8 --top 12 -``` - -| stage | BM128/storemask | BM128/BN512 all | delta | -| --- | ---: | ---: | ---: | -| sort_count | 6.7 us | 6.5 us | -0.2 us | -| sort_cumsum | 9.8 us | 9.5 us | -0.3 us | -| sort_place_pad | 32.1 us | 31.9 us | -0.2 us | -| quant | 55.1 us | 54.5 us | -0.5 us | -| sort_scales | 55.6 us | 54.0 us | -1.6 us | -| GEMM1 | 694.0 us | 851.2 us | +157.3 us | -| GEMM2 | 935.9 us | 943.1 us | +7.3 us | -| scatter_reduce | 129.6 us | 129.3 us | -0.2 us | -| total | 1917.8 us | 2078.9 us | +161.0 us | - -Conclusion: reject BM128/BN512 for GEMM1. It halves the N grid count but doubles -the accumulator pressure (`AGPR=256`) and spills VGPRs, so GEMM1 regresses by -about `+157 us`. Keep the retained BM128/BN256 storemask path as the best -BM128 baseline. diff --git a/experiments/bf16_gemm_single_block.py b/experiments/bf16_gemm_single_block.py deleted file mode 100644 index 0ac96e296..000000000 --- a/experiments/bf16_gemm_single_block.py +++ /dev/null @@ -1,276 +0,0 @@ -#!/usr/bin/env python3 -"""BF16 GEMM experiment for ISA and ATT inspection. - -Logical problem: - A: (M, K) bf16, row-major - B: (K, N) bf16, row-major - C: (M, N) bf16 - -The FlyDSL HGEMM kernel consumes B in transposed row-major form -``B_T: (N, K)``. This harness keeps the user-facing shape above, then passes -``B_T`` to the kernel. The default shape is large enough to fill the GPU: - - M = 8192, N = 8192, K = 16384 - -The per-CTA tile is: - - BM = 256, BN = 256, BK = 64, stages = 2, waves = 2 x 2 x 1 = 4 -""" - -from __future__ import annotations - -import argparse -import math -import os -import re -import sys -import time -from pathlib import Path - -import torch - -REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) -if REPO_ROOT not in sys.path: - sys.path.insert(0, REPO_ROOT) - -from flydsl.runtime.device import get_rocm_arch -from kernels.hgemm_splitk import hgemm_splitk_ - - -DEFAULT_M = 8192 -DEFAULT_N = 8192 -DEFAULT_K = 16384 - -HGEMM_KWARGS = { - "TILE_M": 256, - "TILE_N": 256, - "TILE_K": 64, - "STAGES": 2, - "SPLIT_K": 1, - "BLOCK_M_WARPS": 2, - "BLOCK_N_WARPS": 2, - "BLOCK_K_WARPS": 1, - "B_TO_LDS": True, -} - - -def _kernel_name() -> str: - # Keep in sync with kernels/hgemm_splitk.py. - async_tag = "AS1" if str(get_rocm_arch()) != "gfx942" else "AS0" - name = ( - "hgemm_bf16_256x256x64x2" - "_SPK1_W2x2x1_BLDS1_TN" - f"_{async_tag}" - ) - if HGEMM_KWARGS.get("A_LDS_K32_BLOCKING", False) or HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): - name += "_AK32" - if HGEMM_KWARGS.get("B_LDS_K32_BLOCKING", False) or HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): - name += "_BK32" - if HGEMM_KWARGS.get("K32_REGISTER_PIPELINE", False): - name += "_RP1" - return name - - -def assert_no_spills() -> None: - dump_dir = os.environ.get("FLYDSL_DUMP_DIR") - if not dump_dir: - return - - root = Path(dump_dir) - if not root.exists(): - raise RuntimeError(f"FLYDSL_DUMP_DIR does not exist: {root}") - - candidates = [p for p in root.rglob("22_final_isa.s") if p.parent.name.startswith(_kernel_name())] - if not candidates: - raise RuntimeError(f"could not find final ISA for {_kernel_name()} under {root}") - - isa_path = max(candidates, key=lambda p: p.stat().st_mtime) - text = isa_path.read_text() - - checks = { - "sgpr_spill_count": re.compile(r"\.sgpr_spill_count:\s*(\d+)"), - "vgpr_spill_count": re.compile(r"\.vgpr_spill_count:\s*(\d+)"), - "private_segment_fixed_size": re.compile(r"\.private_segment_fixed_size:\s*(\d+)"), - "uses_flat_scratch": re.compile(r"uses_flat_scratch,\s*(\d+)"), - } - failures = [] - for name, pattern in checks.items(): - matches = [int(m.group(1)) for m in pattern.finditer(text)] - if matches and any(v != 0 for v in matches): - failures.append(f"{name}={matches}") - - scratch_ops = re.findall(r"\b(?:scratch_(?:load|store)|buffer_(?:load|store)[^\n]*scratch)", text) - if scratch_ops: - failures.append("scratch memory ops present") - - if failures: - detail = "; ".join(failures) - raise RuntimeError(f"kernel spill check failed for {isa_path}: {detail}") - - print(f"spill_check=ok isa={isa_path}") - - -def preshuffle_rows_k(t: torch.Tensor, tile_row: int, tile_k: int, k_chunk: int = 32) -> torch.Tensor: - """Permute a row-major [R, K] tensor so each [tile_row, k_chunk] sub-block is - physically contiguous and the K32 sub-group (k_chunk) is the outer K axis: - [R, K] -> [R//tr, K//tk, tk//kc, tr, kc] -> flat. - This makes one buffer_load (a k_chunk = 32 elems = 64B per row, tile_row rows) - read a fully contiguous run, so each 128B L2 cache line is used in full instead - of half (which doubled L2 accesses). Matches kernel preshuffle_vaddr_soffset.""" - r, k = t.shape[-2:] - assert r % tile_row == 0 and k % tile_k == 0 and tile_k % k_chunk == 0 - kg = tile_k // k_chunk - return ( - t.reshape(r // tile_row, tile_row, k // tile_k, kg, k_chunk) - .permute(0, 2, 3, 1, 4) # [R//tr, K//tk, kg, tr, kc] - .contiguous() - .view(r, k) - ) - - -def make_inputs(m: int, n: int, k: int, *, skip_init: bool) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: - device = torch.device("cuda") - if skip_init: - a = torch.empty((m, k), device=device, dtype=torch.bfloat16) - b = torch.empty((k, n), device=device, dtype=torch.bfloat16) - else: - gen = torch.Generator(device=device) - gen.manual_seed(123) - # Small magnitude keeps bf16-output error easy to inspect. - a = (torch.rand((m, k), device=device, dtype=torch.float32, generator=gen) - 0.5).to(torch.bfloat16) * 0.125 - b = (torch.rand((k, n), device=device, dtype=torch.float32, generator=gen) - 0.5).to(torch.bfloat16) * 0.125 - c = torch.empty((m, n), device=device, dtype=torch.bfloat16) - return a, b, c - - -def run_kernel(c: torch.Tensor, a: torch.Tensor, b_t: torch.Tensor) -> None: - hgemm_splitk_( - c, - a, - b_t, - None, - HGEMM_KWARGS, - torch.cuda.current_stream(), - ) - - -def check_result(c: torch.Tensor, a: torch.Tensor, b: torch.Tensor) -> tuple[float, float]: - ref = torch.mm(a.float(), b.float()) - got = c.float() - diff = got - ref - max_abs = diff.abs().max().item() - cos = torch.nn.functional.cosine_similarity(got.flatten(), ref.flatten(), dim=0).item() - if not math.isfinite(max_abs) or not math.isfinite(cos): - raise RuntimeError(f"non-finite check result: max_abs={max_abs}, cos={cos}") - return max_abs, cos - - -def time_kernel(c: torch.Tensor, a: torch.Tensor, b_t: torch.Tensor, *, warmup: int, iters: int) -> float: - for _ in range(warmup): - run_kernel(c, a, b_t) - torch.cuda.synchronize() - - start = time.perf_counter() - for _ in range(iters): - run_kernel(c, a, b_t) - torch.cuda.synchronize() - elapsed_s = time.perf_counter() - start - return elapsed_s * 1.0e6 / max(1, iters) - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--m", type=int, default=DEFAULT_M) - parser.add_argument("--n", type=int, default=DEFAULT_N) - parser.add_argument("--k", type=int, default=DEFAULT_K) - parser.add_argument("--warmup", type=int, default=3) - parser.add_argument("--iters", type=int, default=10) - parser.add_argument("--no-check", action="store_true") - parser.add_argument( - "--skip-init", - action="store_true", - help="Use torch.empty inputs. Useful for ATT so PyTorch init kernels do not clutter the trace.", - ) - parser.add_argument( - "--a-lds-k32-blocking", - action="store_true", - help="Enable the experimental K32-blocked LDS layout for A.", - ) - parser.add_argument( - "--k32-register-pipeline", - action="store_true", - help="Enable A/B K32 LDS layouts and register-prefetch the second K32 slice.", - ) - parser.add_argument( - "--b-lds-k32-blocking", - action="store_true", - help="Enable the experimental K32-blocked LDS layout for B.", - ) - parser.add_argument( - "--preshuffle", - action="store_true", - help="Preshuffle A/B so each [256, BLOCK_K] tile is contiguous in global memory.", - ) - parser.add_argument( - "--xcd-swizzle", - action="store_true", - help="Enable XCD-aware CTA tile remap for L2 reuse across the 8 gfx950 XCDs.", - ) - args = parser.parse_args() - HGEMM_KWARGS["A_LDS_K32_BLOCKING"] = bool(args.a_lds_k32_blocking) - HGEMM_KWARGS["B_LDS_K32_BLOCKING"] = bool(args.b_lds_k32_blocking) - HGEMM_KWARGS["K32_REGISTER_PIPELINE"] = bool(args.k32_register_pipeline) - HGEMM_KWARGS["PRESHUFFLE"] = bool(args.preshuffle) - HGEMM_KWARGS["XCD_SWIZZLE"] = bool(args.xcd_swizzle) - - if not torch.cuda.is_available(): - raise RuntimeError("CUDA/ROCm device is not available") - if args.iters <= 0: - raise ValueError("--iters must be positive") - if args.warmup < 0: - raise ValueError("--warmup must be non-negative") - tile_m = int(HGEMM_KWARGS["TILE_M"]) - tile_n = int(HGEMM_KWARGS["TILE_N"]) - tile_k = int(HGEMM_KWARGS["TILE_K"]) - if args.m <= 0 or args.n <= 0 or args.k <= 0: - raise ValueError("--m, --n, and --k must be positive") - if args.n % tile_n != 0: - raise ValueError(f"--n must be divisible by TILE_N={tile_n}, got {args.n}") - if args.k % tile_k != 0: - raise ValueError(f"--k must be divisible by TILE_K={tile_k}, got {args.k}") - - a, b, c = make_inputs(args.m, args.n, args.k, skip_init=args.skip_init) - b_t = b.t().contiguous() if not args.skip_init else torch.empty((args.n, args.k), device=b.device, dtype=b.dtype) - - # The kernel consumes preshuffled A / B_T; the reference check below still uses - # the original a / b, so correctness is validated against the true GEMM. - tile_k = int(HGEMM_KWARGS["TILE_K"]) - if args.preshuffle: - a_k = preshuffle_rows_k(a, 256, tile_k) - b_t_k = preshuffle_rows_k(b_t, 256, tile_k) - else: - a_k, b_t_k = a, b_t - - # First call compiles and launches the fixed-shape FlyDSL kernel. - run_kernel(c, a_k, b_t_k) - torch.cuda.synchronize() - assert_no_spills() - - max_abs = float("nan") - cos = float("nan") - if not args.no_check and not args.skip_init: - max_abs, cos = check_result(c, a, b) - - us = time_kernel(c, a_k, b_t_k, warmup=args.warmup, iters=args.iters) - tflops = (2.0 * args.m * args.n * args.k) / (us * 1.0e-6) / 1.0e12 - - print(f"arch={get_rocm_arch()}") - print(f"kernel={_kernel_name()}") - print(f"shape=A({args.m},{args.k}) B({args.k},{args.n}) C({args.m},{args.n})") - print(f"tile=BM256 BN256 BK64 stages=2 waves=4 b_to_lds=1") - print(f"time_us={us:.3f} tflops={tflops:.3f}") - print(f"check_max_abs={max_abs:.6f} check_cos={cos:.9f}") - - -if __name__ == "__main__": - main() diff --git a/fast_run.sh b/fast_run.sh deleted file mode 100644 index a4b6fd8fb..000000000 --- a/fast_run.sh +++ /dev/null @@ -1,6 +0,0 @@ -python bench_flydsl_16384.py \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 1 \ - --graph-iters 1 \ - --measure 1 \ - --repeat 1 \ No newline at end of file diff --git a/hgemm_wave0_compact_schedule.txt b/hgemm_wave0_compact_schedule.txt deleted file mode 100644 index 938992044..000000000 --- a/hgemm_wave0_compact_schedule.txt +++ /dev/null @@ -1,193 +0,0 @@ -Wave0 compact steady-state schedule -=================================== - -Block notation: - C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. - A0[i,k] and B0[j,k] are current LDS buffer fragments, k=0 means K[0:32], k=1 means K[32:64]. - A1/B1 is the other LDS buffer for the next outer-loop tile. - dsrd reads one 16x32 fragment from LDS. - bfld writes CTA-wide global->LDS chunks into the other buffer. - B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. - With the experimental A_LDS_K32_BLOCKING path, A bfld chunks are [4 rows, 1 K-slice]. - Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. - -Ops ---- -mfma C[0,0]+=A0[0,0]*B0[0,0] -dsrd B0[4,0] -bfld B1[0:2,0:2] -mfma C[0,1]+=A0[0,0]*B0[1,0] -dsrd B0[5,0] -dsrd A0[1,0] -mfma C[0,2]+=A0[0,0]*B0[2,0] -dsrd B0[6,0] -mfma C[0,3]+=A0[0,0]*B0[3,0] -dsrd B0[7,0] -mfma C[0,4]+=A0[0,0]*B0[4,0] -bfld B1[2:4,0:2] -mfma C[0,5]+=A0[0,0]*B0[5,0] -mfma C[0,6]+=A0[0,0]*B0[6,0] -mfma C[0,7]+=A0[0,0]*B0[7,0] -mfma C[1,0]+=A0[1,0]*B0[0,0] -bfld B1[4:6,0:2] -mfma C[1,1]+=A0[1,0]*B0[1,0] -dsrd A0[2,0] -mfma C[1,2]+=A0[1,0]*B0[2,0] -mfma C[1,3]+=A0[1,0]*B0[3,0] -mfma C[1,4]+=A0[1,0]*B0[4,0] -bfld B1[6:8,0:2] -mfma C[1,5]+=A0[1,0]*B0[5,0] -mfma C[1,6]+=A0[1,0]*B0[6,0] -mfma C[1,7]+=A0[1,0]*B0[7,0] -mfma C[2,0]+=A0[2,0]*B0[0,0] -bfld B1[8:10,0:2] -mfma C[2,1]+=A0[2,0]*B0[1,0] -dsrd A0[3,0] -mfma C[2,2]+=A0[2,0]*B0[2,0] -mfma C[2,3]+=A0[2,0]*B0[3,0] -mfma C[2,4]+=A0[2,0]*B0[4,0] -bfld B1[10:12,0:2] -mfma C[2,5]+=A0[2,0]*B0[5,0] -mfma C[2,6]+=A0[2,0]*B0[6,0] -mfma C[2,7]+=A0[2,0]*B0[7,0] -mfma C[3,0]+=A0[3,0]*B0[0,0] -bfld B1[12:14,0:2] -mfma C[3,1]+=A0[3,0]*B0[1,0] -dsrd A0[4,0] -mfma C[3,2]+=A0[3,0]*B0[2,0] -mfma C[3,3]+=A0[3,0]*B0[3,0] -mfma C[3,4]+=A0[3,0]*B0[4,0] -bfld B1[14:16,0:2] -mfma C[3,5]+=A0[3,0]*B0[5,0] -mfma C[3,6]+=A0[3,0]*B0[6,0] -mfma C[3,7]+=A0[3,0]*B0[7,0] -mfma C[4,0]+=A0[4,0]*B0[0,0] -bfld A1[0:4,0] -mfma C[4,1]+=A0[4,0]*B0[1,0] -dsrd A0[5,0] -mfma C[4,2]+=A0[4,0]*B0[2,0] -mfma C[4,3]+=A0[4,0]*B0[3,0] -mfma C[4,4]+=A0[4,0]*B0[4,0] -bfld A1[4:8,0] -mfma C[4,5]+=A0[4,0]*B0[5,0] -mfma C[4,6]+=A0[4,0]*B0[6,0] -mfma C[4,7]+=A0[4,0]*B0[7,0] -mfma C[5,0]+=A0[5,0]*B0[0,0] -bfld A1[8:12,0] -mfma C[5,1]+=A0[5,0]*B0[1,0] -dsrd A0[6,0] -mfma C[5,2]+=A0[5,0]*B0[2,0] -mfma C[5,3]+=A0[5,0]*B0[3,0] -mfma C[5,4]+=A0[5,0]*B0[4,0] -bfld A1[12:16,0] -mfma C[5,5]+=A0[5,0]*B0[5,0] -mfma C[5,6]+=A0[5,0]*B0[6,0] -mfma C[5,7]+=A0[5,0]*B0[7,0] -mfma C[6,0]+=A0[6,0]*B0[0,0] -dsrd B0[0,1] -bfld A1[0:4,1] -mfma C[6,1]+=A0[6,0]*B0[1,0] -dsrd A0[7,0] -dsrd B0[1,1] -mfma C[6,2]+=A0[6,0]*B0[2,0] -dsrd B0[2,1] -mfma C[6,3]+=A0[6,0]*B0[3,0] -dsrd B0[3,1] -mfma C[6,4]+=A0[6,0]*B0[4,0] -dsrd A0[0,1] -bfld A1[4:8,1] -mfma C[6,5]+=A0[6,0]*B0[5,0] -mfma C[6,6]+=A0[6,0]*B0[6,0] -mfma C[6,7]+=A0[6,0]*B0[7,0] -mfma C[7,0]+=A0[7,0]*B0[0,0] -bfld A1[8:12,1] -mfma C[7,1]+=A0[7,0]*B0[1,0] -mfma C[7,2]+=A0[7,0]*B0[2,0] -mfma C[7,3]+=A0[7,0]*B0[3,0] -mfma C[7,4]+=A0[7,0]*B0[4,0] -bfld A1[12:16,1] -mfma C[7,5]+=A0[7,0]*B0[5,0] -mfma C[7,6]+=A0[7,0]*B0[6,0] -mfma C[7,7]+=A0[7,0]*B0[7,0] -mfma C[0,0]+=A0[0,1]*B0[0,1] -dsrd B0[4,1] -mfma C[0,1]+=A0[0,1]*B0[1,1] -dsrd B0[5,1] -dsrd A0[1,1] -mfma C[0,2]+=A0[0,1]*B0[2,1] -dsrd B0[6,1] -mfma C[0,3]+=A0[0,1]*B0[3,1] -dsrd B0[7,1] -mfma C[0,4]+=A0[0,1]*B0[4,1] -mfma C[0,5]+=A0[0,1]*B0[5,1] -mfma C[0,6]+=A0[0,1]*B0[6,1] -mfma C[0,7]+=A0[0,1]*B0[7,1] -mfma C[1,0]+=A0[1,1]*B0[0,1] -mfma C[1,1]+=A0[1,1]*B0[1,1] -dsrd A0[2,1] -mfma C[1,2]+=A0[1,1]*B0[2,1] -mfma C[1,3]+=A0[1,1]*B0[3,1] -mfma C[1,4]+=A0[1,1]*B0[4,1] -mfma C[1,5]+=A0[1,1]*B0[5,1] -mfma C[1,6]+=A0[1,1]*B0[6,1] -mfma C[1,7]+=A0[1,1]*B0[7,1] -mfma C[2,0]+=A0[2,1]*B0[0,1] -mfma C[2,1]+=A0[2,1]*B0[1,1] -dsrd A0[3,1] -mfma C[2,2]+=A0[2,1]*B0[2,1] -mfma C[2,3]+=A0[2,1]*B0[3,1] -mfma C[2,4]+=A0[2,1]*B0[4,1] -mfma C[2,5]+=A0[2,1]*B0[5,1] -mfma C[2,6]+=A0[2,1]*B0[6,1] -mfma C[2,7]+=A0[2,1]*B0[7,1] -mfma C[3,0]+=A0[3,1]*B0[0,1] -mfma C[3,1]+=A0[3,1]*B0[1,1] -dsrd A0[4,1] -mfma C[3,2]+=A0[3,1]*B0[2,1] -mfma C[3,3]+=A0[3,1]*B0[3,1] -mfma C[3,4]+=A0[3,1]*B0[4,1] -mfma C[3,5]+=A0[3,1]*B0[5,1] -mfma C[3,6]+=A0[3,1]*B0[6,1] -mfma C[3,7]+=A0[3,1]*B0[7,1] -mfma C[4,0]+=A0[4,1]*B0[0,1] -mfma C[4,1]+=A0[4,1]*B0[1,1] -dsrd A0[5,1] -mfma C[4,2]+=A0[4,1]*B0[2,1] -mfma C[4,3]+=A0[4,1]*B0[3,1] -mfma C[4,4]+=A0[4,1]*B0[4,1] -mfma C[4,5]+=A0[4,1]*B0[5,1] -mfma C[4,6]+=A0[4,1]*B0[6,1] -mfma C[4,7]+=A0[4,1]*B0[7,1] -mfma C[5,0]+=A0[5,1]*B0[0,1] -mfma C[5,1]+=A0[5,1]*B0[1,1] -dsrd A0[6,1] -mfma C[5,2]+=A0[5,1]*B0[2,1] -mfma C[5,3]+=A0[5,1]*B0[3,1] -mfma C[5,4]+=A0[5,1]*B0[4,1] -mfma C[5,5]+=A0[5,1]*B0[5,1] -mfma C[5,6]+=A0[5,1]*B0[6,1] -mfma C[5,7]+=A0[5,1]*B0[7,1] -mfma C[6,0]+=A0[6,1]*B0[0,1] -mfma C[6,1]+=A0[6,1]*B0[1,1] -dsrd A0[7,1] -mfma C[6,2]+=A0[6,1]*B0[2,1] -mfma C[6,3]+=A0[6,1]*B0[3,1] -mfma C[6,4]+=A0[6,1]*B0[4,1] -mfma C[6,5]+=A0[6,1]*B0[5,1] -mfma C[6,6]+=A0[6,1]*B0[6,1] -mfma C[6,7]+=A0[6,1]*B0[7,1] -mfma C[7,0]+=A0[7,1]*B0[0,1] -mfma C[7,1]+=A0[7,1]*B0[1,1] -mfma C[7,2]+=A0[7,1]*B0[2,1] -mfma C[7,3]+=A0[7,1]*B0[3,1] -mfma C[7,4]+=A0[7,1]*B0[4,1] -mfma C[7,5]+=A0[7,1]*B0[5,1] -mfma C[7,6]+=A0[7,1]*B0[6,1] -mfma C[7,7]+=A0[7,1]*B0[7,1] -barrier vmcnt(0)+s_barrier -dsrd B1[0,0] -dsrd B1[1,0] -dsrd B1[2,0] -dsrd B1[3,0] -dsrd A1[0,0] -yield C,A1[0,0],B1[0:4,0] diff --git a/kernels/fp8_gemm_4wave_opt.py b/kernels/fp8_gemm_4wave_opt.py deleted file mode 100644 index e9ac18ac9..000000000 --- a/kernels/fp8_gemm_4wave_opt.py +++ /dev/null @@ -1,461 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2025 FlyDSL Project Contributors - -"""4-wave FP8 matmul with row-wise scaling for AMD CDNA4. - -Algorithm derived from HipKittens FP8_4wave -(https://github.com/HazyResearch/HipKittens/blob/7782744ba1fd259a377a99e2ea8f71384cc80e55/kernels/gemm/fp8fp32/FP8_4wave/4_wave.cu#L1). - -Global IO, scale loads, and bf16 stores go through the layout API -(``fx.rocdl.make_buffer_tensor`` + ``fx.copy`` with ``BufferCopyLDS128b`` -/ ``BufferCopy{16,32,128}b``). MFMAs use ``fly.mma_atom_call_ssa`` so -the chained Vec(4, f32) accumulator stays on AGPR. The XOR swizzle and -the 8-buffer LDS pipeline ping-pong are kept as direct arithmetic to -preserve the original kernel's interleaved-cluster scheduling. - -Optional B preshuffle uses the same on-disk layout as -``preshuffle_gemm_v2`` / ``shuffle_weight((16, 16))``. -""" - -import flydsl.compiler as flyc -import flydsl.expr as fx -from flydsl._mlir.dialects import llvm as _llvm -from flydsl.expr import arith, const_expr, range_constexpr -from flydsl.expr import vector as _vector -from flydsl.expr.typing import T as _T -from flydsl.expr.typing import Vector as Vec -from kernels.fp8_gemm_utils import ( - G2SLoader, - Mfma16x16x128, - S2RLoader, - StoreC, - ceildiv, - compute_global_swizzle, - divmod, - make_fp8_buffer_tensor, - pack_i32x4_i32x8, - swizzle_128, - wait_barrier, -) - - -class Mfma16x16x128AGPR(Mfma16x16x128): - """fp8 16x16x128 MFMA that pins the accumulator in AGPR via inline asm - (constraint `=a,v,v,0`), so the f32x4 accumulator accumulates in-place and - the compiler does not insert v_accvgpr_mov/read + s_nop to shuffle the - accumulator between AGPR slots (the dominant stall in the ssa-lowered path). - scale is left default (=0); the real per-token scale is applied in StoreC.""" - - def _do_mma(self, a, b, c): - a_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), a) - b_i32x8 = _vector.bitcast(_T.vec(8, _T.i32), b) - res_ty = _T.vec(4, _T.f32) - return _llvm.inline_asm( - res_ty, - [arith._to_raw(a_i32x8), arith._to_raw(b_i32x8), arith._to_raw(c)], - "v_mfma_f32_16x16x128_f8f6f4 $0, $1, $2, $0", - "=a,v,v,0", - has_side_effects=True, - ) - - -def _min(a, b): - return arith.select(a < b, a, b) - - -def _xcd_swizzle(num_pid_m, num_pid_n): - NUM_XCDS = 8 - import os as _osw - WGM = int(_osw.environ.get("FP8_WGM", "8")) - NUM_CUS = 32 * NUM_XCDS - SWIZZLE_THRESHOLD = 4 * NUM_CUS - - wgid = fx.block_idx.x - - num_wg = num_pid_m * num_pid_n - - # Simple path: no XCD remapping. - simple_m, simple_n = divmod(wgid, num_pid_n) - - # XCD-remapped path. - intra_xcd, xcd = divmod(wgid, NUM_XCDS) - wgid_remap = xcd * (num_wg // NUM_XCDS) + intra_xcd - num_wgid_in_group = WGM * num_pid_n - group_id, intra_group = divmod(wgid_remap, num_wgid_in_group) - first_pid_m = group_id * WGM - group_size_m = _min(num_pid_m - first_pid_m, WGM) - pid_n, intra_group_m = divmod(intra_group, group_size_m) - pid_m = first_pid_m + intra_group_m - - use_simple = (num_wg < SWIZZLE_THRESHOLD) | (num_wg % NUM_XCDS != 0) - return (arith.select(use_simple, simple_m, pid_m), arith.select(use_simple, simple_n, pid_n)) - - -def compile_fp8_gemm_4w_opt( - *, - K: int, - BLOCK_M: int = 256, - BLOCK_N: int = 256, - use_xcd_remap: bool = True, - b_preshuffled: bool = False, -): - # MFMA atom is 16x16x128; 4 waves in a 2x2 config require BLOCK >= 64. - BLOCK_K = 128 - LDS_BLOCK_M = BLOCK_M // 2 - LDS_BLOCK_N = BLOCK_N // 2 - - assert BLOCK_M >= 64 and BLOCK_M % 64 == 0 and BLOCK_N >= 64 and BLOCK_N % 64 == 0 - assert K % BLOCK_K == 0 - - import os as _osv - - # Extra vmcnt slack on the main-loop barriers. The 8-buffer pipeline keeps the - # read buffers many loads behind the write, so allowing more in-flight global - # loads (vmcnt 16 -> 32) at the barrier is safe and trims barrier wait a little. - _VMARGIN = int(_osv.environ.get("FP8_VMARGIN", "0")) - - K_ITERS = K // BLOCK_K - # Number of 16-row 16x128 tiles per wave per A/B partition. - N_TILES_A = BLOCK_M // 4 // 16 - N_TILES_B = BLOCK_N // 4 // 16 - N_ACCUMS = N_TILES_A * N_TILES_B - assert N_ACCUMS > 0 - - N_LDS_ROUNDS = max(N_TILES_A, N_TILES_B) - - _use_interleaved_block = BLOCK_M == 256 and BLOCK_N == 256 - - a_lds_size = LDS_BLOCK_M * BLOCK_K - b_lds_size = LDS_BLOCK_N * BLOCK_K - - @fx.struct - class SharedStorage: - A_lds_cur_0: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] - A_lds_cur_1: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] - A_lds_next_0: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] - A_lds_next_1: fx.Array[fx.Float8E4M3FN, a_lds_size, 16] - B_lds_cur_0: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] - B_lds_cur_1: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] - B_lds_next_0: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] - B_lds_next_1: fx.Array[fx.Float8E4M3FN, b_lds_size, 16] - - @flyc.kernel - def kernel_gemm( - A: fx.Tensor, B_T: fx.Tensor, C: fx.Tensor, A_scale: fx.Tensor, B_scale: fx.Tensor, c_m: fx.Int32, c_n: fx.Int32 - ): - F8_IR_t = fx.Float8E4M3FN.ir_type - - lds = fx.SharedAllocator().allocate(SharedStorage).peek() - a_cur0 = lds.A_lds_cur_0 - a_cur1 = lds.A_lds_cur_1 - a_next0 = lds.A_lds_next_0 - a_next1 = lds.A_lds_next_1 - b_cur0 = lds.B_lds_cur_0 - b_cur1 = lds.B_lds_cur_1 - b_next0 = lds.B_lds_next_0 - b_next1 = lds.B_lds_next_1 - - lane_id = fx.thread_idx.x % 64 - wave_id = fx.thread_idx.x // 64 - - n_blocks = ceildiv(c_n, BLOCK_N) - if const_expr(use_xcd_remap): - tile_i, tile_j = _xcd_swizzle(ceildiv(c_m, BLOCK_M), n_blocks) - else: - tile_i, tile_j = divmod(fx.block_idx.x, n_blocks) - - wave_i = wave_id // 2 - wave_j = wave_id % 2 - A0_gl_offset = (tile_i * BLOCK_M) * K - A1_gl_offset = (tile_i * BLOCK_M + LDS_BLOCK_M) * K - A_K_STEP = BLOCK_K - B0_gl_offset = (tile_j * BLOCK_N) * K - B1_gl_offset = (tile_j * BLOCK_N + LDS_BLOCK_N) * K - B_K_STEP = (2 * 1024) if b_preshuffled else BLOCK_K - - gA = make_fp8_buffer_tensor(A, F8_IR_t) - gB = make_fp8_buffer_tensor(B_T, F8_IR_t) - ga_div = fx.logical_divide(gA, fx.make_layout(1, 1)) - gb_div = fx.logical_divide(gB, fx.make_layout(1, 1)) - - def _compute_lds_swizzle(s2r, preshuffled=False): - lds_swz = [] - for row_offset in range_constexpr(s2r.n_tiles): - row = s2r.wave_idx * (s2r.n_tiles * 16) + row_offset * 16 + lane_id % 16 - swz = [] - for i in range_constexpr(2): - col = (lane_id // 16) * 16 + i * 64 - if const_expr(preshuffled): - swz.append((row // 8) * 1024 + (row % 8) * 16 + (col // 16) * 128) - else: - r, c = swizzle_128(row, col) - swz.append(r * BLOCK_K + c) - lds_swz.append(swz) - return lds_swz - - mfma = Mfma16x16x128AGPR(N_TILES_A, N_TILES_B) - - def _interleaved_cluster( - lds_dst, - g2s, - k_offset, - s2r, - lds_src, - a, - b, - c, - lds_src_preshuffled=False, - ): - rt_dst = [] - - c[mfma.idx(0, 0)] = mfma.call_one(a, b, c, 0, 0) - c[mfma.idx(0, 1)] = mfma.call_one(a, b, c, 0, 1) - - lds_swz = _compute_lds_swizzle(s2r, preshuffled=lds_src_preshuffled) - g2s.load_one(lds_dst, k_offset, 0) - rt_dst_0 = s2r.load_one(lds_src, lds_swz[0][0]) - - c[mfma.idx(0, 2)] = mfma.call_one(a, b, c, 0, 2) - - rt_dst_1 = s2r.load_one(lds_src, lds_swz[0][1]) - rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) - - c[mfma.idx(0, 3)] = mfma.call_one(a, b, c, 0, 3) - - g2s.load_one(lds_dst, k_offset, 1) - rt_dst_0 = s2r.load_one(lds_src, lds_swz[1][0]) - - c[mfma.idx(1, 0)] = mfma.call_one(a, b, c, 1, 0) - c[mfma.idx(1, 1)] = mfma.call_one(a, b, c, 1, 1) - - rt_dst_1 = s2r.load_one(lds_src, lds_swz[1][1]) - rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) - - c[mfma.idx(1, 2)] = mfma.call_one(a, b, c, 1, 2) - c[mfma.idx(1, 3)] = mfma.call_one(a, b, c, 1, 3) - - g2s.load_one(lds_dst, k_offset, 2) - rt_dst_0 = s2r.load_one(lds_src, lds_swz[2][0]) - - c[mfma.idx(2, 0)] = mfma.call_one(a, b, c, 2, 0) - c[mfma.idx(2, 1)] = mfma.call_one(a, b, c, 2, 1) - - rt_dst_1 = s2r.load_one(lds_src, lds_swz[2][1]) - rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) - - c[mfma.idx(2, 2)] = mfma.call_one(a, b, c, 2, 2) - c[mfma.idx(2, 3)] = mfma.call_one(a, b, c, 2, 3) - - g2s.load_one(lds_dst, k_offset, 3) - rt_dst_0 = s2r.load_one(lds_src, lds_swz[3][0]) - - c[mfma.idx(3, 0)] = mfma.call_one(a, b, c, 3, 0) - c[mfma.idx(3, 1)] = mfma.call_one(a, b, c, 3, 1) - - rt_dst_1 = s2r.load_one(lds_src, lds_swz[3][1]) - rt_dst.append(pack_i32x4_i32x8(rt_dst_0, rt_dst_1)) - - c[mfma.idx(3, 2)] = mfma.call_one(a, b, c, 3, 2) - c[mfma.idx(3, 3)] = mfma.call_one(a, b, c, 3, 3) - - return c, rt_dst - - def _compute_cluster( - lds_dst, - g2s, - k_offset, - s2r, - lds_src, - a, - b, - c, - lds_src_preshuffled=False, - ): - g2s.load(lds_dst, k_offset) - rt_dst = s2r.load(lds_src, preshuffled=lds_src_preshuffled) - c = mfma.call(a, b, c) - return c, rt_dst - - def _compute_block( - lds_dst, - g2s, - k_offset, - s2r, - lds_src, - a, - b, - c, - lds_src_preshuffled=False, - ): - if const_expr(_use_interleaved_block): - return _interleaved_cluster( - lds_dst, - g2s, - k_offset, - s2r, - lds_src, - a, - b, - c, - lds_src_preshuffled=lds_src_preshuffled, - ) - else: - return _compute_cluster( - lds_dst, - g2s, - k_offset, - s2r, - lds_src, - a, - b, - c, - lds_src_preshuffled=lds_src_preshuffled, - ) - - # Each wave handles 2x2 64x64 sub-tiles of the output. - c00_frag = [mfma.zero_value] * N_ACCUMS - c01_frag = [mfma.zero_value] * N_ACCUMS - c10_frag = [mfma.zero_value] * N_ACCUMS - c11_frag = [mfma.zero_value] * N_ACCUMS - - gl_off_a = compute_global_swizzle(lane_id, wave_id, K, N_LDS_ROUNDS, preshuffled=False) - gl_off_b = compute_global_swizzle(lane_id, wave_id, K, N_LDS_ROUNDS, preshuffled=b_preshuffled) - - a_g2s = G2SLoader(ga_div, gl_off_a, N_TILES_A, F8_IR_t, wave_id) - b_g2s = G2SLoader(gb_div, gl_off_b, N_TILES_B, F8_IR_t, wave_id) - a_s2r = S2RLoader(wave_i, N_TILES_A) - b_s2r = S2RLoader(wave_j, N_TILES_B) - store_c = StoreC(A_scale, B_scale, C, c_m, c_n, mfma.idx, N_TILES_A, N_TILES_B) - - # Prologue: 8-buffer LDS pipeline pre-fill. - a_g2s.load(a_cur0, A0_gl_offset + 0 * A_K_STEP) - b_g2s.load(b_cur0, B0_gl_offset + 0 * B_K_STEP) - b_g2s.load(b_cur1, B1_gl_offset + 0 * B_K_STEP) - a_g2s.load(a_cur1, A1_gl_offset + 0 * A_K_STEP) - - a_g2s.load(a_next0, A0_gl_offset + 1 * A_K_STEP) - b_g2s.load(b_next0, B0_gl_offset + 1 * B_K_STEP) - b_g2s.load(b_next1, B1_gl_offset + 1 * B_K_STEP) - a_g2s.load(a_next1, A1_gl_offset + 1 * A_K_STEP) - - wait_barrier((3 * N_TILES_A) + (4 * N_TILES_B)) - - a0_frag = a_s2r.load(a_cur0) - - wait_barrier((3 * N_TILES_A) + (3 * N_TILES_B)) - - b0_frag = b_s2r.load(b_cur0, preshuffled=b_preshuffled) - - for k in range_constexpr(K_ITERS - 2): - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B) + _VMARGIN) - - c00_frag, b1_frag = _compute_block( - a_cur0, - a_g2s, - A0_gl_offset + (k + 2) * A_K_STEP, - b_s2r, - b_cur1, - a0_frag, - b0_frag, - c00_frag, - lds_src_preshuffled=b_preshuffled, - ) - - c01_frag, a1_frag = _compute_block( - b_cur0, - b_g2s, - B0_gl_offset + (k + 2) * B_K_STEP, - a_s2r, - a_cur1, - a0_frag, - b1_frag, - c01_frag, - ) - - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B) + _VMARGIN) - - c10_frag, a0_frag = _compute_block( - b_cur1, - b_g2s, - B1_gl_offset + (k + 2) * B_K_STEP, - a_s2r, - a_next0, - a1_frag, - b0_frag, - c10_frag, - ) - - c11_frag, b0_frag = _compute_block( - a_cur1, - a_g2s, - A1_gl_offset + (k + 2) * A_K_STEP, - b_s2r, - b_next0, - a1_frag, - b1_frag, - c11_frag, - lds_src_preshuffled=b_preshuffled, - ) - - a_cur0, a_next0 = a_next0, a_cur0 - a_cur1, a_next1 = a_next1, a_cur1 - b_cur0, b_next0 = b_next0, b_cur0 - b_cur1, b_next1 = b_next1, b_cur1 - - # Tail step k_iters - 2. - wait_barrier((2 * N_TILES_A) + (2 * N_TILES_B)) - b1_frag = b_s2r.load(b_cur1, preshuffled=b_preshuffled) - c00_frag = mfma.call(a0_frag, b0_frag, c00_frag) - a1_frag = a_s2r.load(a_cur1) - c01_frag = mfma.call(a0_frag, b1_frag, c01_frag) - wait_barrier((1 * N_TILES_A) + (1 * N_TILES_B)) - a0_frag = a_s2r.load(a_next0) - c10_frag = mfma.call(a1_frag, b0_frag, c10_frag) - b0_frag = b_s2r.load(b_next0, preshuffled=b_preshuffled) - c11_frag = mfma.call(a1_frag, b1_frag, c11_frag) - - a_cur0, a_next0 = a_next0, a_cur0 - a_cur1, a_next1 = a_next1, a_cur1 - b_cur0, b_next0 = b_next0, b_cur0 - b_cur1, b_next1 = b_next1, b_cur1 - - # Tail step k_iters - 1. - base_row = tile_i * BLOCK_M + wave_i * (N_TILES_A * 16) - base_col = tile_j * BLOCK_N + wave_j * (N_TILES_B * 16) - wait_barrier(0) - b1_frag = b_s2r.load(b_cur1, preshuffled=b_preshuffled) - a1_frag = a_s2r.load(a_cur1) - c00_frag = mfma.call(a0_frag, b0_frag, c00_frag) - c01_frag = mfma.call(a0_frag, b1_frag, c01_frag) - c10_frag = mfma.call(a1_frag, b0_frag, c10_frag) - c11_frag = mfma.call(a1_frag, b1_frag, c11_frag) - - store_c.store(c00_frag, base_row + 0, base_col + 0) - store_c.store(c01_frag, base_row + 0, base_col + LDS_BLOCK_N) - store_c.store(c10_frag, base_row + LDS_BLOCK_M, base_col + 0) - store_c.store(c11_frag, base_row + LDS_BLOCK_M, base_col + LDS_BLOCK_N) - - @flyc.jit - def launch_gemm( - A: fx.Tensor, - B_T: fx.Tensor, - C: fx.Tensor, - A_scale: fx.Tensor, - B_scale: fx.Tensor, - c_m: fx.Int32, - c_n: fx.Int32, - stream: fx.Stream, - ): - grid_x = ceildiv(c_m, BLOCK_M) * ceildiv(c_n, BLOCK_N) - kernel_gemm( - A, - B_T, - C, - A_scale, - B_scale, - c_m, - c_n, - value_attrs={"rocdl.waves_per_eu": 1, "rocdl.flat_work_group_size": "256,256"}, - ).launch(grid=(grid_x, 1, 1), block=(256, 1, 1), stream=stream) - - return launch_gemm diff --git a/learn.md b/learn.md deleted file mode 100644 index e22fab04b..000000000 --- a/learn.md +++ /dev/null @@ -1,162 +0,0 @@ -# FlyDSL vs up-aiter MoE GEMM — 学习笔记(M=16384 / bm=128 / KIMI-K2.5) - -> 目标:搞清楚 `bench.py` 在最大形状 M=16384 上为什么 FlyDSL 的 gemm 比 up-aiter mxfp4 慢 -> (trace 数据:gemm1 fly 784us vs mx 678us;gemm2 fly 909us vs mx 849us)。 -> 形状常量:NE=385, H=7168 (=K), INTER=512 (gate/up 各 512), TOPK=9。 - ---- - -## 1. 入口 & 实际跑的是哪个 kernel - -`~/FlyDSL/bench.py` 两边都通过 `aiter.fused_moe.fused_moe()` 进入,CSV 决定走哪条路: - -| 边 | dispatch 路径 | M=16384 实际 kernel | -|---|---|---| -| **mxfp4** | `shuffle_kind="mxfp4_moe"` 标签命中 `kimik2_5_mxfp4_tuned_fmoe.csv` 的 `BM128` 行 | `aiter::mxfp4_moe::gemm1::kernel<655360, 385, 7168, 1024, BM=128, kUseNT=false, kInlineQuant=false, kXcdSwizzle=0>` | -| **flydsl** | 无 `shuffle_kind` 标签,命中 untagged `kimik2_fp4_tuned_fmoe.csv`(CSV 里 M=16384 是 `t64x128x256`,但 padding 落到 M=8192 行)→ `_flydsl_stage1_wrapper` → `compile_mixed_moe_gemm1` | `mfma_moe1_silu_mul_afp4_wfp4_bf16_t128x128x256_pm1_async_xcd4_v32` | - -源码位置: -- mxfp4 gemm1:`/root/up-aiter/csrc/kernels/mxfp4_moe/gemm_a4w4/gemm1_a4w4.cuh:22-593` -- mxfp4 BM128 实例化:`/root/up-aiter/aiter/jit/build/module_moe_mxfp4_gemm/blob/instances/mxfp4_moe_g1_a4w4_NE385_H7168_E512_BM128.cu` -- FlyDSL gemm1:`/root/FlyDSL/kernels/mixed_moe_gemm_2stage.py:97-2415` -- FlyDSL wrapper:`/root/up-aiter/aiter/fused_moe.py:845-906` - ---- - -## 2. 形状 & tile 对照(M=16384) - -| 项目 | mxfp4 (BM=128) | FlyDSL (t128x128x256) | -|---|---|---| -| 单 block 输出 | `BM×BN = 128×256`(gate/up 拼在 N 维) | `tile_m × tile_n × 2 = 128×128 × {gate,up}` ⇒ 实质 128×256 | -| K 维 tile | `BK=256`, `K_TILES = K/BK = 28` | `tile_k=256`,K_TILES=28 | -| 单 block MFMA 数 | 28 × 32 = **896** | 28 × 64 = **1792**(gate + up 各一组) | -| Grid(一次) | `n_blocks=N_OUT/256=4`, `m_blocks≈⌈(M·TOPK+NE·127)/128⌉≈1534` → **6136** | `n_blocks=inter_dim/tile_n=4`(只覆盖 gate side,up 在同 block 算),`m_blocks` 同 ≈ **6136** | -| 总 MFMA | ~5.5 M | ~11 M ❌ | - -⚠️ 看起来 FlyDSL 总 MFMA 是 mxfp4 的 2 倍。但每个 MFMA 是 `mfma_scale_f32_16x16x128_f8f6f4`,输出 16×16 块。两边总输出 token 数一样,所以**实际 MFMA 计数应该相等**。差别在于**记账方式**: -- mxfp4 把 (gate || up) 拼成 BN=256 一维 → 每个 J 簇里 8 MFMA × 4 J × kSubBlocks=4 -- FlyDSL 把 gate/up 当两条平行流 → `compute_bmajor_mfma_phase` 里每个 (k,ni) 同时下两条 MFMA(gate + up) - -数学上相等。但在汇编层 FlyDSL 多了一次 LDS-A 读使用、多了一份 B-VMEM 读、accumulator VGPR 占用更高 → 实际 FLOPs 一样而 VGPR 压力大。 - ---- - -## 3. 关键差异(按"对性能的影响"排序) - -### 3.1 A-scale 加载策略(最大差距之一) - -**mxfp4** (`gemm1_a4w4.cuh:165-186, 432`): -```cpp -// 在 run_one 开头,K-loop 之前 ONCE:一次性把整个 M-block 的所有 K-tile 的 A-scale -// 直接 buffer_load_lds 到 LDS,s_Ascale[kSubBlocks * K_TILES * 256] -issue_a_scale_load(m_row); // 28 K-tiles × kSubBlocks 一次塞进 LDS -// K-loop 里只做 LDS read: -issue_a_scale_ds_read(kt); // 纯 LDS 操作,零 VMEM -``` - -**FlyDSL** (`mixed_moe_gemm_2stage.py:1366-1379`): -```python -# _interleaved_half 的 phase 0 每个 K-tile 都做一次 VMEM buffer_load 拿 A-scale -_raw_as = buffer_ops.buffer_load(sx_rsrc, _a_scale_bases[_mi_p] + _k_off, ...) -``` - -**影响**:mxfp4 把 A-scale "K_TILES × kSubBlocks" 次 VMEM 集中到 run_one 头部一次性发起,靠 buffer_load_lds 直通 LDS 不占 VGPR;FlyDSL 每个 K-tile 都重新从 VMEM 取一遍,并经 VGPR 再写 LDS。28 个 K-tile × m_repeat_packed × VMEM 发射 ≈ 80+ 次 VMEM ops 散在 main loop 里,会和 B-load 抢 vmcnt 槽位。 - -### 3.2 AGPR 使用(VGPR 压力) - -**mxfp4** (`gemm1_a4w4.cuh:49,352-361`): -```cpp -constexpr bool kUseAGPR = (BM == 128); -// BM=128 时初始化用 mfma_f4f4_agpr_init_zero<…>(accm, …) -// 把累加器放进 AGPR,释放 VGPR 给 B-load / A-load / scale 用 -``` -`__launch_bounds__(256, 1)` —— BM=128 时每 CU 1 个 block,让出几乎全部寄存器。 - -**FlyDSL** (`mixed_moe_gemm_2stage.py:1257-1285`): -直接调 `rocdl.mfma_scale_f32_16x16x128_f8f6f4` 写回 VGPR `acc_gate[]`/`acc_up[]`,**没有 AGPR 切换**。CSV 行 `_w2` 表示 `waves_per_eu=2` → 8 wave per CU = 2 blocks per CU,每 block 寄存器更紧。两份累加器(gate + up)各占 `m_repeat × num_acc_n × f32x4 = 8×2×4 = 64` VGPR,合计 128 VGPR 只给累加器,留给 B-load 双缓冲 / A-LDS 读寄存器的余地很少 —— spill 风险大或 occupancy 被压低。 - -### 3.3 gate/up 是 "block 内双流" vs "block 间分摊" - -**mxfp4**:N_OUT = 2·inter_dim = 1024,gate 和 up 在 N 维拼起来。`num_n_blocks = 4`,每个 block 只算 gate **或** up 中的一段 BN=256 输出 —— 单 accumulator,单 B 流。 - -**FlyDSL**:tile_n=128(只覆盖 gate side 的一段 128 列),但同 block 用 `acc_gate / acc_up` 两个独立累加器,B 加载也分 `_b_gate_all / _b_up_all` 两路。 - -后果: -1. 同 block 内 **B 的 VMEM 流量翻倍**(gate B + up B,每 K-tile 各 4 × 16 B = 128B per thread → 总 32 KB per K-tile per block,和 mxfp4 一致;但 mxfp4 是 1 个 256 宽 N,FlyDSL 是 2 个 128 宽 N 各发独立 VMEM 指令 → 调度更碎)。 -2. MFMA 里 `compute_bmajor_mfma_phase` 一对 (gate_mfma, up_mfma) 共享同一个 A 操作数 —— 看起来 A 复用率更高。但因为同时维护 2 个 acc,pipeline 里 **prev_gate_w / prev_up_w / prev_gate_bs / prev_up_bs** 的 register live-range 都翻倍 → VGPR 高峰大幅上升。 - -mxfp4 把 gate/up 拆成不同 block 实质上把 register pressure 摊开到不同 CU。 - -### 3.4 XCD swizzle & launch_bounds - -| | mxfp4 | FlyDSL | -|---|---|---| -| BM=128 launch_bounds | `__launch_bounds__(256, 1)` —— per-CU 1 block,最大寄存器 | `waves_per_eu=2`(CSV `_w2`),4 waves/block × 2 = 8 waves/CU = 2 blocks/CU | -| XCD swizzle | `kXcdSwizzle=0`(BM=128 instance 没用 swizzle) | `xcd_swizzle=4` → 走 `remap_xcd_grouped` 8-XCD remap(`mixed_moe_gemm_2stage.py:496-527`) | - -更激进的 occupancy(FlyDSL 2 blocks/CU)正常能换 latency hiding,但前提是寄存器够;当 B 双流 + A scale 在 main loop 反复取 + VGPR 累加器同时存在时,更可能 spill。 - -mxfp4 BM=128 直接放弃 XCD swizzle —— K2.5 这个形状(NE=385, 多 expert)走自然 m_block_idx 顺序 cache locality 已经够;FlyDSL 还启用 xcd_swizzle=4,是否带来好处需要进一步 attr / nvprof 验证。 - -### 3.5 调度原语 - -**mxfp4** BM=128 路径(`gemm1_a4w4.cuh:529-543`): -```cpp -if constexpr (BM != 128) { - __builtin_amdgcn_sched_barrier(0); - __builtin_amdgcn_s_setprio(1); -} -issue_mfma_cluster(slot_b); -if constexpr (BM != 128) { __builtin_amdgcn_s_setprio(0); } -__builtin_amdgcn_sched_barrier(0); -issue_b_load_j(b[slot_b], J); -__builtin_amdgcn_sched_barrier(0); -``` -**BM=128 关闭了 setprio**,让编译器自己排 MFMA / VMEM 重叠(依赖 hipcc 的 LLVM scheduler 对 1-block-per-CU 寄存器布局做整体优化)。 - -**FlyDSL**(`mixed_moe_gemm_2stage.py:1421-1462`): -所有 BM 共用 `sched_barrier(0) + s_setprio(1)/(0)` 包住 MFMA,**手动钉死 phase 顺序**。在 BM=128 这种"寄存器富裕单 block 模型" 上反而限制了 LLVM 调度器自由度。 - -### 3.6 inline-quant 缺失(影响 stage 间 overhead) - -mxfp4 在 BM=16/32 路径上有 `kInlineQuant=true`,把 hidden_states → fp4 量化 **熔进 gemm1 第一层**(`gemm1_a4w4.cuh:197-310`),完全消掉外部的 sort/quant kernel。FlyDSL 任何 BM 都依赖外部 `opus_moe_sorting_entry + fused_mx_quant_moe_sort_kernel` 两个 kernel —— 小 M 多 11–20us,大 M 因为 moe_sort 还会 launch 4 次/iter 多 47–76us。 - -虽然 BM=128 这条路径 mxfp4 自己也用 sort_quant_fused(trace 显示 0us,但是其实它把这部分塞进了 gemm1 内部),但**结果是 FlyDSL 多了一个 `fused_mx_quant_moe_sort_kernel` 跨 kernel 同步**,对 cudagraph 调度也不友好。 - ---- - -## 4. 量化的差距来源(M=16384,per iter) - -``` - fly mx Δ 原因 -gemm1 784.3 678.6 +105.8 3.1/3.2/3.3/3.5 综合 ~15% 慢 -gemm2 908.7 849.3 + 59.3 同上结构问题 -moe_sort 76.1 — + 76.1 3.6(mx 内联到 gemm 里) -quant — — — bm=128 两边都不外置 -sum overhead 1769 1528 +241 GPU 净 kernel 时间 -launch ovhd 556 295 +261 fly 6 个 kernel/iter vs mx 2 个/iter -bench wall 2325 1823 +502 端到端 -``` - ---- - -## 5. 可能的优化方向(待验证) - -按预期 ROI 排序: - -1. **A-scale hoist 到 LDS**(3.1):把 28 个 K-tile 的 A-scale 在 run_one 头部一次性 `buffer_load_lds` 进 LDS,main loop 只做 LDS read。预估省 ~30-50us / iter(对 BM=128 主循环 vmcnt 压力极大)。 -2. **AGPR 累加器**(3.2):BM=128 时把 `acc_gate / acc_up` 放进 AGPR,释放 VGPR 给 B 双流和 prefetch。FlyDSL 已有 AGPR 支持的话直接打开即可;没有就是较大工程。 -3. **去掉 `_w2` 改 `waves_per_eu=1` + 试试 launch_bounds(256, 1)**(3.2):和 mxfp4 对齐,单 block per CU 试一把。需要寄存器分析配合。 -4. **gate/up 改成 N-split**(3.3):把 grid 扩成 `n_blocks = 2 × inter_dim / tile_n`,每个 block 只算 gate 或 up。register 压力立刻降一半,编译器调度也变简单。这是结构调整,工作量大但对齐 mxfp4 设计思路。 -5. **关掉 `xcd_swizzle=4`**(3.4):对照实验,确认 swizzle 是否真带来收益;如果无影响就关掉减少地址计算。 -6. **去掉 `s_setprio` for BM=128**(3.5):mfma 簇前后只留 `sched_barrier(0)`,把调度决定让给 LLVM。代价低。 -7. **inline-quant for BM≤32**(3.6,和大 M 性能无关,但能改善小 M):在 stage1 头部熔进 hidden_states→fp4 量化,消掉一个独立 kernel。 - ---- - -## 6. 复现 / 后续 - -- bench:`python ~/FlyDSL/bench.py 2>&1 | grep "| "` -- trace 落在工作目录 `1.json.gz` ~ `18.json.gz`(奇数 = fly,偶数 = mx,按 M 顺序 9 对) -- 分析脚本:`/root/analyze.py`、`/root/timing.py`、`/root/kernels_per_iter.py` -- 进一步定位单 kernel 瓶颈:可用 `/capture-kernel-trace` + `/kernel-trace-analysis` 跑 ATT trace 把 fly 的 `mfma_moe1_..._t128x128x256_pm1_async_xcd4_v32` 单独抓出来,对比 VMEM-wait/lgkmcnt/MFMA stall 分布。 diff --git a/profile.sh b/profile.sh deleted file mode 100644 index c3eb6c364..000000000 --- a/profile.sh +++ /dev/null @@ -1,9 +0,0 @@ - /opt/venv/bin/python profile_flydsl_16384.py \ - --mode graph \ - --runners aiter_mxfp4_moe,local_mxfp4_all_flydsl \ - --warmup 20 \ - --iters 10 \ - --graph-iters 40 \ - --repeat 5 \ - --expected-kernels 8 \ - --trace-dir profiler_traces From 326b2c3f49f5c4d7e78fbbd8fb32642631818bdc Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 10:19:51 +0000 Subject: [PATCH 115/118] zty_tmp --- .../fp8_4wave_compact_schedule.txt | 195 - .../hgemm_register_prefetch_pipeline_plan.md | 234 - .../hgemm_tail_prefetch_loop_schedule.txt | 379 - .../hgemm_wave0_compact_schedule.txt | 193 - resource_inspect/hgemm_wave0_first20_ops.txt | 54 - .../hgemm_wave0_full_kernel_ops.txt | 202 - .../snapshots/fp8_gemm_4wave_16k_pure.s | 27992 ---------------- .../hgemm_bf16_rp1_1117tflops_final_isa.s | 3262 -- .../hgemm_bf16_rp1_1117tflops_hotloop.txt | 184 - .../hgemm_bf16_rp1_1117tflops_pure.s | 2359 -- ...gemm_bf16_rp1_presh_1313tflops_hotloop.txt | 184 - .../hgemm_bf16_rp1_presh_1313tflops_pure.s | 2457 -- .../hgemm_bf16_rp1_presh_nosc0_hotloop.txt | 184 - .../hgemm_bf16_rp1_presh_nosc0_pure.s | 2418 -- 14 files changed, 40297 deletions(-) delete mode 100644 resource_inspect/fp8_4wave_compact_schedule.txt delete mode 100644 resource_inspect/hgemm_register_prefetch_pipeline_plan.md delete mode 100644 resource_inspect/hgemm_tail_prefetch_loop_schedule.txt delete mode 100644 resource_inspect/hgemm_wave0_compact_schedule.txt delete mode 100644 resource_inspect/hgemm_wave0_first20_ops.txt delete mode 100644 resource_inspect/hgemm_wave0_full_kernel_ops.txt delete mode 100644 resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt delete mode 100644 resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s diff --git a/resource_inspect/fp8_4wave_compact_schedule.txt b/resource_inspect/fp8_4wave_compact_schedule.txt deleted file mode 100644 index 5803a15b8..000000000 --- a/resource_inspect/fp8_4wave_compact_schedule.txt +++ /dev/null @@ -1,195 +0,0 @@ -fp8_gemm_4wave wave0 compact steady-state schedule -================================================== - -Source: kernels/fp8_gemm_4wave.py (BLOCK_M=BLOCK_N=256, BLOCK_K=128, 4 waves). -Swizzle ignored (only relabels LDS addresses, not pipeline order), like -hgemm_wave0_compact_schedule.txt. - -Block / wave layout -------------------- - 256x256 output = 16x16 grid of 16x16 C blocks. C[r,c], r,c in 0..15. - wave0 computes a STRIDED 8x8 set: C rows {0..3, 8..11} x cols {0..3, 8..11}. - 4 quadrants (each 4x4 MFMA blocks): - c00 -> C[0:4 , 0:4 ] c01 -> C[0:4 , 8:12] - c10 -> C[8:12, 0:4 ] c11 -> C[8:12, 8:12] - One MFMA is 16x16x128 = a whole K-slice (BLOCK_K=128) in ONE instruction, - so mfma has NO k-half index (unlike hgemm's K=32 mfma which has k=0/1). - -Buffers (double-buffer view, like hgemm A0/A1/B0/B1) - A0 = current K-slice of A (the kernel's a_cur0 + a_cur1 merged). - A1 = next K-slice of A (a_next0 + a_next1). - B0 = current K-slice of B (b_cur0 + b_cur1). B1 = next (b_next0 + b_next1). - Each is one logical 256-row(M) or 256-col(N) x 128-K fp8 buffer = 16 blocks. - A0[blk], blk 0..15 : blk 0..7 = M-half0 (a_cur0), blk 8..15 = M-half1 (a_cur1). - B0[blk], blk 0..15 : blk 0..7 = N-half0 (b_cur0), blk 8..15 = N-half1 (b_cur1). - wave0 touches blocks {0..3, 8..11} of each. - -Position notation (like hgemm A0[i,k]) - A0[blk,h] / B0[blk,h] : block blk (0..15), load-half h (0/1). - h is the LDS->reg load granularity (each dsrd = one 16x64 half); two halves - h=0,1 are packed into one 16x128 mfma operand. (In hgemm the second index was - a real K-subtile; here mfma eats both halves at once, so h is just load order.) - mfma operand A0[blk] means the full block (halves h=0,1 already packed in regs). - dsrd A0[blk,h] : LDS->reg one half. - bfld A0[lo:hi] : g2s.load_one step s -> writes row-blocks [2s:2s+2] (32 rows, - full K=128 slice) of the K+2 data. 4 steps cover the 8 blocks of one half - buffer. NOTE fp8 overwrites the CURRENT buffer in place: that half was already - drained to regs one quad earlier, so bfld refills it with K+2; the end-of-iter - swap then makes it the "next" buffer. (hgemm instead writes A1 because its A0 - stays live the whole tile.) Block range is GLOBAL (c00 fills A0[0:8], - c11 fills A0[8:16]); since the buffer holds one K-slice there is no k index. - -Ops: mfma | dsrd | bfld | barrier vmcnt(N)+s_barrier (=wait_barrier(N)). - N = max outstanding VMEM allowed (smaller = wait for more to land). s_barrier - syncs the 4 waves so a wave may read LDS a sibling wave bfld'd. Main loop N=16. - -K-slice bookkeeping (steady iter processes slice K, prefetches slice K+2) - entry : A0,B0 = slice K ; A1,B1 = slice K+1 - mfma operand a0/b0 (in regs) = slice K, half0 of A0/B0 (dsrd'd last iter) - the 4 bfld write slice K+2 into A0/B0; end swap A0<->A1, B0<->B1 - exit : A0,B0 = slice K+1 ; A1,B1 = slice K+2 (consistent) - -Prologue (once) ---------------- - bfld A0,B0 (slice 0) ; bfld A1,B1 (slice 1) - barrier vmcnt(28)+s_barrier (3*N_TILES_A + 4*N_TILES_B) - dsrd A0[0..3, 0..1] -> a0_frag - barrier vmcnt(24)+s_barrier (3*N_TILES_A + 3*N_TILES_B) - dsrd B0[0..3, 0..1] -> b0_frag - - -Steady-state outer iteration (one K-slice; repeats K_ITERS-2 times) -================================================================== - -barrier vmcnt(16)+s_barrier - -mfma C[0,0] += A0[0]*B0[0] -mfma C[0,1] += A0[0]*B0[1] -bfld A0[0:2] -dsrd B0[8,0] -mfma C[0,2] += A0[0]*B0[2] -dsrd B0[8,1] -mfma C[0,3] += A0[0]*B0[3] -bfld A0[2:4] -dsrd B0[9,0] -mfma C[1,0] += A0[1]*B0[0] -mfma C[1,1] += A0[1]*B0[1] -dsrd B0[9,1] -mfma C[1,2] += A0[1]*B0[2] -mfma C[1,3] += A0[1]*B0[3] -bfld A0[4:6] -dsrd B0[10,0] -mfma C[2,0] += A0[2]*B0[0] -mfma C[2,1] += A0[2]*B0[1] -dsrd B0[10,1] -mfma C[2,2] += A0[2]*B0[2] -mfma C[2,3] += A0[2]*B0[3] -bfld A0[6:8] -dsrd B0[11,0] -mfma C[3,0] += A0[3]*B0[0] -mfma C[3,1] += A0[3]*B0[1] -dsrd B0[11,1] -mfma C[3,2] += A0[3]*B0[2] -mfma C[3,3] += A0[3]*B0[3] - -mfma C[0, 8] += A0[0]*B0[8] -mfma C[0, 9] += A0[0]*B0[9] -bfld B0[0:2] -dsrd A0[8,0] -mfma C[0,10] += A0[0]*B0[10] -dsrd A0[8,1] -mfma C[0,11] += A0[0]*B0[11] -bfld B0[2:4] -dsrd A0[9,0] -mfma C[1, 8] += A0[1]*B0[8] -mfma C[1, 9] += A0[1]*B0[9] -dsrd A0[9,1] -mfma C[1,10] += A0[1]*B0[10] -mfma C[1,11] += A0[1]*B0[11] -bfld B0[4:6] -dsrd A0[10,0] -mfma C[2, 8] += A0[2]*B0[8] -mfma C[2, 9] += A0[2]*B0[9] -dsrd A0[10,1] -mfma C[2,10] += A0[2]*B0[10] -mfma C[2,11] += A0[2]*B0[11] -bfld B0[6:8] -dsrd A0[11,0] -mfma C[3, 8] += A0[3]*B0[8] -mfma C[3, 9] += A0[3]*B0[9] -dsrd A0[11,1] -mfma C[3,10] += A0[3]*B0[10] -mfma C[3,11] += A0[3]*B0[11] - -barrier vmcnt(16)+s_barrier - -mfma C[ 8,0] += A0[8]*B0[0] -mfma C[ 8,1] += A0[8]*B0[1] -bfld B0[8:10] -dsrd A1[0,0] -mfma C[ 8,2] += A0[8]*B0[2] -dsrd A1[0,1] -mfma C[ 8,3] += A0[8]*B0[3] -bfld B0[10:12] -dsrd A1[1,0] -mfma C[ 9,0] += A0[9]*B0[0] -mfma C[ 9,1] += A0[9]*B0[1] -dsrd A1[1,1] -mfma C[ 9,2] += A0[9]*B0[2] -mfma C[ 9,3] += A0[9]*B0[3] -bfld B0[12:14] -dsrd A1[2,0] -mfma C[10,0] += A0[10]*B0[0] -mfma C[10,1] += A0[10]*B0[1] -dsrd A1[2,1] -mfma C[10,2] += A0[10]*B0[2] -mfma C[10,3] += A0[10]*B0[3] -bfld B0[14:16] -dsrd A1[3,0] -mfma C[11,0] += A0[11]*B0[0] -mfma C[11,1] += A0[11]*B0[1] -dsrd A1[3,1] -mfma C[11,2] += A0[11]*B0[2] -mfma C[11,3] += A0[11]*B0[3] - -mfma C[ 8, 8] += A0[8]*B0[8] -mfma C[ 8, 9] += A0[8]*B0[9] -bfld A0[8:10] -dsrd B1[0,0] -mfma C[ 8,10] += A0[8]*B0[10] -dsrd B1[0,1] -mfma C[ 8,11] += A0[8]*B0[11] -bfld A0[10:12] -dsrd B1[1,0] -mfma C[ 9, 8] += A0[9]*B0[8] -mfma C[ 9, 9] += A0[9]*B0[9] -dsrd B1[1,1] -mfma C[ 9,10] += A0[9]*B0[10] -mfma C[ 9,11] += A0[9]*B0[11] -bfld A0[12:14] -dsrd B1[2,0] -mfma C[10, 8] += A0[10]*B0[8] -mfma C[10, 9] += A0[10]*B0[9] -dsrd B1[2,1] -mfma C[10,10] += A0[10]*B0[10] -mfma C[10,11] += A0[10]*B0[11] -bfld A0[14:16] -dsrd B1[3,0] -mfma C[11, 8] += A0[11]*B0[8] -mfma C[11, 9] += A0[11]*B0[9] -dsrd B1[3,1] -mfma C[11,10] += A0[11]*B0[10] -mfma C[11,11] += A0[11]*B0[11] - -swap: A0<->A1, B0<->B1 -# next iter: A0,B0 = slice K+1 (a0/b0_frag already dsrd'd); A1,B1 = slice K+2. - -Counts per iteration (verify) ------------------------------ - mfma : 4 quad x 16 = 64 - dsrd : 4 quad x (4 blocks x 2 halves) = 32 - bfld : 4 quad x 4 chunks = 16 -> wait_barrier(16) matches - barrier : 2 (vmcnt 16), splitting {c00,c01} | {c10,c11} - -Tail (last 2 K-slices) drains with NO bfld (lines 396-422), then StoreC applies -acc * A_scale[row] * B_scale[col] -> bf16 (lines 424-427). diff --git a/resource_inspect/hgemm_register_prefetch_pipeline_plan.md b/resource_inspect/hgemm_register_prefetch_pipeline_plan.md deleted file mode 100644 index 2f2d47fe8..000000000 --- a/resource_inspect/hgemm_register_prefetch_pipeline_plan.md +++ /dev/null @@ -1,234 +0,0 @@ -HGEMM register-prefetch / K32-slice pipeline idea -================================================= - -Goal ----- - -Use extra VGPRs to keep a whole K32 slice in registers, then reuse the just-read -LDS stage earlier. The current AK32 kernel is at about 2589 cycles per BLOCK_K=64 -tile. It uses 380 VGPR, 256 AGPR, no spill: - - vgpr_count=380 - agpr_count=256 - private_segment_fixed_size=0 - vgpr_spill_count=0 - -So for this specific kernel it is reasonable to spend more VGPR if we stay below -the no-spill limit. - - -Current naming --------------- - -Use logical block coordinates: - - C[i,j] one 16x16 output block - A0[i,k] current LDS stage, A block i, K32 slice k - B0[j,k] current LDS stage, B block j, K32 slice k - A1/B1 the other LDS stage - k=0 K[0:32] - k=1 K[32:64] - -Current loop entry already carries: - - A0[0,0] - B0[0:4,0] - -Current loop then mostly does: - - compute A0[:,0] * B0[:,0] - prefetch A0[:,1] / B0[:,1] from LDS late in the first K32 half - issue all next-tile bfld in the first half - compute A0[:,1] * B0[:,1] - barrier - tail-prefetch A1[0,0] and B1[0:4,0] - - -Proposed high-level schedule ----------------------------- - -The idea is to make each K32 half a scheduling block. Inside one block, dsrd, -bfld, and mfma are independent enough to interleave, as long as the data hazards -below are respected. - -Sketch, normalized to stage names: - - Block A, current stage S, write stage W: - - s_waitcnt vmcnt(N) # ideally N=4, only if safe by VMEM order - dsrd S.A[0,1] - dsrd S.B[0:8,1] - dsrd S.A[1:8,1] - bfld W.A[:,1] - bfld W.B[:,1] - mfma S.A[:,0] * S.B[:,0] - - s_waitcnt lgkmcnt(0) - s_barrier # all waves finished reading S.K1 from LDS - - Block B: - - bfld S.A[:,0] # S can now be reused for tile t+2 - bfld S.B[:,0] - mfma S.A[:,1] * S.B[:,1] # uses VGPR-resident K1, not LDS - - s_waitcnt vmcnt(N) - s_barrier # next current stage W is readable - dsrd W.B[0:4,0] - dsrd W.A[0,0] - yield current=W, write=S - -Then the next loop flips S/W. - -This is the main conceptual change: before overwriting S with future data, we -must have copied all S.K1 fragments needed by all waves into VGPRs. - - -Safety rules ------------- - -1. Do not overwrite an LDS stage while another wave may still read it. - - If we want to `bfld S.A[:,0]` / `bfld S.B[:,0]` while computing `S.K1`, - every wave must first finish all `dsrd S.A[:,1]` and `dsrd S.B[:,1]`. - That needs: - - s_waitcnt lgkmcnt(0) - s_barrier - - A wave-local data dependency is not enough, because another wave in the CTA - may still be behind and reading the same LDS stage. - -2. `vmcnt(4)` is only safe if the last 4 outstanding VMEM ops are not for the - fragments about to be read from LDS. - - For a first implementation, use `vmcnt(0)` at the stage handoff. After the - schedule is correct, we can order bfld so the final outstanding copies belong - to future slices that are not read yet, then relax to `vmcnt(4)`. - -3. Inside a block, operations can be interleaved if they target independent - resources: - - - `mfma S.K0` can overlap with `dsrd S.K1` because MFMA consumes K0 regs. - - `mfma S.K0` can overlap with `bfld W.K1` because W is the other LDS stage. - - `mfma S.K1` can overlap with `bfld S.K0` only after the mid-block - `lgkmcnt(0)+s_barrier`, because S.K1 is then in VGPR. - -4. Register pressure increases. - - To free S early, a wave needs to hold a full K1 slice: - - A K1 fragments: A[0:8,1] -> 8 vector fragments - B K1 fragments: B[0:8,1] -> 8 vector fragments - - On gfx950 BF16 K32, `WMMA_A_FRAG_VALUES = 8` and `WMMA_B_FRAG_VALUES = 8`. - The current 380 VGPR count gives room to try this, but the kernel must keep - the existing no-spill assertion. - - -LDS layout implications ------------------------ - -A is already mostly in the shape we want when `A_LDS_K32_BLOCKING=True`. - -Current A AK32 LDS view: - - as_k32_: (stage, k_group, M, K32) - -So one async copy chunk can logically fill: - - bfld A1[0:4,0] - bfld A1[4:8,0] - bfld A1[8:12,0] - bfld A1[12:16,0] - bfld A1[0:4,1] - bfld A1[4:8,1] - bfld A1[8:12,1] - bfld A1[12:16,1] - -That part is already aligned with the proposed schedule. - -B is not yet K32-blocked. Current B LDS view is: - - bs_: (stage, N, K64) - -So one async copy chunk currently fills a 32x64 logical region: - - bfld B1[0:2,0:2] - bfld B1[2:4,0:2] - ... - -If we want true `bfld B1[:,1]` independent from `bfld B1[:,0]`, we need a B -K32-blocked LDS view too: - - bs_k32_: (stage, k_group, N, K32) - -Then B chunks can become symmetric with A: - - bfld B1[0:4,0] - bfld B1[4:8,0] - bfld B1[8:12,0] - bfld B1[12:16,0] - bfld B1[0:4,1] - bfld B1[4:8,1] - bfld B1[8:12,1] - bfld B1[12:16,1] - -This would make the proposed `bfld A1[:,1] * B1[:,1]` schedule much easier to -express and reason about. - - -Implementation route --------------------- - -Step 1: Register-prefetch K1, keep current B layout. - - - Add a variant of `ldmatrix_compute_tile_streaming` that can load all - `A[:,1]` and `B[:,1]` fragments into Python lists before the K0 MFMAs finish. - - Add a mid-loop `s_waitcnt lgkmcnt(0); s_barrier`. - - After that barrier, allow bfld into the just-freed current stage while K1 - MFMAs consume VGPR-resident fragments. - - Keep B bfld as `[row_pair,0:2]` chunks for this first pass. - - Benchmark with ATT; check no spill. - -Step 2: Add `B_LDS_K32_BLOCKING`. - - - Add `bs_k32_ = STensor(smem_b_ptr, dtype_, shape=(STAGES, 2, BLOCK_N, 32))`. - - Change `ldg_sts_b_async_one` to map `i` as `(k_group, row_group)` like A. - - Change `load_b_frag_from` to read through `bs_k32_` when enabled. - - Recheck correctness, bank conflicts, and spills. - -Step 3: Tune waitcnt. - - - Start with conservative `vmcnt(0)` at stage handoff. - - Once correctness is stable, order VMEM issues so the last outstanding copies - are future-stage data not read immediately. - - Try `vmcnt(4)` and validate in ATT by checking the exact cycle window and - `s_waitcnt vmcnt` stalls. - - -Expected win / risk -------------------- - -Expected win: - - - Less exposed VMEM wait at loop boundary. - - More useful MFMA distance between bfld issue and LDS read. - - Ability to launch future-stage global->LDS copies while K1 compute is still - running, instead of clustering all bfld in the first K32 half. - -Main risks: - - - Extra mid-loop barrier may cost cycles, although 4-wave CTA barrier should be - relatively cheap compared with long vmcnt stalls. - - Extra VGPR may push register allocation over a cliff if address temporaries - also grow. - - B K32 layout may change LDS bank behavior; ATT must check `ds_read` and - `lgkmcnt` stalls, not just total cycles. - -Success criterion: - - - Correctness unchanged. - - `private_segment_fixed_size=0`, `vgpr_spill_count=0`, `sgpr_spill_count=0`. - - ATT hot-loop cycles below the current AK32 ~2589 cycles/tile. - - Ideally beat the older tail-prefetch baseline around 2493 cycles/tile. diff --git a/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt b/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt deleted file mode 100644 index 71cb9277c..000000000 --- a/resource_inspect/hgemm_tail_prefetch_loop_schedule.txt +++ /dev/null @@ -1,379 +0,0 @@ -Current kernel: hgemm_splitk.py, B_TO_LDS steady-state hot loop -Variant: tail-prefetch initial B4, measured best ~= 2491.6 cycles/tile - -Viewpoint ---------- -This is wave0 only, one BLOCK_K=64 tile, steady state. -The real ISA also contains address arithmetic, s_waitcnt lgkmcnt, loop branch, -and scheduler moves. This file only lists the intended dataflow/order for: - - - ds_read_* : LDS -> VGPR fragment - - buffer_load_* : global -> LDS async copy, one 16B/thread chunk - - mfma : one 16x16x32 bf16 MFMA - - barrier : s_waitcnt vmcnt(0) + s_barrier - -Tile notation -------------- -wave0 mapping in this W2x2x1 CTA: - - wid = 0 - wid_mn = 0 - wid_k = 0 - warp_m_idx = 0 - warp_n_idx = 0 - warp_k_slice_base = 0 - -So wave0 computes the top-left 128x128 region of the 256x256 CTA tile: - - C[i,j] : 16x16 accumulator fragment, i=0..7, j=0..7 - C[i,j] covers CTA-local rows 16*i : 16*i+15 - cols 16*j : 16*j+15 - -Current BLOCK_K tile is split into two k-slices: - - A0[i] = A current tile, rows 16*i : 16*i+15, k = 0:32 - B0[j] = B current tile, cols 16*j : 16*j+15, k = 0:32 - - A1[i] = A current tile, rows 16*i : 16*i+15, k = 32:64 - B1[j] = B current tile, cols 16*j : 16*j+15, k = 32:64 - -Next BLOCK_K tile: - - A2[i] = A next tile, rows 16*i : 16*i+15, k = next + 0:32 - B2[j] = B next tile, cols 16*j : 16*j+15, k = next + 0:32 - - A2_chunk[0..7], B2_chunk[0..7] are CTA-wide global->LDS chunks. - They are issued by every thread in the CTA. Collectively they fill the full - next tile in LDS, not just wave0's 128x128 output region. - - -Steady-State Loop Boundary --------------------------- -At the end of the previous tile, we already did: - - barrier # wait all buffer_load A0/B0 into current LDS stage - ds_read B0[0] - ds_read B0[1] - ds_read B0[2] - ds_read B0[3] - ds_read A0[0] - yield loop state containing A0[0], B0[0..3] - -So the current steady-state loop starts with: - - live: A0[0], B0[0], B0[1], B0[2], B0[3] - no loop-head ds_read for these five fragments - - -Current Tile, k-slice 0: A0/B0 ------------------------------- - -kk0, i=0: - j=0: mfma C[0,0] += A0[0] * B0[0] - ds_read B0[4] - buffer_load B2_chunk[0] - - j=1: mfma C[0,1] += A0[0] * B0[1] - ds_read B0[5] - ds_read A0[1] - - j=2: mfma C[0,2] += A0[0] * B0[2] - ds_read B0[6] - - j=3: mfma C[0,3] += A0[0] * B0[3] - ds_read B0[7] - - j=4: mfma C[0,4] += A0[0] * B0[4] - buffer_load B2_chunk[1] - - j=5: mfma C[0,5] += A0[0] * B0[5] - j=6: mfma C[0,6] += A0[0] * B0[6] - j=7: mfma C[0,7] += A0[0] * B0[7] - - -kk0, i=1: - j=0: mfma C[1,0] += A0[1] * B0[0] - buffer_load B2_chunk[2] - - j=1: mfma C[1,1] += A0[1] * B0[1] - ds_read A0[2] - - j=2: mfma C[1,2] += A0[1] * B0[2] - j=3: mfma C[1,3] += A0[1] * B0[3] - j=4: mfma C[1,4] += A0[1] * B0[4] - buffer_load B2_chunk[3] - j=5: mfma C[1,5] += A0[1] * B0[5] - j=6: mfma C[1,6] += A0[1] * B0[6] - j=7: mfma C[1,7] += A0[1] * B0[7] - - -kk0, i=2: - j=0: mfma C[2,0] += A0[2] * B0[0] - buffer_load B2_chunk[4] - - j=1: mfma C[2,1] += A0[2] * B0[1] - ds_read A0[3] - - j=2: mfma C[2,2] += A0[2] * B0[2] - j=3: mfma C[2,3] += A0[2] * B0[3] - j=4: mfma C[2,4] += A0[2] * B0[4] - buffer_load B2_chunk[5] - j=5: mfma C[2,5] += A0[2] * B0[5] - j=6: mfma C[2,6] += A0[2] * B0[6] - j=7: mfma C[2,7] += A0[2] * B0[7] - - -kk0, i=3: - j=0: mfma C[3,0] += A0[3] * B0[0] - buffer_load B2_chunk[6] - - j=1: mfma C[3,1] += A0[3] * B0[1] - ds_read A0[4] - - j=2: mfma C[3,2] += A0[3] * B0[2] - j=3: mfma C[3,3] += A0[3] * B0[3] - j=4: mfma C[3,4] += A0[3] * B0[4] - buffer_load B2_chunk[7] - j=5: mfma C[3,5] += A0[3] * B0[5] - j=6: mfma C[3,6] += A0[3] * B0[6] - j=7: mfma C[3,7] += A0[3] * B0[7] - - -kk0, i=4: - j=0: mfma C[4,0] += A0[4] * B0[0] - buffer_load A2_chunk[0] - - j=1: mfma C[4,1] += A0[4] * B0[1] - ds_read A0[5] - - j=2: mfma C[4,2] += A0[4] * B0[2] - j=3: mfma C[4,3] += A0[4] * B0[3] - j=4: mfma C[4,4] += A0[4] * B0[4] - buffer_load A2_chunk[1] - j=5: mfma C[4,5] += A0[4] * B0[5] - j=6: mfma C[4,6] += A0[4] * B0[6] - j=7: mfma C[4,7] += A0[4] * B0[7] - - -kk0, i=5: - j=0: mfma C[5,0] += A0[5] * B0[0] - buffer_load A2_chunk[2] - - j=1: mfma C[5,1] += A0[5] * B0[1] - ds_read A0[6] - - j=2: mfma C[5,2] += A0[5] * B0[2] - j=3: mfma C[5,3] += A0[5] * B0[3] - j=4: mfma C[5,4] += A0[5] * B0[4] - buffer_load A2_chunk[3] - j=5: mfma C[5,5] += A0[5] * B0[5] - j=6: mfma C[5,6] += A0[5] * B0[6] - j=7: mfma C[5,7] += A0[5] * B0[7] - - -kk0, i=6: - j=0: mfma C[6,0] += A0[6] * B0[0] - ds_read B1[0] - buffer_load A2_chunk[4] - - j=1: mfma C[6,1] += A0[6] * B0[1] - ds_read A0[7] - ds_read B1[1] - - j=2: mfma C[6,2] += A0[6] * B0[2] - ds_read B1[2] - - j=3: mfma C[6,3] += A0[6] * B0[3] - ds_read B1[3] - - j=4: mfma C[6,4] += A0[6] * B0[4] - ds_read A1[0] - buffer_load A2_chunk[5] - - j=5: mfma C[6,5] += A0[6] * B0[5] - j=6: mfma C[6,6] += A0[6] * B0[6] - j=7: mfma C[6,7] += A0[6] * B0[7] - - -kk0, i=7: - j=0: mfma C[7,0] += A0[7] * B0[0] - buffer_load A2_chunk[6] - - j=1: mfma C[7,1] += A0[7] * B0[1] - j=2: mfma C[7,2] += A0[7] * B0[2] - j=3: mfma C[7,3] += A0[7] * B0[3] - j=4: mfma C[7,4] += A0[7] * B0[4] - buffer_load A2_chunk[7] - j=5: mfma C[7,5] += A0[7] * B0[5] - j=6: mfma C[7,6] += A0[7] * B0[6] - j=7: mfma C[7,7] += A0[7] * B0[7] - - -By the end of kk0: - - live for kk1 start: A1[0], B1[0], B1[1], B1[2], B1[3] - all global->LDS copies for A2/B2 have been issued: - B2_chunk[0..7], A2_chunk[0..7] - - -Current Tile, k-slice 1: A1/B1 ------------------------------- - -kk1, i=0: - j=0: mfma C[0,0] += A1[0] * B1[0] - ds_read B1[4] - - j=1: mfma C[0,1] += A1[0] * B1[1] - ds_read B1[5] - ds_read A1[1] - - j=2: mfma C[0,2] += A1[0] * B1[2] - ds_read B1[6] - - j=3: mfma C[0,3] += A1[0] * B1[3] - ds_read B1[7] - - j=4: mfma C[0,4] += A1[0] * B1[4] - j=5: mfma C[0,5] += A1[0] * B1[5] - j=6: mfma C[0,6] += A1[0] * B1[6] - j=7: mfma C[0,7] += A1[0] * B1[7] - - -kk1, i=1: - j=0: mfma C[1,0] += A1[1] * B1[0] - j=1: mfma C[1,1] += A1[1] * B1[1] - ds_read A1[2] - j=2: mfma C[1,2] += A1[1] * B1[2] - j=3: mfma C[1,3] += A1[1] * B1[3] - j=4: mfma C[1,4] += A1[1] * B1[4] - j=5: mfma C[1,5] += A1[1] * B1[5] - j=6: mfma C[1,6] += A1[1] * B1[6] - j=7: mfma C[1,7] += A1[1] * B1[7] - - -kk1, i=2: - j=0: mfma C[2,0] += A1[2] * B1[0] - j=1: mfma C[2,1] += A1[2] * B1[1] - ds_read A1[3] - j=2: mfma C[2,2] += A1[2] * B1[2] - j=3: mfma C[2,3] += A1[2] * B1[3] - j=4: mfma C[2,4] += A1[2] * B1[4] - j=5: mfma C[2,5] += A1[2] * B1[5] - j=6: mfma C[2,6] += A1[2] * B1[6] - j=7: mfma C[2,7] += A1[2] * B1[7] - - -kk1, i=3: - j=0: mfma C[3,0] += A1[3] * B1[0] - j=1: mfma C[3,1] += A1[3] * B1[1] - ds_read A1[4] - j=2: mfma C[3,2] += A1[3] * B1[2] - j=3: mfma C[3,3] += A1[3] * B1[3] - j=4: mfma C[3,4] += A1[3] * B1[4] - j=5: mfma C[3,5] += A1[3] * B1[5] - j=6: mfma C[3,6] += A1[3] * B1[6] - j=7: mfma C[3,7] += A1[3] * B1[7] - - -kk1, i=4: - j=0: mfma C[4,0] += A1[4] * B1[0] - j=1: mfma C[4,1] += A1[4] * B1[1] - ds_read A1[5] - j=2: mfma C[4,2] += A1[4] * B1[2] - j=3: mfma C[4,3] += A1[4] * B1[3] - j=4: mfma C[4,4] += A1[4] * B1[4] - j=5: mfma C[4,5] += A1[4] * B1[5] - j=6: mfma C[4,6] += A1[4] * B1[6] - j=7: mfma C[4,7] += A1[4] * B1[7] - - -kk1, i=5: - j=0: mfma C[5,0] += A1[5] * B1[0] - j=1: mfma C[5,1] += A1[5] * B1[1] - ds_read A1[6] - j=2: mfma C[5,2] += A1[5] * B1[2] - j=3: mfma C[5,3] += A1[5] * B1[3] - j=4: mfma C[5,4] += A1[5] * B1[4] - j=5: mfma C[5,5] += A1[5] * B1[5] - j=6: mfma C[5,6] += A1[5] * B1[6] - j=7: mfma C[5,7] += A1[5] * B1[7] - - -kk1, i=6: - j=0: mfma C[6,0] += A1[6] * B1[0] - j=1: mfma C[6,1] += A1[6] * B1[1] - ds_read A1[7] - j=2: mfma C[6,2] += A1[6] * B1[2] - j=3: mfma C[6,3] += A1[6] * B1[3] - j=4: mfma C[6,4] += A1[6] * B1[4] - j=5: mfma C[6,5] += A1[6] * B1[5] - j=6: mfma C[6,6] += A1[6] * B1[6] - j=7: mfma C[6,7] += A1[6] * B1[7] - - -kk1, i=7: - j=0: mfma C[7,0] += A1[7] * B1[0] - j=1: mfma C[7,1] += A1[7] * B1[1] - j=2: mfma C[7,2] += A1[7] * B1[2] - j=3: mfma C[7,3] += A1[7] * B1[3] - j=4: mfma C[7,4] += A1[7] * B1[4] - j=5: mfma C[7,5] += A1[7] * B1[5] - j=6: mfma C[7,6] += A1[7] * B1[6] - j=7: mfma C[7,7] += A1[7] * B1[7] - - -Loop Tail: Prefetch Next Tile Initial Fragments ------------------------------------------------ - -After kk1 finishes: - - barrier # s_waitcnt vmcnt(0) + s_barrier - # waits B2/A2 global->LDS copies and syncs CTA - - ds_read B2[0] - ds_read B2[1] - ds_read B2[2] - ds_read B2[3] - ds_read A2[0] - - yield loop state: - k_offset_next - next_stage - C fragments - A2[0] - B2[0..3] - -Next loop consumes these as: - - A0[0] := A2[0] - B0[0..3] := B2[0..3] - - -Important Timing Notes ----------------------- - -1. The global->LDS copies for the next tile are all issued during kk0: - - kk0 i=0..3 issue B2_chunk[0..7] - kk0 i=4..7 issue A2_chunk[0..7] - - Then the whole kk1 compute runs before the tail barrier, so VMEM has a lot - of distance to finish. - -2. The loop-head LDS reads from the old version moved to the previous loop tail. - This is why the steady-state loop starts with A0[0], B0[0..3] live. - -3. There is still a tail barrier -> ds_read B2/A2 -> lgkmcnt-before-first-mfma - cost visible in ATT. Any next improvement probably needs to hide or move - this tail ds_read latency without adding another full CTA barrier in the - middle of the compute. - -4. Tested initial-fragment counts: - - B3 + A0: about 2505.0 cycles - B4 + A0: about 2491.6 cycles current best - B5 + A0: about 2495.4 cycles - B8 + A0: about 2582 cycles - - B4 seems to be the current sweet spot: enough to start the first row, but - not so much loop-carried VGPR/state that scheduling gets worse. diff --git a/resource_inspect/hgemm_wave0_compact_schedule.txt b/resource_inspect/hgemm_wave0_compact_schedule.txt deleted file mode 100644 index 938992044..000000000 --- a/resource_inspect/hgemm_wave0_compact_schedule.txt +++ /dev/null @@ -1,193 +0,0 @@ -Wave0 compact steady-state schedule -=================================== - -Block notation: - C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. - A0[i,k] and B0[j,k] are current LDS buffer fragments, k=0 means K[0:32], k=1 means K[32:64]. - A1/B1 is the other LDS buffer for the next outer-loop tile. - dsrd reads one 16x32 fragment from LDS. - bfld writes CTA-wide global->LDS chunks into the other buffer. - B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. - With the experimental A_LDS_K32_BLOCKING path, A bfld chunks are [4 rows, 1 K-slice]. - Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. - -Ops ---- -mfma C[0,0]+=A0[0,0]*B0[0,0] -dsrd B0[4,0] -bfld B1[0:2,0:2] -mfma C[0,1]+=A0[0,0]*B0[1,0] -dsrd B0[5,0] -dsrd A0[1,0] -mfma C[0,2]+=A0[0,0]*B0[2,0] -dsrd B0[6,0] -mfma C[0,3]+=A0[0,0]*B0[3,0] -dsrd B0[7,0] -mfma C[0,4]+=A0[0,0]*B0[4,0] -bfld B1[2:4,0:2] -mfma C[0,5]+=A0[0,0]*B0[5,0] -mfma C[0,6]+=A0[0,0]*B0[6,0] -mfma C[0,7]+=A0[0,0]*B0[7,0] -mfma C[1,0]+=A0[1,0]*B0[0,0] -bfld B1[4:6,0:2] -mfma C[1,1]+=A0[1,0]*B0[1,0] -dsrd A0[2,0] -mfma C[1,2]+=A0[1,0]*B0[2,0] -mfma C[1,3]+=A0[1,0]*B0[3,0] -mfma C[1,4]+=A0[1,0]*B0[4,0] -bfld B1[6:8,0:2] -mfma C[1,5]+=A0[1,0]*B0[5,0] -mfma C[1,6]+=A0[1,0]*B0[6,0] -mfma C[1,7]+=A0[1,0]*B0[7,0] -mfma C[2,0]+=A0[2,0]*B0[0,0] -bfld B1[8:10,0:2] -mfma C[2,1]+=A0[2,0]*B0[1,0] -dsrd A0[3,0] -mfma C[2,2]+=A0[2,0]*B0[2,0] -mfma C[2,3]+=A0[2,0]*B0[3,0] -mfma C[2,4]+=A0[2,0]*B0[4,0] -bfld B1[10:12,0:2] -mfma C[2,5]+=A0[2,0]*B0[5,0] -mfma C[2,6]+=A0[2,0]*B0[6,0] -mfma C[2,7]+=A0[2,0]*B0[7,0] -mfma C[3,0]+=A0[3,0]*B0[0,0] -bfld B1[12:14,0:2] -mfma C[3,1]+=A0[3,0]*B0[1,0] -dsrd A0[4,0] -mfma C[3,2]+=A0[3,0]*B0[2,0] -mfma C[3,3]+=A0[3,0]*B0[3,0] -mfma C[3,4]+=A0[3,0]*B0[4,0] -bfld B1[14:16,0:2] -mfma C[3,5]+=A0[3,0]*B0[5,0] -mfma C[3,6]+=A0[3,0]*B0[6,0] -mfma C[3,7]+=A0[3,0]*B0[7,0] -mfma C[4,0]+=A0[4,0]*B0[0,0] -bfld A1[0:4,0] -mfma C[4,1]+=A0[4,0]*B0[1,0] -dsrd A0[5,0] -mfma C[4,2]+=A0[4,0]*B0[2,0] -mfma C[4,3]+=A0[4,0]*B0[3,0] -mfma C[4,4]+=A0[4,0]*B0[4,0] -bfld A1[4:8,0] -mfma C[4,5]+=A0[4,0]*B0[5,0] -mfma C[4,6]+=A0[4,0]*B0[6,0] -mfma C[4,7]+=A0[4,0]*B0[7,0] -mfma C[5,0]+=A0[5,0]*B0[0,0] -bfld A1[8:12,0] -mfma C[5,1]+=A0[5,0]*B0[1,0] -dsrd A0[6,0] -mfma C[5,2]+=A0[5,0]*B0[2,0] -mfma C[5,3]+=A0[5,0]*B0[3,0] -mfma C[5,4]+=A0[5,0]*B0[4,0] -bfld A1[12:16,0] -mfma C[5,5]+=A0[5,0]*B0[5,0] -mfma C[5,6]+=A0[5,0]*B0[6,0] -mfma C[5,7]+=A0[5,0]*B0[7,0] -mfma C[6,0]+=A0[6,0]*B0[0,0] -dsrd B0[0,1] -bfld A1[0:4,1] -mfma C[6,1]+=A0[6,0]*B0[1,0] -dsrd A0[7,0] -dsrd B0[1,1] -mfma C[6,2]+=A0[6,0]*B0[2,0] -dsrd B0[2,1] -mfma C[6,3]+=A0[6,0]*B0[3,0] -dsrd B0[3,1] -mfma C[6,4]+=A0[6,0]*B0[4,0] -dsrd A0[0,1] -bfld A1[4:8,1] -mfma C[6,5]+=A0[6,0]*B0[5,0] -mfma C[6,6]+=A0[6,0]*B0[6,0] -mfma C[6,7]+=A0[6,0]*B0[7,0] -mfma C[7,0]+=A0[7,0]*B0[0,0] -bfld A1[8:12,1] -mfma C[7,1]+=A0[7,0]*B0[1,0] -mfma C[7,2]+=A0[7,0]*B0[2,0] -mfma C[7,3]+=A0[7,0]*B0[3,0] -mfma C[7,4]+=A0[7,0]*B0[4,0] -bfld A1[12:16,1] -mfma C[7,5]+=A0[7,0]*B0[5,0] -mfma C[7,6]+=A0[7,0]*B0[6,0] -mfma C[7,7]+=A0[7,0]*B0[7,0] -mfma C[0,0]+=A0[0,1]*B0[0,1] -dsrd B0[4,1] -mfma C[0,1]+=A0[0,1]*B0[1,1] -dsrd B0[5,1] -dsrd A0[1,1] -mfma C[0,2]+=A0[0,1]*B0[2,1] -dsrd B0[6,1] -mfma C[0,3]+=A0[0,1]*B0[3,1] -dsrd B0[7,1] -mfma C[0,4]+=A0[0,1]*B0[4,1] -mfma C[0,5]+=A0[0,1]*B0[5,1] -mfma C[0,6]+=A0[0,1]*B0[6,1] -mfma C[0,7]+=A0[0,1]*B0[7,1] -mfma C[1,0]+=A0[1,1]*B0[0,1] -mfma C[1,1]+=A0[1,1]*B0[1,1] -dsrd A0[2,1] -mfma C[1,2]+=A0[1,1]*B0[2,1] -mfma C[1,3]+=A0[1,1]*B0[3,1] -mfma C[1,4]+=A0[1,1]*B0[4,1] -mfma C[1,5]+=A0[1,1]*B0[5,1] -mfma C[1,6]+=A0[1,1]*B0[6,1] -mfma C[1,7]+=A0[1,1]*B0[7,1] -mfma C[2,0]+=A0[2,1]*B0[0,1] -mfma C[2,1]+=A0[2,1]*B0[1,1] -dsrd A0[3,1] -mfma C[2,2]+=A0[2,1]*B0[2,1] -mfma C[2,3]+=A0[2,1]*B0[3,1] -mfma C[2,4]+=A0[2,1]*B0[4,1] -mfma C[2,5]+=A0[2,1]*B0[5,1] -mfma C[2,6]+=A0[2,1]*B0[6,1] -mfma C[2,7]+=A0[2,1]*B0[7,1] -mfma C[3,0]+=A0[3,1]*B0[0,1] -mfma C[3,1]+=A0[3,1]*B0[1,1] -dsrd A0[4,1] -mfma C[3,2]+=A0[3,1]*B0[2,1] -mfma C[3,3]+=A0[3,1]*B0[3,1] -mfma C[3,4]+=A0[3,1]*B0[4,1] -mfma C[3,5]+=A0[3,1]*B0[5,1] -mfma C[3,6]+=A0[3,1]*B0[6,1] -mfma C[3,7]+=A0[3,1]*B0[7,1] -mfma C[4,0]+=A0[4,1]*B0[0,1] -mfma C[4,1]+=A0[4,1]*B0[1,1] -dsrd A0[5,1] -mfma C[4,2]+=A0[4,1]*B0[2,1] -mfma C[4,3]+=A0[4,1]*B0[3,1] -mfma C[4,4]+=A0[4,1]*B0[4,1] -mfma C[4,5]+=A0[4,1]*B0[5,1] -mfma C[4,6]+=A0[4,1]*B0[6,1] -mfma C[4,7]+=A0[4,1]*B0[7,1] -mfma C[5,0]+=A0[5,1]*B0[0,1] -mfma C[5,1]+=A0[5,1]*B0[1,1] -dsrd A0[6,1] -mfma C[5,2]+=A0[5,1]*B0[2,1] -mfma C[5,3]+=A0[5,1]*B0[3,1] -mfma C[5,4]+=A0[5,1]*B0[4,1] -mfma C[5,5]+=A0[5,1]*B0[5,1] -mfma C[5,6]+=A0[5,1]*B0[6,1] -mfma C[5,7]+=A0[5,1]*B0[7,1] -mfma C[6,0]+=A0[6,1]*B0[0,1] -mfma C[6,1]+=A0[6,1]*B0[1,1] -dsrd A0[7,1] -mfma C[6,2]+=A0[6,1]*B0[2,1] -mfma C[6,3]+=A0[6,1]*B0[3,1] -mfma C[6,4]+=A0[6,1]*B0[4,1] -mfma C[6,5]+=A0[6,1]*B0[5,1] -mfma C[6,6]+=A0[6,1]*B0[6,1] -mfma C[6,7]+=A0[6,1]*B0[7,1] -mfma C[7,0]+=A0[7,1]*B0[0,1] -mfma C[7,1]+=A0[7,1]*B0[1,1] -mfma C[7,2]+=A0[7,1]*B0[2,1] -mfma C[7,3]+=A0[7,1]*B0[3,1] -mfma C[7,4]+=A0[7,1]*B0[4,1] -mfma C[7,5]+=A0[7,1]*B0[5,1] -mfma C[7,6]+=A0[7,1]*B0[6,1] -mfma C[7,7]+=A0[7,1]*B0[7,1] -barrier vmcnt(0)+s_barrier -dsrd B1[0,0] -dsrd B1[1,0] -dsrd B1[2,0] -dsrd B1[3,0] -dsrd A1[0,0] -yield C,A1[0,0],B1[0:4,0] diff --git a/resource_inspect/hgemm_wave0_first20_ops.txt b/resource_inspect/hgemm_wave0_first20_ops.txt deleted file mode 100644 index 032f901d0..000000000 --- a/resource_inspect/hgemm_wave0_first20_ops.txt +++ /dev/null @@ -1,54 +0,0 @@ -Wave0 first 20 scheduled data ops, current B4 tail-prefetch version -=================================================================== - -Scope ------ -Only wave0. - -CTA-local mapping: - - wave0 computes C0[ 0:128, 0:128] - A ranges are CTA-local A[M, K] - B ranges are CTA-local B[N, K], because this kernel receives B as transposed/packed (N, K) - C ranges are CTA-local C[M, N] - -Current loop starts after previous loop tail already prefetched: - - live A0[ 0: 16, 0: 32] - live B0[ 0: 16, 0: 32] - live B0[ 16: 32, 0: 32] - live B0[ 32: 48, 0: 32] - live B0[ 48: 64, 0: 32] - -Notation: - - A0 = current BLOCK_K tile, K 0:32 - B0 = current BLOCK_K tile, K 0:32 - A2/B2 = next BLOCK_K tile being copied global -> LDS - bfld means buffer_load global -> LDS. The range after bfld is the logical - shared-memory tile range written by that CTA-wide copy chunk. - - -First 20 Ops ------------- - -mfma C0[ 0: 16, 0: 16] += A0[ 0: 16, 0: 32] * B0[ 0: 16, 0: 32] -dsrd B0[ 64: 80, 0: 32] -bfld B2[ 0: 32, 0: 64] -mfma C0[ 0: 16, 16: 32] += A0[ 0: 16, 0: 32] * B0[ 16: 32, 0: 32] -dsrd B0[ 80: 96, 0: 32] -dsrd A0[ 16: 32, 0: 32] -mfma C0[ 0: 16, 32: 48] += A0[ 0: 16, 0: 32] * B0[ 32: 48, 0: 32] -dsrd B0[ 96:112, 0: 32] -mfma C0[ 0: 16, 48: 64] += A0[ 0: 16, 0: 32] * B0[ 48: 64, 0: 32] -dsrd B0[112:128, 0: 32] -mfma C0[ 0: 16, 64: 80] += A0[ 0: 16, 0: 32] * B0[ 64: 80, 0: 32] -bfld B2[ 32: 64, 0: 64] -mfma C0[ 0: 16, 80: 96] += A0[ 0: 16, 0: 32] * B0[ 80: 96, 0: 32] -mfma C0[ 0: 16, 96:112] += A0[ 0: 16, 0: 32] * B0[ 96:112, 0: 32] -mfma C0[ 0: 16, 112:128] += A0[ 0: 16, 0: 32] * B0[112:128, 0: 32] -mfma C0[ 16: 32, 0: 16] += A0[ 16: 32, 0: 32] * B0[ 0: 16, 0: 32] -bfld B2[ 64: 96, 0: 64] -mfma C0[ 16: 32, 16: 32] += A0[ 16: 32, 0: 32] * B0[ 16: 32, 0: 32] -dsrd A0[ 32: 48, 0: 32] -mfma C0[ 16: 32, 32: 48] += A0[ 16: 32, 0: 32] * B0[ 32: 48, 0: 32] diff --git a/resource_inspect/hgemm_wave0_full_kernel_ops.txt b/resource_inspect/hgemm_wave0_full_kernel_ops.txt deleted file mode 100644 index 8cb2e3244..000000000 --- a/resource_inspect/hgemm_wave0_full_kernel_ops.txt +++ /dev/null @@ -1,202 +0,0 @@ -Wave0 full steady-state BLOCK_K=64 schedule, AK32 block notation -================================================================= - -This expands one steady-state tile for wave0 only. It does not repeat all 128 K tiles. -Layout: A is A[M,K], B is B[N,K] because the harness passes transposed B_T, C is C[M,N]. -Kernel: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32. -Last measured hot loop: about 2589 cycles per BLOCK_K tile on the ATT middle-window policy. - -Block notation: - C[i,j] is one 16x16 C block, wave0 uses C[0:8,0:8]. - A0[i,k] and B0[j,k] are current LDS fragments, k=0 means K[0:32], k=1 means K[32:64]. - A1/B1 is the other LDS buffer being filled for the next outer-loop tile. - dsrd reads one 16x32 fragment from LDS. - bfld writes CTA-wide global->LDS chunks into the other buffer. - B bfld chunks are [2 rows, 2 K-slices] because B stays row-major K64 in LDS. - A bfld chunks are [4 rows, 1 K-slice] in the AK32 LDS layout. - Full CTA A/B buffer is [16,2], so bfld ranges can exceed wave0's [8,2] compute footprint. - -At loop entry, these fragments were already prefetched by the previous loop tail: - A0[0,0] - B0[0:4,0] - -Ops ---- -mfma C[0,0]+=A0[0,0]*B0[0,0] -dsrd B0[4,0] -bfld B1[0:2,0:2] -mfma C[0,1]+=A0[0,0]*B0[1,0] -dsrd B0[5,0] -dsrd A0[1,0] -mfma C[0,2]+=A0[0,0]*B0[2,0] -dsrd B0[6,0] -mfma C[0,3]+=A0[0,0]*B0[3,0] -dsrd B0[7,0] -mfma C[0,4]+=A0[0,0]*B0[4,0] -bfld B1[2:4,0:2] -mfma C[0,5]+=A0[0,0]*B0[5,0] -mfma C[0,6]+=A0[0,0]*B0[6,0] -mfma C[0,7]+=A0[0,0]*B0[7,0] -mfma C[1,0]+=A0[1,0]*B0[0,0] -bfld B1[4:6,0:2] -mfma C[1,1]+=A0[1,0]*B0[1,0] -dsrd A0[2,0] -mfma C[1,2]+=A0[1,0]*B0[2,0] -mfma C[1,3]+=A0[1,0]*B0[3,0] -mfma C[1,4]+=A0[1,0]*B0[4,0] -bfld B1[6:8,0:2] -mfma C[1,5]+=A0[1,0]*B0[5,0] -mfma C[1,6]+=A0[1,0]*B0[6,0] -mfma C[1,7]+=A0[1,0]*B0[7,0] -mfma C[2,0]+=A0[2,0]*B0[0,0] -bfld B1[8:10,0:2] -mfma C[2,1]+=A0[2,0]*B0[1,0] -dsrd A0[3,0] -mfma C[2,2]+=A0[2,0]*B0[2,0] -mfma C[2,3]+=A0[2,0]*B0[3,0] -mfma C[2,4]+=A0[2,0]*B0[4,0] -bfld B1[10:12,0:2] -mfma C[2,5]+=A0[2,0]*B0[5,0] -mfma C[2,6]+=A0[2,0]*B0[6,0] -mfma C[2,7]+=A0[2,0]*B0[7,0] -mfma C[3,0]+=A0[3,0]*B0[0,0] -bfld B1[12:14,0:2] -mfma C[3,1]+=A0[3,0]*B0[1,0] -dsrd A0[4,0] -mfma C[3,2]+=A0[3,0]*B0[2,0] -mfma C[3,3]+=A0[3,0]*B0[3,0] -mfma C[3,4]+=A0[3,0]*B0[4,0] -bfld B1[14:16,0:2] -mfma C[3,5]+=A0[3,0]*B0[5,0] -mfma C[3,6]+=A0[3,0]*B0[6,0] -mfma C[3,7]+=A0[3,0]*B0[7,0] -mfma C[4,0]+=A0[4,0]*B0[0,0] -bfld A1[0:4,0] -mfma C[4,1]+=A0[4,0]*B0[1,0] -dsrd A0[5,0] -mfma C[4,2]+=A0[4,0]*B0[2,0] -mfma C[4,3]+=A0[4,0]*B0[3,0] -mfma C[4,4]+=A0[4,0]*B0[4,0] -bfld A1[4:8,0] -mfma C[4,5]+=A0[4,0]*B0[5,0] -mfma C[4,6]+=A0[4,0]*B0[6,0] -mfma C[4,7]+=A0[4,0]*B0[7,0] -mfma C[5,0]+=A0[5,0]*B0[0,0] -bfld A1[8:12,0] -mfma C[5,1]+=A0[5,0]*B0[1,0] -dsrd A0[6,0] -mfma C[5,2]+=A0[5,0]*B0[2,0] -mfma C[5,3]+=A0[5,0]*B0[3,0] -mfma C[5,4]+=A0[5,0]*B0[4,0] -bfld A1[12:16,0] -mfma C[5,5]+=A0[5,0]*B0[5,0] -mfma C[5,6]+=A0[5,0]*B0[6,0] -mfma C[5,7]+=A0[5,0]*B0[7,0] -mfma C[6,0]+=A0[6,0]*B0[0,0] -dsrd B0[0,1] -bfld A1[0:4,1] -mfma C[6,1]+=A0[6,0]*B0[1,0] -dsrd A0[7,0] -dsrd B0[1,1] -mfma C[6,2]+=A0[6,0]*B0[2,0] -dsrd B0[2,1] -mfma C[6,3]+=A0[6,0]*B0[3,0] -dsrd B0[3,1] -mfma C[6,4]+=A0[6,0]*B0[4,0] -dsrd A0[0,1] -bfld A1[4:8,1] -mfma C[6,5]+=A0[6,0]*B0[5,0] -mfma C[6,6]+=A0[6,0]*B0[6,0] -mfma C[6,7]+=A0[6,0]*B0[7,0] -mfma C[7,0]+=A0[7,0]*B0[0,0] -bfld A1[8:12,1] -mfma C[7,1]+=A0[7,0]*B0[1,0] -mfma C[7,2]+=A0[7,0]*B0[2,0] -mfma C[7,3]+=A0[7,0]*B0[3,0] -mfma C[7,4]+=A0[7,0]*B0[4,0] -bfld A1[12:16,1] -mfma C[7,5]+=A0[7,0]*B0[5,0] -mfma C[7,6]+=A0[7,0]*B0[6,0] -mfma C[7,7]+=A0[7,0]*B0[7,0] -mfma C[0,0]+=A0[0,1]*B0[0,1] -dsrd B0[4,1] -mfma C[0,1]+=A0[0,1]*B0[1,1] -dsrd B0[5,1] -dsrd A0[1,1] -mfma C[0,2]+=A0[0,1]*B0[2,1] -dsrd B0[6,1] -mfma C[0,3]+=A0[0,1]*B0[3,1] -dsrd B0[7,1] -mfma C[0,4]+=A0[0,1]*B0[4,1] -mfma C[0,5]+=A0[0,1]*B0[5,1] -mfma C[0,6]+=A0[0,1]*B0[6,1] -mfma C[0,7]+=A0[0,1]*B0[7,1] -mfma C[1,0]+=A0[1,1]*B0[0,1] -mfma C[1,1]+=A0[1,1]*B0[1,1] -dsrd A0[2,1] -mfma C[1,2]+=A0[1,1]*B0[2,1] -mfma C[1,3]+=A0[1,1]*B0[3,1] -mfma C[1,4]+=A0[1,1]*B0[4,1] -mfma C[1,5]+=A0[1,1]*B0[5,1] -mfma C[1,6]+=A0[1,1]*B0[6,1] -mfma C[1,7]+=A0[1,1]*B0[7,1] -mfma C[2,0]+=A0[2,1]*B0[0,1] -mfma C[2,1]+=A0[2,1]*B0[1,1] -dsrd A0[3,1] -mfma C[2,2]+=A0[2,1]*B0[2,1] -mfma C[2,3]+=A0[2,1]*B0[3,1] -mfma C[2,4]+=A0[2,1]*B0[4,1] -mfma C[2,5]+=A0[2,1]*B0[5,1] -mfma C[2,6]+=A0[2,1]*B0[6,1] -mfma C[2,7]+=A0[2,1]*B0[7,1] -mfma C[3,0]+=A0[3,1]*B0[0,1] -mfma C[3,1]+=A0[3,1]*B0[1,1] -dsrd A0[4,1] -mfma C[3,2]+=A0[3,1]*B0[2,1] -mfma C[3,3]+=A0[3,1]*B0[3,1] -mfma C[3,4]+=A0[3,1]*B0[4,1] -mfma C[3,5]+=A0[3,1]*B0[5,1] -mfma C[3,6]+=A0[3,1]*B0[6,1] -mfma C[3,7]+=A0[3,1]*B0[7,1] -mfma C[4,0]+=A0[4,1]*B0[0,1] -mfma C[4,1]+=A0[4,1]*B0[1,1] -dsrd A0[5,1] -mfma C[4,2]+=A0[4,1]*B0[2,1] -mfma C[4,3]+=A0[4,1]*B0[3,1] -mfma C[4,4]+=A0[4,1]*B0[4,1] -mfma C[4,5]+=A0[4,1]*B0[5,1] -mfma C[4,6]+=A0[4,1]*B0[6,1] -mfma C[4,7]+=A0[4,1]*B0[7,1] -mfma C[5,0]+=A0[5,1]*B0[0,1] -mfma C[5,1]+=A0[5,1]*B0[1,1] -dsrd A0[6,1] -mfma C[5,2]+=A0[5,1]*B0[2,1] -mfma C[5,3]+=A0[5,1]*B0[3,1] -mfma C[5,4]+=A0[5,1]*B0[4,1] -mfma C[5,5]+=A0[5,1]*B0[5,1] -mfma C[5,6]+=A0[5,1]*B0[6,1] -mfma C[5,7]+=A0[5,1]*B0[7,1] -mfma C[6,0]+=A0[6,1]*B0[0,1] -mfma C[6,1]+=A0[6,1]*B0[1,1] -dsrd A0[7,1] -mfma C[6,2]+=A0[6,1]*B0[2,1] -mfma C[6,3]+=A0[6,1]*B0[3,1] -mfma C[6,4]+=A0[6,1]*B0[4,1] -mfma C[6,5]+=A0[6,1]*B0[5,1] -mfma C[6,6]+=A0[6,1]*B0[6,1] -mfma C[6,7]+=A0[6,1]*B0[7,1] -mfma C[7,0]+=A0[7,1]*B0[0,1] -mfma C[7,1]+=A0[7,1]*B0[1,1] -mfma C[7,2]+=A0[7,1]*B0[2,1] -mfma C[7,3]+=A0[7,1]*B0[3,1] -mfma C[7,4]+=A0[7,1]*B0[4,1] -mfma C[7,5]+=A0[7,1]*B0[5,1] -mfma C[7,6]+=A0[7,1]*B0[6,1] -mfma C[7,7]+=A0[7,1]*B0[7,1] -barrier vmcnt(0)+s_barrier -dsrd B1[0,0] -dsrd B1[1,0] -dsrd B1[2,0] -dsrd B1[3,0] -dsrd A1[0,0] -yield C,A1[0,0],B1[0:4,0] diff --git a/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s b/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s deleted file mode 100644 index b4878b56d..000000000 --- a/resource_inspect/snapshots/fp8_gemm_4wave_16k_pure.s +++ /dev/null @@ -1,27992 +0,0 @@ - .amdgcn_target "amdgcn-amd-amdhsa--gfx950" - .amdhsa_code_object_version 6 - .text - .globl kernel_gemm_0 - .p2align 8 - .type kernel_gemm_0,@function -kernel_gemm_0: -.Lfunc_begin0: - .cfi_sections .debug_frame - .cfi_startproc - .file 1 "/root/FlyDSL/kernels" "fp8_gemm_4wave.py" - s_load_dwordx2 s[4:5], s[0:1], 0x0 ;.loc 1 418 0 prologue_end - s_load_dword s6, s[0:1], 0x8 - s_load_dwordx4 s[28:31], s[0:1], 0x10 - s_load_dwordx4 s[12:15], s[0:1], 0x28 - s_load_dwordx2 s[34:35], s[0:1], 0x38 - v_mov_b32_e32 v009, v000 - s_load_dword s0, s[0:1], 0x4c ;.loc 1 289 0 - v_lshrrev_b32_e32 v005, 6, v009 ;.loc 1 127 0 - v_lshlrev_b32_e32 v001, 3, v005 ;.loc 1 289 0 - s_waitcnt lgkmcnt(0) ;.loc 1 129 0 - s_add_i32 s3, s35, 0xff - s_ashr_i32 s7, s3, 31 - s_lshr_b32 s7, s7, 24 - s_add_i32 s7, s3, s7 - s_ashr_i32 s16, s7, 8 - s_and_b32 s7, s7, 0xffffff00 - s_cmp_lg_u32 s3, s7 - s_cselect_b64 s[8:9], -1, 0 - s_cmp_lt_i32 s3, 0 - s_cselect_b64 s[10:11], -1, 0 - s_and_b64 s[8:9], s[10:11], s[8:9] - s_subb_u32 s7, s16, 0 - s_add_i32 s3, s34, 0xff ;.loc 1 131 0 - s_ashr_i32 s8, s3, 31 - s_lshr_b32 s8, s8, 24 - s_add_i32 s8, s3, s8 - s_ashr_i32 s20, s8, 8 - s_and_b32 s8, s8, 0xffffff00 - s_cmp_lg_u32 s3, s8 - s_cselect_b64 s[8:9], -1, 0 - s_cmp_lt_i32 s3, 0 - s_cselect_b64 s[10:11], -1, 0 - s_and_b64 s[8:9], s[10:11], s[8:9] - s_subb_u32 s3, s20, 0 - s_abs_i32 s11, s7 - v_cvt_f32_u32_e32 v000, s11 - s_sub_i32 s16, 0, s11 - s_mul_i32 s21, s7, s3 - s_ashr_i32 s3, s2, 31 - v_rcp_iflag_f32_e32 v000, v000 - s_ashr_i32 s10, s7, 31 - s_xor_b32 s22, s3, s10 - s_abs_i32 s10, s2 - v_mul_f32_e32 v000, 0x4f7ffffe, v000 - v_cvt_u32_f32_e32 v000, v000 - v_lshlrev_b32_e32 v006, 4, v009 ;.loc 1 289 0 - s_movk_i32 s59, 0x70 - v_lshlrev_b32_e32 v005, 10, v005 ;.loc 1 299 0 - v_readfirstlane_b32 s17, v000 ;.loc 1 131 0 - s_mul_i32 s16, s16, s17 - s_mul_hi_u32 s16, s17, s16 - s_add_i32 s17, s17, s16 - s_mul_hi_u32 s16, s10, s17 - s_mul_i32 s17, s16, s11 - s_sub_i32 s10, s10, s17 - s_add_i32 s17, s16, 1 - s_sub_i32 s18, s10, s11 - s_cmp_ge_u32 s10, s11 - s_cselect_b32 s16, s17, s16 - s_cselect_b32 s10, s18, s10 - s_add_i32 s17, s16, 1 - s_cmp_ge_u32 s10, s11 - s_cselect_b32 s10, s17, s16 - s_xor_b32 s23, s10, s22 - s_sub_i32 s10, s23, s22 - s_mul_i32 s24, s10, s7 - s_cmp_lg_u32 s2, s24 - s_cselect_b64 s[10:11], -1, 0 - s_cmp_lt_i32 s2, 0 - s_cselect_b64 s[16:17], -1, 0 - s_xor_b32 s18, s7, s2 - s_cmp_lt_i32 s18, 0 - s_cselect_b64 s[18:19], -1, 0 - s_and_b64 s[10:11], s[18:19], s[10:11] - s_subb_u32 s18, s23, s22 - s_lshr_b32 s3, s3, 29 - s_add_i32 s3, s2, s3 - s_sub_i32 s19, s2, s24 - s_ashr_i32 s22, s3, 3 - s_and_b32 s3, s3, -8 - s_cmp_lg_u32 s2, s3 - s_cselect_b64 s[10:11], -1, 0 - s_and_b64 s[10:11], s[16:17], s[10:11] - s_subb_u32 s16, s22, 0 - s_sub_i32 s17, s2, s3 - s_ashr_i32 s2, s21, 31 - s_lshr_b32 s2, s2, 29 - s_add_i32 s2, s21, s2 - s_ashr_i32 s22, s2, 3 - s_and_b32 s2, s2, -8 - s_cmp_lg_u32 s21, s2 - s_cselect_b64 s[2:3], -1, 0 - s_cmp_lt_i32 s21, 0 - s_cselect_b64 s[10:11], -1, 0 - s_and_b64 s[2:3], s[10:11], s[2:3] - s_subb_u32 s2, s22, 0 - s_mul_i32 s2, s2, s17 - s_add_i32 s16, s16, s2 - s_lshl_b32 s2, s7, 2 - s_abs_i32 s10, s2 - v_cvt_f32_u32_e32 v000, s10 - s_sub_i32 s11, 0, s10 - s_xor_b32 s3, s16, s2 - s_ashr_i32 s17, s3, 31 - v_rcp_iflag_f32_e32 v000, v000 - s_abs_i32 s3, s16 - .file 2 "/root/FlyDSL/python/flydsl/expr/rocdl" "universal.py" - s_mov_b32 s24, s14 ;.loc 2 159 14 - v_mov_b32_e32 v011, v009 - v_mul_f32_e32 v000, 0x4f7ffffe, v000 ;.loc 1 131 0 - v_cvt_u32_f32_e32 v000, v000 - s_nop 0 - v_readfirstlane_b32 s22, v000 - s_mul_i32 s11, s11, s22 - s_mul_hi_u32 s11, s22, s11 - s_add_i32 s22, s22, s11 - s_mul_hi_u32 s11, s3, s22 - s_mul_i32 s22, s11, s10 - s_sub_i32 s3, s3, s22 - s_add_i32 s22, s11, 1 - s_sub_i32 s23, s3, s10 - s_cmp_ge_u32 s3, s10 - s_cselect_b32 s11, s22, s11 - s_cselect_b32 s3, s23, s3 - s_add_i32 s22, s11, 1 - s_cmp_ge_u32 s3, s10 - s_cselect_b32 s3, s22, s11 - s_xor_b32 s22, s3, s17 - s_sub_i32 s3, s22, s17 - s_mul_i32 s23, s3, s2 - s_cmp_lg_u32 s16, s23 - s_cselect_b64 s[2:3], -1, 0 - s_xor_b32 s7, s16, s7 - s_cmp_lt_i32 s7, 0 - s_cselect_b64 s[10:11], -1, 0 - s_and_b64 s[2:3], s[10:11], s[2:3] - s_subb_u32 s2, s22, s17 - s_sub_i32 s7, s16, s23 - s_lshl_b32 s10, s2, 2 - s_cmp_lg_u64 s[8:9], 0 - s_subb_u32 s8, s20, s10 - s_min_i32 s2, s8, 4 ;.loc 1 39 11 - s_abs_i32 s9, s2 ;.loc 1 131 0 - v_cvt_f32_u32_e32 v000, s9 - s_sub_i32 s16, 0, s9 - s_xor_b32 s3, s7, s2 - s_ashr_i32 s11, s3, 31 - v_rcp_iflag_f32_e32 v000, v000 - s_abs_i32 s3, s7 - v_mul_f32_e32 v000, 0x4f7ffffe, v000 - v_cvt_u32_f32_e32 v000, v000 - s_nop 0 - v_readfirstlane_b32 s17, v000 - s_mul_i32 s16, s16, s17 - s_mul_hi_u32 s16, s17, s16 - s_add_i32 s17, s17, s16 - s_mul_hi_u32 s16, s3, s17 - s_mul_i32 s17, s16, s9 - s_sub_i32 s3, s3, s17 - s_add_i32 s17, s16, 1 - s_sub_i32 s20, s3, s9 - s_cmp_ge_u32 s3, s9 - s_cselect_b32 s16, s17, s16 - s_cselect_b32 s3, s20, s3 - s_add_i32 s17, s16, 1 - s_cmp_ge_u32 s3, s9 - s_cselect_b32 s3, s17, s16 - s_xor_b32 s16, s3, s11 - s_sub_i32 s3, s16, s11 - s_mul_i32 s17, s2, s3 - s_cmp_lg_u32 s7, s17 - s_cselect_b64 s[2:3], -1, 0 - s_xor_b32 s8, s8, s7 - s_cmp_lt_i32 s8, 0 - s_cselect_b64 s[8:9], -1, 0 - s_and_b64 s[2:3], s[8:9], s[2:3] - s_subb_u32 s11, s16, s11 - s_sub_i32 s2, s7, s17 - s_add_i32 s10, s10, s2 - s_cmpk_lt_i32 s21, 0x401 - s_cselect_b64 s[2:3], -1, 0 - s_and_b32 s7, s21, 7 - s_cselect_b64 s[8:9], -1, 0 - v_lshrrev_b32_e32 v000, 3, v009 ;.loc 1 289 0 - s_or_b64 s[2:3], s[2:3], s[8:9] ;.loc 1 131 0 - v_and_or_b32 v000, v000, 7, v001 ;.loc 1 289 0 - s_and_b64 s[2:3], s[2:3], exec ;.loc 1 66 12 - v_lshlrev_b32_e32 v001, 3, v000 ;.loc 1 289 0 - s_cselect_b32 s2, s18, s10 ;.loc 1 66 12 - s_cselect_b32 s7, s19, s11 ;.loc 1 66 55 is_stmt 0 - s_mov_b32 s8, s28 ;.loc 2 159 14 is_stmt 1 - s_bfe_u32 s28, s0, 0xa0006 ;.loc 1 289 0 - v_bitop3_b32 v001, v001, s59, v006 bitop3:0x48 - v_lshlrev_b32_e32 v002, 14, v000 - v_or_b32_e32 v003, v001, v002 - s_lshl_b32 s39, s28, 10 - v_lshl_add_u32 v002, s28, 18, v002 - v_lshl_add_u32 v004, v000, 7, s39 - v_or_b32_e32 v002, v002, v001 - v_mad_u64_u32 v000 v001, s[0:1], s28, 24, v000 v001 - v_lshrrev_b32_e32 v007, 4, v004 - v_lshlrev_b32_e32 v001, 3, v000 - v_xor_b32_e32 v007, v007, v006 - v_lshlrev_b32_e32 v004, 7, v004 - v_xor_b32_e32 v001, v001, v006 - s_mov_b32 s16, s30 ;.loc 2 159 14 - .file 3 "/root/FlyDSL/kernels" "fp8_gemm_utils.py" - v_readfirstlane_b32 s30, v005 ;.loc 3 89 12 - v_add_u32_e32 v006, s39, v005 ;.loc 1 299 0 - s_lshl_b32 s3, s2, 8 ;.loc 1 137 0 - s_lshl_b32 s33, s2, 22 - s_lshl_b32 s2, s7, 8 ;.loc 1 140 0 - s_lshl_b32 s36, s7, 22 - s_and_b32 s5, s5, 0xffff ;.loc 2 159 14 - s_mov_b32 s7, 0x27000 - s_and_b32 s9, s29, 0xffff - v_and_or_b32 v004, v007, s59, v004 ;.loc 1 289 0 - s_mov_b32 m0, s30 ;.loc 3 89 12 - v_readfirstlane_b32 s29, v006 - v_lshl_add_u32 v007, s28, 11, v005 ;.loc 1 299 0 - v_lshlrev_b32_e32 v000, 14, v000 ;.loc 1 289 0 - buffer_load_dwordx4 v003, s[4:7], s33 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s29 - v_readfirstlane_b32 s28, v007 - v_add_u32_e32 v008, s39, v007 ;.loc 1 299 0 - v_and_or_b32 v001, v001, s59, v000 ;.loc 1 289 0 - s_and_b32 s25, s15, 0xffff ;.loc 2 159 14 - buffer_load_dwordx4 v004, s[4:7], s33 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s28 - v_readfirstlane_b32 s15, v008 - v_or_b32_e32 v000, 0x10000, v005 ;.loc 1 300 0 - buffer_load_dwordx4 v002, s[4:7], s33 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s15 - v_readfirstlane_b32 s14, v000 - v_add_u32_e32 v000, 0x10000, v006 ;.loc 1 300 0 - s_brev_b32 s10, 16 - s_mov_b32 s11, s7 ;.loc 2 159 14 - s_and_b32 s21, s13, 0xffff - buffer_load_dwordx4 v001, s[4:7], s33 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s14 - v_readfirstlane_b32 s13, v000 - v_add_u32_e32 v000, 0x10000, v007 ;.loc 1 300 0 - s_mov_b32 s20, s12 ;.loc 2 159 14 - buffer_load_dwordx4 v003, s[8:11], s36 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s13 - v_readfirstlane_b32 s12, v000 - v_add_u32_e32 v000, 0x10000, v008 ;.loc 1 300 0 - buffer_load_dwordx4 v004, s[8:11], s36 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s12 - v_readfirstlane_b32 s1, v000 - v_or_b32_e32 v000, 0x14000, v005 ;.loc 1 301 0 - buffer_load_dwordx4 v002, s[8:11], s36 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s1 - v_readfirstlane_b32 s50, v000 - v_add_u32_e32 v000, 0x14000, v006 ;.loc 1 301 0 - s_or_b32 s38, s36, 0x200000 ;.loc 1 141 0 - buffer_load_dwordx4 v001, s[8:11], s36 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s50 - v_readfirstlane_b32 s49, v000 - v_add_u32_e32 v000, 0x14000, v007 ;.loc 1 301 0 - buffer_load_dwordx4 v003, s[8:11], s38 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s49 - v_readfirstlane_b32 s48, v000 - v_add_u32_e32 v000, 0x14000, v008 ;.loc 1 301 0 - buffer_load_dwordx4 v004, s[8:11], s38 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s48 - v_readfirstlane_b32 s47, v000 - v_or_b32_e32 v000, 0x4000, v005 ;.loc 1 302 0 - buffer_load_dwordx4 v002, s[8:11], s38 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s47 - v_readfirstlane_b32 s46, v000 - v_add_u32_e32 v000, 0x4000, v006 ;.loc 1 302 0 - s_or_b32 s37, s33, 0x200000 ;.loc 1 138 0 - buffer_load_dwordx4 v001, s[8:11], s38 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s46 - v_readfirstlane_b32 s45, v000 - v_add_u32_e32 v000, 0x4000, v007 ;.loc 1 302 0 - buffer_load_dwordx4 v003, s[4:7], s37 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s45 - v_readfirstlane_b32 s44, v000 - v_add_u32_e32 v000, 0x4000, v008 ;.loc 1 302 0 - buffer_load_dwordx4 v004, s[4:7], s37 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s44 - v_readfirstlane_b32 s43, v000 - v_or_b32_e32 v000, 0x8000, v005 ;.loc 1 304 0 - buffer_load_dwordx4 v002, s[4:7], s37 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s43 - v_readfirstlane_b32 s42, v000 - v_add_u32_e32 v000, 0x8000, v006 ;.loc 1 304 0 - s_and_b32 s17, s31, 0xffff ;.loc 2 159 14 - buffer_load_dwordx4 v001, s[4:7], s37 offen lds ;.loc 3 89 12 - s_or_b32 s31, s33, 0x80 ;.loc 1 304 0 - s_mov_b32 m0, s42 ;.loc 3 89 12 - v_readfirstlane_b32 s40, v000 - v_add_u32_e32 v000, 0x8000, v007 ;.loc 1 304 0 - buffer_load_dwordx4 v003, s[4:7], s31 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s40 - v_readfirstlane_b32 s39, v000 - v_add_u32_e32 v000, 0x8000, v008 ;.loc 1 304 0 - buffer_load_dwordx4 v004, s[4:7], s31 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s39 - v_readfirstlane_b32 s41, v000 - v_or_b32_e32 v000, 0x18000, v005 ;.loc 1 305 0 - buffer_load_dwordx4 v002, s[4:7], s31 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s41 - v_readfirstlane_b32 s38, v000 - v_add_u32_e32 v000, 0x18000, v006 ;.loc 1 305 0 - s_mul_i32 s0, s35, s34 ;.loc 1 296 0 - s_lshl_b32 s22, s34, 2 - buffer_load_dwordx4 v001, s[4:7], s31 offen lds ;.loc 3 89 12 - s_or_b32 s51, s36, 0x80 ;.loc 1 305 0 - s_mov_b32 m0, s38 ;.loc 3 89 12 - v_readfirstlane_b32 s34, v000 - v_add_u32_e32 v000, 0x18000, v007 ;.loc 1 305 0 - buffer_load_dwordx4 v003, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s34 - v_readfirstlane_b32 s37, v000 - v_add_u32_e32 v000, 0x18000, v008 ;.loc 1 305 0 - buffer_load_dwordx4 v004, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s37 - v_readfirstlane_b32 s31, v000 - v_or_b32_e32 v000, 0x1c000, v005 ;.loc 1 306 0 - buffer_load_dwordx4 v002, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s31 - v_readfirstlane_b32 s58, v000 - v_add_u32_e32 v000, 0x1c000, v006 ;.loc 1 306 0 - buffer_load_dwordx4 v001, s[8:11], s51 offen lds ;.loc 3 89 12 - s_or_b32 s51, s36, 0x200080 ;.loc 1 306 0 - s_mov_b32 m0, s58 ;.loc 3 89 12 - v_readfirstlane_b32 s57, v000 - v_add_u32_e32 v000, 0x1c000, v007 ;.loc 1 306 0 - buffer_load_dwordx4 v003, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s57 - v_readfirstlane_b32 s56, v000 - v_add_u32_e32 v000, 0x1c000, v008 ;.loc 1 306 0 - buffer_load_dwordx4 v004, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s56 - v_readfirstlane_b32 s55, v000 - v_or_b32_e32 v000, 0xc000, v005 ;.loc 1 307 0 - buffer_load_dwordx4 v002, s[8:11], s51 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s55 - v_readfirstlane_b32 s54, v000 - v_add_u32_e32 v000, 0xc000, v006 ;.loc 1 307 0 - buffer_load_dwordx4 v001, s[8:11], s51 offen lds ;.loc 3 89 12 - s_or_b32 s60, s33, 0x200080 ;.loc 1 307 0 - s_mov_b32 m0, s54 ;.loc 3 89 12 - v_readfirstlane_b32 s53, v000 - v_add_u32_e32 v000, 0xc000, v007 ;.loc 1 307 0 - buffer_load_dwordx4 v003, s[4:7], s60 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s53 - v_readfirstlane_b32 s52, v000 - v_add_u32_e32 v000, 0xc000, v008 ;.loc 1 307 0 - buffer_load_dwordx4 v004, s[4:7], s60 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s52 - v_readfirstlane_b32 s51, v000 - v_lshrrev_b32_e32 v000, 1, v009 ;.loc 1 311 0 - buffer_load_dwordx4 v002, s[4:7], s60 offen lds ;.loc 3 89 12 - s_mov_b32 m0, s51 - v_and_b32_e32 v000, 64, v000 ;.loc 1 311 0 - v_and_b32_e32 v005, 15, v009 - buffer_load_dwordx4 v001, s[4:7], s60 offen lds ;.loc 3 89 12 - s_waitcnt vmcnt(28) ;.loc 1 309 0 -s_barrier - scratch_store_dword off, v000, off offset:40 ;.loc 1 311 0 - scratch_store_dword off, v005, off offset:36 - v_or_b32_e32 v000, v000, v005 - v_and_b32_e32 v006, 48, v009 - v_lshlrev_b32_e32 v005, 3, v009 - v_and_b32_e32 v007, 0x70, v005 - v_lshlrev_b32_e32 v000, 7, v000 - v_or_b32_e32 v009, 64, v006 - v_bitop3_b32 v008, v005, v006, s59 bitop3:0x6c - v_bitop3_b32 v005, v000, v007, v006 bitop3:0xf6 - v_bitop3_b32 v010, v006, v007, 64 bitop3:0x36 - v_bitop3_b32 v006, v000, v009, v007 bitop3:0xf6 - v_and_b32_e32 v000, 64, v011 ;.loc 1 315 0 - .file 4 "/root/FlyDSL/python/flydsl/expr" "typing.py" - ds_read_b128 v012 v013 v014 v015, v005 ;.loc 4 920 22 - ds_read_b128 v016 v017 v018 v019, v006 - ds_read_b128 v020 v021 v022 v023, v005 offset:2048 - ds_read_b128 v024 v025 v026 v027, v006 offset:2048 - ds_read_b128 v098 v099 v100 v101, v005 offset:4096 - ds_read_b128 v102 v103 v104 v105, v006 offset:4096 - ds_read_b128 v106 v107 v108 v109, v005 offset:6144 - ds_read_b128 v110 v111 v112 v113, v006 offset:6144 - s_waitcnt vmcnt(24) ;.loc 1 313 0 -s_barrier - scratch_store_dword off, v000, off offset:44 - v_lshlrev_b32_e32 v000, 7, v011 ;.loc 1 315 0 - v_and_b32_e32 v000, 0x2780, v000 - v_or_b32_e32 v007, v008, v000 - v_or_b32_e32 v008, 0x10000, v007 ;.loc 3 110 18 - v_or_b32_e32 v000, v010, v000 ;.loc 1 315 0 - ds_read_b128 v114 v115 v116 v117, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a37, v008 - v_or_b32_e32 v008, 0x10000, v000 ;.loc 3 110 18 - ds_read_b128 v118 v119 v120 v121, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a36, v008 - v_or_b32_e32 v008, 0x10800, v007 ;.loc 3 110 18 - ds_read_b128 v122 v123 v124 v125, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a108, v008 - v_or_b32_e32 v008, 0x10800, v000 ;.loc 3 110 18 - ds_read_b128 v126 v127 v128 v129, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a109, v008 - v_or_b32_e32 v008, 0x11800, v007 ;.loc 3 110 18 - v_or_b32_e32 v246, 0x11000, v007 - v_or_b32_e32 v247, 0x11000, v000 - ds_read_b128 v138 v139 v140 v141, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a78, v008 - v_or_b32_e32 v008, 0x11800, v000 ;.loc 3 110 18 - s_or_b32 s59, s33, 0x100 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - scratch_store_dword off, v011, off offset:48 ;.loc 1 315 0 - ds_read_b128 v130 v131 v132 v133, v246 ;.loc 4 920 22 - ds_read_b128 v134 v135 v136 v137, v247 - ds_read_b128 v142 v143 v144 v145, v008 - v_accvgpr_write_b32 a140, v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x14000, v007 ;.loc 3 110 18 - ds_read_b128 v146 v147 v148 v149, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a149, v008 - v_or_b32_e32 v008, 0x14000, v000 ;.loc 3 110 18 - s_mov_b32 m0, s29 ;.loc 3 94 8 - ds_read_b128 v150 v151 v152 v153, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a255, v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x14800, v007 ;.loc 3 110 18 - scratch_store_dword off, v008, off offset:52 ;.loc 4 920 22 - ds_read_b128 v154 v155 v156 v157, v008 - v_or_b32_e32 v008, 0x14800, v000 ;.loc 3 110 18 - s_mov_b32 m0, s28 ;.loc 3 94 8 - ds_read_b128 v158 v159 v160 v161, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a79, v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x15000, v007 ;.loc 3 110 18 - ds_read_b128 v162 v163 v164 v165, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a141, v008 - v_or_b32_e32 v008, 0x15000, v000 ;.loc 3 110 18 - s_mov_b32 m0, s15 ;.loc 3 94 8 - ds_read_b128 v166 v167 v168 v169, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a147, v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x15800, v007 ;.loc 3 110 18 - ds_read_b128 v170 v171 v172 v173, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a146, v008 - v_or_b32_e32 v008, 0x15800, v000 ;.loc 3 110 18 - ds_read_b128 v174 v175 v176 v177, v008 ;.loc 4 920 22 - s_or_b32 s59, s36, 0x100 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], v012 v013 v014 v015 v016 v017 v018 v019, v114 v115 v116 v117 v118 v119 v120 v121, 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - ds_read_b128 v178 v179 v180 v181, v005 offset:16384 ;.loc 4 920 22 - ds_read_b128 v182 v183 v184 v185, v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - v_accvgpr_write_b32 a148, v008 - s_waitcnt lgkmcnt(14) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], v012 v013 v014 v015 v016 v017 v018 v019, v122 v123 v124 v125 v126 v127 v128 v129, 0 - ds_read_b128 v008 v009 v010 v011, v005 offset:18432 ;.loc 4 920 22 - v_or_b32_e32 v032, 0x18000, v007 ;.loc 3 110 18 - v_accvgpr_write_b32 a139, v032 - s_lshl_b32 s26, s35, 2 ;.loc 1 296 0 - s_mov_b32 s23, s7 ;.loc 2 159 14 - s_mov_b32 s27, s7 - s_lshl_b32 s18, s0, 1 ;.loc 1 296 0 - s_waitcnt lgkmcnt(12) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[238:241], v012 v013 v014 v015 v016 v017 v018 v019, v130 v131 v132 v133 v134 v135 v136 v137, 0 - s_mov_b32 s19, s7 ;.loc 2 159 14 - s_waitcnt lgkmcnt(11) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[242:245], v012 v013 v014 v015 v016 v017 v018 v019, v138 v139 v140 v141 v142 v143 v144 v145, 0 - s_waitcnt lgkmcnt(9) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v012 v013 v014 v015 v016 v017 v018 v019, v146 v147 v148 v149 v150 v151 v152 v153, 0 - s_waitcnt lgkmcnt(7) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v234 v235 v236 v237, v012 v013 v014 v015 v016 v017 v018 v019, v154 v155 v156 v157 v158 v159 v160 v161, 0 - s_waitcnt lgkmcnt(5) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v238 v239 v240 v241, v012 v013 v014 v015 v016 v017 v018 v019, v162 v163 v164 v165 v166 v167 v168 v169, 0 - s_waitcnt lgkmcnt(3) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v012 v013 v014 v015 v016 v017 v018 v019, v170 v171 v172 v173 v174 v175 v176 v177, 0 - ds_read_b128 v012 v013 v014 v015, v006 offset:18432 ;.loc 4 920 22 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 v016 v017 v018 v019, v005 offset:20480 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[246:249], v020 v021 v022 v023 v024 v025 v026 v027, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[250:253], v020 v021 v022 v023 v024 v025 v026 v027, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[126:129], v020 v021 v022 v023 v024 v025 v026 v027, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[80:83], v020 v021 v022 v023 v024 v025 v026 v027, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[4:7], v020 v021 v022 v023 v024 v025 v026 v027, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[8:11], v020 v021 v022 v023 v024 v025 v026 v027, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[12:15], v020 v021 v022 v023 v024 v025 v026 v027, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[16:19], v020 v021 v022 v023 v024 v025 v026 v027, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 203 0 - ds_read_b128 v020 v021 v022 v023, v006 offset:20480 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 v024 v025 v026 v027, v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 v028 v029 v030 v031, v006 offset:22528 - s_or_b32 s59, s36, 0x200100 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[84:87], v098 v099 v100 v101 v102 v103 v104 v105, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 208 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 a[104:107], v098 v099 v100 v101 v102 v103 v104 v105, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 a[142:145], v098 v099 v100 v101 v102 v103 v104 v105, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 a[88:91], v098 v099 v100 v101 v102 v103 v104 v105, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[20:23], v098 v099 v100 v101 v102 v103 v104 v105, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 a[24:27], v098 v099 v100 v101 v102 v103 v104 v105, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 a[28:31], v098 v099 v100 v101 v102 v103 v104 v105, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 a[32:35], v098 v099 v100 v101 v102 v103 v104 v105, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 215 0 - ds_read_b128 v098 v099 v100 v101, v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 v102 v103 v104 v105, v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 v082 v083 v084 v085, v106 v107 v108 v109 v110 v111 v112 v113, v114 v115 v116 v117 v118 v119 v120 v121, 0 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 a[92:95], v106 v107 v108 v109 v110 v111 v112 v113, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 a[96:99], v106 v107 v108 v109 v110 v111 v112 v113, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[100:103], v106 v107 v108 v109 v110 v111 v112 v113, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[38:41], v106 v107 v108 v109 v110 v111 v112 v113, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 a[42:45], v106 v107 v108 v109 v110 v111 v112 v113, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 a[46:49], v106 v107 v108 v109 v110 v111 v112 v113, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[50:53], v106 v107 v108 v109 v110 v111 v112 v113, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 227 0 - ds_read_b128 v106 v107 v108 v109, v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 v110 v111 v112 v113, v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - ds_read_b128 v186 v187 v188 v189, v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 v190 v191 v192 v193, v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200100 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - ds_read_b128 v194 v195 v196 v197, v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 v198 v199 v200 v201, v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 a[54:57], v178 v179 v180 v181 v182 v183 v184 v185, v114 v115 v116 v117 v118 v119 v120 v121, 0 - s_mov_b32 m0, s45 ;.loc 3 94 8 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[58:61], v008 v009 v010 v011 v012 v013 v014 v015, v114 v115 v116 v117 v118 v119 v120 v121, 0 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 a[110:113], v016 v017 v018 v019 v020 v021 v022 v023, v114 v115 v116 v117 v118 v119 v120 v121, 0 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 a[150:153], v024 v025 v026 v027 v028 v029 v030 v031, v114 v115 v116 v117 v118 v119 v120 v121, 0 - ds_read_b128 v116 v117 v118 v119, v032 ;.loc 4 920 22 - v_or_b32_e32 v032, 0x18000, v000 ;.loc 3 110 18 - v_accvgpr_write_b32 a137, v032 - v_mfma_f32_16x16x128_f8f6f4 a[62:65], v178 v179 v180 v181 v182 v183 v184 v185, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[74:77], v008 v009 v010 v011 v012 v013 v014 v015, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[114:117], v016 v017 v018 v019 v020 v021 v022 v023, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], v024 v025 v026 v027 v028 v029 v030 v031, v122 v123 v124 v125 v126 v127 v128 v129, 0 ;.loc 1 221 0 - ds_read_b128 v120 v121 v122 v123, v032 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v032, 0x18800, v007 ;.loc 3 110 18 - ds_read_b128 v124 v125 v126 v127, v032 ;.loc 4 920 22 - v_accvgpr_write_b32 a138, v032 - v_or_b32_e32 v032, 0x18800, v000 ;.loc 3 110 18 - s_mov_b32 m0, s44 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[66:69], v178 v179 v180 v181 v182 v183 v184 v185, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 186 0 - scratch_store_dword off, v032, off ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v242 v243 v244 v245, v008 v009 v010 v011 v012 v013 v014 v015, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, v008 v009 v010 v011 v012 v013 v014 v015, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[118:121], v016 v017 v018 v019 v020 v021 v022 v023, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], v024 v025 v026 v027 v028 v029 v030 v031, v130 v131 v132 v133 v134 v135 v136 v137, 0 ;.loc 1 226 0 - ds_read_b128 v128 v129 v130 v131, v032 ;.loc 4 920 22 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], v008 v009 v010 v011 v012 v013 v014 v015, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], v008 v009 v010 v011 v012 v013 v014 v015, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], v008 v009 v010 v011 v012 v013 v014 v015, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], v008 v009 v010 v011 v012 v013 v014 v015, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 203 0 - v_or_b32_e32 v008, 0x19000, v007 ;.loc 3 110 18 - ds_read_b128 v132 v133 v134 v135, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a131, v008 - v_or_b32_e32 v008, 0x19000, v000 ;.loc 3 110 18 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 a[70:73], v178 v179 v180 v181 v182 v183 v184 v185, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[122:125], v016 v017 v018 v019 v020 v021 v022 v023, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], v024 v025 v026 v027 v028 v029 v030 v031, v138 v139 v140 v141 v142 v143 v144 v145, 0 ;.loc 1 227 0 - ds_read_b128 v136 v137 v138 v139, v008 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x19800, v007 ;.loc 3 110 18 - scratch_store_dword off, v008, off offset:12 ;.loc 4 920 22 - ds_read_b128 v140 v141 v142 v143, v008 - v_or_b32_e32 v008, 0x19800, v000 ;.loc 3 110 18 - s_or_b32 s59, s33, 0x180 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], v178 v179 v180 v181 v182 v183 v184 v185, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 179 0 - scratch_store_dword off, v008, off offset:16 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], v016 v017 v018 v019 v020 v021 v022 v023, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], v024 v025 v026 v027 v028 v029 v030 v031, v146 v147 v148 v149 v150 v151 v152 v153, 0 ;.loc 1 220 0 - ds_read_b128 v144 v145 v146 v147, v008 ;.loc 4 920 22 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x1c000, v007 ;.loc 3 110 18 - ds_read_b128 v202 v203 v204 v205, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a133, v008 - v_or_b32_e32 v008, 0x1c000, v000 ;.loc 3 110 18 - s_mov_b32 m0, s40 ;.loc 3 94 8 - scratch_store_dword off, v008, off offset:4 ;.loc 4 920 22 - ds_read_b128 v206 v207 v208 v209, v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x1c800, v007 ;.loc 3 110 18 - ds_read_b128 v210 v211 v212 v213, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a134, v008 - v_or_b32_e32 v008, 0x1c800, v000 ;.loc 3 110 18 - s_mov_b32 m0, s39 ;.loc 3 94 8 - scratch_store_dword off, v008, off offset:8 ;.loc 4 920 22 - ds_read_b128 v214 v215 v216 v217, v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v008, 0x1d000, v007 ;.loc 3 110 18 - ds_read_b128 v218 v219 v220 v221, v008 ;.loc 4 920 22 - v_accvgpr_write_b32 a135, v008 - v_or_b32_e32 v008, 0x1d000, v000 ;.loc 3 110 18 - s_mov_b32 m0, s41 ;.loc 3 94 8 - ds_read_b128 v222 v223 v224 v225, v008 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_or_b32_e32 v007, 0x1d800, v007 ;.loc 3 110 18 - v_or_b32_e32 v000, 0x1d800, v000 - ds_read_b128 v226 v227 v228 v229, v007 ;.loc 4 920 22 - ds_read_b128 v230 v231 v232 v233, v000 - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v098 v099 v100 v101 v102 v103 v104 v105, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] - s_or_b32 s59, s36, 0x180 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_write_b32 a254, v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds - s_mov_b32 m0, s34 - ds_read_b128 v148 v149 v150 v151, v005 offset:49152 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a36 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], v024 v025 v026 v027 v028 v029 v030 v031, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 221 0 - v_accvgpr_write_b32 a130, v008 - v_accvgpr_read_b32 v008, a150 - v_accvgpr_write_b32 a136, v000 - v_accvgpr_read_b32 v009, a151 - v_accvgpr_read_b32 v010, a152 - v_accvgpr_read_b32 v011, a153 - v_accvgpr_read_b32 v000, a140 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], v024 v025 v026 v027 v028 v029 v030 v031, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], v024 v025 v026 v027 v028 v029 v030 v031, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 227 0 - v_accvgpr_read_b32 v027, a3 - v_accvgpr_read_b32 v026, a2 - v_accvgpr_read_b32 v025, a1 - v_accvgpr_read_b32 v024, a0 - v_accvgpr_mov_b32 a0, a4 - v_accvgpr_mov_b32 a1, a5 - v_accvgpr_mov_b32 a2, a6 - v_accvgpr_mov_b32 a3, a7 - v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v194 v195 v196 v197 v198 v199 v200 v201, v116 v117 v118 v119 v120 v121 v122 v123, v082 v083 v084 v085 ;.loc 1 220 0 - v_accvgpr_mov_b32 a4, a66 - v_accvgpr_mov_b32 a5, a67 - v_accvgpr_mov_b32 a6, a68 - v_accvgpr_mov_b32 a7, a69 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], v178 v179 v180 v181 v182 v183 v184 v185, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 180 0 - s_nop 10 - v_accvgpr_read_b32 v087, a3 - v_accvgpr_read_b32 v086, a2 - v_accvgpr_read_b32 v085, a1 - v_accvgpr_read_b32 v084, a0 - v_accvgpr_mov_b32 a0, a8 - v_accvgpr_mov_b32 a1, a9 - v_accvgpr_mov_b32 a2, a10 - v_accvgpr_mov_b32 a3, a11 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], v016 v017 v018 v019 v020 v021 v022 v023, v154 v155 v156 v157 v158 v159 v160 v161, 0 ;.loc 1 209 0 - ds_read_b128 v152 v153 v154 v155, v006 offset:49152 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - v_accvgpr_mov_b32 a8, a70 - v_accvgpr_mov_b32 a9, a71 - v_accvgpr_mov_b32 a10, a72 - v_accvgpr_mov_b32 a11, a73 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], v016 v017 v018 v019 v020 v021 v022 v023, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 214 0 - s_nop 10 - v_accvgpr_read_b32 v031, a3 - v_accvgpr_read_b32 v030, a2 - v_accvgpr_read_b32 v029, a1 - v_accvgpr_read_b32 v028, a0 - v_accvgpr_mov_b32 a0, a12 - v_accvgpr_mov_b32 a1, a13 - v_accvgpr_mov_b32 a2, a14 - v_accvgpr_mov_b32 a3, a15 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], v016 v017 v018 v019 v020 v021 v022 v023, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 215 0 - v_accvgpr_mov_b32 a12, a58 - v_accvgpr_mov_b32 a13, a59 - v_accvgpr_mov_b32 a14, a60 - v_accvgpr_mov_b32 a15, a61 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], v098 v099 v100 v101 v102 v103 v104 v105, v116 v117 v118 v119 v120 v121 v122 v123, a[230:233] ;.loc 1 179 0 - s_nop 10 - v_accvgpr_read_b32 v159, a3 - v_accvgpr_read_b32 v158, a2 - v_accvgpr_read_b32 v157, a1 - v_accvgpr_read_b32 v156, a0 - v_accvgpr_mov_b32 a0, a16 - v_accvgpr_mov_b32 a1, a17 - v_accvgpr_mov_b32 a2, a18 - v_accvgpr_mov_b32 a3, a19 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], v098 v099 v100 v101 v102 v103 v104 v105, v124 v125 v126 v127 v128 v129 v130 v131, a[234:237] ;.loc 1 180 0 - s_nop 0 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v106 v107 v108 v109 v110 v111 v112 v113, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] - v_mfma_f32_16x16x128_f8f6f4 a[238:241], v098 v099 v100 v101 v102 v103 v104 v105, v132 v133 v134 v135 v136 v137 v138 v139, a[238:241] ;.loc 1 186 0 - s_nop 10 - v_accvgpr_read_b32 v035, a3 - v_accvgpr_read_b32 v034, a2 - v_accvgpr_read_b32 v033, a1 - v_accvgpr_read_b32 v032, a0 - v_accvgpr_mov_b32 a0, a20 - v_accvgpr_mov_b32 a1, a21 - v_accvgpr_mov_b32 a2, a22 - v_accvgpr_mov_b32 a3, a23 - v_mfma_f32_16x16x128_f8f6f4 a[242:245], v098 v099 v100 v101 v102 v103 v104 v105, v140 v141 v142 v143 v144 v145 v146 v147, a[242:245] ;.loc 1 191 0 - v_accvgpr_mov_b32 a20, a110 - v_accvgpr_mov_b32 a21, a111 - v_accvgpr_mov_b32 a22, a112 - v_accvgpr_mov_b32 a23, a113 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v098 v099 v100 v101 v102 v103 v104 v105, v202 v203 v204 v205 v206 v207 v208 v209, v248 v249 v250 v251 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v098 v099 v100 v101 v102 v103 v104 v105, v210 v211 v212 v213 v214 v215 v216 v217, v234 v235 v236 v237 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, v098 v099 v100 v101 v102 v103 v104 v105, v218 v219 v220 v221 v222 v223 v224 v225, v238 v239 v240 v241 ;.loc 1 186 0 - s_nop 8 - v_accvgpr_read_b32 v099, a3 - v_accvgpr_read_b32 v098, a2 - v_accvgpr_read_b32 v097, a1 - v_accvgpr_read_b32 v096, a0 - v_accvgpr_mov_b32 a0, a24 - v_accvgpr_mov_b32 a1, a25 - v_accvgpr_mov_b32 a2, a26 - v_accvgpr_mov_b32 a3, a27 - v_mfma_f32_16x16x128_f8f6f4 a[246:249], v106 v107 v108 v109 v110 v111 v112 v113, v116 v117 v118 v119 v120 v121 v122 v123, a[246:249] ;.loc 1 196 0 - v_accvgpr_mov_b32 a24, a118 - v_accvgpr_mov_b32 a25, a119 - v_accvgpr_mov_b32 a26, a120 - v_accvgpr_mov_b32 a27, a121 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 a[250:253], v106 v107 v108 v109 v110 v111 v112 v113, v124 v125 v126 v127 v128 v129 v130 v131, a[250:253] ;.loc 1 197 0 - s_nop 10 - v_accvgpr_read_b32 v039, a3 - v_accvgpr_read_b32 v038, a2 - v_accvgpr_read_b32 v037, a1 - v_accvgpr_read_b32 v036, a0 - v_accvgpr_mov_b32 a0, a28 - v_accvgpr_mov_b32 a1, a29 - v_accvgpr_mov_b32 a2, a30 - v_accvgpr_mov_b32 a3, a31 - v_mfma_f32_16x16x128_f8f6f4 a[126:129], v106 v107 v108 v109 v110 v111 v112 v113, v132 v133 v134 v135 v136 v137 v138 v139, a[126:129] ;.loc 1 202 0 - s_nop 0 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] - v_mfma_f32_16x16x128_f8f6f4 a[80:83], v106 v107 v108 v109 v110 v111 v112 v113, v140 v141 v142 v143 v144 v145 v146 v147, a[80:83] ;.loc 1 203 0 - s_nop 10 - v_accvgpr_read_b32 v083, a3 - v_accvgpr_read_b32 v082, a2 - v_accvgpr_read_b32 v081, a1 - v_accvgpr_read_b32 v080, a0 - v_accvgpr_mov_b32 a0, a32 - v_accvgpr_mov_b32 a1, a33 - v_accvgpr_mov_b32 a2, a34 - v_accvgpr_mov_b32 a3, a35 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], v178 v179 v180 v181 v182 v183 v184 v185, v162 v163 v164 v165 v166 v167 v168 v169, 0 ;.loc 1 186 0 - ds_read_b128 v160 v161 v162 v163, v005 offset:51200 ;.loc 4 920 22 - ds_read_b128 v164 v165 v166 v167, v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v186 v187 v188 v189 v190 v191 v192 v193, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], v178 v179 v180 v181 v182 v183 v184 v185, v170 v171 v172 v173 v174 v175 v176 v177, 0 ;.loc 1 191 0 - ds_read_b128 v176 v177 v178 v179, v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 v180 v181 v182 v183, v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x200180 ;.loc 1 345 0 - s_nop 6 - v_accvgpr_read_b32 v043, a3 - v_accvgpr_read_b32 v042, a2 - v_accvgpr_read_b32 v041, a1 - v_accvgpr_read_b32 v040, a0 - v_accvgpr_mov_b32 a0, a38 - v_accvgpr_mov_b32 a1, a39 - v_accvgpr_mov_b32 a2, a40 - v_accvgpr_mov_b32 a3, a41 - s_waitcnt lgkmcnt(2) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[12:15], v160 v161 v162 v163 v164 v165 v166 v167, v116 v117 v118 v119 v120 v121 v122 v123, a[12:15] - s_mov_b32 m0, s58 ;.loc 3 94 8 - ds_read_b128 v234 v235 v236 v237, v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 v238 v239 v240 v241, v006 offset:55296 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v202 v203 v204 v205 v206 v207 v208 v209, a[0:3] ;.loc 1 220 0 - s_nop 5 - v_accvgpr_read_b32 v095, a15 - v_accvgpr_read_b32 v094, a14 - s_waitcnt lgkmcnt(2) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 a[20:23], v176 v177 v178 v179 v180 v181 v182 v183, v116 v117 v118 v119 v120 v121 v122 v123, a[20:23] - v_accvgpr_read_b32 v093, a13 - v_accvgpr_read_b32 v092, a12 - v_accvgpr_mov_b32 a12, a74 - v_accvgpr_mov_b32 a13, a75 - v_accvgpr_read_b32 v091, a3 - v_accvgpr_read_b32 v090, a2 - v_accvgpr_read_b32 v089, a1 - v_accvgpr_read_b32 v088, a0 - v_accvgpr_mov_b32 a0, a42 - v_accvgpr_mov_b32 a1, a43 - v_accvgpr_mov_b32 a2, a44 - v_accvgpr_mov_b32 a3, a45 - v_accvgpr_read_b32 v111, a23 - v_mfma_f32_16x16x128_f8f6f4 a[4:7], v148 v149 v150 v151 v152 v153 v154 v155, v132 v133 v134 v135 v136 v137 v138 v139, a[4:7] ;.loc 1 186 0 - v_accvgpr_mov_b32 a14, a76 - v_accvgpr_mov_b32 a15, a77 - v_accvgpr_read_b32 v110, a22 - v_accvgpr_read_b32 v109, a21 - v_accvgpr_read_b32 v108, a20 - v_accvgpr_mov_b32 a20, a114 - v_accvgpr_mov_b32 a21, a115 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v210 v211 v212 v213 v214 v215 v216 v217, a[0:3] ;.loc 1 221 0 - v_accvgpr_mov_b32 a22, a116 - v_accvgpr_mov_b32 a23, a117 - v_accvgpr_mov_b32 a72, a242 - v_accvgpr_mov_b32 a73, a243 - v_accvgpr_read_b32 v059, a7 - v_accvgpr_read_b32 v058, a6 - v_accvgpr_read_b32 v057, a5 - v_mfma_f32_16x16x128_f8f6f4 a[8:11], v148 v149 v150 v151 v152 v153 v154 v155, v140 v141 v142 v143 v144 v145 v146 v147, a[8:11] ;.loc 1 191 0 - v_accvgpr_read_b32 v056, a4 - ds_read_b128 a[4:7], v006 ;.loc 4 920 22 - v_accvgpr_mov_b32 a74, a244 - v_accvgpr_mov_b32 a75, a245 - v_accvgpr_read_b32 v047, a3 - v_accvgpr_read_b32 v046, a2 - v_accvgpr_read_b32 v045, a1 - v_accvgpr_read_b32 v044, a0 - v_accvgpr_mov_b32 a0, a46 - v_accvgpr_mov_b32 a1, a47 - v_accvgpr_mov_b32 a2, a48 - v_accvgpr_mov_b32 a3, a49 - v_mfma_f32_16x16x128_f8f6f4 a[12:15], v160 v161 v162 v163 v164 v165 v166 v167, v124 v125 v126 v127 v128 v129 v130 v131, a[12:15] ;.loc 1 197 0 - v_accvgpr_read_b32 v063, a11 - v_accvgpr_read_b32 v062, a10 - v_accvgpr_read_b32 v061, a9 - v_accvgpr_read_b32 v060, a8 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v218 v219 v220 v221 v222 v223 v224 v225, a[0:3] ;.loc 1 226 0 - s_nop 6 - v_accvgpr_read_b32 v067, a15 - v_accvgpr_read_b32 v066, a14 - v_accvgpr_read_b32 v065, a13 - v_mfma_f32_16x16x128_f8f6f4 a[24:27], v176 v177 v178 v179 v180 v181 v182 v183, v132 v133 v134 v135 v136 v137 v138 v139, a[24:27] ;.loc 1 214 0 - v_accvgpr_read_b32 v064, a12 - v_accvgpr_read_b32 v107, a3 - v_accvgpr_read_b32 v106, a2 - v_accvgpr_read_b32 v105, a1 - v_accvgpr_read_b32 v104, a0 - v_accvgpr_mov_b32 a0, a50 - v_accvgpr_mov_b32 a1, a51 - v_accvgpr_mov_b32 a2, a52 - v_accvgpr_mov_b32 a3, a53 - v_mfma_f32_16x16x128_f8f6f4 a[20:23], v176 v177 v178 v179 v180 v181 v182 v183, v124 v125 v126 v127 v128 v129 v130 v131, a[20:23] ;.loc 1 209 0 - s_nop 1 - v_accvgpr_read_b32 v115, a27 - v_accvgpr_read_b32 v114, a26 - v_accvgpr_read_b32 v113, a25 - v_accvgpr_read_b32 v112, a24 - v_accvgpr_mov_b32 a24, a122 - v_accvgpr_mov_b32 a25, a123 - v_accvgpr_mov_b32 a26, a124 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v194 v195 v196 v197 v198 v199 v200 v201, v226 v227 v228 v229 v230 v231 v232 v233, a[0:3] ;.loc 1 227 0 - v_accvgpr_mov_b32 a27, a125 - v_accvgpr_mov_b32 a48, a190 - v_accvgpr_mov_b32 a49, a191 - v_accvgpr_mov_b32 a50, a192 - v_accvgpr_read_b32 v075, a23 - v_accvgpr_read_b32 v074, a22 - v_accvgpr_read_b32 v073, a21 - v_accvgpr_read_b32 v072, a20 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, v160 v161 v162 v163 v164 v165 v166 v167, v140 v141 v142 v143 v144 v145 v146 v147, v252 v253 v254 v255 ;.loc 1 203 0 - v_accvgpr_mov_b32 a51, a193 - v_accvgpr_write_b32 a193, v043 - v_accvgpr_write_b32 a192, v042 - v_accvgpr_read_b32 v051, a3 - v_accvgpr_read_b32 v050, a2 - v_accvgpr_read_b32 v049, a1 - v_accvgpr_read_b32 v048, a0 - v_accvgpr_mov_b32 a0, a54 - v_accvgpr_mov_b32 a1, a55 - v_accvgpr_mov_b32 a2, a56 - v_accvgpr_mov_b32 a3, a57 - v_mfma_f32_16x16x128_f8f6f4 a[120:123], v176 v177 v178 v179 v180 v181 v182 v183, v140 v141 v142 v143 v144 v145 v146 v147, a[24:27] ;.loc 1 215 0 - v_accvgpr_read_b32 v254, a37 - v_accvgpr_read_b32 v253, a108 - v_accvgpr_read_b32 v252, a109 - v_accvgpr_mov_b32 a108, a246 - v_accvgpr_mov_b32 a109, a247 - v_accvgpr_mov_b32 a110, a248 - v_accvgpr_mov_b32 a111, a249 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v148 v149 v150 v151 v152 v153 v154 v155, v116 v117 v118 v119 v120 v121 v122 v123, a[0:3] ;.loc 1 179 0 - v_accvgpr_write_b32 a191, v041 - v_accvgpr_write_b32 a190, v040 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, v160 v161 v162 v163 v164 v165 v166 v167, v132 v133 v134 v135 v136 v137 v138 v139, v242 v243 v244 v245 ;.loc 1 202 0 - s_nop 8 - v_accvgpr_read_b32 v079, a3 - v_accvgpr_read_b32 v078, a2 - v_accvgpr_read_b32 v077, a1 - v_accvgpr_read_b32 v076, a0 - v_accvgpr_mov_b32 a0, a62 - v_accvgpr_mov_b32 a1, a63 - v_accvgpr_mov_b32 a2, a64 - v_accvgpr_mov_b32 a3, a65 - v_mfma_f32_16x16x128_f8f6f4 a[150:153], v160 v161 v162 v163 v164 v165 v166 v167, v218 v219 v220 v221 v222 v223 v224 v225, a[48:51] - v_accvgpr_read_b32 v243, a78 - v_accvgpr_mov_b32 a64, a226 - v_accvgpr_mov_b32 a65, a227 - v_accvgpr_mov_b32 a66, a228 - v_accvgpr_mov_b32 a67, a229 - v_mov_b32_e32 v244, v247 - v_accvgpr_read_b32 v245, a149 - v_mfma_f32_16x16x128_f8f6f4 a[0:3], v148 v149 v150 v151 v152 v153 v154 v155, v124 v125 v126 v127 v128 v129 v130 v131, a[0:3] ;.loc 1 180 0 - v_accvgpr_read_b32 v242, a147 - v_mfma_f32_16x16x128_f8f6f4 a[84:87], v186 v187 v188 v189 v190 v191 v192 v193, v116 v117 v118 v119 v120 v121 v122 v123, a[84:87] ;.loc 1 208 0 - s_nop 9 - v_accvgpr_read_b32 v055, a3 - v_accvgpr_read_b32 v054, a2 - v_accvgpr_read_b32 v053, a1 - v_accvgpr_read_b32 v052, a0 - ds_read_b128 a[0:3], v005 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - ds_read_b128 a[8:11], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[12:15], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - ds_read_b128 a[16:19], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[20:23], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200180 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - ds_read_b128 a[24:27], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[28:31], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - ds_read_b128 a[32:35], v254 ;.loc 4 920 22 - ds_read_b128 a[36:39], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - ds_read_b128 a[40:43], v253 ;.loc 4 920 22 - ds_read_b128 a[44:47], v252 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - ds_read_b128 a[48:51], v246 ;.loc 4 920 22 - ds_read_b128 a[52:55], v247 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[56:59], v243 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - scratch_load_dword v255, off, off offset:52 - s_waitcnt lgkmcnt(14) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, v234 v235 v236 v237 v238 v239 v240 v241, v116 v117 v118 v119 v120 v121 v122 v123, v008 v009 v010 v011 - s_or_b32 s59, s33, 0x200 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v247, a255 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds - s_mov_b32 m0, s29 - ds_read_b128 a[68:71], v247 ;.loc 4 920 22 - s_nop 0 - v_accvgpr_read_b32 v008, a154 - v_accvgpr_read_b32 v009, a155 - v_accvgpr_read_b32 v010, a156 - v_accvgpr_read_b32 v011, a157 - v_mfma_f32_16x16x128_f8f6f4 a[104:107], v186 v187 v188 v189 v190 v191 v192 v193, v124 v125 v126 v127 v128 v129 v130 v131, a[104:107] ;.loc 1 209 0 - s_nop 0 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, v234 v235 v236 v237 v238 v239 v240 v241, v124 v125 v126 v127 v128 v129 v130 v131, v008 v009 v010 v011 - s_nop 6 - v_accvgpr_read_b32 v008, a158 - v_accvgpr_read_b32 v009, a159 - v_accvgpr_read_b32 v010, a160 - v_accvgpr_read_b32 v011, a161 - v_mfma_f32_16x16x128_f8f6f4 a[92:95], v194 v195 v196 v197 v198 v199 v200 v201, v124 v125 v126 v127 v128 v129 v130 v131, a[92:95] - s_nop 0 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, v234 v235 v236 v237 v238 v239 v240 v241, v132 v133 v134 v135 v136 v137 v138 v139, v008 v009 v010 v011 - s_nop 6 - v_accvgpr_read_b32 v008, a162 - v_accvgpr_read_b32 v009, a163 - v_accvgpr_read_b32 v010, a164 - v_accvgpr_read_b32 v011, a165 - v_mfma_f32_16x16x128_f8f6f4 a[142:145], v186 v187 v188 v189 v190 v191 v192 v193, v132 v133 v134 v135 v136 v137 v138 v139, a[142:145] ;.loc 1 214 0 - s_nop 0 ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, v234 v235 v236 v237 v238 v239 v240 v241, v140 v141 v142 v143 v144 v145 v146 v147, v008 v009 v010 v011 - s_nop 6 - v_accvgpr_read_b32 v008, a166 - v_accvgpr_read_b32 v009, a167 - v_accvgpr_read_b32 v010, a168 - v_accvgpr_read_b32 v011, a169 - v_mfma_f32_16x16x128_f8f6f4 a[96:99], v194 v195 v196 v197 v198 v199 v200 v201, v132 v133 v134 v135 v136 v137 v138 v139, a[96:99] ;.loc 1 226 0 - v_accvgpr_write_b32 a169, v019 - v_accvgpr_write_b32 a168, v018 - v_accvgpr_write_b32 a167, v017 - v_accvgpr_write_b32 a166, v016 - v_accvgpr_read_b32 v016, a150 - v_accvgpr_read_b32 v017, a151 - v_accvgpr_read_b32 v018, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, v148 v149 v150 v151 v152 v153 v154 v155, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 179 0 - v_accvgpr_read_b32 v019, a153 - v_accvgpr_mov_b32 a152, a131 - v_accvgpr_mov_b32 a151, a130 - v_accvgpr_mov_b32 a153, a132 - v_accvgpr_write_b32 a150, v254 - s_nop 1 - v_accvgpr_read_b32 v008, a170 - v_accvgpr_read_b32 v009, a171 - v_accvgpr_read_b32 v010, a172 - v_accvgpr_read_b32 v011, a173 - v_mfma_f32_16x16x128_f8f6f4 a[88:91], v186 v187 v188 v189 v190 v191 v192 v193, v140 v141 v142 v143 v144 v145 v146 v147, a[88:91] ;.loc 1 215 0 - v_accvgpr_write_b32 a173, v023 - v_accvgpr_write_b32 a172, v022 - v_accvgpr_write_b32 a171, v021 - v_accvgpr_write_b32 a170, v020 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, v148 v149 v150 v151 v152 v153 v154 v155, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 180 0 - s_nop 6 - v_accvgpr_read_b32 v008, a174 - v_accvgpr_read_b32 v009, a175 - v_accvgpr_read_b32 v010, a176 - v_accvgpr_read_b32 v011, a177 - v_mfma_f32_16x16x128_f8f6f4 a[100:103], v194 v195 v196 v197 v198 v199 v200 v201, v140 v141 v142 v143 v144 v145 v146 v147, a[100:103] ;.loc 1 227 0 - v_accvgpr_write_b32 a177, v027 - v_accvgpr_write_b32 a176, v026 - v_accvgpr_write_b32 a175, v025 - v_accvgpr_write_b32 a174, v024 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, v148 v149 v150 v151 v152 v153 v154 v155, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 ;.loc 1 186 0 - s_nop 6 - v_accvgpr_read_b32 v008, a178 - v_accvgpr_read_b32 v009, a179 - v_accvgpr_read_b32 v010, a180 - v_accvgpr_read_b32 v011, a181 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[0:7], a[56:63], a[72:75] - v_accvgpr_write_b32 a181, v099 - v_accvgpr_write_b32 a180, v098 - v_accvgpr_write_b32 a179, v097 - v_accvgpr_write_b32 a178, v096 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, v148 v149 v150 v151 v152 v153 v154 v155, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 - s_nop 6 - v_accvgpr_read_b32 v008, a182 - v_accvgpr_read_b32 v009, a183 - v_accvgpr_read_b32 v010, a184 - v_accvgpr_read_b32 v011, a185 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[24:31], a[40:47], a[92:95] ;.loc 1 221 0 - v_accvgpr_write_b32 a185, v039 - v_accvgpr_write_b32 a184, v038 - v_accvgpr_write_b32 a183, v037 - v_accvgpr_write_b32 a182, v036 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, v160 v161 v162 v163 v164 v165 v166 v167, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 196 0 - s_nop 6 - v_accvgpr_read_b32 v008, a186 - v_accvgpr_read_b32 v009, a187 - v_accvgpr_read_b32 v010, a188 - v_accvgpr_read_b32 v011, a189 - v_mfma_f32_16x16x128_f8f6f4 a[242:245], a[8:15], a[32:39], a[108:111] - v_accvgpr_write_b32 a189, v083 - v_accvgpr_write_b32 a188, v082 - v_accvgpr_write_b32 a187, v081 - v_accvgpr_write_b32 a186, v080 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, v160 v161 v162 v163 v164 v165 v166 v167, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 197 0 - s_nop 1 - v_accvgpr_mov_b32 a108, a250 - v_accvgpr_mov_b32 a109, a251 - v_accvgpr_mov_b32 a110, a252 - v_accvgpr_mov_b32 a111, a253 - s_nop 0 - v_accvgpr_read_b32 v008, a194 - v_accvgpr_read_b32 v009, a195 - v_accvgpr_read_b32 v010, a196 - v_accvgpr_read_b32 v011, a197 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[24:31], a[48:55], a[96:99] ;.loc 1 226 0 - v_accvgpr_write_b32 a197, v091 - v_accvgpr_write_b32 a196, v090 - v_accvgpr_write_b32 a195, v089 - v_accvgpr_write_b32 a194, v088 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, v160 v161 v162 v163 v164 v165 v166 v167, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 ;.loc 1 203 0 - s_nop 1 - v_accvgpr_mov_b32 a96, a100 - v_accvgpr_mov_b32 a97, a101 - v_accvgpr_mov_b32 a98, a102 - v_accvgpr_mov_b32 a99, a103 - s_nop 0 - v_accvgpr_read_b32 v008, a198 - v_accvgpr_read_b32 v009, a199 - v_accvgpr_read_b32 v010, a200 - v_accvgpr_read_b32 v011, a201 - v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[8:15], a[40:47], a[108:111] ;.loc 1 197 0 - v_accvgpr_write_b32 a201, v047 - v_accvgpr_write_b32 a200, v046 - v_accvgpr_write_b32 a199, v045 - v_accvgpr_write_b32 a198, v044 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, v176 v177 v178 v179 v180 v181 v182 v183, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 208 0 - s_nop 1 - v_accvgpr_mov_b32 a108, a126 - v_accvgpr_mov_b32 a109, a127 - v_accvgpr_mov_b32 a110, a128 - v_accvgpr_mov_b32 a111, a129 - s_nop 0 - v_accvgpr_read_b32 v008, a202 - v_accvgpr_read_b32 v009, a203 - v_accvgpr_read_b32 v010, a204 - v_accvgpr_read_b32 v011, a205 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[24:31], a[56:63], a[96:99] ;.loc 1 227 0 - v_accvgpr_write_b32 a205, v107 - v_accvgpr_write_b32 a204, v106 - v_accvgpr_write_b32 a203, v105 - v_accvgpr_write_b32 a202, v104 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, v176 v177 v178 v179 v180 v181 v182 v183, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 ;.loc 1 209 0 - s_nop 6 - v_accvgpr_read_b32 v008, a206 - v_accvgpr_read_b32 v009, a207 - v_accvgpr_read_b32 v010, a208 - v_accvgpr_read_b32 v011, a209 - v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[8:15], a[48:55], a[108:111] ;.loc 1 202 0 - v_accvgpr_write_b32 a209, v051 - v_accvgpr_write_b32 a208, v050 - v_accvgpr_write_b32 a207, v049 - v_accvgpr_write_b32 a206, v048 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, v176 v177 v178 v179 v180 v181 v182 v183, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 ;.loc 1 214 0 - s_nop 6 - v_accvgpr_read_b32 v008, a210 - v_accvgpr_read_b32 v009, a211 - v_accvgpr_read_b32 v010, a212 - v_accvgpr_read_b32 v011, a213 - v_accvgpr_write_b32 a213, v079 - v_accvgpr_write_b32 a212, v078 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, v176 v177 v178 v179 v180 v181 v182 v183, v226 v227 v228 v229 v230 v231 v232 v233, v008 v009 v010 v011 ;.loc 1 215 0 - v_accvgpr_write_b32 a211, v077 - v_accvgpr_write_b32 a210, v076 - s_nop 4 - v_accvgpr_read_b32 v008, a214 - v_accvgpr_read_b32 v009, a215 - v_accvgpr_read_b32 v010, a216 - v_accvgpr_read_b32 v011, a217 - v_accvgpr_write_b32 a217, v055 - v_accvgpr_write_b32 a216, v054 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, v234 v235 v236 v237 v238 v239 v240 v241, v202 v203 v204 v205 v206 v207 v208 v209, v008 v009 v010 v011 ;.loc 1 220 0 - v_accvgpr_write_b32 a215, v053 - v_accvgpr_write_b32 a214, v052 - s_nop 4 - v_accvgpr_read_b32 v008, a218 - v_accvgpr_read_b32 v009, a219 - v_accvgpr_read_b32 v010, a220 - v_accvgpr_read_b32 v011, a221 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], v234 v235 v236 v237 v238 v239 v240 v241, v226 v227 v228 v229 v230 v231 v232 v233, a[64:67] ;.loc 1 227 0 - s_nop 0 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, v234 v235 v236 v237 v238 v239 v240 v241, v210 v211 v212 v213 v214 v215 v216 v217, v008 v009 v010 v011 - s_nop 4 - v_accvgpr_mov_b32 a64, a230 - v_accvgpr_mov_b32 a65, a231 - v_accvgpr_mov_b32 a66, a232 - v_accvgpr_mov_b32 a67, a233 - v_accvgpr_read_b32 v008, a222 - v_accvgpr_read_b32 v009, a223 - v_accvgpr_read_b32 v010, a224 - v_accvgpr_read_b32 v011, a225 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[0:7], a[32:39], a[64:67] ;.loc 1 179 0 - s_nop 0 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, v234 v235 v236 v237 v238 v239 v240 v241, v218 v219 v220 v221 v222 v223 v224 v225, v008 v009 v010 v011 - s_nop 4 ;.loc 4 920 22 - ds_read_b128 a[64:67], v245 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v240, a79 - s_mov_b32 m0, s28 - s_waitcnt vmcnt(2) ;.loc 4 920 22 - ds_read_b128 a[72:75], v255 - ds_read_b128 a[76:79], v240 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a234 - v_accvgpr_read_b32 v009, a235 - v_accvgpr_read_b32 v010, a236 - v_accvgpr_read_b32 v011, a237 - v_accvgpr_read_b32 v241, a141 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[0:7], a[40:47], v008 v009 v010 v011 ;.loc 1 180 0 - v_accvgpr_read_b32 v239, a145 - v_accvgpr_read_b32 v238, a144 - v_accvgpr_read_b32 v237, a143 - v_accvgpr_read_b32 v236, a142 - s_nop 2 - v_accvgpr_read_b32 v008, a238 - v_accvgpr_read_b32 v009, a239 - v_accvgpr_read_b32 v010, a240 - v_accvgpr_read_b32 v011, a241 - v_mfma_f32_16x16x128_f8f6f4 a[140:143], a[16:23], a[56:63], a[88:91] ;.loc 1 215 0 - s_nop 0 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[0:7], a[48:55], v008 v009 v010 v011 - s_nop 6 - v_accvgpr_read_b32 v008, a80 - v_accvgpr_read_b32 v009, a81 - v_accvgpr_read_b32 v010, a82 - v_accvgpr_read_b32 v011, a83 - ds_read_b128 a[80:83], v241 ;.loc 4 920 22 - s_waitcnt lgkmcnt(3) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[0:7], a[64:71], v248 v249 v250 v251 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[8:15], a[56:63], v008 v009 v010 v011 ;.loc 1 203 0 - s_nop 6 - v_accvgpr_read_b32 v008, a84 - v_accvgpr_read_b32 v009, a85 - v_accvgpr_read_b32 v010, a86 - v_accvgpr_read_b32 v011, a87 - ds_read_b128 a[84:87], v242 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[16:23], a[32:39], v008 v009 v010 v011 ;.loc 1 208 0 - s_or_b32 s59, s36, 0x200 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - s_nop 4 - v_accvgpr_read_b32 v008, a104 - v_accvgpr_read_b32 v009, a105 - v_accvgpr_read_b32 v010, a106 - v_accvgpr_read_b32 v011, a107 - s_waitcnt lgkmcnt(2) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[0:7], a[72:79], a[166:169] - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[16:23], a[40:47], v008 v009 v010 v011 ;.loc 1 209 0 - s_nop 6 - v_accvgpr_read_b32 v008, a146 - v_accvgpr_read_b32 v011, a148 - ds_read_b128 a[88:91], v008 ;.loc 4 920 22 - ds_read_b128 a[92:95], v011 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - ds_read_b128 a[96:99], v005 offset:16384 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(4) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[0:7], a[80:87], a[170:173] - v_accvgpr_write_b32 a147, v015 - v_accvgpr_write_b32 a146, v014 - v_accvgpr_write_b32 a145, v013 - v_accvgpr_write_b32 a144, v012 - v_accvgpr_read_b32 v012, a120 - v_accvgpr_read_b32 v013, a121 - v_accvgpr_read_b32 v014, a122 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[0:7], a[88:95], a[174:177] - ds_read_b128 a[0:3], v005 offset:18432 ;.loc 4 920 22 - ds_read_b128 a[4:7], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_accvgpr_read_b32 v015, a123 - v_accvgpr_read_b32 v010, a137 - v_accvgpr_write_b32 a137, v007 - v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[8:15], a[64:71], v084 v085 v086 v087 ;.loc 1 196 0 - v_accvgpr_write_b32 a148, v252 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[8:15], a[72:79], v028 v029 v030 v031 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[8:15], a[80:87], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[8:15], a[88:95], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[8:11], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[12:15], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x200200 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[16:23], a[48:55], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[16:23], a[64:71], a[178:181] ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[16:23], a[72:79], a[182:185] ;.loc 1 209 0 - s_nop 10 - v_accvgpr_read_b32 v036, a178 - v_accvgpr_read_b32 v037, a179 - v_accvgpr_read_b32 v038, a180 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[16:23], a[80:87], a[186:189] ;.loc 1 214 0 - v_accvgpr_read_b32 v039, a181 - v_accvgpr_read_b32 v040, a182 - v_accvgpr_read_b32 v041, a183 - v_accvgpr_read_b32 v042, a184 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[16:23], a[88:95], a[190:193] ;.loc 1 215 0 - ds_read_b128 a[16:19], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[20:23], v006 offset:22528 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - scratch_load_dword v009, off, off offset:12 ;.loc 4 920 22 - v_accvgpr_read_b32 v043, a185 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - s_waitcnt lgkmcnt(4) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[0:7], a[32:39], v092 v093 v094 v095 - v_accvgpr_read_b32 v044, a186 - v_accvgpr_read_b32 v045, a187 - v_accvgpr_read_b32 v046, a188 - v_accvgpr_read_b32 v047, a189 - v_accvgpr_read_b32 v048, a190 - v_accvgpr_read_b32 v049, a191 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[0:7], a[48:55], v100 v101 v102 v103 ;.loc 1 202 0 - v_accvgpr_read_b32 v050, a192 - v_accvgpr_read_b32 v051, a193 - s_waitcnt lgkmcnt(2) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[8:15], a[32:39], v108 v109 v110 v111 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[8:15], a[48:55], v112 v113 v114 v115 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[8:15], a[56:63], v012 v013 v014 v015 ;.loc 1 215 0 - s_nop 6 ;.loc 4 920 22 - scratch_load_dword v012, off, off - v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[24:31], a[32:39], a[144:147] ;.loc 1 220 0 - v_accvgpr_read_b32 v013, a139 - v_accvgpr_read_b32 v014, a138 - v_accvgpr_read_b32 v015, a134 - v_accvgpr_write_b32 a134, v244 - v_accvgpr_write_b32 a139, v015 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[24:31], a[64:71], a[194:197] - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[24:31], a[72:79], a[198:201] ;.loc 1 221 0 - s_nop 10 - v_accvgpr_read_b32 v052, a194 - v_accvgpr_read_b32 v053, a195 - v_accvgpr_read_b32 v054, a196 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[24:31], a[80:87], a[202:205] ;.loc 1 226 0 - v_accvgpr_read_b32 v055, a197 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[24:31], a[88:95], a[206:209] ;.loc 1 227 0 - ds_read_b128 a[24:27], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[28:31], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200200 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[96:103], a[32:39], a[210:213] ;.loc 1 179 0 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[16:23], a[32:39], v116 v117 v118 v119 - ds_read_b128 a[32:35], v013 ;.loc 4 920 22 - ds_read_b128 a[36:39], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[96:103], a[40:47], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[0:7], a[40:47], v064 v065 v066 v067 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[8:15], a[40:47], v072 v073 v074 v075 ;.loc 1 209 0 - s_nop 5 - v_accvgpr_read_b32 v064, a206 - v_accvgpr_read_b32 v065, a207 - v_accvgpr_read_b32 v066, a208 - v_accvgpr_read_b32 v067, a209 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[16:23], a[40:47], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - s_waitcnt vmcnt(5) - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a131 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[0:7], a[56:63], v068 v069 v070 v071 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[0:7], a[64:71], v148 v149 v150 v151 ;.loc 1 196 0 - s_nop 5 - v_accvgpr_read_b32 v068, a210 - v_accvgpr_read_b32 v069, a211 - v_accvgpr_read_b32 v070, a212 - v_accvgpr_read_b32 v071, a213 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[0:7], a[72:79], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[0:7], a[80:87], v016 v017 v018 v019 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[0:7], a[88:95], v160 v161 v162 v163 ;.loc 1 203 0 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - v_accvgpr_read_b32 v012, a132 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x280 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a133 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[8:15], a[64:71], v164 v165 v166 v167 ;.loc 1 208 0 - v_accvgpr_read_b32 v016, a135 - v_accvgpr_read_b32 v017, a254 - v_accvgpr_write_b32 a135, v240 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[8:15], a[72:79], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[8:15], a[80:87], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[8:15], a[88:95], v176 v177 v178 v179 ;.loc 1 215 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - scratch_load_dword v009, off, off offset:16 - s_waitcnt vmcnt(0) - ds_read_b128 a[12:15], v009 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - scratch_load_dword v009, off, off offset:4 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[16:23], a[48:55], v124 v125 v126 v127 ;.loc 1 226 0 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[16:23], a[56:63], v128 v129 v130 v131 ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[16:23], a[64:71], v180 v181 v182 v183 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[16:23], a[72:79], v184 v185 v186 v187 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[16:23], a[80:87], v188 v189 v190 v191 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[16:23], a[88:95], a[218:221] ;.loc 1 227 0 - ds_read_b128 a[16:19], v012 ;.loc 4 920 22 - s_waitcnt vmcnt(1) - ds_read_b128 a[20:23], v009 - scratch_load_dword v009, off, off offset:8 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[96:103], a[64:71], v132 v133 v134 v135 ;.loc 1 179 0 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_mov_b32 a68, a144 - v_accvgpr_mov_b32 a69, a145 - v_accvgpr_mov_b32 a70, a146 - v_accvgpr_mov_b32 a71, a147 - v_accvgpr_mov_b32 a64, a140 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[96:103], a[48:55], v056 v057 v058 v059 ;.loc 1 186 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - v_accvgpr_mov_b32 a65, a141 - v_accvgpr_mov_b32 a66, a142 - v_accvgpr_mov_b32 a67, a143 - v_accvgpr_write_b32 a142, v243 - v_accvgpr_write_b32 a144, v241 - v_accvgpr_write_b32 a147, v246 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[96:103], a[72:79], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_accvgpr_mov_b32 a75, a161 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[96:103], a[56:63], v060 v061 v062 v063 ;.loc 1 191 0 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_read_b32 v056, a198 - v_accvgpr_read_b32 v057, a199 - v_accvgpr_read_b32 v058, a200 - v_accvgpr_read_b32 v059, a201 - v_accvgpr_write_b32 a143, v253 - v_accvgpr_write_b32 a145, v255 - s_waitcnt lgkmcnt(9) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[120:127], a[32:39], a[68:71] - v_accvgpr_read_b32 v060, a202 - v_accvgpr_read_b32 v061, a203 - v_accvgpr_read_b32 v062, a204 - v_accvgpr_read_b32 v063, a205 - v_accvgpr_write_b32 a140, v016 - s_waitcnt vmcnt(1) ;.loc 4 920 22 - ds_read_b128 a[52:55], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a130 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - s_mov_b32 m0, s41 ;.loc 3 94 8 - v_accvgpr_mov_b32 a68, a154 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds - v_accvgpr_mov_b32 a69, a155 - v_accvgpr_mov_b32 a70, a156 - v_accvgpr_mov_b32 a71, a157 - s_waitcnt lgkmcnt(8) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[0:7], a[72:75] - s_or_b32 s59, s36, 0x280 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_write_b32 a154, v000 - v_mov_b32_e32 v009, v013 - v_accvgpr_mov_b32 a155, a147 - s_nop 1 - v_accvgpr_mov_b32 a72, a162 - s_waitcnt lgkmcnt(6) ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[112:119], a[8:15], a[64:67] - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_accvgpr_mov_b32 a75, a165 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v017 - v_accvgpr_read_b32 v017, a136 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[24:31], a[32:39], a[222:225] ;.loc 1 179 0 - v_accvgpr_write_b32 a141, v017 - v_accvgpr_write_b32 a136, v012 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[120:127], a[40:47], a[68:71] ;.loc 1 221 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v017 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[8:15], a[72:75] ;.loc 1 227 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_nop 4 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_accvgpr_mov_b32 a75, a169 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[24:31], a[56:63], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[24:31], a[48:55], a[72:75] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:49152 - ds_read_b128 a[72:75], v005 offset:49152 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[96:103], a[80:87], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_mov_b32 a80, a174 - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[24:31], a[40:47], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[24:31], a[0:7], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[24:31], a[8:15], a[226:229] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[24:31], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[24:31], a[64:71], a[80:83] - ds_read_b128 a[24:27], v005 offset:51200 ;.loc 4 920 22 - ds_read_b128 a[28:31], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 1 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[96:103], a[88:95], v144 v145 v146 v147 ;.loc 1 191 0 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200280 ;.loc 1 345 0 - v_accvgpr_mov_b32 a96, a214 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_accvgpr_mov_b32 a97, a215 - v_accvgpr_mov_b32 a98, a216 - v_accvgpr_mov_b32 a99, a217 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - s_waitcnt lgkmcnt(6) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[72:79], a[40:47], a[96:99] - ds_read_b128 a[100:103], v006 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[96:99], v005 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[242:245], a[104:111], a[32:39], a[242:245] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[104:111], a[40:47], a[246:249] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[104:111], a[0:7], a[250:253] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[8:15], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v018 v019 v020 v021, a[104:111], a[16:23], v020 v021 v022 v023 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[48:55], v024 v025 v026 v027 ;.loc 1 197 0 - s_nop 5 - v_accvgpr_read_b32 v023, a143 - v_accvgpr_read_b32 v022, a142 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[56:63], v028 v029 v030 v031 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[64:71], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[32:39], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[40:47], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[0:7], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[48:55], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[56:63], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[64:71], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200280 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[48:55], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[56:63], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[64:71], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[72:79], a[0:7], v076 v077 v078 v079 ;.loc 1 186 0 - s_waitcnt lgkmcnt(12) ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[24:31], a[0:7], v092 v093 v094 v095 - s_waitcnt lgkmcnt(10) ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[0:7], v108 v109 v110 v111 - s_waitcnt lgkmcnt(8) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[0:7], v124 v125 v126 v127 - ds_read_b128 a[0:3], v254 ;.loc 4 920 22 - ds_read_b128 a[4:7], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mov_b32_e32 v007, v242 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[72:79], a[8:15], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[24:31], a[8:15], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[8:15], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[8:15], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[8:11], v253 ;.loc 4 920 22 - ds_read_b128 a[12:15], v252 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[24:31], a[32:39], v084 v085 v086 v087 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[24:31], a[40:47], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[24:31], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[24:31], a[48:55], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[24:31], a[56:63], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[24:31], a[64:71], v160 v161 v162 v163 ;.loc 1 203 0 - ds_read_b128 a[24:27], v246 ;.loc 4 920 22 - ds_read_b128 a[28:31], v244 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x300 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[72:79], a[32:39], v068 v069 v070 v071 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[32:39], v100 v101 v102 v103 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[32:39], v116 v117 v118 v119 ;.loc 1 220 0 - ds_read_b128 a[32:35], v243 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v000, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[72:79], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v245 ;.loc 4 920 22 - ds_read_b128 a[20:23], v247 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v247, a221 - v_accvgpr_read_b32 v246, a220 - v_accvgpr_read_b32 v245, a219 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[40:47], v104 v105 v106 v107 ;.loc 1 209 0 - v_accvgpr_read_b32 v244, a218 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[40:47], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[40:43], v255 ;.loc 4 920 22 - ds_read_b128 a[44:47], v240 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v255, a225 - v_accvgpr_read_b32 v254, a224 - v_accvgpr_read_b32 v253, a223 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[72:79], a[64:71], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_read_b32 v252, a222 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[64:71], v176 v177 v178 v179 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[88:95], a[64:71], a[230:233] ;.loc 1 227 0 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[72:79], a[48:55], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_mov_b32 a71, a171 - v_accvgpr_mov_b32 a157, a148 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[48:55], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[48:55], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[48:51], v241 ;.loc 4 920 22 - ds_read_b128 a[52:55], v242 - v_accvgpr_read_b32 v243, a131 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v242, a130 - v_accvgpr_read_b32 v241, a129 - v_accvgpr_read_b32 v240, a128 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[72:79], a[56:63], v140 v141 v142 v143 ;.loc 1 186 0 - s_or_b32 s59, s36, 0x300 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_write_b32 a79, v021 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_accvgpr_mov_b32 a75, a175 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[56:63], v172 v173 v174 v175 ;.loc 1 214 0 - v_accvgpr_write_b32 a78, v020 - v_accvgpr_write_b32 a77, v019 - v_accvgpr_write_b32 a76, v018 - v_accvgpr_read_b32 v020, a137 - v_accvgpr_read_b32 v021, a255 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[56:63], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v011 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_mov_b32_e32 v008, v011 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 - s_nop 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] - s_nop 4 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - s_nop 0 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - scratch_load_dword v011, off, off - s_or_b32 s59, s36, 0x200300 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[0:7], a[234:237] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[238:241] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[242:245] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[246:249] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[250:253] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[40:47], v024 v025 v026 v027 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200300 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v013 ;.loc 4 920 22 - ds_read_b128 a[4:7], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - scratch_load_dword v013, off, off offset:16 - v_mov_b32_e32 v010, v014 - s_waitcnt vmcnt(0) - v_accvgpr_write_b32 a137, v013 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[184:187] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v014 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a153 - ds_read_b128 a[28:31], v000 - scratch_load_dword v000, off, off offset:12 - s_waitcnt vmcnt(0) - v_accvgpr_write_b32 a156, v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - s_or_b32 s59, s33, 0x380 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v013 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - scratch_load_dword v014, off, off offset:4 - v_accvgpr_read_b32 v000, a151 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - s_waitcnt vmcnt(1) - v_accvgpr_write_b32 a138, v014 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v012 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v012, a148 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v015 ;.loc 4 920 22 - scratch_load_dword v015, off, off offset:8 - s_waitcnt vmcnt(0) - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a254 - s_or_b32 s59, s36, 0x380 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a71, a169 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_accvgpr_mov_b32 a75, a173 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[176:179] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v017 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(4) ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[104:111], a[40:47], v024 v025 v026 v027 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] ;.loc 1 226 0 - s_nop 5 - v_accvgpr_read_b32 v026, a149 - v_accvgpr_read_b32 v025, a145 - v_accvgpr_read_b32 v024, a144 - v_mov_b32_e32 v027, v007 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[180:183] ;.loc 1 179 0 - s_nop 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] - s_nop 4 - v_accvgpr_write_b32 a181, v019 - v_accvgpr_write_b32 a180, v018 - v_accvgpr_write_b32 a179, v017 - v_accvgpr_write_b32 a178, v016 - ds_read_b128 a[64:67], v005 offset:49152 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - ds_read_b128 a[76:79], v006 offset:51200 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[72:75], v005 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200380 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_accvgpr_read_b32 v029, a133 - s_nop 0 - v_accvgpr_write_b32 a185, v019 - v_accvgpr_write_b32 a184, v018 - v_accvgpr_write_b32 a183, v017 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_accvgpr_write_b32 a182, v016 - v_accvgpr_read_b32 v016, a150 - v_accvgpr_read_b32 v018, a134 - v_accvgpr_read_b32 v019, a135 - v_accvgpr_write_b32 a134, v010 - v_accvgpr_write_b32 a135, v011 - v_accvgpr_read_b32 v017, a151 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[218:221] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200380 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a147 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v012 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a154 - s_or_b32 s59, s33, 0x400 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v012, a156 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a132 - s_or_b32 s59, s36, 0x400 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a173 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v008, a133 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[142:145], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200400 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200400 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v010 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a152 - v_accvgpr_read_b32 v011, a153 - s_mov_b32 m0, s43 - v_accvgpr_write_b32 a153, v009 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v010 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x480 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v013 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a136 - s_mov_b32 m0, s40 - v_accvgpr_mov_b32 a136, a156 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a139 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a139, v015 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a140 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x480 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a80, a174 - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a141 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_write_b32 a156, v000 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a142 - v_accvgpr_mov_b32 a65, a143 - v_accvgpr_mov_b32 a66, a144 - v_accvgpr_mov_b32 a67, a145 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a145, v020 - v_accvgpr_write_b32 a143, v018 - v_accvgpr_write_b32 a142, v007 - v_accvgpr_write_b32 a144, v019 - v_accvgpr_read_b32 v028, a142 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - s_nop 1 - v_accvgpr_mov_b32 a64, a146 - v_accvgpr_mov_b32 a65, a147 - v_accvgpr_mov_b32 a66, a148 - v_accvgpr_mov_b32 a67, a149 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200480 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200480 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a157 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a155 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a154 - s_or_b32 s59, s33, 0x500 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v018 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x500 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a132 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_mov_b32 a132, a133 - v_accvgpr_mov_b32 a133, a135 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200500 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200500 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a134 - v_accvgpr_read_b32 v009, a135 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a135, v011 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v010 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x580 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - v_accvgpr_read_b32 v012, a137 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_write_b32 a137, v013 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - v_accvgpr_read_b32 v013, a138 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_write_b32 a138, v014 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - v_accvgpr_read_b32 v014, a139 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_mov_b32 a139, a140 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a254 - s_or_b32 s59, s36, 0x580 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a155 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_write_b32 a155, v007 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a154 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 v018 v019 v020 v021, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200580 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - s_nop 1 - v_accvgpr_write_b32 a189, v021 - v_accvgpr_write_b32 a188, v020 - v_accvgpr_write_b32 a187, v019 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_accvgpr_write_b32 a186, v018 - v_accvgpr_read_b32 v020, a145 - v_accvgpr_read_b32 v018, a157 - v_accvgpr_read_b32 v021, a255 - v_accvgpr_read_b32 v019, a144 - v_accvgpr_mov_b32 a157, a132 - v_accvgpr_mov_b32 a132, a134 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_accvgpr_mov_b32 a134, a152 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[222:225] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[182:185] ;.loc 1 202 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200580 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v016, a143 - v_accvgpr_write_b32 a140, v016 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x600 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x600 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_accvgpr_mov_b32 a75, a165 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v007, a153 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[142:145], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s12 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a186 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200600 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200600 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v008, a137 - v_accvgpr_read_b32 v009, a138 - v_accvgpr_write_b32 a138, v014 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v010 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a136 - s_or_b32 s59, s33, 0x680 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a136, v012 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v011 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v012, a156 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a151 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - ds_read_b128 a[52:55], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x680 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a174 - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - v_accvgpr_mov_b32 a75, a165 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v015, a150 - v_mov_b32_e32 v012, v013 - v_accvgpr_write_b32 a150, v026 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a142 - v_accvgpr_mov_b32 a65, a143 - v_accvgpr_mov_b32 a66, a144 - v_accvgpr_mov_b32 a67, a145 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a143, v019 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 4 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a146 - v_accvgpr_mov_b32 a65, a147 - v_accvgpr_mov_b32 a66, a148 - v_accvgpr_mov_b32 a67, a149 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_accvgpr_write_b32 a148, v024 - v_accvgpr_write_b32 a149, v025 - v_accvgpr_mov_b32 a141, a149 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 2 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - s_nop 2 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s37 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a178 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a179 - v_accvgpr_mov_b32 a82, a180 - v_accvgpr_mov_b32 a83, a181 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200680 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200680 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v015 ;.loc 4 920 22 - ds_read_b128 a[4:7], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x700 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a141 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v000, a132 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v026, a254 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_accvgpr_write_b32 a160, v011 - v_accvgpr_mov_b32 a158, a133 - v_accvgpr_mov_b32 a159, a134 - v_accvgpr_mov_b32 a152, a158 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v025, a154 - v_mov_b32_e32 v019, v020 - v_accvgpr_write_b32 a147, v025 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_read_b32 v030, a147 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - v_mov_b32_e32 v024, v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a155 - s_or_b32 s59, s36, 0x700 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a80, a174 - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - v_accvgpr_write_b32 a145, v024 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v027 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a186 - v_accvgpr_mov_b32 a65, a187 - v_accvgpr_mov_b32 a66, a188 - v_accvgpr_mov_b32 a67, a189 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200700 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200700 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a157 - ds_read_b128 a[4:7], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_mov_b32 a157, a132 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a133 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a134 - s_mov_b32 m0, s43 - v_accvgpr_mov_b32 a134, a139 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_mov_b32 a139, a151 - v_accvgpr_write_b32 a151, v027 - v_accvgpr_write_b32 a133, v009 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a135 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x780 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a140 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a140, v019 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v011 ;.loc 4 920 22 - v_accvgpr_read_b32 v011, a136 - ds_read_b128 a[36:39], v011 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a138 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v008, a150 - v_accvgpr_write_b32 a138, v015 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a186 - v_accvgpr_mov_b32 a69, a187 - v_accvgpr_mov_b32 a70, a188 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a189 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a135 - v_accvgpr_mov_b32 a135, a136 - v_accvgpr_write_b32 a136, v012 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - ds_read_b128 a[52:55], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a156 - s_or_b32 s59, s36, 0x780 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a160 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a169 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v026 ;.loc 4 920 22 - ds_read_b128 a[60:63], v014 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200780 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[222:225] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200780 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v015 ;.loc 4 920 22 - ds_read_b128 a[4:7], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v020, a143 - v_accvgpr_read_b32 v015, a139 - v_accvgpr_write_b32 a139, v018 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_accvgpr_write_b32 a141, v020 - v_accvgpr_write_b32 a143, v022 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x800 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a149 - s_mov_b32 m0, s28 - v_accvgpr_write_b32 a149, v007 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a178 - v_accvgpr_mov_b32 a69, a179 - v_accvgpr_mov_b32 a70, a180 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a181 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a148 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v024 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x800 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a158 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a80, a186 - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v027 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v027, a153 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200800 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200800 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a157 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a153, v007 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v007 ;.loc 4 920 22 - ds_read_b128 a[12:15], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a159 - s_mov_b32 m0, s43 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v008 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x880 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v011 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a137 - s_mov_b32 m0, s40 - v_accvgpr_write_b32 a137, v013 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v011 ;.loc 4 920 22 - ds_read_b128 a[20:23], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a133 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a133, v009 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a178 - v_accvgpr_mov_b32 a69, a179 - v_accvgpr_mov_b32 a70, a180 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a181 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v012 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a134 - s_mov_b32 m0, s41 - v_accvgpr_write_b32 a134, v010 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x880 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a80, a186 - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v026 ;.loc 4 920 22 - ds_read_b128 a[60:63], v014 - v_accvgpr_read_b32 v026, a156 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v014, a138 - v_accvgpr_write_b32 a138, v017 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a146, a138 - s_nop 5 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 - v_accvgpr_mov_b32 a76, a166 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200880 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200880 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v014 ;.loc 4 920 22 - ds_read_b128 a[4:7], v019 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v019, a150 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v018, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x900 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a140 - v_accvgpr_mov_b32 a140, a150 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v022, a149 - v_accvgpr_write_b32 a144, v022 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a149, v014 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v019 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mov_b32_e32 v021, v000 - v_mov_b32_e32 v029, v021 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a170 - v_accvgpr_mov_b32 a69, a171 - v_accvgpr_mov_b32 a70, a172 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a173 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v016 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v020, a151 - v_accvgpr_mov_b32 a151, a134 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v024 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x900 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a138 - v_accvgpr_mov_b32 a138, a143 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v020 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200900 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200900 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v022 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[186:189] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a152 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_write_b32 a152, v015 - v_accvgpr_write_b32 a142, v007 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v008 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a135 - s_or_b32 s59, s33, 0x980 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a137 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a135, v012 - v_accvgpr_write_b32 a137, v016 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_mov_b32_e32 v010, v011 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v011 ;.loc 4 920 22 - v_accvgpr_read_b32 v011, a136 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a136, v013 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a170 - v_accvgpr_mov_b32 a69, a171 - v_accvgpr_mov_b32 a70, a172 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a173 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v012 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v012, a139 - v_accvgpr_mov_b32 a139, a148 - v_accvgpr_mov_b32 a148, a133 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a254 - s_or_b32 s59, s36, 0x980 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a143 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_write_b32 a143, v020 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[178:181] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a154, v023 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 4 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200980 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[182:185] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200980 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v014 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mov_b32_e32 v023, v028 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xa00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v013 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v019 ;.loc 4 920 22 - v_accvgpr_read_b32 v019, a255 - ds_read_b128 a[20:23], v019 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v016 ;.loc 4 920 22 - v_accvgpr_read_b32 v016, a141 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a170 - v_accvgpr_mov_b32 a69, a171 - v_accvgpr_mov_b32 a70, a172 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a173 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - v_accvgpr_read_b32 v018, a145 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xa00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v020 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200a00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200a00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v022 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v022, a153 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v022 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_read_b32 v022, a133 - s_mov_b32 m0, s43 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v022, a134 - s_or_b32 s59, s33, 0xa80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_write_b32 a134, v011 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v008, a152 - v_mov_b32_e32 v022, v026 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v010 ;.loc 4 920 22 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a135 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v011, a136 - v_accvgpr_write_b32 a136, v012 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_write_b32 a135, v009 - v_accvgpr_mov_b32 a155, a135 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a134 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - ds_read_b128 a[52:55], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xa80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a151 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v015, a154 - v_accvgpr_read_b32 v026, a142 - v_accvgpr_write_b32 a154, v007 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a142, a140 - s_nop 5 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200a80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200a80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v014 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v014, a150 - v_accvgpr_mov_b32 a150, a133 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v015 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v012, a139 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xb00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v024, v027 - v_accvgpr_read_b32 v000, a132 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v013 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v013, a137 - v_accvgpr_read_b32 v025, a144 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_mov_b32 a137, a141 - v_accvgpr_write_b32 a144, v022 - v_accvgpr_write_b32 a140, v013 - v_accvgpr_write_b32 a141, v015 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v014 ;.loc 4 920 22 - ds_read_b128 a[20:23], v019 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v019, a137 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v016, a152 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xb00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a254 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v028 ;.loc 4 920 22 - ds_read_b128 a[60:63], v020 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v028, a146 - v_accvgpr_read_b32 v020, a255 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200b00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[180:183] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200b00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a153 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a148 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xb80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_mov_b32 a148, a132 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a151, v007 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a133 - s_mov_b32 m0, s40 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a135 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a135, v011 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v010, a149 - v_accvgpr_read_b32 v000, a136 - v_accvgpr_mov_b32 a136, a139 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a139, v017 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xb80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mov_b32_e32 v011, v023 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v022 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v022, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200b80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200b80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v015 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v015, a135 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v028 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v021, a138 - s_or_b32 s59, s33, 0xc00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_mov_b32 a138, a152 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a152, a145 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v021 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v014 ;.loc 4 920 22 - ds_read_b128 a[20:23], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v014, a155 - v_accvgpr_write_b32 a155, v011 - v_accvgpr_write_b32 a135, v014 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v013, a133 - v_accvgpr_mov_b32 a133, a148 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xc00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a154 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v023 ;.loc 4 920 22 - v_accvgpr_read_b32 v023, a143 - ds_read_b128 a[60:63], v023 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200c00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200c00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v024 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v012 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a148 - s_or_b32 s59, s33, 0xc80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a150 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v008, a141 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - ds_read_b128 a[20:23], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v009, a153 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xc80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a140 - v_accvgpr_write_b32 a140, v019 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - v_accvgpr_read_b32 v018, a144 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_write_b32 a144, v000 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_accvgpr_mov_b32 a157, a141 - v_accvgpr_write_b32 a141, v021 - v_accvgpr_mov_b32 a156, a143 - v_accvgpr_mov_b32 a143, a151 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 1 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - s_nop 3 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200c80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200c80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v017, a142 - v_mov_b32_e32 v010, v025 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v000, a154 - v_accvgpr_read_b32 v008, a132 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v028 ;.loc 4 920 22 - ds_read_b128 a[28:31], v029 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xd00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - s_waitcnt lgkmcnt(0) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v021 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - ds_read_b128 a[20:23], v020 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v016 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a136 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a136, v015 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v019 ;.loc 4 920 22 - ds_read_b128 a[52:55], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xd00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a161 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v023 - v_accvgpr_read_b32 v020, a64 - v_accvgpr_read_b32 v021, a65 - v_accvgpr_read_b32 v022, a66 - v_accvgpr_read_b32 v023, a67 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - v_mov_b32_e32 v011, v024 - s_nop 5 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a162 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200d00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200d00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v024 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v024, a254 - v_accvgpr_read_b32 v025, a150 - v_accvgpr_write_b32 a150, v011 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a151 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xd80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a157 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a151, a153 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v012, a149 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a134 - ds_read_b128 a[20:23], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a134, v013 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a138 - s_mov_b32 m0, s41 - v_accvgpr_write_b32 a138, v018 - v_accvgpr_read_b32 v014, a145 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_write_b32 a145, v010 - v_accvgpr_write_b32 a137, v013 - v_accvgpr_read_b32 v027, a145 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xd80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a139 - v_accvgpr_write_b32 a139, v016 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a71, a169 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a74, a160 - v_accvgpr_mov_b32 a75, a161 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 - ds_read_b128 a[56:59], v024 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v018, a141 - v_accvgpr_mov_b32 a141, a142 - v_accvgpr_write_b32 a142, v019 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - v_accvgpr_write_b32 a183, v023 - v_accvgpr_write_b32 a182, v022 - v_accvgpr_write_b32 a181, v021 - v_accvgpr_write_b32 a180, v020 - v_accvgpr_read_b32 v021, a144 - v_accvgpr_read_b32 v023, a154 - v_mov_b32_e32 v022, v028 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mov_b32_e32 v020, v029 - v_accvgpr_write_b32 a145, v023 - v_accvgpr_write_b32 a154, v025 - s_nop 3 - v_accvgpr_mov_b32 a76, a162 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200d80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[184:187] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200d80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[180:183] ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v028 ;.loc 4 920 22 - ds_read_b128 a[28:31], v029 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xe00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v018 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - v_accvgpr_read_b32 v017, a255 - ds_read_b128 a[20:23], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v016 ;.loc 4 920 22 - v_accvgpr_read_b32 v016, a140 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a140, v018 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v019 ;.loc 4 920 22 - ds_read_b128 a[52:55], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a155 - s_or_b32 s59, s36, 0xe00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a143 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a161 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_accvgpr_write_b32 a143, v020 - v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v014 ;.loc 4 920 22 - v_accvgpr_read_b32 v014, a156 - ds_read_b128 a[60:63], v014 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200e00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200e00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v010, a135 - v_accvgpr_read_b32 v011, a136 - v_accvgpr_write_b32 a136, v012 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v009, a134 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v023 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xe80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a133 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_write_b32 a133, v007 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v025 ;.loc 4 920 22 - ds_read_b128 a[20:23], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v007, a138 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xe80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a139 - v_accvgpr_write_b32 a139, v016 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a161 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[146:149] ;.loc 1 227 0 - ds_read_b128 a[56:59], v024 ;.loc 4 920 22 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_read_b32 v024, a154 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a149, a138 - v_accvgpr_write_b32 a138, v015 - v_accvgpr_write_b32 a147, v021 - v_accvgpr_mov_b32 a148, a157 - v_accvgpr_read_b32 v014, a149 - v_accvgpr_read_b32 v029, a148 - v_accvgpr_read_b32 v028, a147 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a144, v007 - v_accvgpr_mov_b32 a146, a138 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 3 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200e80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200e80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v015, a141 - v_accvgpr_read_b32 v012, a142 - v_accvgpr_write_b32 a142, v026 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v021, a155 - v_accvgpr_read_b32 v000, a156 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v022 ;.loc 4 920 22 - ds_read_b128 a[28:31], v020 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xf00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v020, v022 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v018 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v017, a254 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a152 - s_mov_b32 m0, s15 - v_accvgpr_mov_b32 a152, a156 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xf00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a161 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 - ds_read_b128 a[56:59], v021 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v000, a150 - v_accvgpr_read_b32 v021, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x200f00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[186:189] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200f00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - ds_read_b128 a[4:7], v027 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a153 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a153, v019 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v026, a133 - v_accvgpr_mov_b32 a133, a134 - v_accvgpr_mov_b32 a134, a135 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_write_b32 a135, v011 - v_accvgpr_read_b32 v000, a136 - v_accvgpr_write_b32 a145, v000 - v_accvgpr_write_b32 a136, v012 - v_accvgpr_write_b32 a148, v026 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v023 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0xf80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a143 - v_accvgpr_read_b32 v023, a150 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a150, a147 - v_accvgpr_write_b32 a147, v019 - v_accvgpr_write_b32 a143, v021 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v007 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v008, a138 - v_accvgpr_mov_b32 a138, a141 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v025 ;.loc 4 920 22 - ds_read_b128 a[20:23], v026 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v025, a142 - v_accvgpr_write_b32 a142, v030 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a134 - v_accvgpr_read_b32 v010, a135 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - v_accvgpr_read_b32 v011, a137 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0xf80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_write_b32 a137, v013 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a156 - v_accvgpr_mov_b32 a73, a157 - v_accvgpr_mov_b32 a74, a158 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a159 - v_accvgpr_write_b32 a135, v011 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 - ds_read_b128 a[56:59], v017 ;.loc 4 920 22 - ds_read_b128 a[60:63], v014 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x200f80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x200f80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v008, a255 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v029 ;.loc 4 920 22 - ds_read_b128 a[12:15], v028 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v022 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1000 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v022, v027 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v018 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v018, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mov_b32_e32 v015, v016 - v_accvgpr_read_b32 v008, a153 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - v_accvgpr_read_b32 v013, a139 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a155 - s_or_b32 s59, s36, 0x1000 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a140 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a168 - v_accvgpr_mov_b32 a77, a169 - v_accvgpr_mov_b32 a78, a170 - v_accvgpr_mov_b32 a79, a171 - v_accvgpr_mov_b32 a72, a156 - v_accvgpr_mov_b32 a73, a157 - v_accvgpr_mov_b32 a74, a158 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a159 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201000 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201000 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v023 ;.loc 4 920 22 - ds_read_b128 a[4:7], v027 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a151 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v021 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a132 - s_or_b32 s59, s33, 0x1080 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v007 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v007, a133 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v026 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v026, a149 - v_accvgpr_write_b32 a149, v023 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v007 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1080 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a141 - v_accvgpr_mov_b32 a141, a152 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a168 - v_accvgpr_mov_b32 a77, a169 - v_accvgpr_mov_b32 a78, a170 - v_accvgpr_mov_b32 a79, a171 - v_accvgpr_mov_b32 a72, a156 - v_accvgpr_mov_b32 a73, a157 - v_accvgpr_mov_b32 a74, a158 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_accvgpr_mov_b32 a75, a159 - v_accvgpr_write_b32 a152, v025 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v017 ;.loc 4 920 22 - ds_read_b128 a[60:63], v014 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v014, a137 - v_accvgpr_read_b32 v017, a150 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s37 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a186 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201080 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201080 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a146 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v029 ;.loc 4 920 22 - ds_read_b128 a[12:15], v028 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v028, a149 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1100 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v019, v020 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v011 ;.loc 4 920 22 - v_accvgpr_read_b32 v011, a255 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a136 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1100 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a168 - v_accvgpr_mov_b32 a77, a169 - v_accvgpr_mov_b32 a78, a170 - v_accvgpr_mov_b32 a79, a171 - v_accvgpr_mov_b32 a72, a154 - v_accvgpr_mov_b32 a73, a155 - v_accvgpr_mov_b32 a74, a156 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a157 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v018, a141 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201100 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201100 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v023 ;.loc 4 920 22 - ds_read_b128 a[4:7], v022 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mov_b32_e32 v023, v022 - v_accvgpr_read_b32 v022, a153 - v_accvgpr_mov_b32 a153, a133 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_accvgpr_mov_b32 a133, a134 - v_accvgpr_write_b32 a134, v010 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v025, a144 - v_accvgpr_read_b32 v027, a145 - v_accvgpr_write_b32 a145, v000 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_write_b32 a144, v024 - v_mov_b32_e32 v031, v025 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v021 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1180 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v021, a151 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a148 - s_mov_b32 m0, s40 - v_accvgpr_write_b32 a148, v026 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a141, v008 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mov_b32_e32 v024, v029 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v007 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a254 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_mov_b32 a132, a153 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_write_b32 a140, v007 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - v_accvgpr_read_b32 v010, a135 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1180 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_mov_b32 a135, a136 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a154 - v_accvgpr_mov_b32 a73, a155 - v_accvgpr_mov_b32 a74, a156 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a157 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v026, a147 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201180 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201180 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v000, a138 - v_accvgpr_write_b32 a138, v014 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v029 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v029, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1200 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a143 - v_accvgpr_mov_b32 a143, a133 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v030 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v030, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a139 - s_mov_b32 m0, s28 - v_accvgpr_write_b32 a139, v020 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v014, a142 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1200 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a138 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a154 - v_accvgpr_mov_b32 a73, a155 - v_accvgpr_mov_b32 a74, a156 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a157 - v_accvgpr_write_b32 a154, v023 - v_accvgpr_write_b32 a155, v024 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201200 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201200 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v028 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v023, a144 - v_accvgpr_write_b32 a144, v028 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v030 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1280 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v007 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v025, a145 - v_accvgpr_mov_b32 a145, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v023 ;.loc 4 920 22 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a153 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a153, v027 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a133 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a134 - s_mov_b32 m0, s41 - v_accvgpr_write_b32 a133, v000 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_write_b32 a134, v012 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1280 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_mov_b32 a72, a178 - v_accvgpr_mov_b32 a73, a179 - v_accvgpr_mov_b32 a74, a180 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a181 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a156 - v_accvgpr_mov_b32 a77, a157 - v_accvgpr_mov_b32 a78, a158 - v_accvgpr_mov_b32 a79, a159 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201280 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201280 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v017, a152 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1300 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v014 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a255 - ds_read_b128 a[20:23], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a146 - v_accvgpr_mov_b32 a65, a147 - v_accvgpr_mov_b32 a66, a148 - v_accvgpr_mov_b32 a67, a149 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_accvgpr_write_b32 a148, v022 - v_accvgpr_write_b32 a146, v023 - v_accvgpr_write_b32 a147, v019 - v_accvgpr_mov_b32 a152, a147 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a136 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a136, v015 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1300 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_mov_b32 a80, a178 - v_accvgpr_mov_b32 a81, a179 - v_accvgpr_mov_b32 a82, a180 - v_accvgpr_mov_b32 a83, a181 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a156 - v_accvgpr_mov_b32 a77, a157 - v_accvgpr_mov_b32 a78, a158 - v_accvgpr_mov_b32 a79, a159 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201300 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201300 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v028 ;.loc 4 920 22 - v_accvgpr_read_b32 v028, a154 - ds_read_b128 a[4:7], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v030 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v021, a141 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1380 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a132 - v_accvgpr_read_b32 v022, a150 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v007 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v007, a143 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v023 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mov_b32_e32 v023, v010 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1380 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a136 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_accvgpr_mov_b32 a80, a176 - v_accvgpr_mov_b32 a81, a177 - v_accvgpr_mov_b32 a82, a178 - v_accvgpr_mov_b32 a83, a179 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v009, a133 - v_accvgpr_write_b32 a133, v011 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a156 - v_accvgpr_mov_b32 a77, a157 - v_accvgpr_mov_b32 a78, a158 - v_accvgpr_mov_b32 a79, a159 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201380 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201380 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1400 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a140 - v_accvgpr_mov_b32 a140, a150 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v014 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mov_b32_e32 v012, v016 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - ds_read_b128 a[20:23], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a138 - s_mov_b32 m0, s28 - v_accvgpr_write_b32 a138, v020 - v_accvgpr_read_b32 v014, a138 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v011, a144 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1400 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a139 - v_accvgpr_mov_b32 a139, a141 - s_waitcnt lgkmcnt(8) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - v_mov_b32_e32 v015, v025 - v_accvgpr_write_b32 a141, v019 - v_accvgpr_write_b32 a137, v015 - s_nop 3 - v_accvgpr_mov_b32 a64, a128 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - s_waitcnt lgkmcnt(6) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v016 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v016, a154 - v_accvgpr_write_b32 a154, v000 - v_accvgpr_write_b32 a136, v016 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a156 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a157 - v_accvgpr_mov_b32 a78, a158 - v_accvgpr_mov_b32 a79, a159 - v_accvgpr_mov_b32 a156, a144 - v_accvgpr_write_b32 a144, v023 - v_accvgpr_write_b32 a158, v009 - v_accvgpr_mov_b32 a157, a133 - ds_read_b128 a[64:67], v005 offset:16384 ;.loc 4 920 22 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201400 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - s_waitcnt lgkmcnt(8) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[220:223] - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201400 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v016 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a151 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v011 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a148 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v013 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1480 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a146 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v019 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v011 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v011, a254 - v_accvgpr_read_b32 v021, a255 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mov_b32_e32 v007, v008 - v_mov_b32_e32 v020, v027 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1480 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a147 - v_accvgpr_read_b32 v008, a134 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_write_b32 a134, v012 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_write_b32 a147, v010 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_mov_b32_e32 v011, v026 - v_accvgpr_write_b32 a138, v011 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201480 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201480 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v027 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mov_b32_e32 v025, v013 - v_mov_b32_e32 v027, v007 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v022, a142 - v_accvgpr_read_b32 v024, a151 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v023 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1500 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v026, a143 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v022 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v009, a135 - v_accvgpr_write_b32 a135, v018 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a133 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a133, v009 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1500 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v012 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v012, a156 - v_accvgpr_read_b32 v018, a254 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201500 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201500 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v016 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v016, a139 - v_accvgpr_mov_b32 a139, a153 - v_accvgpr_read_b32 v012, a147 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_accvgpr_mov_b32 a153, a148 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a148 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v013 ;.loc 4 920 22 - ds_read_b128 a[28:31], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1580 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a146 - v_accvgpr_write_b32 a146, v025 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v019 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v019, a140 - v_accvgpr_mov_b32 a140, a151 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v016 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a144 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1580 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201580 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201580 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v020 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a155 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v020, a154 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v015 ;.loc 4 920 22 - ds_read_b128 a[12:15], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v015, a141 - v_accvgpr_write_b32 a141, v026 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v023 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1600 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a156 - v_mov_b32_e32 v023, v014 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v022 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a158 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a154 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v021, a155 - v_accvgpr_mov_b32 a155, a137 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v008, a134 - v_accvgpr_read_b32 v000, a145 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a135 - s_or_b32 s59, s36, 0x1600 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a136 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_write_b32 a135, v016 - v_accvgpr_write_b32 a148, v010 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v010 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201600 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201600 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v000, a152 - v_accvgpr_read_b32 v024, a255 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v025 ;.loc 4 920 22 - ds_read_b128 a[28:31], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1680 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mov_b32_e32 v017, v019 - v_mov_b32_e32 v025, v022 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v015 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v016 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v016, a139 - v_accvgpr_mov_b32 a139, a156 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v026, a146 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1680 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a158 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v018, a137 - v_accvgpr_mov_b32 a137, a154 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_accvgpr_mov_b32 a128, a158 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 4 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201680 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201680 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a138 - s_mov_b32 m0, s51 - v_accvgpr_write_b32 a138, v021 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a132 - s_or_b32 s59, s33, 0x1700 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_mov_b32 a132, a134 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a150, v000 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v022 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mov_b32_e32 v022, v013 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - ds_read_b128 a[20:23], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a157 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a133 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a134, v007 - v_accvgpr_write_b32 a133, v025 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - ds_read_b128 a[52:55], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1700 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v010 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v010, a145 - v_accvgpr_read_b32 v008, a153 - v_accvgpr_write_b32 a145, v015 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201700 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201700 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a151 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v011, a152 - v_accvgpr_write_b32 a152, v010 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_accvgpr_mov_b32 a151, a141 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v026 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1780 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a144 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v015 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v015, a141 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - v_accvgpr_read_b32 v013, a135 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a135, v016 - v_accvgpr_write_b32 a154, v013 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_accvgpr_write_b32 a158, v019 - v_accvgpr_mov_b32 a149, a158 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a254 - s_or_b32 s59, s36, 0x1780 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201780 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201780 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v016, a128 - v_accvgpr_read_b32 v018, a136 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mov_b32_e32 v021, v017 - v_accvgpr_read_b32 v017, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v011 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1800 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a156 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v000, a132 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v016 ;.loc 4 920 22 - ds_read_b128 a[20:23], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - v_accvgpr_read_b32 v020, a157 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - v_accvgpr_mov_b32 a68, a192 - v_accvgpr_mov_b32 a69, a193 - v_accvgpr_mov_b32 a70, a194 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a195 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a147 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1800 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[88:95], a[56:63], a[196:199] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v017 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v017, a145 - v_accvgpr_mov_b32 a145, a136 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201800 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[56:63], a[224:227] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201800 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v019 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a153 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v010, a135 - v_accvgpr_mov_b32 a153, a138 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_write_b32 a135, v016 - v_accvgpr_write_b32 a156, v010 - v_accvgpr_mov_b32 a143, a135 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v026 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1880 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v017 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v022 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a184 - v_accvgpr_mov_b32 a69, a185 - v_accvgpr_mov_b32 a70, a186 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a187 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a144 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v014, a134 - v_accvgpr_write_b32 a134, v009 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a142, v015 - v_accvgpr_mov_b32 a144, a137 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1880 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a177 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[196:199] ;.loc 1 227 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v008, a155 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201880 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[200:203] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[204:207] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[208:211] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[212:215] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[216:219] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[224:227] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201880 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a138 - s_mov_b32 m0, s52 - v_accvgpr_write_b32 a138, v011 - v_accvgpr_read_b32 v024, a138 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[220:223] ;.loc 1 180 0 - v_accvgpr_write_b32 a138, v014 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a158 - s_mov_b32 m0, s51 - v_accvgpr_write_b32 a158, v007 - v_accvgpr_read_b32 v026, a158 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v011 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a150 - s_or_b32 s59, s33, 0x1900 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a255 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v008, a137 - v_accvgpr_write_b32 a137, v017 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_read_b32 v012, a137 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v016 ;.loc 4 920 22 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v016, a146 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a182 - v_accvgpr_mov_b32 a69, a183 - v_accvgpr_mov_b32 a70, a184 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a185 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v008, a148 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v014 ;.loc 4 920 22 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1900 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a254 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v000, a140 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201900 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[228:231] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201900 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v019 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mov_b32_e32 v018, v023 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a152 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v000, a141 - v_accvgpr_write_b32 a141, v021 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1980 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a155 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v017 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mov_b32_e32 v017, v022 - v_accvgpr_write_b32 a147, v017 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v022 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v013, a135 - v_accvgpr_read_b32 v022, a152 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v023 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v023, a154 - v_accvgpr_read_b32 v000, a156 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1980 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a150 - v_accvgpr_mov_b32 a150, a158 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201980 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201980 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a153 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v009, a149 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v010 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v021, a151 - v_accvgpr_mov_b32 a151, a157 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1a00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v025 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v025, a132 - v_accvgpr_mov_b32 a132, a148 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a148, v018 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a144 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v011 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v020, a140 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v014 ;.loc 4 920 22 - ds_read_b128 a[52:55], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1a00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a134 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v025 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v008, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201a00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201a00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v008, a133 - v_accvgpr_mov_b32 a133, a139 - v_accvgpr_mov_b32 a139, a154 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1a80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a149 - v_accvgpr_write_b32 a149, v015 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a140, v016 - v_accvgpr_read_b32 v019, a149 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v017, a155 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a142 - s_mov_b32 m0, s41 - v_accvgpr_mov_b32 a142, a153 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1a80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v007, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201a80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201a80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v000, a255 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v010 ;.loc 4 920 22 - v_accvgpr_read_b32 v010, a141 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_write_b32 a135, v010 - v_accvgpr_mov_b32 a141, a155 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1b00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v015, a138 - v_accvgpr_write_b32 a154, v015 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v000, a150 - v_mov_b32_e32 v013, v025 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v011 ;.loc 4 920 22 - v_accvgpr_read_b32 v011, a157 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a132 - s_or_b32 s59, s36, 0x1b00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_accvgpr_write_b32 a157, v000 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v025 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v025, a143 - v_accvgpr_mov_b32 a143, a142 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201b00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201b00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v009, a146 - v_accvgpr_write_b32 a138, v009 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v022, a134 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v009 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1b80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mov_b32_e32 v014, v024 - v_accvgpr_write_b32 a136, v014 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a147 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v012 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a148 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v023, a150 - v_accvgpr_write_b32 a150, v013 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v012 ;.loc 4 920 22 - ds_read_b128 a[44:47], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v012, a254 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1b80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_accvgpr_mov_b32 a75, a173 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a161 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v012 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v012, a156 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201b80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201b80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a153 - s_mov_b32 m0, s52 - v_mov_b32_e32 v012, v020 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v017 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v010, a149 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1c00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a144 - v_accvgpr_read_b32 v016, a152 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a255 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v010, a137 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v025 ;.loc 4 920 22 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v008, a133 - v_accvgpr_mov_b32 a133, a145 - v_accvgpr_mov_b32 a146, a133 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_write_b32 a133, v012 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v024 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v011, a148 - v_accvgpr_mov_b32 a148, a141 - v_accvgpr_write_b32 a141, v023 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a149, v011 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1c00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mov_b32_e32 v015, v021 - v_accvgpr_write_b32 a134, v015 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_accvgpr_mov_b32 a75, a173 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a158, a149 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v000, a139 - v_accvgpr_read_b32 v013, a156 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201c00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[178:181] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201c00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - ds_read_b128 a[4:7], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v007, a140 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mov_b32_e32 v020, v018 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v009 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1c80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a147 - v_accvgpr_mov_b32 a147, a152 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a152, a156 - v_accvgpr_write_b32 a156, v019 - v_accvgpr_read_b32 v028, a152 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v010 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - ds_read_b128 a[20:23], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v000, a155 - v_accvgpr_mov_b32 a155, a140 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v011 ;.loc 4 920 22 - ds_read_b128 a[44:47], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v021, a254 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1c80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a173 - v_accvgpr_mov_b32 a80, a186 - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v021 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201c80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201c80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v013 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_write_b32 a159, v000 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_accvgpr_read_b32 v033, a159 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v017 ;.loc 4 920 22 - v_accvgpr_read_b32 v017, a135 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_mov_b32 a135, a137 - v_accvgpr_write_b32 a137, v027 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v014 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1d00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a255 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v025 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v024 ;.loc 4 920 22 - v_accvgpr_read_b32 v024, a151 - ds_read_b128 a[44:47], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a154 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a150 - s_or_b32 s59, s36, 0x1d00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a151 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a72, a170 - v_accvgpr_mov_b32 a73, a171 - v_accvgpr_mov_b32 a74, a172 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a173 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v023 ;.loc 4 920 22 - v_accvgpr_read_b32 v023, a157 - ds_read_b128 a[60:63], v023 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v023, a135 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201d00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201d00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a145 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a145, v009 - v_mov_b32_e32 v008, v025 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_accvgpr_read_b32 v026, a145 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v012 ;.loc 4 920 22 - ds_read_b128 a[12:15], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a138 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v012, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1d80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v010 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v010, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - v_accvgpr_read_b32 v009, a139 - ds_read_b128 a[20:23], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v011 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v015, a154 - v_accvgpr_read_b32 v011, a141 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v027 ;.loc 4 920 22 - ds_read_b128 a[52:55], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1d80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a136 - v_accvgpr_read_b32 v027, a146 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a168 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a73, a169 - v_accvgpr_mov_b32 a74, a170 - v_accvgpr_mov_b32 a75, a171 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a136, a147 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v021 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_mov_b32_e32 v021, v022 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] - v_accvgpr_write_b32 a160, v017 - v_accvgpr_mov_b32 a161, a138 - v_accvgpr_mov_b32 a152, a160 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201d80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201d80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v013 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a153 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v017, a147 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1e00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a138, v007 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v019, a150 - v_accvgpr_read_b32 v000, a133 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a133, v012 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v025 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a144 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v025, a157 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1e00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a72, a168 - v_accvgpr_mov_b32 a73, a169 - v_accvgpr_mov_b32 a74, a170 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a171 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v019 ;.loc 4 920 22 - ds_read_b128 a[60:63], v025 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a186 - v_accvgpr_mov_b32 a77, a187 - v_accvgpr_mov_b32 a78, a188 - v_accvgpr_mov_b32 a79, a189 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201e00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201e00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v027 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v017, a134 - v_accvgpr_write_b32 a134, v000 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v022 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1e80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v022, a254 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v023 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a149 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a137 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v020 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1e80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a184 - v_accvgpr_mov_b32 a77, a185 - v_accvgpr_mov_b32 a78, a186 - v_accvgpr_mov_b32 a79, a187 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201e80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[148:151], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[226:229] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201e80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v028 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a160 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v028, a139 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a140 - s_mov_b32 m0, s51 - v_accvgpr_mov_b32 a140, a137 - v_accvgpr_mov_b32 a137, a141 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a156 - s_or_b32 s59, s33, 0x1f00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - v_accvgpr_read_b32 v012, a159 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v012, a133 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a255 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v008, a132 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a170 - v_accvgpr_mov_b32 a69, a171 - v_accvgpr_mov_b32 a70, a172 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a173 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1f00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a161 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v019 ;.loc 4 920 22 - ds_read_b128 a[60:63], v025 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a184 - v_accvgpr_mov_b32 a77, a185 - v_accvgpr_mov_b32 a78, a186 - v_accvgpr_mov_b32 a79, a187 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x201f00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[144:147] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - s_nop 1 - v_accvgpr_write_b32 a145, v024 - v_mov_b32_e32 v024, v025 - v_accvgpr_read_b32 v025, a155 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[148:151] ;.loc 1 196 0 - v_accvgpr_write_b32 a144, v014 - v_accvgpr_read_b32 v014, a255 - v_accvgpr_read_b32 v013, a145 - v_accvgpr_write_b32 a147, v010 - v_accvgpr_mov_b32 a146, a155 - v_accvgpr_write_b32 a153, v013 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_accvgpr_write_b32 a150, v026 - v_accvgpr_mov_b32 a149, a154 - v_accvgpr_write_b32 a151, v027 - v_accvgpr_read_b32 v032, a149 - v_accvgpr_write_b32 a148, v029 - v_accvgpr_write_b32 a154, v021 - v_accvgpr_read_b32 v030, a148 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 - v_accvgpr_mov_b32 a148, a138 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[226:229] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201f00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v027 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a136 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v027, a144 - v_accvgpr_write_b32 a136, v017 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 - v_accvgpr_write_b32 a155, v007 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a161 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x1f80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v023 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v023, a151 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v026 ;.loc 4 920 22 - ds_read_b128 a[20:23], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a158 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v026, a142 - v_accvgpr_mov_b32 a142, a149 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_mov_b32 a139, a142 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - ds_read_b128 a[44:47], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v000, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v020 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x1f80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a156 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v029 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - ds_read_b128 a[68:71], v006 offset:49152 ;.loc 4 920 22 - v_accvgpr_read_b32 v022, a138 - v_accvgpr_read_b32 v029, a135 - s_waitcnt lgkmcnt(11) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a135, a136 - s_nop 5 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(7) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x201f80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[230:233] ;.loc 1 186 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[226:229] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x201f80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v026 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mov_b32_e32 v000, v018 - v_accvgpr_write_b32 a145, v000 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v025 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2000 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v009 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a182 - v_accvgpr_mov_b32 a69, a183 - v_accvgpr_mov_b32 a70, a184 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a185 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v027 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v032 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2000 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mov_b32_e32 v011, v019 - v_accvgpr_write_b32 a149, v011 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a80, a174 - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v019 ;.loc 4 920 22 - ds_read_b128 a[60:63], v024 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202000 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - s_nop 0 ;.loc 3 94 8 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - s_nop 1 - v_accvgpr_write_b32 a197, v019 - v_accvgpr_write_b32 a196, v018 - v_accvgpr_write_b32 a195, v017 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[0:7], a[210:213] ;.loc 1 196 0 - v_accvgpr_write_b32 a194, v016 - v_accvgpr_read_b32 v017, a134 - v_accvgpr_read_b32 v016, a136 - v_accvgpr_read_b32 v018, a140 - v_mov_b32_e32 v019, v020 - v_accvgpr_read_b32 v034, a194 - v_accvgpr_mov_b32 a134, a161 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 - v_accvgpr_read_b32 v035, a195 - v_accvgpr_read_b32 v036, a196 - v_accvgpr_read_b32 v037, a197 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[238:241] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[104:111], a[48:55], a[230:233] ;.loc 1 202 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202000 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v022 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v017 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v015 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2080 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v021, a150 - v_mov_b32_e32 v015, v031 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v031 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v031, a158 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v021 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a182 - v_accvgpr_mov_b32 a69, a183 - v_accvgpr_mov_b32 a70, a184 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a185 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v020 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a254 - s_or_b32 s59, s36, 0x2080 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a186 - v_accvgpr_mov_b32 a77, a187 - v_accvgpr_mov_b32 a78, a188 - v_accvgpr_mov_b32 a79, a189 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a190 - v_accvgpr_mov_b32 a81, a191 - v_accvgpr_mov_b32 a82, a192 - v_accvgpr_mov_b32 a83, a193 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[88:95], a[56:63], a[198:201] ;.loc 1 227 0 - ds_read_b128 a[56:59], v020 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s37 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a174 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202080 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[0:7], a[202:205] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[96:103], a[32:39], a[206:209] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[0:7], a[210:213] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[214:217] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v034 v035 v036 v037 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202080 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v010 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a152 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v012, a144 - v_accvgpr_mov_b32 a144, a151 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[222:225] ;.loc 1 180 0 - v_accvgpr_write_b32 a151, v017 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v026 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v026, a139 - v_accvgpr_mov_b32 a139, a149 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v025 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2100 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a141 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v009 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v009, a255 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v008, a147 - v_accvgpr_read_b32 v014, a145 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a182 - v_accvgpr_mov_b32 a69, a183 - v_accvgpr_mov_b32 a70, a184 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a185 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v027 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v013, a143 - v_accvgpr_read_b32 v027, a154 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v032 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2100 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a154 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a186 - v_accvgpr_mov_b32 a77, a187 - v_accvgpr_mov_b32 a78, a188 - v_accvgpr_mov_b32 a79, a189 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a190 - v_accvgpr_mov_b32 a81, a191 - v_accvgpr_mov_b32 a82, a192 - v_accvgpr_mov_b32 a83, a193 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[198:201] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v024 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v011, a142 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s12 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a174 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a175 - v_accvgpr_mov_b32 a82, a176 - v_accvgpr_mov_b32 a83, a177 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202100 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[202:205] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[206:209] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[158:161] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - s_nop 5 - v_accvgpr_mov_b32 a160, a137 - v_accvgpr_write_b32 a158, v012 - v_accvgpr_mov_b32 a159, a148 - v_accvgpr_read_b32 v025, a159 - v_accvgpr_mov_b32 a148, a154 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202100 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v022 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v023, a144 - v_accvgpr_read_b32 v022, a153 - v_accvgpr_write_b32 a141, v023 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_accvgpr_mov_b32 a144, a156 - v_accvgpr_write_b32 a142, v022 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v017 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a134 - s_mov_b32 m0, s43 - v_accvgpr_mov_b32 a134, a143 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2180 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v021 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a182 - v_accvgpr_mov_b32 a69, a183 - v_accvgpr_mov_b32 a70, a184 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a185 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v016 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mov_b32_e32 v016, v018 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2180 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a76, a186 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a77, a187 - v_accvgpr_mov_b32 a78, a188 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a189 - v_accvgpr_mov_b32 a80, a170 - v_accvgpr_mov_b32 a81, a171 - v_accvgpr_mov_b32 a82, a172 - v_accvgpr_mov_b32 a83, a173 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 - ds_read_b128 a[56:59], v020 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v020, a149 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 - s_nop 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[40:47], a[64:67] - s_nop 4 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - s_nop 0 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202180 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[222:225] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[226:229] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202180 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a133 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_mov_b32 a133, a152 - v_accvgpr_write_b32 a152, v007 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a146 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v014 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a156 - s_or_b32 s59, s33, 0x2200 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a132 - s_mov_b32 m0, s29 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v010 ;.loc 4 920 22 - ds_read_b128 a[20:23], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a153 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a178 - v_accvgpr_mov_b32 a69, a179 - v_accvgpr_mov_b32 a70, a180 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a181 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v012 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a160 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v012, a138 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - ds_read_b128 a[52:55], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a149 - s_or_b32 s59, s36, 0x2200 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v024 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_mov_b32_e32 v009, v024 - v_accvgpr_read_b32 v024, a147 - v_accvgpr_write_b32 a153, v009 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_accvgpr_write_b32 a147, v010 - v_accvgpr_write_b32 a143, v024 - v_accvgpr_mov_b32 a149, a143 - s_nop 3 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 - s_nop 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] - s_nop 4 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - s_nop 0 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202200 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[230:233] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[182:185] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202200 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a155 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v017 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mov_b32_e32 v012, v015 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2280 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a133 - v_accvgpr_write_b32 a138, v000 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a133, a135 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v015, a136 - v_accvgpr_mov_b32 a136, a145 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v021 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v021, a255 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a254 - s_or_b32 s59, s36, 0x2280 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202280 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202280 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v024 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v008, a156 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v013, a160 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v014 ;.loc 4 920 22 - v_accvgpr_read_b32 v014, a146 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2300 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v008, a158 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v010 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v008, a134 - v_accvgpr_write_b32 a134, v013 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v011 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2300 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a144 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v020 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v009, a132 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202300 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202300 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a151 - v_accvgpr_read_b32 v025, a155 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a144, v025 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_accvgpr_mov_b32 a151, a146 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2380 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a150 - v_mov_b32_e32 v017, v027 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v027 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v015, a148 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2380 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v018, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 - v_accvgpr_mov_b32 a76, a182 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] ;.loc 1 186 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202380 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202380 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v024 ;.loc 4 920 22 - ds_read_b128 a[4:7], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v000, a153 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2400 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a146 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v011 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v010 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a158 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v021, a138 - v_accvgpr_write_b32 a150, v010 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_write_b32 a145, v021 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v022, a159 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v026 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2400 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a141 - v_accvgpr_write_b32 a141, v023 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_write_b32 a138, v013 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v020 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_mov_b32_e32 v000, v012 - v_accvgpr_read_b32 v020, a254 - v_accvgpr_write_b32 a137, v000 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202400 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[180:183] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202400 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v022 ;.loc 4 920 22 - ds_read_b128 a[4:7], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v025, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2480 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v012 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v012, a135 - v_accvgpr_write_b32 a135, v019 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v027 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2480 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v020 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v020, a142 - v_accvgpr_write_b32 a142, v022 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_accvgpr_mov_b32 a154, a153 - v_accvgpr_read_b32 v023, a154 - v_accvgpr_mov_b32 a155, a151 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 2 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202480 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[8:15], a[200:203] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[204:207] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202480 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v024 ;.loc 4 920 22 - ds_read_b128 a[4:7], v009 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v009, a139 - v_accvgpr_write_b32 a151, v009 - v_accvgpr_mov_b32 a139, a154 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_accvgpr_write_b32 a154, v017 - v_accvgpr_mov_b32 a143, a151 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a146 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2500 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a147 - v_accvgpr_read_b32 v018, a255 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a147, v026 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v011 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a134 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a134, v016 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v026 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v026, a153 - s_or_b32 s59, s36, 0x2500 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_write_b32 a153, v010 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v026, a145 - v_accvgpr_mov_b32 a145, a153 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202500 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[200:203] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202500 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v022 ;.loc 4 920 22 - ds_read_b128 a[4:7], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a141 - v_accvgpr_read_b32 v022, a144 - s_mov_b32 m0, s44 - v_accvgpr_mov_b32 a144, a152 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_accvgpr_mov_b32 a152, a148 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2580 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a149 - v_accvgpr_read_b32 v015, a136 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a149, v025 - v_accvgpr_read_b32 v024, a149 - v_accvgpr_write_b32 a149, v022 - v_accvgpr_write_b32 a140, v024 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v027 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v012, a254 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2580 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a138 - v_accvgpr_read_b32 v016, a144 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v012 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202580 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[196:199] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202580 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mov_b32_e32 v025, v011 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v021, a147 - v_accvgpr_mov_b32 a147, a141 - v_accvgpr_write_b32 a138, v021 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v015 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2600 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a254 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v011 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v011, a142 - v_accvgpr_write_b32 a142, v000 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v008 ;.loc 4 920 22 - ds_read_b128 a[20:23], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a150 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v018, a155 - v_accvgpr_write_b32 a155, v026 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v008, a148 - v_accvgpr_write_b32 a148, v018 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v021 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2600 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a135 - v_accvgpr_mov_b32 a135, a136 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a136, a144 - v_accvgpr_write_b32 a146, v010 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[180:183] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v023 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v009, a134 - v_accvgpr_write_b32 a134, v007 - v_accvgpr_write_b32 a144, v009 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202600 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202600 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v019 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v013, a137 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2680 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a133 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v013 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v027 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v027, a150 - v_accvgpr_write_b32 a150, v011 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2680 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v012 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v012, a255 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202680 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202680 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v007, a153 - v_accvgpr_mov_b32 a153, a137 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_mov_b32 a132, a133 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v015 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2700 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v015, v020 - v_accvgpr_write_b32 a141, v015 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v027 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v020, a142 - v_accvgpr_write_b32 a142, v000 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v021 ;.loc 4 920 22 - ds_read_b128 a[52:55], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a151 - s_or_b32 s59, s36, 0x2700 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v021, a152 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_accvgpr_write_b32 a151, v019 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v023 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v007, a147 - v_accvgpr_read_b32 v023, a145 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202700 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202700 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v019 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mov_b32_e32 v019, v025 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v007 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v022, a143 - v_accvgpr_read_b32 v007, a155 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2780 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a135 - v_accvgpr_mov_b32 a135, a140 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v013 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v013, a141 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v017, a134 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2780 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a147 - v_accvgpr_read_b32 v010, a136 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v014 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202780 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202780 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v017 ;.loc 4 920 22 - ds_read_b128 a[4:7], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v026 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2800 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v018, v027 - v_accvgpr_write_b32 a157, v018 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - s_waitcnt lgkmcnt(0) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v012, a138 - v_accvgpr_read_b32 v000, a151 - v_accvgpr_write_b32 a138, v031 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_write_b32 a133, v012 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v027 ;.loc 4 920 22 - ds_read_b128 a[44:47], v015 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v015, a139 - v_accvgpr_read_b32 v024, a64 - v_accvgpr_read_b32 v025, a65 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_read_b32 v026, a66 - v_accvgpr_read_b32 v027, a67 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_write_b32 a183, v027 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_accvgpr_write_b32 a182, v026 - v_accvgpr_write_b32 a181, v025 - v_accvgpr_write_b32 a180, v024 - v_accvgpr_read_b32 v025, a150 - v_accvgpr_read_b32 v026, a151 - v_accvgpr_read_b32 v024, a149 - v_accvgpr_read_b32 v027, a153 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2800 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_mov_b32 a151, a147 - v_accvgpr_write_b32 a139, v019 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a150, a136 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v015 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a176 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202800 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202800 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v011 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a149 - s_mov_b32 m0, s44 - v_mov_b32_e32 v011, v028 - v_accvgpr_write_b32 a149, v011 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v000, a137 - v_accvgpr_write_b32 a137, v015 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v010 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2880 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a154 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v000, a144 - v_accvgpr_read_b32 v028, a154 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v031 ;.loc 4 920 22 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mov_b32_e32 v031, v029 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a146 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2880 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a140 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a71, a171 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a73, a165 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a74, a166 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_write_b32 a140, v021 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v014 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v014, a148 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a176 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202880 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[180:183] ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202880 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v017 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a148 - s_mov_b32 m0, s51 - v_accvgpr_mov_b32 a148, a138 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2900 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a142 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v019, a155 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a255 - ds_read_b128 a[20:23], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mov_b32_e32 v013, v016 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2900 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a141 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_accvgpr_mov_b32 a75, a167 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a175 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v015 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v015, a142 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[232:235], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202900 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202900 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v026 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v009, a146 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v010 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2980 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mov_b32_e32 v010, v030 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v027 ;.loc 4 920 22 - ds_read_b128 a[36:39], v029 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v029, a138 - v_accvgpr_write_b32 a138, v019 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v028 ;.loc 4 920 22 - ds_read_b128 a[20:23], v011 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v011, a254 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v029 ;.loc 4 920 22 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a144 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2980 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - s_waitcnt lgkmcnt(8) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - s_waitcnt lgkmcnt(6) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v030 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v030, a139 - v_accvgpr_write_b32 a139, v020 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a172 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202980 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - s_waitcnt lgkmcnt(8) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[232:235] - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[56:63], a[222:225] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202980 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v017 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v000, a151 - v_accvgpr_read_b32 v017, a150 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v016 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2a00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a133 - v_accvgpr_write_b32 a133, v009 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v030 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v007 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mov_b32_e32 v007, v031 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a144 - v_accvgpr_mov_b32 a65, a145 - v_accvgpr_mov_b32 a66, a146 - v_accvgpr_mov_b32 a67, a147 - v_accvgpr_mov_b32 a68, a168 - v_accvgpr_mov_b32 a69, a169 - v_accvgpr_mov_b32 a70, a170 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a171 - v_accvgpr_write_b32 a147, v028 - v_accvgpr_write_b32 a146, v027 - v_accvgpr_mov_b32 a144, a146 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v018, a137 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2a00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_accvgpr_mov_b32 a75, a179 - v_mfma_f32_16x16x128_f8f6f4 a[152:155], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s12 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a184 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202a00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202a00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v026 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a136 - s_mov_b32 m0, s43 - v_accvgpr_write_b32 a136, v016 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v021 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2a80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_read_b32 v021, a134 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a150, v000 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v027 ;.loc 4 920 22 - ds_read_b128 a[36:39], v031 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v027, a140 - v_accvgpr_read_b32 v031, a142 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a142, v023 - v_accvgpr_write_b32 a140, v007 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v028 ;.loc 4 920 22 - v_accvgpr_read_b32 v028, a149 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a149, v030 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a188 - v_accvgpr_mov_b32 a65, a189 - v_accvgpr_mov_b32 a66, a190 - v_accvgpr_mov_b32 a67, a191 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v029 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v029, a135 - v_accvgpr_mov_b32 a135, a141 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2a80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a148 - v_accvgpr_mov_b32 a148, a151 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[152:155] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v010 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[24:31], a[64:67] - s_nop 0 - v_accvgpr_write_b32 a154, v013 - v_accvgpr_write_b32 a155, v014 - v_accvgpr_write_b32 a152, v010 - v_accvgpr_read_b32 v010, a133 - v_accvgpr_mov_b32 a141, a154 - v_accvgpr_mov_b32 a153, a140 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202a80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202a80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v021 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v020, a157 - v_accvgpr_read_b32 v019, a151 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v013 ;.loc 4 920 22 - ds_read_b128 a[28:31], v014 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2b00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - s_waitcnt lgkmcnt(0) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a71, a169 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v030 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v030, a255 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v030 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v012, a64 - v_accvgpr_read_b32 v013, a65 - v_accvgpr_read_b32 v014, a66 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_read_b32 v015, a67 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_write_b32 a185, v015 - v_accvgpr_write_b32 a184, v014 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_accvgpr_write_b32 a183, v013 - v_accvgpr_write_b32 a182, v012 - v_accvgpr_read_b32 v013, a255 - v_accvgpr_read_b32 v012, a136 - v_accvgpr_read_b32 v015, a142 - v_accvgpr_read_b32 v014, a143 - v_accvgpr_write_b32 a151, v013 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2b00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mov_b32_e32 v016, v026 - v_accvgpr_read_b32 v023, a138 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a76, a162 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a165 - v_accvgpr_mov_b32 a80, a170 - v_accvgpr_mov_b32 a81, a171 - v_accvgpr_mov_b32 a82, a172 - v_accvgpr_mov_b32 a83, a173 - v_accvgpr_mov_b32 a142, a148 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v018 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_mov_b32_e32 v018, v024 - v_accvgpr_read_b32 v022, a139 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202b00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[226:229] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202b00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v026 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v026, a146 - v_accvgpr_write_b32 a146, v009 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v019 ;.loc 4 920 22 - ds_read_b128 a[12:15], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v024, a147 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2b80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v026 ;.loc 4 920 22 - ds_read_b128 a[36:39], v007 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v007, a135 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v000, a152 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2b80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a166 - v_accvgpr_mov_b32 a69, a167 - v_accvgpr_mov_b32 a70, a168 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a71, a169 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a74, a176 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_mov_b32 a80, a170 - v_accvgpr_mov_b32 a81, a171 - v_accvgpr_mov_b32 a82, a172 - v_accvgpr_mov_b32 a83, a173 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v000 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a154 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a178 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202b80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[56:63], a[222:225] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[182:185] ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202b80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v021 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v021, a149 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v022 ;.loc 4 920 22 - ds_read_b128 a[12:15], v023 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a155 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2c00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v000, v020 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a147, v000 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v021 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v020, a137 - v_accvgpr_write_b32 a137, v016 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2c00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a80, a168 - v_accvgpr_mov_b32 a81, a169 - v_accvgpr_mov_b32 a82, a170 - v_accvgpr_mov_b32 a83, a171 - v_accvgpr_mov_b32 a75, a177 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v014 ;.loc 4 920 22 - ds_read_b128 a[60:63], v020 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_accvgpr_write_b32 a156, v018 - v_accvgpr_mov_b32 a158, a150 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - s_nop 1 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - s_mov_b32 m0, s12 ;.loc 3 94 8 - s_nop 5 - v_accvgpr_mov_b32 a80, a186 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - v_accvgpr_mov_b32 a81, a187 - v_accvgpr_mov_b32 a82, a188 - v_accvgpr_mov_b32 a83, a189 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[80:83] ;.loc 1 203 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202c00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202c00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v016 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v016, a140 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v019 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mov_b32_e32 v019, v017 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2c80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v026 ;.loc 4 920 22 - ds_read_b128 a[36:39], v016 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - v_accvgpr_read_b32 v009, a150 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a152 - v_accvgpr_mov_b32 a152, a139 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_mov_b32 a139, a138 - v_accvgpr_write_b32 a138, v020 - v_accvgpr_mov_b32 a150, a149 - v_accvgpr_mov_b32 a149, a135 - v_accvgpr_mov_b32 a135, a143 - v_accvgpr_mov_b32 a143, a158 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2c80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a134 - v_accvgpr_write_b32 a134, v012 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_accvgpr_mov_b32 a80, a168 - v_accvgpr_mov_b32 a81, a169 - v_accvgpr_mov_b32 a82, a170 - v_accvgpr_mov_b32 a83, a171 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v011, a155 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a190 - v_accvgpr_mov_b32 a65, a191 - v_accvgpr_mov_b32 a66, a192 - v_accvgpr_mov_b32 a67, a193 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202c80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202c80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v022 ;.loc 4 920 22 - ds_read_b128 a[12:15], v023 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v022, a154 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v023, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v022 ;.loc 4 920 22 - ds_read_b128 a[28:31], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2d00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a138 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v021 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v021, a142 - v_accvgpr_mov_b32 a142, a151 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v013 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v013, a254 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - ds_read_b128 a[44:47], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v000, a158 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a157, v007 - v_accvgpr_mov_b32 a154, a157 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2d00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a137 - v_accvgpr_write_b32 a137, v009 - s_waitcnt lgkmcnt(8) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a145, a137 - s_nop 5 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - s_waitcnt lgkmcnt(6) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[194:197] ;.loc 1 227 0 - ds_read_b128 a[56:59], v014 ;.loc 4 920 22 - ds_read_b128 a[60:63], v020 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v020, a146 - v_accvgpr_write_b32 a146, v024 - v_accvgpr_write_b32 a136, v020 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] - v_accvgpr_read_b32 v014, a149 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202d00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[198:201] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[202:205] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - s_waitcnt lgkmcnt(8) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[226:229] - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[206:209] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[210:213] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[214:217] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[230:233] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[234:237] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202d00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[218:221] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v018, a140 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v017 ;.loc 4 920 22 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a144 - s_or_b32 s59, s33, 0x2d80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v018 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a133 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2d80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a160 - v_accvgpr_mov_b32 a77, a161 - v_accvgpr_mov_b32 a78, a162 - v_accvgpr_mov_b32 a79, a163 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v013, a139 - v_accvgpr_read_b32 v009, a135 - v_accvgpr_write_b32 a135, v027 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] - v_accvgpr_read_b32 v010, a135 - v_accvgpr_write_b32 a148, v009 - s_nop 4 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202d80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[222:225] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202d80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a152 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a155 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v022 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a150 - s_or_b32 s59, s33, 0x2e00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v022, a156 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a156, a133 - v_accvgpr_write_b32 a133, v015 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a151 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a147 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - v_accvgpr_read_b32 v008, a149 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a134 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a134, v012 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - v_accvgpr_mov_b32 a68, a164 - v_accvgpr_mov_b32 a69, a165 - v_accvgpr_mov_b32 a70, a166 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a167 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2e00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a179 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v011 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202e00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[192:195] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[226:229] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202e00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v012 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v012, a143 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v023 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v023, a151 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2e80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v018 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v018, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mov_b32_e32 v016, v018 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v024 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v024, a152 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v020 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v020, a141 - v_accvgpr_read_b32 v012, a155 - v_accvgpr_mov_b32 a141, a138 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a138, a149 - v_accvgpr_mov_b32 a149, a135 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a254 - v_accvgpr_read_b32 v007, a137 - s_or_b32 s59, s36, 0x2e80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a176 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a73, a177 - v_accvgpr_mov_b32 a74, a178 - v_accvgpr_mov_b32 a75, a179 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a137, a147 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a150 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a172 - v_accvgpr_mov_b32 a65, a173 - v_accvgpr_mov_b32 a66, a174 - v_accvgpr_mov_b32 a67, a175 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202e80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[188:191] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[230:233] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202e80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v018 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v013, a147 - v_accvgpr_mov_b32 a147, a141 - v_accvgpr_read_b32 v026, a147 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2f00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x2f00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a134 - v_mov_b32_e32 v015, v025 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_write_b32 a134, v012 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v011 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v009, a144 - v_mov_b32_e32 v011, v022 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x202f00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202f00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v025 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v025, a157 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v022, a143 - v_accvgpr_mov_b32 a143, a152 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x2f80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v009 ;.loc 4 920 22 - v_accvgpr_read_b32 v009, a140 - ds_read_b128 a[36:39], v009 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a146 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a140, v020 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a136 - s_mov_b32 m0, s39 - v_accvgpr_mov_b32 a136, a150 - v_accvgpr_read_b32 v017, a136 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_write_b32 a152, v009 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v025 ;.loc 4 920 22 - v_accvgpr_read_b32 v025, a156 - ds_read_b128 a[52:55], v025 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v025, a254 - s_or_b32 s59, s36, 0x2f80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a158 - v_accvgpr_mov_b32 a77, a159 - v_accvgpr_mov_b32 a78, a160 - v_accvgpr_mov_b32 a79, a161 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v025 ;.loc 4 920 22 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_write_b32 a136, v007 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x202f80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x202f80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v018 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v024 ;.loc 4 920 22 - ds_read_b128 a[12:15], v027 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v027, a156 - v_mov_b32_e32 v024, v019 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3000 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a148 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v000, a133 - v_accvgpr_write_b32 a133, v015 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v023, a153 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v014, a143 - v_mov_b32_e32 v013, v020 - v_accvgpr_write_b32 a143, v024 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - v_accvgpr_mov_b32 a68, a162 - v_accvgpr_mov_b32 a69, a163 - v_accvgpr_mov_b32 a70, a164 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a165 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3000 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a186 - v_accvgpr_mov_b32 a77, a187 - v_accvgpr_mov_b32 a78, a188 - v_accvgpr_mov_b32 a79, a189 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a177 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v012 ;.loc 4 920 22 - v_accvgpr_read_b32 v012, a141 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_write_b32 a141, v021 - v_accvgpr_read_b32 v012, a134 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203000 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203000 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v015 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v008, a157 - v_accvgpr_read_b32 v015, a142 - v_accvgpr_mov_b32 a142, a133 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v021 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v021, a146 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a144 - s_or_b32 s59, s33, 0x3080 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a138 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a138, v000 - v_accvgpr_write_b32 a155, v019 - v_accvgpr_write_b32 a151, v010 - v_accvgpr_mov_b32 a144, a151 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v023 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v021 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a133 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3080 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a139 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a174 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a73, a175 - v_accvgpr_mov_b32 a74, a176 - v_accvgpr_mov_b32 a75, a177 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a185 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v025 ;.loc 4 920 22 - v_accvgpr_read_b32 v025, a145 - ds_read_b128 a[60:63], v025 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203080 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203080 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v018 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v018, a137 - v_accvgpr_write_b32 a137, v017 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v014 ;.loc 4 920 22 - ds_read_b128 a[12:15], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v008, a132 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3100 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a141 - v_accvgpr_mov_b32 a141, a146 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v007 ;.loc 4 920 22 - ds_read_b128 a[52:55], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a148 - s_or_b32 s59, s36, 0x3100 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a135 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a72, a172 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a73, a173 - v_accvgpr_mov_b32 a74, a174 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a175 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_accvgpr_write_b32 a135, v016 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a180 - v_accvgpr_mov_b32 a77, a181 - v_accvgpr_mov_b32 a78, a182 - v_accvgpr_mov_b32 a79, a183 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203100 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203100 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v024 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3180 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a152 - v_mov_b32_e32 v024, v011 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v023 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v023, a154 - v_accvgpr_write_b32 a154, v018 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a148, v023 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v021 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v021, a140 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v000, a254 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v023 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3180 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a168 - v_accvgpr_mov_b32 a73, a169 - v_accvgpr_mov_b32 a74, a170 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a171 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v025 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v025, a152 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a128, v014 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 4 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203180 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203180 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v016, a153 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v014 ;.loc 4 920 22 - v_accvgpr_read_b32 v014, a139 - ds_read_b128 a[12:15], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_write_b32 a139, v015 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v013 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3200 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a136 - v_mov_b32_e32 v013, v022 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a150, v012 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v017, a138 - v_accvgpr_write_b32 a152, v017 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v015, a146 - v_accvgpr_mov_b32 a146, a147 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a156 - v_accvgpr_mov_b32 a65, a157 - v_accvgpr_mov_b32 a66, a158 - v_accvgpr_mov_b32 a67, a159 - v_accvgpr_mov_b32 a68, a160 - v_accvgpr_mov_b32 a69, a161 - v_accvgpr_mov_b32 a70, a162 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a163 - v_accvgpr_mov_b32 a157, a154 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v019 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v018, a143 - v_accvgpr_read_b32 v019, a149 - v_accvgpr_mov_b32 a143, a128 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3200 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a72, a168 - v_accvgpr_mov_b32 a73, a169 - v_accvgpr_mov_b32 a74, a170 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a171 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - ds_read_b128 a[60:63], v026 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v026, a157 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203200 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203200 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v008 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v009, a135 - v_accvgpr_write_b32 a135, v013 - v_accvgpr_read_b32 v008, a157 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3280 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v016 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v010, a134 - v_accvgpr_mov_b32 a134, a155 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v022, a145 - v_accvgpr_write_b32 a145, v014 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v023 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3280 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a139 - v_accvgpr_write_b32 a139, v022 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a72, a168 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a73, a169 - v_accvgpr_mov_b32 a74, a170 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a171 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v022 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a128 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a164 - v_accvgpr_mov_b32 a65, a165 - v_accvgpr_mov_b32 a66, a166 - v_accvgpr_mov_b32 a67, a167 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203280 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203280 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v014, a137 - v_accvgpr_read_b32 v000, a154 - v_accvgpr_write_b32 a154, v007 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v021 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3300 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v014 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a155 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v000, a133 - v_accvgpr_mov_b32 a155, a141 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_accvgpr_write_b32 a141, v025 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a180 - v_accvgpr_mov_b32 a65, a181 - v_accvgpr_mov_b32 a66, a182 - v_accvgpr_mov_b32 a67, a183 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3300 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a151 - v_accvgpr_write_b32 a151, v009 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a188 - v_accvgpr_mov_b32 a81, a189 - v_accvgpr_mov_b32 a82, a190 - v_accvgpr_mov_b32 a83, a191 - v_mov_b32_e32 v012, v020 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a147 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203300 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203300 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a132 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v020 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v020, a134 - v_accvgpr_write_b32 a134, v012 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v019 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3380 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v019, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v016 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v015 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mov_b32_e32 v015, v018 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v025 ;.loc 4 920 22 - ds_read_b128 a[44:47], v013 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a148 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v025, a144 - v_accvgpr_mov_b32 a144, a140 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a157, a144 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v013 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a254 - s_or_b32 s59, s36, 0x3380 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v022 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v022, a145 - v_accvgpr_read_b32 v013, a141 - v_accvgpr_write_b32 a141, v020 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_mov_b32_e32 v011, v022 - v_accvgpr_write_b32 a140, v011 - s_nop 4 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203380 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203380 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v009 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a143 - s_mov_b32 m0, s52 - v_accvgpr_write_b32 a143, v023 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v021 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3400 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mov_b32_e32 v010, v024 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v014 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mov_b32_e32 v014, v016 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v023, a150 - v_accvgpr_mov_b32 a150, a151 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v008 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a152 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v023 ;.loc 4 920 22 - ds_read_b128 a[52:55], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a154 - s_or_b32 s59, s36, 0x3400 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a173 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v008 ;.loc 4 920 22 - ds_read_b128 a[60:63], v007 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v007, a142 - v_accvgpr_read_b32 v008, a133 - v_accvgpr_write_b32 a133, v010 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203400 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[182:185] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203400 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v000 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v000, a149 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v012 ;.loc 4 920 22 - ds_read_b128 a[12:15], v024 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v012, a135 - v_accvgpr_read_b32 v024, a143 - v_accvgpr_write_b32 a143, v007 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_accvgpr_write_b32 a135, v015 - v_mov_b32_e32 v017, v024 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v018 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3480 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a155 - v_accvgpr_read_b32 v018, a148 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a148, v014 - v_accvgpr_write_b32 a138, v018 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v016 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mov_b32_e32 v016, v027 - v_accvgpr_write_b32 a136, v016 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v000 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v000, a254 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3480 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v027, a147 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - ds_read_b128 a[60:63], v019 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a151 - v_accvgpr_write_b32 a151, v009 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203480 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203480 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v000 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v000, a137 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v022, a154 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v021 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3500 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v021, a132 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v000 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v000, a148 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v026 ;.loc 4 920 22 - ds_read_b128 a[44:47], v020 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_mov_b32_e32 v020, v023 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v023 ;.loc 4 920 22 - v_accvgpr_read_b32 v023, a152 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3500 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v027 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203500 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[104:111], a[56:63], a[214:217] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203500 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a134 - s_mov_b32 m0, s44 - v_accvgpr_write_b32 a134, v012 - v_accvgpr_write_b32 a147, v007 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v007 ;.loc 4 920 22 - ds_read_b128 a[12:15], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a149 - s_mov_b32 m0, s43 - v_accvgpr_mov_b32 a149, a152 - v_accvgpr_write_b32 a152, v021 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v015 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3580 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mov_b32_e32 v015, v013 - v_accvgpr_write_b32 a153, v015 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v014 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v014, a155 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v014 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v013 ;.loc 4 920 22 - ds_read_b128 a[44:47], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v013, a254 - v_accvgpr_read_b32 v012, a150 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v018 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3580 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a141 - v_mov_b32_e32 v016, v026 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v019 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v019, a137 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203580 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[218:221] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[214:217] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203580 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v012 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v012, a135 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[210:213] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v009 ;.loc 4 920 22 - ds_read_b128 a[12:15], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a144 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v009, a155 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v011 ;.loc 4 920 22 - ds_read_b128 a[28:31], v008 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3600 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a133 - v_accvgpr_read_b32 v011, a136 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a136, a141 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v026 ;.loc 4 920 22 - ds_read_b128 a[44:47], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v026, a150 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v020 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3600 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a143 - v_accvgpr_write_b32 a143, v010 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v027 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v027, a151 - v_mov_b32_e32 v022, v025 - v_accvgpr_write_b32 a137, v022 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203600 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[186:189] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[206:209] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203600 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v023 ;.loc 4 920 22 - ds_read_b128 a[4:7], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v021, a140 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v007 ;.loc 4 920 22 - ds_read_b128 a[12:15], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v007, a144 - v_accvgpr_mov_b32 a144, a143 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v012 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3680 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a134 - v_accvgpr_write_b32 a134, v016 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a156, v010 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v025 ;.loc 4 920 22 - ds_read_b128 a[36:39], v000 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_read_b32 v025, a152 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_mov_b32 a132, a133 - v_accvgpr_mov_b32 a133, a135 - v_accvgpr_write_b32 a135, v017 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v014 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v014, a135 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v015 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a138 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3680 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[182:185] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - v_accvgpr_read_b32 v013, a139 - ds_read_b128 a[60:63], v013 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203680 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[202:205] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[220:223] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[104:111], a[56:63], a[216:219] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203680 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3700 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v024 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v024, a146 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v016 ;.loc 4 920 22 - ds_read_b128 a[44:47], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a149 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v018, a154 - v_accvgpr_write_b32 a149, v013 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v020 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3700 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v024 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[138:141], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a178 - v_accvgpr_mov_b32 a77, a179 - v_accvgpr_mov_b32 a78, a180 - v_accvgpr_mov_b32 a79, a181 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203700 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[198:201] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[216:219] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203700 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v023 ;.loc 4 920 22 - ds_read_b128 a[4:7], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v025, a147 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[212:215] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v025 ;.loc 4 920 22 - ds_read_b128 a[12:15], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v008, a148 - v_accvgpr_write_b32 a148, v000 - v_accvgpr_mov_b32 a150, a148 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v012 ;.loc 4 920 22 - v_accvgpr_read_b32 v012, a143 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3780 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_mov_b32 a143, a155 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v022 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v022, a155 - v_accvgpr_write_b32 a155, v028 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v009 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a153 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v009, a254 - v_accvgpr_read_b32 v010, a136 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3780 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a178 - v_accvgpr_mov_b32 a81, a179 - v_accvgpr_mov_b32 a82, a180 - v_accvgpr_mov_b32 a83, a181 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v013 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a138 - v_accvgpr_mov_b32 a65, a139 - v_accvgpr_mov_b32 a66, a140 - v_accvgpr_mov_b32 a67, a141 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_accvgpr_mov_b32 a141, a151 - v_accvgpr_write_b32 a151, v023 - v_accvgpr_mov_b32 a139, a146 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 2 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203780 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[194:197] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[208:211] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203780 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v027, a157 - v_accvgpr_write_b32 a157, v019 - v_accvgpr_write_b32 a146, v027 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v007 ;.loc 4 920 22 - ds_read_b128 a[28:31], v000 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3800 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a132 - v_accvgpr_read_b32 v000, a133 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a132, v008 - v_accvgpr_write_b32 a140, v007 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v019 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v019, a141 - v_accvgpr_write_b32 a136, v019 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_mov_b32 a141, a147 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v017 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a134 - s_mov_b32 m0, s28 - v_accvgpr_write_b32 a134, v016 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v017 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v020 ;.loc 4 920 22 - ds_read_b128 a[52:55], v016 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3800 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v016, a137 - v_accvgpr_write_b32 a137, v017 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_write_b32 a135, v016 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v018 ;.loc 4 920 22 - ds_read_b128 a[60:63], v024 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v018, a153 - v_mov_b32_e32 v024, v015 - v_accvgpr_mov_b32 a153, a157 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a182 - v_accvgpr_mov_b32 a65, a183 - v_accvgpr_mov_b32 a66, a184 - v_accvgpr_mov_b32 a67, a185 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203800 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[204:207] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203800 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v023 ;.loc 4 920 22 - v_accvgpr_read_b32 v023, a152 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_mov_b32 a152, a139 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v025 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mov_b32_e32 v025, v021 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3880 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mov_b32_e32 v012, v020 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v016 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v008, a156 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v022 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v008 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v008, a157 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v015 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3880 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v015, a154 - v_mov_b32_e32 v022, v015 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v009 ;.loc 4 920 22 - ds_read_b128 a[60:63], v013 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v013, a134 - v_accvgpr_read_b32 v009, a156 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203880 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[200:203] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[222:225] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203880 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v019 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v027 ;.loc 4 920 22 - v_accvgpr_read_b32 v027, a148 - ds_read_b128 a[28:31], v027 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3900 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_write_b32 a148, v018 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_read_b32 v027, a141 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v008 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v008, a139 - v_accvgpr_write_b32 a139, v023 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v017 ;.loc 4 920 22 - ds_read_b128 a[44:47], v010 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_accvgpr_read_b32 v017, a143 - v_accvgpr_mov_b32 a143, a156 - v_accvgpr_read_b32 v010, a150 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v020 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3900 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v020, a146 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v008, a151 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203900 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203900 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v008 ;.loc 4 920 22 - ds_read_b128 a[4:7], v023 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a147 - s_mov_b32 m0, s44 - v_mov_b32_e32 v023, v011 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v007 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a144 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v008, a132 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3980 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v016 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v016, a149 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a158 - v_accvgpr_mov_b32 a69, a159 - v_accvgpr_mov_b32 a70, a160 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a161 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v018 ;.loc 4 920 22 - ds_read_b128 a[44:47], v009 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mov_b32_e32 v009, v024 - v_accvgpr_read_b32 v018, a140 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a254 - s_or_b32 s59, s36, 0x3980 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a133 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a184 - v_accvgpr_mov_b32 a81, a185 - v_accvgpr_mov_b32 a82, a186 - v_accvgpr_mov_b32 a83, a187 - v_accvgpr_write_b32 a133, v012 - v_accvgpr_write_b32 a138, v011 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v024 ;.loc 4 920 22 - ds_read_b128 a[60:63], v016 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[156:159], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203980 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[218:221] - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203980 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[214:217] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v019 ;.loc 4 920 22 - ds_read_b128 a[12:15], v021 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mov_b32_e32 v021, v014 - v_mov_b32_e32 v019, v000 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v010 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a153 - s_or_b32 s59, s33, 0x3a00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v010 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v010, a137 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v014 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_accvgpr_read_b32 v014, a151 - v_accvgpr_write_b32 a151, v009 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a156 - v_accvgpr_mov_b32 a69, a157 - v_accvgpr_mov_b32 a70, a158 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a159 - v_accvgpr_write_b32 a157, v017 - v_accvgpr_mov_b32 a156, a144 - v_accvgpr_write_b32 a144, v019 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v013 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a152 - s_or_b32 s59, s36, 0x3a00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v013, a147 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a170 - v_accvgpr_mov_b32 a72, a166 - v_accvgpr_mov_b32 a77, a171 - v_accvgpr_mov_b32 a78, a172 - v_accvgpr_mov_b32 a79, a173 - v_accvgpr_mov_b32 a73, a167 - v_accvgpr_mov_b32 a74, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a169 - v_accvgpr_mov_b32 a80, a182 - v_accvgpr_mov_b32 a81, a183 - v_accvgpr_mov_b32 a82, a184 - v_accvgpr_mov_b32 a83, a185 - v_accvgpr_write_b32 a152, v023 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v015 ;.loc 4 920 22 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v015, a139 - v_accvgpr_mov_b32 a139, a146 - v_accvgpr_write_b32 a146, v022 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a174 - v_accvgpr_mov_b32 a77, a175 - v_accvgpr_mov_b32 a78, a176 - v_accvgpr_mov_b32 a79, a177 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203a00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[210:213] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203a00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v014 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v000 ;.loc 4 920 22 - ds_read_b128 a[28:31], v007 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a135 - s_or_b32 s59, s33, 0x3a80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a148 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a145, v007 - v_accvgpr_write_b32 a135, v029 - v_accvgpr_read_b32 v030, a145 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v007 ;.loc 4 920 22 - ds_read_b128 a[36:39], v008 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_read_b32 v008, a136 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v017 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a143 - s_mov_b32 m0, s39 - v_accvgpr_write_b32 a136, v017 - v_accvgpr_write_b32 a143, v015 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a186 - v_accvgpr_mov_b32 a69, a187 - v_accvgpr_mov_b32 a70, a188 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a189 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v000 ;.loc 4 920 22 - ds_read_b128 a[44:47], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v009 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3a80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a150 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a168 - v_accvgpr_mov_b32 a72, a164 - v_accvgpr_mov_b32 a77, a169 - v_accvgpr_mov_b32 a78, a170 - v_accvgpr_mov_b32 a79, a171 - v_accvgpr_mov_b32 a73, a165 - v_accvgpr_mov_b32 a74, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a167 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v024 ;.loc 4 920 22 - ds_read_b128 a[60:63], v016 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v024, a151 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a172 - v_accvgpr_mov_b32 a77, a173 - v_accvgpr_mov_b32 a78, a174 - v_accvgpr_mov_b32 a79, a175 - v_accvgpr_mov_b32 a64, a160 - v_accvgpr_mov_b32 a65, a161 - v_accvgpr_mov_b32 a66, a162 - v_accvgpr_mov_b32 a67, a163 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203a80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[194:197], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[206:209] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203a80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v009, a153 - s_or_b32 s59, s33, 0x3b00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_write_b32 a154, v009 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a153, v025 - v_mov_b32_e32 v020, v033 - v_accvgpr_mov_b32 a255, a153 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v009 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a180 - v_accvgpr_mov_b32 a69, a181 - v_accvgpr_mov_b32 a70, a182 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a183 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v010 ;.loc 4 920 22 - ds_read_b128 a[44:47], v011 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a133 - v_accvgpr_read_b32 v011, a134 - s_mov_b32 m0, s15 - v_accvgpr_write_b32 a133, v012 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a134, v014 - v_accvgpr_read_b32 v016, a134 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3b00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a169 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[56:63], a[190:193] ;.loc 1 227 0 - ds_read_b128 a[56:59], v022 ;.loc 4 920 22 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v012, a156 - v_accvgpr_read_b32 v022, a137 - v_accvgpr_write_b32 a137, v020 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a176 - v_accvgpr_mov_b32 a65, a177 - v_accvgpr_mov_b32 a66, a178 - v_accvgpr_mov_b32 a67, a179 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[96:103], a[56:63], a[72:75] - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - ds_read_b128 a[72:75], v005 offset:18432 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203b00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[190:193], a[96:103], a[0:7], a[194:197] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[32:39], a[198:201] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[202:205] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[228:231], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203b00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v014 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v014, a148 - v_accvgpr_write_b32 a134, v014 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v013 ;.loc 4 920 22 - ds_read_b128 a[12:15], v018 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_accvgpr_read_b32 v013, a254 - v_accvgpr_read_b32 v018, a150 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3b80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a157 - v_accvgpr_read_b32 v019, a139 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_write_b32 a139, v011 - v_accvgpr_write_b32 a142, v019 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v007 ;.loc 4 920 22 - v_accvgpr_read_b32 v007, a132 - ds_read_b128 a[36:39], v007 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_accvgpr_write_b32 a132, v008 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_read_b32 v000, a132 - v_accvgpr_write_b32 a132, v021 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v012 ;.loc 4 920 22 - ds_read_b128 a[20:23], v028 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v012, a151 - v_accvgpr_read_b32 v028, a140 - v_accvgpr_write_b32 a140, v007 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - ds_read_b128 a[44:47], v017 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_mov_b32_e32 v017, v026 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v012 ;.loc 4 920 22 - ds_read_b128 a[52:55], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a149 - s_or_b32 s59, s36, 0x3b80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_read_b32 v023, a138 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a72, a162 - v_accvgpr_mov_b32 a76, a166 - v_accvgpr_mov_b32 a73, a163 - v_accvgpr_mov_b32 a74, a164 - v_accvgpr_mov_b32 a75, a165 - v_accvgpr_mov_b32 a77, a167 - v_accvgpr_mov_b32 a78, a168 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a169 - v_accvgpr_write_b32 a138, v031 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], a[88:95], a[56:63], a[184:187] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - s_waitcnt lgkmcnt(1) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - v_accvgpr_write_b32 a158, v010 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 a[72:75], v005 offset:51200 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203b80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[96:103], a[0:7], a[190:193] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[196:199] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[104:111], a[40:47], a[228:231] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[224:227], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[220:223], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203b80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v026 ;.loc 4 920 22 - ds_read_b128 a[4:7], v029 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v029, a144 - v_accvgpr_read_b32 v026, a156 - v_accvgpr_write_b32 a144, v028 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_accvgpr_write_b32 a145, v029 - v_accvgpr_read_b32 v075, a144 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v008 ;.loc 4 920 22 - ds_read_b128 a[12:15], v025 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v025, a155 - v_accvgpr_read_b32 v008, a158 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3c00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v009 ;.loc 4 920 22 - ds_read_b128 a[36:39], v033 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v009, a133 - v_accvgpr_write_b32 a133, v012 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a174 - v_accvgpr_mov_b32 a69, a175 - v_accvgpr_mov_b32 a70, a176 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a177 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v022 ;.loc 4 920 22 - ds_read_b128 a[44:47], v023 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v010 ;.loc 4 920 22 - ds_read_b128 a[52:55], v011 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v011, a146 - s_or_b32 s59, s36, 0x3c00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v010, a135 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_write_b32 a135, v016 - v_accvgpr_read_b32 v072, a135 - v_accvgpr_mov_b32 a135, a137 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[186:189] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a170 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[146:149], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a182 - v_accvgpr_mov_b32 a77, a183 - v_accvgpr_mov_b32 a78, a184 - v_accvgpr_mov_b32 a79, a185 - v_accvgpr_mov_b32 a64, a178 - v_accvgpr_mov_b32 a65, a179 - v_accvgpr_mov_b32 a66, a180 - v_accvgpr_mov_b32 a67, a181 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203c00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[192:195] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[224:227] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[104:111], a[56:63], a[220:223] ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - s_nop 6 - v_accvgpr_read_b32 v032, a184 - v_accvgpr_read_b32 v033, a185 - v_accvgpr_read_b32 v034, a186 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_accvgpr_read_b32 v035, a187 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203c00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v015 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v015, a152 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v028 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v029 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3c80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v030 ;.loc 4 920 22 - ds_read_b128 a[36:39], v007 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a157 - s_mov_b32 m0, s40 - scratch_store_dword off, v015, off offset:20 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - ds_read_b128 a[20:23], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v014 ;.loc 4 920 22 - v_accvgpr_read_b32 v014, a136 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_write_b32 a136, v017 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3c80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v012 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v012, a153 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a146 - v_accvgpr_mov_b32 a65, a147 - v_accvgpr_mov_b32 a66, a148 - v_accvgpr_mov_b32 a67, a149 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_accvgpr_write_b32 a149, v009 - v_accvgpr_write_b32 a147, v022 - v_accvgpr_write_b32 a148, v023 - v_accvgpr_write_b32 a146, v030 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 1 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - s_nop 0 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:53248 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203c80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203c80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v017 ;.loc 4 920 22 - ds_read_b128 a[4:7], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v017, a154 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v012 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v012, a150 - v_accvgpr_mov_b32 a150, a157 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v019 ;.loc 4 920 22 - ds_read_b128 a[28:31], v018 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3d00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_read_b32 v018, a143 - v_accvgpr_read_b32 v019, a140 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_accvgpr_mov_b32 a143, a141 - v_accvgpr_mov_b32 a141, a156 - v_accvgpr_mov_b32 a140, a155 - v_accvgpr_read_b32 v073, a143 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v017 ;.loc 4 920 22 - ds_read_b128 a[36:39], v020 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_accvgpr_read_b32 v017, a139 - scratch_store_dword off, v017, off offset:24 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_mov_b32 a139, a151 - v_accvgpr_mov_b32 a151, a254 - v_accvgpr_write_b32 a254, v019 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v031 ;.loc 4 920 22 - ds_read_b128 a[20:23], v021 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v022 ;.loc 4 920 22 - ds_read_b128 a[44:47], v023 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v008 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s36, 0x3d00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_accvgpr_read_b32 v008, a133 - v_accvgpr_write_b32 a133, v010 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a75, a163 - v_accvgpr_mov_b32 a80, a180 - v_accvgpr_mov_b32 a81, a181 - v_accvgpr_mov_b32 a82, a182 - v_accvgpr_mov_b32 a83, a183 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v009 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - v_accvgpr_read_b32 v009, a134 - v_accvgpr_write_b32 a134, v014 - v_accvgpr_read_b32 v074, a134 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[24:31], a[64:67] - v_accvgpr_write_b32 a134, v072 - s_nop 5 - v_accvgpr_mov_b32 a64, a188 - v_accvgpr_mov_b32 a65, a189 - v_accvgpr_mov_b32 a66, a190 - v_accvgpr_mov_b32 a67, a191 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - ds_read_b128 a[64:67], v005 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[104:111], a[48:55], a[80:83] ;.loc 1 202 0 - ds_read_b128 a[84:87], v006 offset:20480 ;.loc 4 920 22 - s_nop 5 - ds_read_b128 a[80:83], v005 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203d00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - scratch_store_dword off, v018, off offset:32 ;.loc 4 920 22 - v_accvgpr_read_b32 v020, a180 - v_accvgpr_read_b32 v021, a181 - v_accvgpr_read_b32 v022, a182 - v_accvgpr_read_b32 v023, a183 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203d00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v016 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_accvgpr_read_b32 v016, a158 - v_mfma_f32_16x16x128_f8f6f4 a[216:219], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v027 ;.loc 4 920 22 - ds_read_b128 a[12:15], v028 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v029 ;.loc 4 920 22 - ds_read_b128 a[28:31], v026 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3d80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - s_waitcnt lgkmcnt(0) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[64:67], a[120:127], a[24:31], a[64:67] - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v030 ;.loc 4 920 22 - ds_read_b128 a[36:39], v019 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - scratch_store_dword off, v009, off offset:28 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v007 ;.loc 4 920 22 - ds_read_b128 a[20:23], v025 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_accvgpr_read_b32 v007, a136 - v_accvgpr_write_b32 a136, v000 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s41 - v_accvgpr_read_b32 v014, a153 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v024 ;.loc 4 920 22 - ds_read_b128 a[52:55], v015 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v024, a64 - v_accvgpr_read_b32 v025, a65 - v_accvgpr_read_b32 v026, a66 - v_accvgpr_read_b32 v027, a67 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a64, a184 - v_accvgpr_mov_b32 a65, a185 - v_accvgpr_mov_b32 a66, a186 - v_accvgpr_mov_b32 a67, a187 - v_accvgpr_mov_b32 a76, a164 - s_or_b32 s59, s36, 0x3d80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_accvgpr_mov_b32 a75, a163 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v013 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v015, a154 - v_accvgpr_read_b32 v013, a138 - v_accvgpr_write_b32 a157, v027 - s_waitcnt lgkmcnt(8) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - v_accvgpr_write_b32 a156, v026 - v_accvgpr_write_b32 a155, v025 - v_accvgpr_write_b32 a154, v024 - v_accvgpr_write_b32 a138, v008 - s_nop 2 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[104:111], a[16:23], a[76:79] - s_nop 6 - v_accvgpr_mov_b32 a76, a176 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:49152 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s31 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - s_or_b32 s59, s36, 0x203d80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v020 v021 v022 v023 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - s_nop 1 - v_accvgpr_read_b32 v020, a142 - v_mov_b32_e32 v023, v012 - scratch_store_dword off, v020, off offset:60 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - scratch_store_dword off, v023, off offset:56 ;.loc 1 214 0 - v_accvgpr_read_b32 v021, a147 - v_accvgpr_read_b32 v022, a148 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203d80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_waitcnt lgkmcnt(14) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_accvgpr_read_b32 v010, a132 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[64:71], a[8:15], a[216:219] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v000 ;.loc 4 920 22 - ds_read_b128 a[12:15], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v000, a139 - v_accvgpr_write_b32 a139, v007 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, a[64:71], a[24:31], v076 v077 v078 v079 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v012 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v012, a137 - s_or_b32 s59, s33, 0x3e00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - v_accvgpr_write_b32 a137, v073 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v021 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s15 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - ds_read_b128 a[52:55], v017 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v017, a149 - s_or_b32 s59, s36, 0x3e00 ;.loc 1 332 0 - s_mov_b32 m0, s14 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - s_waitcnt lgkmcnt(6) ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] - v_accvgpr_mov_b32 a71, a175 - s_nop 5 - v_accvgpr_mov_b32 a64, a168 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - v_accvgpr_mov_b32 a76, a164 - v_accvgpr_mov_b32 a72, a160 - v_accvgpr_mov_b32 a77, a165 - v_accvgpr_mov_b32 a78, a166 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a79, a167 - v_accvgpr_mov_b32 a73, a161 - v_accvgpr_mov_b32 a74, a162 - v_accvgpr_mov_b32 a75, a163 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[188:191] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v017 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[96:103], a[40:47], a[64:67] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[64:67], v005 offset:16384 - s_waitcnt lgkmcnt(3) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[172:175], a[96:103], a[48:55], a[68:71] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:16384 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[16:23], a[76:79] ;.loc 1 196 0 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s12 - s_nop 4 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[96:103], a[56:63], a[72:75] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:18432 - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - ds_read_b128 a[80:83], v005 offset:20480 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:20480 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[88:91], v005 offset:22528 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:22528 - s_or_b32 s59, s36, 0x203e00 ;.loc 1 345 0 - s_mov_b32 m0, s50 ;.loc 3 94 8 - s_waitcnt lgkmcnt(6) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[64:71], a[24:31], v076 v077 v078 v079 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - s_nop 3 - v_accvgpr_read_b32 v076, a145 - v_accvgpr_read_b32 v078, a141 - v_accvgpr_read_b32 v079, a146 - v_accvgpr_read_b32 v077, a140 - s_nop 0 - v_accvgpr_write_b32 a187, v027 - v_accvgpr_write_b32 a186, v026 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - v_accvgpr_write_b32 a185, v025 - v_accvgpr_write_b32 a184, v024 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - ds_read_b128 a[96:99], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[100:103], v006 offset:32768 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[208:211], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[212:215], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - ds_read_b128 a[104:107], v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 a[108:111], v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:36864 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203e00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[120:127], a[24:31], a[154:157] ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:38912 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 - s_waitcnt lgkmcnt(12) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 - s_waitcnt lgkmcnt(10) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[80:87], a[0:7], v100 v101 v102 v103 - s_waitcnt lgkmcnt(8) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[0:3], v072 ;.loc 4 920 22 - ds_read_b128 a[4:7], v018 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[64:71], a[8:15], a[180:183] ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[72:79], a[8:15], v088 v089 v090 v091 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v073 ;.loc 4 920 22 - ds_read_b128 a[12:15], v075 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v076 ;.loc 4 920 22 - ds_read_b128 a[28:31], v078 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3e80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[64:71], a[32:39], v080 v081 v082 v083 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - s_nop 5 - v_accvgpr_read_b32 v080, a150 - v_accvgpr_read_b32 v081, a151 - v_accvgpr_read_b32 v083, a133 - v_accvgpr_read_b32 v082, a136 - v_accvgpr_write_b32 a133, v076 - v_accvgpr_write_b32 a136, v077 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v079 ;.loc 4 920 22 - ds_read_b128 a[36:39], v019 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v080 ;.loc 4 920 22 - ds_read_b128 a[20:23], v077 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s39 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - ds_read_b128 a[40:43], v009 ;.loc 4 920 22 - ds_read_b128 a[44:47], v074 - scratch_load_dword v009, off, off offset:20 - s_nop 0 ;.loc 3 94 8 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds - s_mov_b32 m0, s41 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - v_accvgpr_mov_b32 a68, a172 - v_accvgpr_mov_b32 a69, a173 - v_accvgpr_mov_b32 a70, a174 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_mov_b32 a71, a175 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 a[48:51], v000 ;.loc 4 920 22 - s_waitcnt vmcnt(1) - ds_read_b128 a[52:55], v009 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_mov_b32 a76, a162 - s_or_b32 s59, s36, 0x3e80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - v_accvgpr_mov_b32 a72, a158 - v_accvgpr_mov_b32 a77, a163 - v_accvgpr_mov_b32 a78, a164 - v_accvgpr_mov_b32 a79, a165 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_mov_b32 a73, a159 - v_accvgpr_mov_b32 a74, a160 - v_accvgpr_mov_b32 a75, a161 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v081 ;.loc 4 920 22 - ds_read_b128 a[60:63], v008 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - s_waitcnt lgkmcnt(10) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[140:143], a[120:127], a[24:31], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[76:79] - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 5 - v_accvgpr_mov_b32 a76, a176 - v_accvgpr_mov_b32 a77, a177 - v_accvgpr_mov_b32 a78, a178 - v_accvgpr_mov_b32 a79, a179 - v_accvgpr_mov_b32 a64, a168 - v_accvgpr_mov_b32 a65, a169 - v_accvgpr_mov_b32 a66, a170 - v_accvgpr_mov_b32 a67, a171 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[148:151], a[96:103], a[48:55], a[68:71] - v_mfma_f32_16x16x128_f8f6f4 a[144:147], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[68:71], v006 offset:49152 - ds_read_b128 a[64:67], v005 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_waitcnt lgkmcnt(2) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[72:75] - s_mov_b32 m0, s37 ;.loc 3 94 8 - s_nop 5 ;.loc 4 920 22 - ds_read_b128 a[72:75], v005 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[76:79] ;.loc 1 197 0 - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[76:79], v006 offset:51200 - v_mfma_f32_16x16x128_f8f6f4 a[204:207], a[104:111], a[0:7], a[204:207] ;.loc 1 196 0 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[80:83], v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 a[84:87], v006 offset:53248 - s_mov_b32 m0, s31 ;.loc 3 94 8 - s_nop 0 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds - ds_read_b128 a[88:91], v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 a[92:95], v006 offset:55296 - v_mfma_f32_16x16x128_f8f6f4 a[246:249], a[104:111], a[8:15], a[208:211] ;.loc 1 197 0 - s_or_b32 s59, s36, 0x203e80 ;.loc 1 345 0 - s_mov_b32 m0, s58 ;.loc 3 94 8 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - s_nop 0 ;.loc 3 94 8 - buffer_load_dwordx4 v003, s[8:11], s59 offen lds - s_mov_b32 m0, s57 - v_mfma_f32_16x16x128_f8f6f4 a[250:253], a[104:111], a[24:31], a[212:215] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[104:111], a[48:55], v028 v029 v030 v031 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v032 v033 v034 v035 ;.loc 1 203 0 - v_accvgpr_write_b32 a107, v027 - v_accvgpr_write_b32 a106, v026 - v_accvgpr_write_b32 a105, v025 - v_accvgpr_write_b32 a104, v024 - s_waitcnt lgkmcnt(4) ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[8:15], v088 v089 v090 v091 - v_mfma_f32_16x16x128_f8f6f4 a[196:199], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - s_nop 10 - v_accvgpr_write_b32 a213, v027 - v_accvgpr_write_b32 a212, v026 - v_accvgpr_write_b32 a211, v025 - v_accvgpr_write_b32 a210, v024 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[24:31], v092 v093 v094 v095 ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - s_nop 10 - v_accvgpr_write_b32 a217, v027 - v_accvgpr_write_b32 a216, v026 - v_accvgpr_write_b32 a215, v025 - v_accvgpr_write_b32 a214, v024 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[72:79], a[32:39], v096 v097 v098 v099 ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 ;.loc 1 186 0 - s_nop 10 - v_accvgpr_write_b32 a221, v027 - v_accvgpr_write_b32 a220, v026 - v_accvgpr_write_b32 a219, v025 - v_accvgpr_write_b32 a218, v024 - s_waitcnt lgkmcnt(2) ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[0:7], v100 v101 v102 v103 - v_mfma_f32_16x16x128_f8f6f4 a[200:203], a[96:103], a[32:39], a[200:203] ;.loc 1 191 0 - s_nop 10 - v_accvgpr_write_b32 a225, v027 - v_accvgpr_write_b32 a224, v026 - v_accvgpr_write_b32 a223, v025 - v_accvgpr_write_b32 a222, v024 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[8:15], v104 v105 v106 v107 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - v_accvgpr_mov_b32 a96, a180 - v_accvgpr_mov_b32 a100, a184 - v_accvgpr_mov_b32 a97, a181 - v_accvgpr_mov_b32 a98, a182 - s_nop 6 - v_accvgpr_write_b32 a229, v027 - v_accvgpr_write_b32 a228, v026 - v_accvgpr_write_b32 a227, v025 - v_accvgpr_write_b32 a226, v024 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[24:31], v108 v109 v110 v111 ;.loc 1 214 0 - v_accvgpr_mov_b32 a99, a183 - v_accvgpr_mov_b32 a101, a185 - v_accvgpr_mov_b32 a102, a186 - v_accvgpr_mov_b32 a103, a187 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], a[64:71], a[8:15], a[96:99] ;.loc 1 180 0 - s_nop 6 - v_accvgpr_write_b32 a233, v027 - v_accvgpr_write_b32 a232, v026 - v_accvgpr_write_b32 a231, v025 - v_accvgpr_write_b32 a230, v024 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[80:87], a[32:39], v112 v113 v114 v115 ;.loc 1 215 0 - ds_read_b128 a[96:99], v005 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], a[64:71], a[24:31], a[100:103] ;.loc 1 186 0 - s_nop 9 - v_accvgpr_write_b32 a237, v027 - v_accvgpr_write_b32 a236, v026 - v_accvgpr_write_b32 a235, v025 - v_accvgpr_write_b32 a234, v024 - s_waitcnt lgkmcnt(1) ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[88:95], a[0:7], v116 v117 v118 v119 - ds_read_b128 a[100:103], v006 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - ds_read_b128 a[108:111], v006 offset:2048 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], a[64:71], a[32:39], a[104:107] ;.loc 1 191 0 - s_nop 6 - v_accvgpr_write_b32 a241, v027 - v_accvgpr_write_b32 a240, v026 - v_accvgpr_write_b32 a239, v025 - ds_read_b128 a[104:107], v005 offset:2048 ;.loc 4 920 22 - buffer_load_dwordx4 v002, s[8:11], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - v_accvgpr_write_b32 a238, v024 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - ds_read_b128 a[112:115], v005 offset:4096 ;.loc 4 920 22 - ds_read_b128 a[116:119], v006 offset:4096 - buffer_load_dwordx4 v001, s[8:11], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x203e80 ;.loc 1 356 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - ds_read_b128 a[120:123], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[124:127], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, a[64:71], a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[72:79], a[0:7], v084 v085 v086 v087 ;.loc 1 196 0 - ds_read_b128 a[0:3], v007 ;.loc 4 920 22 - ds_read_b128 a[4:7], v083 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s52 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[88:95], a[8:15], v120 v121 v122 v123 ;.loc 1 221 0 - ds_read_b128 a[8:11], v082 ;.loc 4 920 22 - ds_read_b128 a[12:15], v014 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[88:95], a[24:31], v124 v125 v126 v127 ;.loc 1 226 0 - ds_read_b128 a[24:27], v020 ;.loc 4 920 22 - ds_read_b128 a[28:31], v023 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_or_b32 s59, s33, 0x3f00 ;.loc 1 320 0 - s_mov_b32 m0, s30 ;.loc 3 94 8 - s_nop 1 - v_accvgpr_write_b32 a245, v027 - v_accvgpr_write_b32 a244, v026 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[88:95], a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - ds_read_b128 a[32:35], v015 ;.loc 4 920 22 - ds_read_b128 a[36:39], v012 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - scratch_load_dword v007, off, off offset:24 ;.loc 4 920 22 - v_accvgpr_write_b32 a243, v025 - buffer_load_dwordx4 v003, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s29 - v_mfma_f32_16x16x128_f8f6f4 v136 v137 v138 v139, a[64:71], a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_accvgpr_write_b32 a242, v024 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[72:79], a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[80:87], a[40:47], v168 v169 v170 v171 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[88:95], a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[44:47], a[104:111], a[0:7], a[204:207] - s_waitcnt lgkmcnt(0) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[40:43], a[96:103], a[32:39], a[200:203] - s_nop 9 - v_accvgpr_read_b32 v123, a47 - v_accvgpr_read_b32 v122, a46 - v_accvgpr_read_b32 v121, a45 - v_accvgpr_read_b32 v120, a44 - v_mfma_f32_16x16x128_f8f6f4 a[44:47], a[104:111], a[8:15], a[246:249] ;.loc 1 197 0 - v_accvgpr_read_b32 v107, a43 - v_accvgpr_read_b32 v106, a42 - v_accvgpr_read_b32 v105, a41 - v_accvgpr_read_b32 v104, a40 - v_mfma_f32_16x16x128_f8f6f4 v140 v141 v142 v143, a[64:71], a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - s_nop 6 - v_accvgpr_read_b32 v219, a47 - v_accvgpr_read_b32 v218, a46 - v_accvgpr_read_b32 v217, a45 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[72:79], a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_read_b32 v216, a44 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[80:87], a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[88:95], a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 a[48:51], a[104:111], a[24:31], a[250:253] ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v132 v133 v134 v135, a[64:71], a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - s_nop 10 - v_accvgpr_read_b32 v099, a51 - v_accvgpr_read_b32 v098, a50 - v_accvgpr_read_b32 v097, a49 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[72:79], a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_accvgpr_read_b32 v096, a48 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[80:87], a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[88:95], a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - ds_read_b128 a[16:19], v013 ;.loc 4 920 22 - ds_read_b128 a[20:23], v010 - buffer_load_dwordx4 v004, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s28 - ds_read_b128 a[40:43], v021 ;.loc 4 920 22 - ds_read_b128 a[44:47], v022 - buffer_load_dwordx4 v002, s[4:7], s59 offen lds ;.loc 3 94 8 - ds_read_b128 a[48:51], v016 ;.loc 4 920 22 - s_waitcnt vmcnt(3) - ds_read_b128 a[52:55], v007 - s_waitcnt lgkmcnt(0) ;.loc 1 202 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[48:55], v028 v029 v030 v031 - s_mov_b32 m0, s15 ;.loc 3 94 8 - s_or_b32 s15, s36, 0x3f00 ;.loc 1 332 0 - buffer_load_dwordx4 v001, s[4:7], s59 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s14 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[64:71], a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_mov_b32 a64, a140 - v_accvgpr_mov_b32 a65, a141 - v_accvgpr_mov_b32 a66, a142 - v_accvgpr_mov_b32 a67, a143 - s_nop 2 - v_accvgpr_write_b32 a189, v027 - v_accvgpr_write_b32 a188, v026 - v_accvgpr_write_b32 a187, v025 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[72:79], a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_write_b32 a186, v024 - v_accvgpr_write_b32 a69, v021 - v_accvgpr_mov_b32 a68, a132 - v_accvgpr_write_b32 a132, v080 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[80:87], a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - v_accvgpr_write_b32 a87, v015 - v_accvgpr_write_b32 a86, v013 - v_accvgpr_write_b32 a82, v011 - v_accvgpr_write_b32 a83, v022 - v_accvgpr_write_b32 a85, v016 - v_accvgpr_write_b32 a84, v017 - v_mfma_f32_16x16x128_f8f6f4 a[88:91], a[88:95], a[56:63], a[192:195] ;.loc 1 227 0 - ds_read_b128 a[56:59], v011 ;.loc 4 920 22 - ds_read_b128 a[60:63], v017 - buffer_load_dwordx4 v003, s[8:11], s15 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s13 - ds_read_b128 v008 v009 v010 v011, v005 offset:16384 ;.loc 4 920 22 - ds_read_b128 v012 v013 v014 v015, v006 offset:16384 - buffer_load_dwordx4 v004, s[8:11], s15 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[74:77], a[120:127], a[24:31], a[64:67] ;.loc 1 226 0 - s_mov_b32 m0, s12 ;.loc 3 94 8 - ds_read_b128 v016 v017 v018 v019, v005 offset:18432 ;.loc 4 920 22 - ds_read_b128 v020 v021 v022 v023, v006 offset:18432 - buffer_load_dwordx4 v002, s[8:11], s15 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s1 - s_or_b32 s1, s36, 0x203f00 ;.loc 1 345 0 - s_nop 0 - v_accvgpr_mov_b32 a64, a128 - v_accvgpr_mov_b32 a65, a129 - v_accvgpr_mov_b32 a66, a130 - v_accvgpr_mov_b32 a67, a131 - s_waitcnt lgkmcnt(4) ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[104:111], a[56:63], v032 v033 v034 v035 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[120:127], a[32:39], a[64:67] ;.loc 1 227 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a144 - v_accvgpr_mov_b32 a65, a145 - v_accvgpr_mov_b32 a66, a146 - v_accvgpr_mov_b32 a67, a147 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[112:119], a[16:23], v036 v037 v038 v039 ;.loc 1 208 0 - v_accvgpr_write_b32 a147, v000 - v_accvgpr_write_b32 a145, v074 - v_accvgpr_write_b32 a144, v078 - v_accvgpr_write_b32 a146, v079 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], a[96:103], a[40:47], a[64:67] ;.loc 1 180 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a148 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[112:119], a[48:55], v044 v045 v046 v047 ;.loc 1 214 0 - v_accvgpr_mov_b32 a65, a149 - v_accvgpr_mov_b32 a66, a150 - v_accvgpr_mov_b32 a67, a151 - v_accvgpr_write_b32 a149, v075 - v_accvgpr_write_b32 a148, v081 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[120:127], a[16:23], v052 v053 v054 v055 ;.loc 1 220 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], a[96:103], a[48:55], a[64:67] ;.loc 1 186 0 - s_nop 6 - v_accvgpr_mov_b32 a64, a154 - v_accvgpr_mov_b32 a65, a155 - v_accvgpr_mov_b32 a66, a156 - v_accvgpr_mov_b32 a67, a157 - v_mfma_f32_16x16x128_f8f6f4 a[92:95], a[96:103], a[0:7], a[196:199] ;.loc 1 179 0 - s_nop 0 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], a[96:103], a[56:63], a[64:67] - s_nop 4 - v_accvgpr_write_b32 a197, v035 - v_accvgpr_write_b32 a196, v034 - v_accvgpr_write_b32 a195, v033 - v_accvgpr_write_b32 a194, v032 - v_accvgpr_mov_b32 a64, a158 - v_accvgpr_mov_b32 a65, a159 - v_accvgpr_mov_b32 a66, a160 - v_accvgpr_mov_b32 a67, a161 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[104:111], a[32:39], v224 v225 v226 v227 ;.loc 1 203 0 - s_nop 0 ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], a[104:111], a[16:23], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a162 - v_accvgpr_mov_b32 a65, a163 - v_accvgpr_mov_b32 a66, a164 - v_accvgpr_mov_b32 a67, a165 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[112:119], a[0:7], v228 v229 v230 v231 ;.loc 1 208 0 - s_nop 0 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], a[104:111], a[40:47], a[64:67] - v_accvgpr_write_b32 a111, v031 - v_accvgpr_write_b32 a110, v030 - v_accvgpr_write_b32 a109, v029 - v_accvgpr_write_b32 a108, v028 - v_accvgpr_write_b32 a107, v027 - v_accvgpr_write_b32 a106, v026 - v_accvgpr_write_b32 a105, v025 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[112:119], a[8:15], v232 v233 v234 v235 ;.loc 1 209 0 - v_accvgpr_write_b32 a104, v024 - ds_read_b128 v024 v025 v026 v027, v005 offset:20480 ;.loc 4 920 22 - v_accvgpr_mov_b32 a64, a166 - v_accvgpr_mov_b32 a65, a167 - v_accvgpr_mov_b32 a66, a168 - v_accvgpr_mov_b32 a67, a169 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, a[112:119], a[24:31], v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[112:119], a[32:39], v240 v241 v242 v243 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[112:119], a[40:47], v040 v041 v042 v043 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[112:119], a[56:63], v048 v049 v050 v051 ;.loc 1 215 0 - v_accvgpr_write_b32 a119, v039 - v_accvgpr_write_b32 a118, v038 - v_accvgpr_write_b32 a117, v037 - v_accvgpr_write_b32 a116, v036 - s_nop 6 - v_accvgpr_write_b32 a193, v031 - v_accvgpr_write_b32 a192, v030 - v_accvgpr_write_b32 a191, v029 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[120:127], a[40:47], v056 v057 v058 v059 ;.loc 1 221 0 - v_accvgpr_write_b32 a190, v028 - ds_read_b128 v028 v029 v030 v031, v006 offset:20480 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[8:11], s15 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s50 - v_accvgpr_write_b32 a115, v035 - v_accvgpr_write_b32 a114, v034 - v_accvgpr_write_b32 a113, v033 - v_accvgpr_write_b32 a112, v032 - ds_read_b128 v032 v033 v034 v035, v005 offset:22528 ;.loc 4 920 22 - s_waitcnt lgkmcnt(5) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], v008 v009 v010 v011 v012 v013 v014 v015, a[8:15], a[64:67] - s_nop 0 - v_accvgpr_write_b32 a201, v039 - v_accvgpr_write_b32 a200, v038 - v_accvgpr_write_b32 a199, v037 - v_accvgpr_write_b32 a198, v036 - ds_read_b128 v036 v037 v038 v039, v006 offset:22528 ;.loc 4 920 22 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - scratch_load_dword v007, off, off offset:32 ;.loc 4 920 22 - v_accvgpr_mov_b32 a64, a170 - s_waitcnt lgkmcnt(4) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, v016 v017 v018 v019 v020 v021 v022 v023, a[0:7], v084 v085 v086 v087 - v_accvgpr_mov_b32 a65, a171 - v_accvgpr_mov_b32 a66, a172 - v_accvgpr_mov_b32 a67, a173 - buffer_load_dwordx4 v003, s[8:11], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s49 - ds_read_b128 v044 v045 v046 v047, v006 offset:32768 ;.loc 4 920 22 - s_waitcnt lgkmcnt(1) ;.loc 1 226 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v032 v033 v034 v035 v036 v037 v038 v039, a[24:31], v124 v125 v126 v127 - s_nop 3 - v_accvgpr_write_b32 a209, v055 - v_accvgpr_write_b32 a208, v054 - v_accvgpr_write_b32 a207, v053 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], v008 v009 v010 v011 v012 v013 v014 v015, a[24:31], a[64:67] ;.loc 1 186 0 - v_accvgpr_write_b32 a206, v052 - s_nop 5 - v_accvgpr_mov_b32 a64, a174 - v_accvgpr_mov_b32 a65, a175 - v_accvgpr_mov_b32 a66, a176 - v_accvgpr_mov_b32 a67, a177 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[96:103], a[24:31], v204 v205 v206 v207 - s_nop 0 ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], v008 v009 v010 v011 v012 v013 v014 v015, a[32:39], a[64:67] - s_nop 6 - v_accvgpr_mov_b32 a64, a222 - v_accvgpr_mov_b32 a65, a223 - v_accvgpr_mov_b32 a66, a224 - v_accvgpr_mov_b32 a67, a225 - v_accvgpr_mov_b32 a222, a226 - v_accvgpr_mov_b32 a223, a227 - v_accvgpr_mov_b32 a224, a228 - v_accvgpr_mov_b32 a225, a229 - v_accvgpr_mov_b32 a226, a230 - v_accvgpr_mov_b32 a227, a231 - v_accvgpr_mov_b32 a228, a232 - v_accvgpr_mov_b32 a229, a233 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], v016 v017 v018 v019 v020 v021 v022 v023, a[24:31], a[214:217] ;.loc 1 202 0 - v_accvgpr_mov_b32 a230, a234 - v_accvgpr_mov_b32 a231, a235 - v_accvgpr_mov_b32 a232, a236 - v_accvgpr_mov_b32 a233, a237 - v_accvgpr_mov_b32 a234, a238 - v_accvgpr_mov_b32 a235, a239 - v_accvgpr_mov_b32 a236, a240 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], v024 v025 v026 v027 v028 v029 v030 v031, a[24:31], a[226:229] ;.loc 1 214 0 - v_accvgpr_write_b32 a24, v084 - v_accvgpr_write_b32 a25, v085 - v_accvgpr_write_b32 a26, v086 - v_accvgpr_write_b32 a27, v087 - v_accvgpr_mov_b32 a237, a241 - v_accvgpr_mov_b32 a238, a242 - v_accvgpr_mov_b32 a239, a243 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v032 v033 v034 v035 v036 v037 v038 v039, a[32:39], v128 v129 v130 v131 ;.loc 1 227 0 - v_accvgpr_mov_b32 a240, a244 - v_accvgpr_mov_b32 a241, a245 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[120:127], a[48:55], v060 v061 v062 v063 ;.loc 1 226 0 - s_nop 8 - v_accvgpr_write_b32 a28, v084 - v_accvgpr_write_b32 a29, v085 - v_accvgpr_write_b32 a30, v086 - v_accvgpr_write_b32 a31, v087 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[16:23], v132 v133 v134 v135 ;.loc 1 179 0 - v_accvgpr_write_b32 a205, v043 - v_accvgpr_write_b32 a204, v042 - v_accvgpr_write_b32 a203, v041 - v_accvgpr_write_b32 a202, v040 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], v016 v017 v018 v019 v020 v021 v022 v023, a[32:39], a[218:221] ;.loc 1 203 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], v024 v025 v026 v027 v028 v029 v030 v031, a[32:39], a[230:233] ;.loc 1 215 0 - s_nop 5 - v_accvgpr_write_b32 a32, v084 - v_accvgpr_write_b32 a33, v085 - v_accvgpr_write_b32 a34, v086 - v_accvgpr_write_b32 a35, v087 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[120:127], a[56:63], v064 v065 v066 v067 ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[40:47], v136 v137 v138 v139 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[120:127], a[0:7], v244 v245 v246 v247 ;.loc 1 220 0 - s_nop 10 - v_accvgpr_write_b32 a36, v084 - v_accvgpr_write_b32 a37, v085 - v_accvgpr_write_b32 a38, v086 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[120:127], a[8:15], v252 v253 v254 v255 ;.loc 1 221 0 - v_accvgpr_write_b32 a123, v043 - v_accvgpr_write_b32 a122, v042 - v_accvgpr_write_b32 a121, v041 - v_accvgpr_write_b32 a120, v040 - v_accvgpr_write_b32 a39, v087 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, v008 v009 v010 v011 v012 v013 v014 v015, a[0:7], v068 v069 v070 v071 ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v008 v009 v010 v011 v012 v013 v014 v015, a[48:55], v140 v141 v142 v143 ;.loc 1 186 0 - s_nop 10 - v_accvgpr_write_b32 a127, v043 - v_accvgpr_write_b32 a126, v042 - v_accvgpr_write_b32 a125, v041 - v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, v008 v009 v010 v011 v012 v013 v014 v015, a[56:63], v144 v145 v146 v147 ;.loc 1 191 0 - v_accvgpr_write_b32 a124, v040 - ds_read_b128 v040 v041 v042 v043, v005 offset:32768 ;.loc 4 920 22 - buffer_load_dwordx4 v004, s[8:11], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s48 - v_accvgpr_write_b32 a245, v087 - v_accvgpr_write_b32 a244, v086 - v_accvgpr_write_b32 a243, v085 - v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v016 v017 v018 v019 v020 v021 v022 v023, a[16:23], v148 v149 v150 v151 ;.loc 1 196 0 - v_accvgpr_write_b32 a242, v084 - ds_read_b128 v048 v049 v050 v051, v005 offset:34816 ;.loc 4 920 22 - ds_read_b128 v052 v053 v054 v055, v006 offset:34816 - buffer_load_dwordx4 v002, s[8:11], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s47 - ds_read_b128 v056 v057 v058 v059, v005 offset:36864 ;.loc 4 920 22 - ds_read_b128 v060 v061 v062 v063, v006 offset:36864 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], v016 v017 v018 v019 v020 v021 v022 v023, a[8:15], a[210:213] ;.loc 1 197 0 - buffer_load_dwordx4 v001, s[8:11], s1 offen lds ;.loc 3 94 8 - s_or_b32 s1, s33, 0x203f00 ;.loc 1 356 0 - s_mov_b32 m0, s46 ;.loc 3 94 8 - ds_read_b128 v064 v065 v066 v067, v005 offset:38912 ;.loc 4 920 22 - ds_read_b128 v068 v069 v070 v071, v006 offset:38912 - v_accvgpr_write_b32 a253, v015 - v_accvgpr_write_b32 a252, v014 - v_accvgpr_write_b32 a251, v013 - v_accvgpr_write_b32 a250, v012 - v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v016 v017 v018 v019 v020 v021 v022 v023, a[40:47], v152 v153 v154 v155 ;.loc 1 197 0 - buffer_load_dwordx4 v003, s[4:7], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s45 - ds_read_b128 v128 v129 v130 v131, v072 ;.loc 4 920 22 - s_waitcnt vmcnt(5) - ds_read_b128 v132 v133 v134 v135, v007 - v_accvgpr_write_b32 a249, v011 - buffer_load_dwordx4 v004, s[4:7], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s44 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v016 v017 v018 v019 v020 v021 v022 v023, a[48:55], v156 v157 v158 v159 ;.loc 1 202 0 - v_accvgpr_write_b32 a248, v010 - v_accvgpr_write_b32 a247, v009 - v_accvgpr_write_b32 a246, v008 - ds_read_b128 v008 v009 v010 v011, v073 ;.loc 4 920 22 - v_accvgpr_write_b32 a153, v015 - v_accvgpr_write_b32 a152, v014 - v_accvgpr_write_b32 a151, v013 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v016 v017 v018 v019 v020 v021 v022 v023, a[56:63], v160 v161 v162 v163 ;.loc 1 203 0 - v_accvgpr_write_b32 a150, v012 - ds_read_b128 v012 v013 v014 v015, v075 ;.loc 4 920 22 - buffer_load_dwordx4 v002, s[4:7], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s43 - ds_read_b128 v136 v137 v138 v139, v076 ;.loc 4 920 22 - ds_read_b128 v140 v141 v142 v143, v078 - buffer_load_dwordx4 v001, s[4:7], s1 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v007, a254 - v_mfma_f32_16x16x128_f8f6f4 a[64:67], v024 v025 v026 v027 v028 v029 v030 v031, a[0:7], a[64:67] ;.loc 1 208 0 - ds_read_b128 v020 v021 v022 v023, v079 ;.loc 4 920 22 - s_or_b32 s1, s33, 0x3f80 ;.loc 1 320 0 - s_mov_b32 m0, s42 ;.loc 3 94 8 - v_accvgpr_write_b32 a73, v019 - v_accvgpr_write_b32 a72, v018 - v_accvgpr_write_b32 a71, v017 - v_accvgpr_write_b32 a70, v016 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v024 v025 v026 v027 v028 v029 v030 v031, a[16:23], v164 v165 v166 v167 ;.loc 1 208 0 - s_or_b32 s33, s33, 0x203f80 ;.loc 1 356 0 - s_nop 2 - v_accvgpr_read_b32 v103, a67 - v_accvgpr_read_b32 v102, a66 - v_accvgpr_read_b32 v101, a65 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], v024 v025 v026 v027 v028 v029 v030 v031, a[8:15], a[222:225] ;.loc 1 209 0 - v_accvgpr_read_b32 v100, a64 - v_accvgpr_write_b32 a64, v084 - v_accvgpr_write_b32 a65, v085 - v_accvgpr_write_b32 a66, v086 - v_accvgpr_write_b32 a81, v019 - v_accvgpr_write_b32 a80, v018 - v_accvgpr_write_b32 a79, v017 - v_accvgpr_write_b32 a78, v016 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v024 v025 v026 v027 v028 v029 v030 v031, a[40:47], v168 v169 v170 v171 - v_accvgpr_write_b32 a67, v087 - v_mfma_f32_16x16x128_f8f6f4 v208 v209 v210 v211, v024 v025 v026 v027 v028 v029 v030 v031, a[48:55], v172 v173 v174 v175 ;.loc 1 214 0 - s_nop 9 - v_accvgpr_write_b32 a143, v019 - v_accvgpr_write_b32 a142, v018 - v_accvgpr_write_b32 a141, v017 - v_mfma_f32_16x16x128_f8f6f4 v212 v213 v214 v215, v024 v025 v026 v027 v028 v029 v030 v031, a[56:63], v176 v177 v178 v179 ;.loc 1 215 0 - ds_read_b128 v024 v025 v026 v027, v007 ;.loc 4 920 22 - s_waitcnt vmcnt(16) ;.loc 1 318 0 -s_barrier - scratch_load_dword v007, off, off offset:28 ;.loc 4 920 22 - v_accvgpr_write_b32 a140, v016 - buffer_load_dwordx4 v003, s[4:7], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s40 - ds_read_b128 v144 v145 v146 v147, v080 ;.loc 4 920 22 - ds_read_b128 v148 v149 v150 v151, v077 - buffer_load_dwordx4 v004, s[4:7], s1 offen lds ;.loc 3 94 8 - ds_read_b128 v156 v157 v158 v159, v074 ;.loc 4 920 22 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[96:103], a[8:15], v200 v201 v202 v203 ;.loc 1 180 0 - s_mov_b32 m0, s39 ;.loc 3 94 8 - v_accvgpr_read_b32 v028, a194 - v_accvgpr_read_b32 v029, a195 - v_accvgpr_read_b32 v030, a196 - v_accvgpr_read_b32 v031, a197 - s_waitcnt vmcnt(2) ;.loc 4 920 22 - ds_read_b128 v152 v153 v154 v155, v007 - scratch_load_dword v007, off, off offset:20 - s_waitcnt lgkmcnt(8) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v040 v041 v042 v043 v044 v045 v046 v047, v008 v009 v010 v011 v012 v013 v014 v015, v200 v201 v202 v203 - buffer_load_dwordx4 v002, s[4:7], s1 offen lds ;.loc 3 94 8 - ds_read_b128 v160 v161 v162 v163, v000 ;.loc 4 920 22 - s_mov_b32 m0, s41 ;.loc 3 94 8 - s_waitcnt vmcnt(1) ;.loc 4 920 22 - ds_read_b128 v164 v165 v166 v167, v007 - v_mfma_f32_16x16x128_f8f6f4 a[56:59], v032 v033 v034 v035 v036 v037 v038 v039, a[56:63], a[88:91] ;.loc 1 227 0 - buffer_load_dwordx4 v001, s[4:7], s1 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a138 - ds_read_b128 v168 v169 v170 v171, v081 ;.loc 4 920 22 - ds_read_b128 v172 v173 v174 v175, v000 - s_or_b32 s1, s36, 0x3f80 ;.loc 1 332 0 - s_mov_b32 m0, s38 ;.loc 3 94 8 - s_or_b32 s36, s36, 0x203f80 ;.loc 1 345 0 - v_mfma_f32_16x16x128_f8f6f4 a[88:91], v040 v041 v042 v043 v044 v045 v046 v047, v128 v129 v130 v131 v132 v133 v134 v135, a[92:95] ;.loc 1 179 0 - buffer_load_dwordx4 v003, s[8:11], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s34 - v_accvgpr_read_b32 v000, a139 - s_nop 3 - v_accvgpr_write_b32 a95, v019 - v_accvgpr_write_b32 a94, v018 - v_accvgpr_write_b32 a93, v017 - v_accvgpr_write_b32 a92, v016 - s_waitcnt lgkmcnt(10) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v040 v041 v042 v043 v044 v045 v046 v047, v136 v137 v138 v139 v140 v141 v142 v143, v204 v205 v206 v207 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[96:103], a[16:23], v248 v249 v250 v251 ;.loc 1 179 0 - v_accvgpr_write_b32 a100, v104 - v_accvgpr_write_b32 a101, v105 - v_accvgpr_write_b32 a102, v106 - v_accvgpr_write_b32 a103, v107 - s_nop 6 - v_accvgpr_write_b32 a99, v019 - v_accvgpr_write_b32 a98, v018 - v_accvgpr_write_b32 a97, v017 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], v032 v033 v034 v035 v036 v037 v038 v039, a[0:7], a[234:237] ;.loc 1 220 0 - v_accvgpr_mov_b32 a0, a178 - v_accvgpr_mov_b32 a1, a179 - v_accvgpr_mov_b32 a2, a180 - v_accvgpr_mov_b32 a3, a181 - v_accvgpr_write_b32 a96, v016 - v_accvgpr_read_b32 v016, a74 - v_accvgpr_read_b32 v017, a75 - s_waitcnt lgkmcnt(4) ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[178:181], v040 v041 v042 v043 v044 v045 v046 v047, v152 v153 v154 v155 v156 v157 v158 v159, a[0:3] - v_accvgpr_read_b32 v018, a76 - v_accvgpr_read_b32 v019, a77 - v_accvgpr_mov_b32 a4, a206 - v_accvgpr_mov_b32 a5, a207 - v_accvgpr_mov_b32 a6, a208 - v_accvgpr_mov_b32 a7, a209 - s_nop 0 - v_accvgpr_mov_b32 a0, a182 - v_accvgpr_mov_b32 a1, a183 - v_accvgpr_mov_b32 a2, a184 - v_accvgpr_mov_b32 a3, a185 - v_mfma_f32_16x16x128_f8f6f4 a[238:241], v032 v033 v034 v035 v036 v037 v038 v039, a[8:15], a[238:241] ;.loc 1 221 0 - v_accvgpr_mov_b32 a8, a214 - v_accvgpr_mov_b32 a9, a215 - v_accvgpr_mov_b32 a10, a216 - v_accvgpr_mov_b32 a11, a217 - s_waitcnt lgkmcnt(2) ;.loc 1 186 0 - v_mfma_f32_16x16x128_f8f6f4 a[182:185], v040 v041 v042 v043 v044 v045 v046 v047, v160 v161 v162 v163 v164 v165 v166 v167, a[0:3] - s_nop 6 - v_accvgpr_mov_b32 a0, a154 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, v032 v033 v034 v035 v036 v037 v038 v039, a[16:23], v180 v181 v182 v183 ;.loc 1 220 0 - v_accvgpr_mov_b32 a1, a155 - v_accvgpr_mov_b32 a2, a156 - v_accvgpr_mov_b32 a3, a157 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, v032 v033 v034 v035 v036 v037 v038 v039, a[40:47], v184 v185 v186 v187 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, v032 v033 v034 v035 v036 v037 v038 v039, a[48:55], v188 v189 v190 v191 ;.loc 1 226 0 - ds_read_b128 v032 v033 v034 v035, v005 offset:49152 ;.loc 4 920 22 - ds_read_b128 v036 v037 v038 v039, v006 offset:49152 - buffer_load_dwordx4 v004, s[8:11], s1 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s37 - ds_read_b128 v176 v177 v178 v179, v005 offset:51200 ;.loc 4 920 22 - ds_read_b128 v180 v181 v182 v183, v006 offset:51200 - buffer_load_dwordx4 v002, s[8:11], s1 offen lds ;.loc 3 94 8 - s_waitcnt lgkmcnt(4) ;.loc 1 191 0 - v_mfma_f32_16x16x128_f8f6f4 a[154:157], v040 v041 v042 v043 v044 v045 v046 v047, v168 v169 v170 v171 v172 v173 v174 v175, a[0:3] - s_mov_b32 m0, s31 ;.loc 3 94 8 - ds_read_b128 v184 v185 v186 v187, v005 offset:53248 ;.loc 4 920 22 - ds_read_b128 v188 v189 v190 v191, v006 offset:53248 - buffer_load_dwordx4 v001, s[8:11], s1 offen lds ;.loc 3 94 8 - ds_read_b128 v192 v193 v194 v195, v005 offset:55296 ;.loc 4 920 22 - ds_read_b128 v196 v197 v198 v199, v006 offset:55296 - s_mov_b32 m0, s58 ;.loc 3 94 8 - v_accvgpr_mov_b32 a0, a158 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, v056 v057 v058 v059 v060 v061 v062 v063, v020 v021 v022 v023 v024 v025 v026 v027, v092 v093 v094 v095 ;.loc 1 215 0 - v_accvgpr_mov_b32 a1, a159 - v_accvgpr_mov_b32 a2, a160 - v_accvgpr_mov_b32 a3, a161 - s_waitcnt vmcnt(16) ;.loc 1 343 0 -s_barrier - buffer_load_dwordx4 v003, s[8:11], s36 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s57 - ds_read_b128 v200 v201 v202 v203, v005 ;.loc 4 920 22 - ds_read_b128 v204 v205 v206 v207, v006 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, v064 v065 v066 v067 v068 v069 v070 v071, v136 v137 v138 v139 v140 v141 v142 v143, v016 v017 v018 v019 ;.loc 1 226 0 - buffer_load_dwordx4 v004, s[8:11], s36 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s56 - s_nop 4 - v_accvgpr_read_b32 v016, a128 - v_accvgpr_read_b32 v017, a129 - v_accvgpr_read_b32 v018, a130 - v_accvgpr_read_b32 v019, a131 - v_accvgpr_write_b32 a131, v119 - v_mfma_f32_16x16x128_f8f6f4 a[158:161], v048 v049 v050 v051 v052 v053 v054 v055, v144 v145 v146 v147 v148 v149 v150 v151, a[0:3] ;.loc 1 196 0 - v_accvgpr_write_b32 a130, v118 - v_accvgpr_write_b32 a129, v117 - v_accvgpr_write_b32 a128, v116 - s_nop 3 - v_accvgpr_mov_b32 a0, a162 - v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, v048 v049 v050 v051 v052 v053 v054 v055, v136 v137 v138 v139 v140 v141 v142 v143, v096 v097 v098 v099 ;.loc 1 202 0 - v_accvgpr_mov_b32 a1, a163 - v_accvgpr_mov_b32 a2, a164 - v_accvgpr_mov_b32 a3, a165 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, v064 v065 v066 v067 v068 v069 v070 v071, v020 v021 v022 v023 v024 v025 v026 v027, v016 v017 v018 v019 ;.loc 1 227 0 - s_nop 6 - v_accvgpr_read_b32 v016, a186 - v_mfma_f32_16x16x128_f8f6f4 a[100:103], v040 v041 v042 v043 v044 v045 v046 v047, v020 v021 v022 v023 v024 v025 v026 v027, a[100:103] ;.loc 1 191 0 - v_accvgpr_read_b32 v017, a187 - v_accvgpr_read_b32 v018, a188 - v_accvgpr_read_b32 v019, a189 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], v040 v041 v042 v043 v044 v045 v046 v047, v144 v145 v146 v147 v148 v149 v150 v151, a[128:131] ;.loc 1 179 0 - v_accvgpr_read_b32 v040, a198 - v_accvgpr_read_b32 v041, a199 - v_accvgpr_read_b32 v042, a200 - v_accvgpr_read_b32 v043, a201 - v_accvgpr_read_b32 v044, a226 - v_accvgpr_read_b32 v045, a227 - v_accvgpr_read_b32 v046, a228 - v_mfma_f32_16x16x128_f8f6f4 a[162:165], v048 v049 v050 v051 v052 v053 v054 v055, v152 v153 v154 v155 v156 v157 v158 v159, a[0:3] ;.loc 1 197 0 - v_accvgpr_read_b32 v047, a229 - s_nop 5 - v_accvgpr_mov_b32 a0, a104 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, v048 v049 v050 v051 v052 v053 v054 v055, v160 v161 v162 v163 v164 v165 v166 v167, v016 v017 v018 v019 ;.loc 1 202 0 - v_accvgpr_mov_b32 a1, a105 - v_accvgpr_mov_b32 a2, a106 - v_accvgpr_mov_b32 a3, a107 - s_nop 3 - v_accvgpr_read_b32 v016, a108 - v_mfma_f32_16x16x128_f8f6f4 a[186:189], v048 v049 v050 v051 v052 v053 v054 v055, v168 v169 v170 v171 v172 v173 v174 v175, a[0:3] ;.loc 1 203 0 - v_accvgpr_read_b32 v017, a109 - v_accvgpr_read_b32 v018, a110 - v_accvgpr_read_b32 v019, a111 - v_mfma_f32_16x16x128_f8f6f4 v076 v077 v078 v079, v056 v057 v058 v059 v060 v061 v062 v063, v160 v161 v162 v163 v164 v165 v166 v167, v028 v029 v030 v031 ;.loc 1 214 0 - s_nop 2 - v_accvgpr_mov_b32 a0, a124 - v_accvgpr_mov_b32 a1, a125 - v_accvgpr_mov_b32 a2, a126 - v_accvgpr_mov_b32 a3, a127 - v_accvgpr_read_b32 v028, a112 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, v064 v065 v066 v067 v068 v069 v070 v071, v152 v153 v154 v155 v156 v157 v158 v159, v040 v041 v042 v043 ;.loc 1 221 0 - v_accvgpr_read_b32 v029, a113 - v_accvgpr_read_b32 v030, a114 - v_accvgpr_read_b32 v031, a115 - s_nop 3 - v_accvgpr_read_b32 v040, a202 - v_mfma_f32_16x16x128_f8f6f4 v220 v221 v222 v223, v056 v057 v058 v059 v060 v061 v062 v063, v008 v009 v010 v011 v012 v013 v014 v015, v108 v109 v110 v111 ;.loc 1 209 0 - v_accvgpr_read_b32 v041, a203 - v_accvgpr_read_b32 v042, a204 - v_accvgpr_read_b32 v043, a205 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, v056 v057 v058 v059 v060 v061 v062 v063, v144 v145 v146 v147 v148 v149 v150 v151, v016 v017 v018 v019 ;.loc 1 208 0 - s_nop 6 - v_accvgpr_read_b32 v016, a190 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v048 v049 v050 v051 v052 v053 v054 v055, v128 v129 v130 v131 v132 v133 v134 v135, v120 v121 v122 v123 ;.loc 1 196 0 - v_accvgpr_read_b32 v017, a191 - v_accvgpr_read_b32 v018, a192 - v_accvgpr_read_b32 v019, a193 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, v048 v049 v050 v051 v052 v053 v054 v055, v008 v009 v010 v011 v012 v013 v014 v015, v216 v217 v218 v219 ;.loc 1 197 0 - s_nop 7 - v_accvgpr_write_b32 a226, v248 - v_accvgpr_write_b32 a227, v249 - v_accvgpr_write_b32 a228, v250 - v_mfma_f32_16x16x128_f8f6f4 v216 v217 v218 v219, v048 v049 v050 v051 v052 v053 v054 v055, v020 v021 v022 v023 v024 v025 v026 v027, v088 v089 v090 v091 ;.loc 1 203 0 - v_accvgpr_read_b32 v052, a234 - v_accvgpr_read_b32 v053, a235 - v_accvgpr_read_b32 v054, a236 - v_accvgpr_read_b32 v055, a237 - v_accvgpr_write_b32 a237, v075 - v_accvgpr_write_b32 a236, v074 - v_accvgpr_write_b32 a235, v073 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, v064 v065 v066 v067 v068 v069 v070 v071, v128 v129 v130 v131 v132 v133 v134 v135, v112 v113 v114 v115 ;.loc 1 220 0 - v_accvgpr_write_b32 a234, v072 - v_accvgpr_read_b32 v048, a230 - v_accvgpr_read_b32 v049, a231 - v_accvgpr_read_b32 v050, a232 - v_accvgpr_read_b32 v051, a233 - v_accvgpr_write_b32 a229, v251 - v_accvgpr_write_b32 a230, v232 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, v056 v057 v058 v059 v060 v061 v062 v063, v168 v169 v170 v171 v172 v173 v174 v175, v028 v029 v030 v031 ;.loc 1 215 0 - v_accvgpr_write_b32 a231, v233 - v_accvgpr_write_b32 a232, v234 - v_accvgpr_write_b32 a233, v235 - s_nop 3 - v_accvgpr_read_b32 v028, a116 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, v064 v065 v066 v067 v068 v069 v070 v071, v160 v161 v162 v163 v164 v165 v166 v167, v040 v041 v042 v043 ;.loc 1 226 0 - v_accvgpr_read_b32 v029, a117 - v_accvgpr_read_b32 v030, a118 - v_accvgpr_read_b32 v031, a119 - s_nop 3 - v_accvgpr_read_b32 v040, a120 - s_waitcnt lgkmcnt(8) ;.loc 1 179 0 - v_mfma_f32_16x16x128_f8f6f4 a[190:193], v032 v033 v034 v035 v036 v037 v038 v039, v128 v129 v130 v131 v132 v133 v134 v135, a[0:3] - v_accvgpr_read_b32 v041, a121 - v_accvgpr_read_b32 v042, a122 - v_accvgpr_read_b32 v043, a123 - s_nop 3 - v_accvgpr_mov_b32 a0, a166 - v_accvgpr_mov_b32 a1, a167 - v_accvgpr_mov_b32 a2, a168 - v_accvgpr_mov_b32 a3, a169 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, v056 v057 v058 v059 v060 v061 v062 v063, v128 v129 v130 v131 v132 v133 v134 v135, v228 v229 v230 v231 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, v056 v057 v058 v059 v060 v061 v062 v063, v136 v137 v138 v139 v140 v141 v142 v143, v236 v237 v238 v239 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, v064 v065 v066 v067 v068 v069 v070 v071, v008 v009 v010 v011 v012 v013 v014 v015, v252 v253 v254 v255 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, v056 v057 v058 v059 v060 v061 v062 v063, v152 v153 v154 v155 v156 v157 v158 v159, v016 v017 v018 v019 ;.loc 1 209 0 - v_accvgpr_read_b32 v056, a238 - v_accvgpr_read_b32 v057, a239 - v_accvgpr_read_b32 v058, a240 - v_accvgpr_read_b32 v059, a241 - v_accvgpr_read_b32 v060, a140 - v_accvgpr_read_b32 v061, a141 - v_accvgpr_read_b32 v062, a142 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, v064 v065 v066 v067 v068 v069 v070 v071, v144 v145 v146 v147 v148 v149 v150 v151, v028 v029 v030 v031 ;.loc 1 220 0 - v_accvgpr_read_b32 v063, a143 - v_accvgpr_write_b32 a241, v219 - v_accvgpr_write_b32 a240, v218 - v_accvgpr_write_b32 a239, v217 - v_accvgpr_write_b32 a238, v216 - v_mfma_f32_16x16x128_f8f6f4 v068 v069 v070 v071, v064 v065 v066 v067 v068 v069 v070 v071, v168 v169 v170 v171 v172 v173 v174 v175, v040 v041 v042 v043 ;.loc 1 227 0 - v_mfma_f32_16x16x128_f8f6f4 a[166:169], v032 v033 v034 v035 v036 v037 v038 v039, v008 v009 v010 v011 v012 v013 v014 v015, a[0:3] ;.loc 1 180 0 - s_nop 5 - v_accvgpr_read_b32 v040, a222 - v_accvgpr_read_b32 v041, a223 - v_accvgpr_read_b32 v042, a224 - v_accvgpr_read_b32 v043, a225 - v_accvgpr_mov_b32 a0, a170 - s_waitcnt lgkmcnt(6) ;.loc 1 196 0 - v_mfma_f32_16x16x128_f8f6f4 a[194:197], v176 v177 v178 v179 v180 v181 v182 v183, v128 v129 v130 v131 v132 v133 v134 v135, a[4:7] - v_accvgpr_mov_b32 a1, a171 - v_accvgpr_mov_b32 a2, a172 - v_accvgpr_mov_b32 a3, a173 - s_nop 3 - v_accvgpr_mov_b32 a4, a210 - v_accvgpr_mov_b32 a5, a211 - v_accvgpr_mov_b32 a6, a212 - v_accvgpr_mov_b32 a7, a213 - v_mfma_f32_16x16x128_f8f6f4 a[170:173], v032 v033 v034 v035 v036 v037 v038 v039, v136 v137 v138 v139 v140 v141 v142 v143, a[0:3] ;.loc 1 186 0 - s_nop 6 - v_accvgpr_mov_b32 a0, a174 - v_mfma_f32_16x16x128_f8f6f4 a[198:201], v176 v177 v178 v179 v180 v181 v182 v183, v008 v009 v010 v011 v012 v013 v014 v015, a[4:7] ;.loc 1 197 0 - v_accvgpr_mov_b32 a1, a175 - v_accvgpr_mov_b32 a2, a176 - v_accvgpr_mov_b32 a3, a177 - s_waitcnt lgkmcnt(4) ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, v184 v185 v186 v187 v188 v189 v190 v191, v008 v009 v010 v011 v012 v013 v014 v015, v040 v041 v042 v043 - s_nop 1 ;.loc 4 920 22 - ds_read_b128 a[4:7], v006 offset:2048 - s_waitcnt lgkmcnt(3) ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, v192 v193 v194 v195 v196 v197 v198 v199, v008 v009 v010 v011 v012 v013 v014 v015, v056 v057 v058 v059 - v_accvgpr_read_b32 v008, a24 - v_accvgpr_read_b32 v009, a25 - v_accvgpr_read_b32 v010, a26 - v_accvgpr_read_b32 v011, a27 - v_accvgpr_mov_b32 a24, a32 - v_accvgpr_mov_b32 a25, a33 - v_accvgpr_mov_b32 a26, a34 - v_mfma_f32_16x16x128_f8f6f4 a[202:205], v176 v177 v178 v179 v180 v181 v182 v183, v136 v137 v138 v139 v140 v141 v142 v143, a[8:11] ;.loc 1 202 0 - v_accvgpr_mov_b32 a27, a35 - v_accvgpr_mov_b32 a32, a246 - v_accvgpr_mov_b32 a33, a247 - v_accvgpr_mov_b32 a34, a248 - v_accvgpr_mov_b32 a35, a249 - s_nop 1 - v_accvgpr_mov_b32 a8, a218 - v_mfma_f32_16x16x128_f8f6f4 a[174:177], v032 v033 v034 v035 v036 v037 v038 v039, v020 v021 v022 v023 v024 v025 v026 v027, a[0:3] ;.loc 1 191 0 - v_accvgpr_mov_b32 a9, a219 - v_accvgpr_mov_b32 a10, a220 - v_accvgpr_mov_b32 a11, a221 - s_nop 3 ;.loc 4 920 22 - ds_read_b128 a[0:3], v005 offset:2048 - buffer_load_dwordx4 v002, s[8:11], s36 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s55 - v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, v192 v193 v194 v195 v196 v197 v198 v199, v136 v137 v138 v139 v140 v141 v142 v143, v008 v009 v010 v011 ;.loc 1 226 0 - ds_read_b128 a[12:15], v006 offset:4096 ;.loc 4 920 22 - s_nop 5 - v_accvgpr_read_b32 v008, a28 - v_mfma_f32_16x16x128_f8f6f4 a[206:209], v176 v177 v178 v179 v180 v181 v182 v183, v020 v021 v022 v023 v024 v025 v026 v027, a[8:11] ;.loc 1 203 0 - v_accvgpr_read_b32 v009, a29 - v_accvgpr_read_b32 v010, a30 - v_accvgpr_read_b32 v011, a31 - v_accvgpr_mov_b32 a28, a242 - v_accvgpr_mov_b32 a29, a243 - v_accvgpr_mov_b32 a30, a244 - v_accvgpr_mov_b32 a31, a245 - ds_read_b128 a[8:11], v005 offset:4096 ;.loc 4 920 22 - buffer_load_dwordx4 v001, s[8:11], s36 offen lds ;.loc 3 94 8 - v_mfma_f32_16x16x128_f8f6f4 a[210:213], v032 v033 v034 v035 v036 v037 v038 v039, v144 v145 v146 v147 v148 v149 v150 v151, a[24:27] ;.loc 1 179 0 - s_mov_b32 m0, s54 ;.loc 3 94 8 - ds_read_b128 a[16:19], v005 offset:6144 ;.loc 4 920 22 - ds_read_b128 a[20:23], v006 offset:6144 - buffer_load_dwordx4 v003, s[4:7], s33 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s53 - s_nop 1 - v_accvgpr_mov_b32 a24, a36 - v_accvgpr_mov_b32 a25, a37 - v_accvgpr_mov_b32 a26, a38 - v_accvgpr_mov_b32 a27, a39 - v_mfma_f32_16x16x128_f8f6f4 a[218:221], v032 v033 v034 v035 v036 v037 v038 v039, v160 v161 v162 v163 v164 v165 v166 v167, a[28:31] ;.loc 1 186 0 - s_nop 0 ;.loc 1 180 0 - v_mfma_f32_16x16x128_f8f6f4 a[214:217], v032 v033 v034 v035 v036 v037 v038 v039, v152 v153 v154 v155 v156 v157 v158 v159, a[24:27] - s_nop 4 ;.loc 4 920 22 - ds_read_b128 a[28:31], v083 - s_nop 0 - ds_read_b128 a[24:27], v000 - buffer_load_dwordx4 v004, s[4:7], s33 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a255 - v_mfma_f32_16x16x128_f8f6f4 a[222:225], v032 v033 v034 v035 v036 v037 v038 v039, v168 v169 v170 v171 v172 v173 v174 v175, a[32:35] ;.loc 1 191 0 - ds_read_b128 a[36:39], v000 ;.loc 4 920 22 - scratch_load_dword v000, off, off offset:60 - s_mov_b32 m0, s52 ;.loc 3 94 8 - v_accvgpr_read_b32 v004, a86 - v_accvgpr_read_b32 v032, a64 - v_accvgpr_read_b32 v033, a65 - v_accvgpr_read_b32 v034, a66 - ds_read_b128 a[32:35], v082 ;.loc 4 920 22 - buffer_load_dwordx4 v002, s[4:7], s33 offen lds ;.loc 3 94 8 - s_mov_b32 m0, s51 - v_accvgpr_read_b32 v083, a59 - v_accvgpr_read_b32 v082, a58 - v_accvgpr_read_b32 v081, a57 - v_accvgpr_read_b32 v080, a56 - v_accvgpr_read_b32 v035, a67 - v_accvgpr_read_b32 v036, a70 - v_accvgpr_read_b32 v037, a71 - v_accvgpr_read_b32 v038, a72 - v_accvgpr_read_b32 v039, a73 - s_waitcnt lgkmcnt(0) ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[8:15], a[32:39], v220 v221 v222 v223 - s_waitcnt vmcnt(1) ;.loc 4 920 22 - ds_read_b128 a[40:43], v000 - scratch_load_dword v000, off, off offset:56 - s_nop 8 - v_accvgpr_write_b32 a245, v075 - v_accvgpr_write_b32 a244, v074 - v_accvgpr_write_b32 a243, v073 - v_accvgpr_write_b32 a242, v072 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, v184 v185 v186 v187 v188 v189 v190 v191, v020 v021 v022 v023 v024 v025 v026 v027, v048 v049 v050 v051 ;.loc 1 215 0 - s_waitcnt vmcnt(0) ;.loc 4 920 22 - ds_read_b128 a[44:47], v000 - buffer_load_dwordx4 v001, s[4:7], s33 offen lds ;.loc 3 94 8 - v_accvgpr_read_b32 v000, a87 - ds_read_b128 a[48:51], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a135 - ds_read_b128 a[52:55], v000 - s_waitcnt vmcnt(16) ;.loc 1 374 0 -s_barrier - ds_read_b128 a[56:59], v004 ;.loc 4 920 22 - v_accvgpr_read_b32 v004, a68 - ds_read_b128 a[60:63], v004 - v_accvgpr_read_b32 v004, a69 - ds_read_b128 a[64:67], v004 - v_accvgpr_read_b32 v004, a83 - ds_read_b128 a[68:71], v004 - v_accvgpr_read_b32 v004, a85 - ds_read_b128 a[72:75], v004 - scratch_load_dword v004, off, off offset:24 - s_waitcnt lgkmcnt(7) ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[16:23], a[40:47], v092 v093 v094 v095 - v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, v192 v193 v194 v195 v196 v197 v198 v199, v020 v021 v022 v023 v024 v025 v026 v027, v008 v009 v010 v011 ;.loc 1 227 0 - v_accvgpr_read_b32 v020, a250 - v_accvgpr_read_b32 v021, a251 - v_accvgpr_read_b32 v022, a252 - v_accvgpr_read_b32 v023, a253 - s_nop 6 - v_accvgpr_write_b32 a249, v075 - v_accvgpr_write_b32 a248, v074 - v_accvgpr_write_b32 a247, v073 - v_accvgpr_write_b32 a246, v072 - s_waitcnt lgkmcnt(5) ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 v072 v073 v074 v075, a[16:23], a[48:55], v096 v097 v098 v099 - v_accvgpr_read_b32 v024, a150 - v_accvgpr_read_b32 v025, a151 - v_accvgpr_read_b32 v026, a152 - v_accvgpr_read_b32 v027, a153 - v_mfma_f32_16x16x128_f8f6f4 v236 v237 v238 v239, v176 v177 v178 v179 v180 v181 v182 v183, v168 v169 v170 v171 v172 v173 v174 v175, v036 v037 v038 v039 ;.loc 1 203 0 - s_nop 6 - v_accvgpr_write_b32 a253, v075 - v_accvgpr_write_b32 a252, v074 - v_accvgpr_write_b32 a251, v073 - v_accvgpr_read_b32 v036, a78 - v_accvgpr_write_b32 a250, v072 - v_accvgpr_read_b32 v072, a128 - v_accvgpr_read_b32 v037, a79 - v_accvgpr_read_b32 v038, a80 - v_accvgpr_read_b32 v039, a81 - v_accvgpr_read_b32 v073, a129 - v_accvgpr_read_b32 v074, a130 - v_accvgpr_read_b32 v075, a131 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, v184 v185 v186 v187 v188 v189 v190 v191, v128 v129 v130 v131 v132 v133 v134 v135, v100 v101 v102 v103 ;.loc 1 208 0 - v_accvgpr_mov_b32 a128, a190 - v_accvgpr_mov_b32 a129, a191 - v_accvgpr_mov_b32 a130, a192 - v_accvgpr_mov_b32 a131, a193 - s_waitcnt vmcnt(0) ;.loc 4 920 22 - ds_read_b128 a[76:79], v004 - v_accvgpr_read_b32 v004, a82 - ds_read_b128 a[80:83], v004 - v_accvgpr_read_b32 v004, a84 - s_waitcnt lgkmcnt(5) ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v248 v249 v250 v251, v200 v201 v202 v203 v204 v205 v206 v207, a[56:63], v072 v073 v074 v075 - ds_read_b128 a[84:87], v004 ;.loc 4 920 22 - v_accvgpr_read_b32 v004, a134 - s_nop 4 - v_accvgpr_read_b32 v072, a178 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, v192 v193 v194 v195 v196 v197 v198 v199, v128 v129 v130 v131 v132 v133 v134 v135, v052 v053 v054 v055 ;.loc 1 220 0 - v_accvgpr_read_b32 v131, a91 - v_accvgpr_read_b32 v073, a179 - v_accvgpr_read_b32 v074, a180 - v_accvgpr_read_b32 v075, a181 - v_accvgpr_read_b32 v130, a90 - v_accvgpr_read_b32 v129, a89 - v_accvgpr_read_b32 v128, a88 - v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, v176 v177 v178 v179 v180 v181 v182 v183, v144 v145 v146 v147 v148 v149 v150 v151, v020 v021 v022 v023 ;.loc 1 196 0 - v_accvgpr_mov_b32 a88, a96 - v_accvgpr_mov_b32 a89, a97 - v_accvgpr_mov_b32 a90, a98 - v_accvgpr_mov_b32 a91, a99 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, v184 v185 v186 v187 v188 v189 v190 v191, v144 v145 v146 v147 v148 v149 v150 v151, v036 v037 v038 v039 ;.loc 1 208 0 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, v184 v185 v186 v187 v188 v189 v190 v191, v152 v153 v154 v155 v156 v157 v158 v159, v060 v061 v062 v063 ;.loc 1 209 0 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, v184 v185 v186 v187 v188 v189 v190 v191, v160 v161 v162 v163 v164 v165 v166 v167, v208 v209 v210 v211 ;.loc 1 214 0 - v_mfma_f32_16x16x128_f8f6f4 v208 v209 v210 v211, v184 v185 v186 v187 v188 v189 v190 v191, v168 v169 v170 v171 v172 v173 v174 v175, v212 v213 v214 v215 ;.loc 1 215 0 - v_mfma_f32_16x16x128_f8f6f4 v212 v213 v214 v215, v192 v193 v194 v195 v196 v197 v198 v199, v144 v145 v146 v147 v148 v149 v150 v151, v224 v225 v226 v227 ;.loc 1 220 0 - s_waitcnt lgkmcnt(4) ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, v200 v201 v202 v203 v204 v205 v206 v207, a[64:71], v072 v073 v074 v075 - s_nop 6 - v_accvgpr_read_b32 v072, a182 - v_accvgpr_read_b32 v073, a183 - v_accvgpr_read_b32 v074, a184 - v_accvgpr_read_b32 v075, a185 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, v176 v177 v178 v179 v180 v181 v182 v183, v152 v153 v154 v155 v156 v157 v158 v159, v024 v025 v026 v027 ;.loc 1 197 0 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, v192 v193 v194 v195 v196 v197 v198 v199, v152 v153 v154 v155 v156 v157 v158 v159, v244 v245 v246 v247 ;.loc 1 221 0 - v_mfma_f32_16x16x128_f8f6f4 a[140:143], v200 v201 v202 v203 v204 v205 v206 v207, a[40:47], a[88:91] ;.loc 1 376 0 - s_nop 6 - v_accvgpr_mov_b32 a88, a100 - s_waitcnt lgkmcnt(2) ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, v200 v201 v202 v203 v204 v205 v206 v207, a[72:79], v072 v073 v074 v075 - v_accvgpr_mov_b32 a89, a101 - v_accvgpr_mov_b32 a90, a102 - v_accvgpr_mov_b32 a91, a103 - s_nop 3 - v_accvgpr_read_b32 v072, a154 - v_mfma_f32_16x16x128_f8f6f4 v000 v001 v002 v003, v192 v193 v194 v195 v196 v197 v198 v199, v160 v161 v162 v163 v164 v165 v166 v167, v240 v241 v242 v243 ;.loc 1 226 0 - v_accvgpr_read_b32 v073, a155 - v_accvgpr_read_b32 v074, a156 - v_accvgpr_read_b32 v075, a157 - v_accvgpr_mov_b32 a154, a218 - v_accvgpr_mov_b32 a155, a219 - v_accvgpr_mov_b32 a156, a220 - v_accvgpr_mov_b32 a157, a221 - v_mfma_f32_16x16x128_f8f6f4 v240 v241 v242 v243, v200 v201 v202 v203 v204 v205 v206 v207, a[24:31], v128 v129 v130 v131 ;.loc 1 376 0 - s_nop 6 - v_accvgpr_read_b32 v131, a95 - v_accvgpr_read_b32 v130, a94 - v_accvgpr_read_b32 v129, a93 - v_accvgpr_read_b32 v128, a92 - v_mfma_f32_16x16x128_f8f6f4 a[150:153], v200 v201 v202 v203 v204 v205 v206 v207, a[48:55], a[88:91] - s_nop 6 ;.loc 4 920 22 - ds_read_b128 a[88:91], v005 offset:16384 - ds_read_b128 a[92:95], v006 offset:16384 - ds_read_b128 a[96:99], v005 offset:18432 - ds_read_b128 a[100:103], v006 offset:18432 - ds_read_b128 a[104:107], v005 offset:20480 - ds_read_b128 a[108:111], v006 offset:20480 - ds_read_b128 a[112:115], v005 offset:22528 - ds_read_b128 a[116:119], v006 offset:22528 - s_waitcnt vmcnt(8) ;.loc 1 379 0 -s_barrier - s_waitcnt lgkmcnt(8) ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, v200 v201 v202 v203 v204 v205 v206 v207, a[80:87], v072 v073 v074 v075 - s_nop 6 - v_accvgpr_read_b32 v072, a158 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, v176 v177 v178 v179 v180 v181 v182 v183, v160 v161 v162 v163 v164 v165 v166 v167, v032 v033 v034 v035 ;.loc 1 202 0 - v_accvgpr_read_b32 v073, a159 - v_accvgpr_read_b32 v074, a160 - v_accvgpr_read_b32 v075, a161 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[8:15], a[64:71], v016 v017 v018 v019 ;.loc 1 378 0 - s_nop 6 - v_accvgpr_read_b32 v016, a174 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[0:7], a[56:63], v072 v073 v074 v075 - v_accvgpr_read_b32 v017, a175 - v_accvgpr_read_b32 v018, a176 - v_accvgpr_read_b32 v019, a177 - s_nop 3 - v_accvgpr_read_b32 v072, a162 - v_accvgpr_read_b32 v073, a163 - v_accvgpr_read_b32 v074, a164 - v_accvgpr_read_b32 v075, a165 - s_waitcnt lgkmcnt(6) ;.loc 1 381 0 - v_mfma_f32_16x16x128_f8f6f4 v144 v145 v146 v147, a[88:95], a[48:55], v016 v017 v018 v019 - v_accvgpr_mov_b32 a160, a250 - v_accvgpr_mov_b32 a161, a251 - v_accvgpr_mov_b32 a162, a252 - v_accvgpr_mov_b32 a163, a253 - s_nop 2 - v_accvgpr_read_b32 v016, a194 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[0:7], a[64:71], v072 v073 v074 v075 ;.loc 1 378 0 - v_accvgpr_read_b32 v017, a195 - v_accvgpr_read_b32 v018, a196 - v_accvgpr_read_b32 v019, a197 - s_nop 3 - v_accvgpr_read_b32 v072, a186 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, v192 v193 v194 v195 v196 v197 v198 v199, v168 v169 v170 v171 v172 v173 v174 v175, v080 v081 v082 v083 ;.loc 1 227 0 - v_accvgpr_read_b32 v073, a187 - v_accvgpr_read_b32 v074, a188 - v_accvgpr_read_b32 v075, a189 - v_mfma_f32_16x16x128_f8f6f4 a[226:229], a[0:7], a[24:31], a[226:229] ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 v228 v229 v230 v231, a[8:15], a[24:31], v228 v229 v230 v231 - v_mfma_f32_16x16x128_f8f6f4 v220 v221 v222 v223, a[8:15], a[48:55], v084 v085 v086 v087 - v_mfma_f32_16x16x128_f8f6f4 v232 v233 v234 v235, a[16:23], a[24:31], v088 v089 v090 v091 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[0:7], a[72:79], v116 v117 v118 v119 ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 a[188:191], a[88:95], a[24:31], a[128:131] ;.loc 1 381 0 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[96:103], a[24:31], v016 v017 v018 v019 - s_nop 4 - v_accvgpr_mov_b32 a128, a166 - v_accvgpr_mov_b32 a129, a167 - v_accvgpr_mov_b32 a130, a168 - v_accvgpr_mov_b32 a131, a169 - v_accvgpr_mov_b32 a164, a246 - v_accvgpr_mov_b32 a165, a247 - v_accvgpr_mov_b32 a166, a248 - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[104:111], a[24:31], v100 v101 v102 v103 - v_accvgpr_read_b32 v016, a198 - v_accvgpr_read_b32 v017, a199 - v_accvgpr_read_b32 v018, a200 - v_accvgpr_read_b32 v019, a201 - v_accvgpr_mov_b32 a167, a249 - s_waitcnt lgkmcnt(0) - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[112:119], a[24:31], v052 v053 v054 v055 - ds_read_b128 a[24:27], v004 ;.loc 4 920 22 - scratch_load_dword v004, off, off offset:32 - s_waitcnt vmcnt(0) - ds_read_b128 a[28:31], v004 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, v184 v185 v186 v187 v188 v189 v190 v191, v136 v137 v138 v139 v140 v141 v142 v143, v044 v045 v046 v047 ;.loc 1 214 0 - v_accvgpr_read_b32 v004, a137 - v_mfma_f32_16x16x128_f8f6f4 v244 v245 v246 v247, v200 v201 v202 v203 v204 v205 v206 v207, a[32:39], v128 v129 v130 v131 ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 a[230:233], a[0:7], a[32:39], a[230:233] - v_mfma_f32_16x16x128_f8f6f4 v252 v253 v254 v255, a[16:23], a[32:39], v252 v253 v254 v255 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[8:15], a[80:87], v120 v121 v122 v123 ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v196 v197 v198 v199, a[16:23], a[64:71], v104 v105 v106 v107 - v_mfma_f32_16x16x128_f8f6f4 a[184:187], a[88:95], a[32:39], a[128:131] ;.loc 1 381 0 - s_nop 6 - v_accvgpr_mov_b32 a128, a170 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[96:103], a[32:39], v016 v017 v018 v019 - v_accvgpr_mov_b32 a129, a171 - v_accvgpr_mov_b32 a130, a172 - v_accvgpr_mov_b32 a131, a173 - v_accvgpr_mov_b32 a168, a242 - v_accvgpr_mov_b32 a169, a243 - v_accvgpr_mov_b32 a170, a244 - v_accvgpr_mov_b32 a171, a245 - v_accvgpr_read_b32 v016, a202 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[104:111], a[32:39], v040 v041 v042 v043 - v_accvgpr_read_b32 v017, a203 - v_accvgpr_read_b32 v018, a204 - v_accvgpr_read_b32 v019, a205 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[112:119], a[32:39], v056 v057 v058 v059 - ds_read_b128 a[32:35], v004 ;.loc 4 920 22 - v_accvgpr_read_b32 v004, a149 - ds_read_b128 a[36:39], v004 - v_accvgpr_read_b32 v004, a133 - v_mfma_f32_16x16x128_f8f6f4 a[234:237], a[0:7], a[40:47], a[234:237] ;.loc 1 376 0 - v_mfma_f32_16x16x128_f8f6f4 v216 v217 v218 v219, a[8:15], a[40:47], v124 v125 v126 v127 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[8:15], a[56:63], v108 v109 v110 v111 ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 a[180:183], a[88:95], a[40:47], a[128:131] ;.loc 1 381 0 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[96:103], a[40:47], v016 v017 v018 v019 - s_nop 5 - v_accvgpr_mov_b32 a128, a210 - v_accvgpr_mov_b32 a129, a211 - v_accvgpr_mov_b32 a130, a212 - v_accvgpr_mov_b32 a131, a213 - v_accvgpr_read_b32 v016, a206 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[40:47], v044 v045 v046 v047 - v_accvgpr_read_b32 v017, a207 - v_accvgpr_read_b32 v018, a208 - v_accvgpr_read_b32 v019, a209 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[112:119], a[40:47], v012 v013 v014 v015 - ds_read_b128 a[40:43], v004 ;.loc 4 920 22 - v_accvgpr_read_b32 v004, a144 - ds_read_b128 a[44:47], v004 - v_accvgpr_read_b32 v004, a146 - v_mfma_f32_16x16x128_f8f6f4 a[238:241], a[0:7], a[48:55], a[238:241] ;.loc 1 376 0 - s_nop 1 - v_accvgpr_read_b32 v012, a150 - v_accvgpr_read_b32 v013, a151 - v_accvgpr_read_b32 v014, a152 - v_accvgpr_read_b32 v015, a153 - v_mfma_f32_16x16x128_f8f6f4 v200 v201 v202 v203, a[16:23], a[72:79], v112 v113 v114 v115 ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[96:103], a[48:55], v016 v017 v018 v019 ;.loc 1 381 0 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[104:111], a[48:55], v048 v049 v050 v051 - v_mfma_f32_16x16x128_f8f6f4 v128 v129 v130 v131, a[112:119], a[48:55], v008 v009 v010 v011 - ds_read_b128 a[48:51], v004 ;.loc 4 920 22 - v_accvgpr_read_b32 v004, a254 - ds_read_b128 a[52:55], v004 - v_mfma_f32_16x16x128_f8f6f4 v044 v045 v046 v047, a[104:111], a[72:79], v060 v061 v062 v063 ;.loc 1 383 0 - s_nop 2 - v_accvgpr_read_b32 v008, a222 - v_accvgpr_read_b32 v009, a223 - v_accvgpr_read_b32 v010, a224 - v_accvgpr_read_b32 v011, a225 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[112:119], a[72:79], v000 v001 v002 v003 - s_nop 6 - v_accvgpr_read_b32 v000, a132 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[0:7], a[80:87], v072 v073 v074 v075 ;.loc 1 378 0 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[8:15], a[72:79], v076 v077 v078 v079 - v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[16:23], a[56:63], v028 v029 v030 v031 - v_mfma_f32_16x16x128_f8f6f4 v204 v205 v206 v207, a[16:23], a[80:87], v068 v069 v070 v071 - ds_read_b128 a[0:3], v005 offset:32768 ;.loc 4 920 22 - ds_read_b128 a[4:7], v006 offset:32768 - ds_read_b128 a[8:11], v005 offset:34816 - ds_read_b128 a[12:15], v006 offset:34816 - ds_read_b128 a[16:19], v005 offset:36864 - ds_read_b128 a[20:23], v006 offset:36864 - ds_read_b128 a[120:123], v005 offset:38912 - ds_read_b128 a[124:127], v006 offset:38912 - s_waitcnt vmcnt(0) ;.loc 1 393 0 -s_barrier - v_mfma_f32_16x16x128_f8f6f4 a[176:179], a[88:95], a[56:63], a[128:131] ;.loc 1 383 0 - v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[96:103], a[56:63], v020 v021 v022 v023 - s_nop 5 - v_accvgpr_mov_b32 a128, a214 - v_accvgpr_mov_b32 a129, a215 - v_accvgpr_mov_b32 a130, a216 - v_accvgpr_mov_b32 a131, a217 - v_mfma_f32_16x16x128_f8f6f4 v036 v037 v038 v039, a[104:111], a[56:63], v036 v037 v038 v039 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[112:119], a[56:63], v212 v213 v214 v215 - ds_read_b128 a[56:59], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a136 - ds_read_b128 a[60:63], v000 - scratch_load_dword v000, off, off offset:28 - v_mfma_f32_16x16x128_f8f6f4 a[128:131], a[88:95], a[64:71], a[128:131] ;.loc 1 383 0 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[96:103], a[64:71], v024 v025 v026 v027 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[96:103], a[72:79], v032 v033 v034 v035 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[96:103], a[80:87], v236 v237 v238 v239 - v_mfma_f32_16x16x128_f8f6f4 v040 v041 v042 v043, a[104:111], a[64:71], v064 v065 v066 v067 - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[112:119], a[64:71], v224 v225 v226 v227 - s_waitcnt vmcnt(0) ;.loc 4 920 22 - ds_read_b128 a[64:67], v000 - v_accvgpr_read_b32 v000, a145 - ds_read_b128 a[68:71], v000 - v_accvgpr_read_b32 v000, a147 - v_mfma_f32_16x16x128_f8f6f4 a[192:195], a[88:95], a[72:79], a[154:157] ;.loc 1 383 0 - ds_read_b128 a[72:75], v000 ;.loc 4 920 22 - ds_read_b128 a[76:79], v007 - v_accvgpr_read_b32 v000, a148 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[88:95], a[80:87], v008 v009 v010 v011 ;.loc 1 383 0 - v_mfma_f32_16x16x128_f8f6f4 v048 v049 v050 v051, a[104:111], a[80:87], v208 v209 v210 v211 - s_nop 5 - v_accvgpr_read_b32 v008, a140 - v_accvgpr_read_b32 v009, a141 - v_accvgpr_read_b32 v010, a142 - v_accvgpr_read_b32 v011, a143 - v_mfma_f32_16x16x128_f8f6f4 v064 v065 v066 v067, a[112:119], a[80:87], v080 v081 v082 v083 - ds_read_b128 a[80:83], v000 ;.loc 4 920 22 - v_accvgpr_read_b32 v000, a138 - ds_read_b128 a[84:87], v000 - ds_read_b128 a[88:91], v005 offset:49152 - ds_read_b128 a[92:95], v006 offset:49152 - ds_read_b128 a[96:99], v005 offset:51200 - ds_read_b128 a[100:103], v006 offset:51200 - ds_read_b128 a[104:107], v005 offset:53248 - ds_read_b128 a[108:111], v006 offset:53248 - ds_read_b128 a[112:115], v005 offset:55296 - ds_read_b128 a[116:119], v006 offset:55296 - v_accvgpr_read_b32 v208, a230 - v_accvgpr_read_b32 v209, a231 - v_accvgpr_read_b32 v210, a232 - v_accvgpr_read_b32 v211, a233 - s_waitcnt lgkmcnt(4) ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[96:103], a[80:87], v032 v033 v034 v035 - v_accvgpr_read_b32 v080, a226 - v_accvgpr_read_b32 v081, a227 - v_accvgpr_read_b32 v082, a228 - v_accvgpr_read_b32 v083, a229 - v_mfma_f32_16x16x128_f8f6f4 v224 v225 v226 v227, a[16:23], a[24:31], v228 v229 v230 v231 ;.loc 1 396 0 - v_mfma_f32_16x16x128_f8f6f4 a[168:171], a[16:23], a[32:39], a[168:171] - s_nop 10 - v_accvgpr_write_b32 a172, v224 - v_accvgpr_write_b32 a173, v225 - v_accvgpr_write_b32 a174, v226 - v_mfma_f32_16x16x128_f8f6f4 v214 v215 v216 v217, a[16:23], a[40:47], v216 v217 v218 v219 - v_accvgpr_write_b32 a175, v227 - v_mfma_f32_16x16x128_f8f6f4 v218 v219 v220 v221, a[16:23], a[48:55], v220 v221 v222 v223 - v_mfma_f32_16x16x128_f8f6f4 v176 v177 v178 v179, a[16:23], a[56:63], v176 v177 v178 v179 ;.loc 1 397 0 - v_mfma_f32_16x16x128_f8f6f4 v180 v181 v182 v183, a[16:23], a[64:71], v180 v181 v182 v183 - v_mfma_f32_16x16x128_f8f6f4 v184 v185 v186 v187, a[16:23], a[72:79], v184 v185 v186 v187 - v_mfma_f32_16x16x128_f8f6f4 v188 v189 v190 v191, a[16:23], a[80:87], v188 v189 v190 v191 - v_accvgpr_write_b32 a16, v032 - v_accvgpr_write_b32 a17, v033 - v_accvgpr_write_b32 a18, v034 - v_accvgpr_write_b32 a19, v035 - s_waitcnt lgkmcnt(2) ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[56:63], v036 v037 v038 v039 - v_mfma_f32_16x16x128_f8f6f4 v000 v001 v002 v003, a[0:7], a[24:31], v240 v241 v242 v243 ;.loc 1 396 0 - s_nop 5 ;.loc 3 194 45 - v_mov_b32_e32 v038, s0 - v_mfma_f32_16x16x128_f8f6f4 v004 v005 v006 v007, a[0:7], a[32:39], v244 v245 v246 v247 ;.loc 1 396 0 - v_mfma_f32_16x16x128_f8f6f4 v242 v243 v244 v245, a[8:15], a[32:39], v208 v209 v210 v211 - s_nop 6 - v_accvgpr_read_b32 v208, a234 - v_accvgpr_read_b32 v209, a235 - v_accvgpr_read_b32 v210, a236 - v_accvgpr_read_b32 v211, a237 - v_mfma_f32_16x16x128_f8f6f4 v080 v081 v082 v083, a[8:15], a[24:31], v080 v081 v082 v083 - s_nop 0 - v_mfma_f32_16x16x128_f8f6f4 v238 v239 v240 v241, a[8:15], a[40:47], v208 v209 v210 v211 - s_nop 6 - v_accvgpr_read_b32 v208, a238 - v_accvgpr_read_b32 v209, a239 - v_accvgpr_read_b32 v210, a240 - v_accvgpr_read_b32 v211, a241 - v_mfma_f32_16x16x128_f8f6f4 v160 v161 v162 v163, a[8:15], a[56:63], v160 v161 v162 v163 ;.loc 1 397 0 - s_nop 0 ;.loc 1 396 0 - v_mfma_f32_16x16x128_f8f6f4 v210 v211 v212 v213, a[8:15], a[48:55], v208 v209 v210 v211 - v_mfma_f32_16x16x128_f8f6f4 v164 v165 v166 v167, a[8:15], a[64:71], v164 v165 v166 v167 ;.loc 1 397 0 - v_mfma_f32_16x16x128_f8f6f4 v168 v169 v170 v171, a[8:15], a[72:79], v168 v169 v170 v171 - v_mfma_f32_16x16x128_f8f6f4 v172 v173 v174 v175, a[8:15], a[80:87], v172 v173 v174 v175 - v_accvgpr_write_b32 a12, v032 - v_accvgpr_write_b32 a13, v033 - v_accvgpr_write_b32 a14, v034 - v_accvgpr_write_b32 a15, v035 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[64:71], v040 v041 v042 v043 ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v008 v009 v010 v011, a[0:7], a[40:47], v008 v009 v010 v011 ;.loc 1 396 0 - s_nop 10 - v_accvgpr_write_b32 a8, v032 - v_accvgpr_write_b32 a9, v033 - v_accvgpr_write_b32 a10, v034 - v_accvgpr_write_b32 a11, v035 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[72:79], v044 v045 v046 v047 ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v012 v013 v014 v015, a[0:7], a[48:55], v012 v013 v014 v015 ;.loc 1 396 0 - v_mfma_f32_16x16x128_f8f6f4 v226 v227 v228 v229, a[0:7], a[56:63], v248 v249 v250 v251 ;.loc 1 397 0 - v_mfma_f32_16x16x128_f8f6f4 v148 v149 v150 v151, a[0:7], a[64:71], v148 v149 v150 v151 - s_nop 10 - v_accvgpr_write_b32 a156, v226 - v_accvgpr_write_b32 a157, v227 - v_accvgpr_write_b32 a158, v228 - v_mfma_f32_16x16x128_f8f6f4 v152 v153 v154 v155, a[0:7], a[72:79], v152 v153 v154 v155 - v_accvgpr_write_b32 a159, v229 - v_mfma_f32_16x16x128_f8f6f4 v156 v157 v158 v159, a[0:7], a[80:87], v156 v157 v158 v159 - v_accvgpr_write_b32 a4, v032 - v_accvgpr_write_b32 a5, v033 - v_accvgpr_write_b32 a6, v034 - v_accvgpr_write_b32 a7, v035 - v_mfma_f32_16x16x128_f8f6f4 v032 v033 v034 v035, a[104:111], a[80:87], v048 v049 v050 v051 ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v222 v223 v224 v225, a[120:127], a[24:31], v232 v233 v234 v235 ;.loc 1 396 0 - s_nop 10 - v_accvgpr_write_b32 a0, v032 - v_accvgpr_write_b32 a1, v033 - v_accvgpr_write_b32 a2, v034 - v_accvgpr_write_b32 a3, v035 - scratch_load_dword v032, off, off offset:48 ;.loc 1 401 0 - scratch_load_dword v033, off, off offset:40 - scratch_load_dword v034, off, off offset:36 - scratch_load_dword v035, off, off offset:44 - v_mfma_f32_16x16x128_f8f6f4 v234 v235 v236 v237, a[120:127], a[32:39], v252 v253 v254 v255 ;.loc 1 396 0 - s_waitcnt vmcnt(3) ;.loc 1 401 0 - v_lshrrev_b32_e32 v032, 2, v032 - v_and_b32_e32 v032, 12, v032 - s_waitcnt vmcnt(2) - s_nop 2 - v_or3_b32 v253, s3, v033, v032 - s_waitcnt vmcnt(0) - v_or3_b32 v254, s2, v035, v034 - v_lshlrev_b32_e32 v032, 2, v253 ;.loc 3 166 8 - v_lshlrev_b32_e32 v051, 2, v254 ;.loc 3 170 8 - buffer_load_dwordx4 v040 v041 v042 v043, v032, s[20:23], 0 offen ;.loc 3 166 8 - buffer_load_dword v047, v051, s[24:27], 0 offen ;.loc 3 170 8 - v_or_b32_e32 v252, 16, v254 ;.loc 1 401 0 - v_mfma_f32_16x16x128_f8f6f4 v138 v139 v140 v141, a[88:95], a[48:55], v144 v145 v146 v147 ;.loc 1 398 0 - v_or_b32_e32 v251, 32, v254 ;.loc 1 401 0 - v_or_b32_e32 v250, 48, v254 - v_lshlrev_b32_e32 v255, 2, v250 ;.loc 3 170 8 - buffer_load_dword v050, v255, s[24:27], 0 offen - v_or_b32_e32 v033, 16, v253 ;.loc 1 401 0 - v_lshlrev_b32_e32 v037, 2, v033 ;.loc 3 166 8 - buffer_load_dwordx4 v246 v247 v248 v249, v037, s[20:23], 0 offen - s_waitcnt lgkmcnt(0) ;.loc 1 399 0 - v_mfma_f32_16x16x128_f8f6f4 v142 v143 v144 v145, a[112:119], a[64:71], v056 v057 v058 v059 - v_mul_lo_u32 v035, v253, s35 ;.loc 1 401 0 - v_cmp_gt_i32_e64 s[2:3], s35, v254 - v_or_b32_e32 v039, 32, v253 - v_or_b32_e32 v045, 48, v253 - v_lshlrev_b32_e32 v044, 2, v039 ;.loc 3 166 8 - v_lshlrev_b32_e32 v046, 2, v045 - buffer_load_dwordx4 v226 v227 v228 v229, v044, s[20:23], 0 offen - v_mfma_f32_16x16x128_f8f6f4 v056 v057 v058 v059, a[112:119], a[72:79], v060 v061 v062 v063 ;.loc 1 399 0 - v_cmp_gt_i32_e64 s[4:5], s35, v252 ;.loc 1 401 0 - v_cmp_gt_i32_e64 s[6:7], s35, v251 - v_cmp_gt_i32_e64 s[8:9], s35, v250 - s_waitcnt vmcnt(3) - v_mul_f32_e32 v034, v040, v047 - v_mfma_f32_16x16x128_f8f6f4 v060 v061 v062 v063, a[112:119], a[80:87], v064 v065 v066 v067 ;.loc 1 399 0 - v_mul_f32_e32 v000, v000, v034 ;.loc 1 401 0 - v_add_u32_e32 v034, v254, v035 - v_cndmask_b32_e64 v034, v038, v034, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v034, 1, v034 ;.loc 3 175 8 - s_nop 1 ;.loc 3 170 8 - v_lshlrev_b32_e32 v064, 2, v252 - buffer_load_dword v048, v064, s[24:27], 0 offen - v_lshlrev_b32_e32 v065, 2, v251 - buffer_load_dword v049, v065, s[24:27], 0 offen - v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[56:63], v192 v193 v194 v195 ;.loc 1 397 0 - v_mfma_f32_16x16x128_f8f6f4 a[164:167], a[120:127], a[40:47], a[164:167] ;.loc 1 396 0 - s_nop 10 - v_accvgpr_write_b32 a152, v192 - v_accvgpr_write_b32 a153, v193 - v_accvgpr_write_b32 a154, v194 - v_accvgpr_write_b32 a155, v195 - v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[64:71], v196 v197 v198 v199 ;.loc 1 397 0 - v_mfma_f32_16x16x128_f8f6f4 a[160:163], a[120:127], a[48:55], a[160:163] ;.loc 1 396 0 - s_nop 10 - v_accvgpr_write_b32 a148, v192 - v_accvgpr_write_b32 a149, v193 - v_accvgpr_write_b32 a150, v194 - v_accvgpr_write_b32 a151, v195 - v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[72:79], v200 v201 v202 v203 ;.loc 1 397 0 - s_nop 6 ;.loc 1 402 0 - v_or_b32_e32 v203, 0x90, v254 - v_or_b32_e32 v202, 0xa0, v254 - v_cmp_gt_i32_e64 s[12:13], s35, v203 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[40:47], v108 v109 v110 v111 ;.loc 1 398 0 - s_nop 0 - v_accvgpr_write_b32 a144, v192 - v_accvgpr_write_b32 a145, v193 - v_accvgpr_write_b32 a146, v194 - v_accvgpr_write_b32 a147, v195 - v_mfma_f32_16x16x128_f8f6f4 v192 v193 v194 v195, a[120:127], a[80:87], v204 v205 v206 v207 ;.loc 1 397 0 - s_nop 5 - v_accvgpr_write_b32 a123, v111 - v_accvgpr_write_b32 a122, v110 - v_accvgpr_write_b32 a121, v109 - buffer_load_dwordx4 v206 v207 v208 v209, v046, s[20:23], 0 offen ;.loc 3 166 8 - v_or_b32_e32 v204, 0x80, v254 ;.loc 1 402 0 - buffer_store_short v000, v034, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v000, v041, v047 ;.loc 1 401 0 - v_mul_f32_e32 v000, v001, v000 - v_or_b32_e32 v001, 1, v253 - v_mul_lo_u32 v036, v001, s35 - v_add_u32_e32 v001, v254, v036 - v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_or_b32_e32 v001, 2, v253 ;.loc 1 401 0 - v_mul_lo_u32 v034, v001, s35 - v_mul_f32_e32 v000, v042, v047 - v_add_u32_e32 v001, v254, v034 - v_mul_f32_e32 v000, v002, v000 - v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_or_b32_e32 v001, 3, v253 ;.loc 1 401 0 - v_mul_lo_u32 v002, v001, s35 - v_mul_f32_e32 v000, v043, v047 - v_add_u32_e32 v001, v254, v002 - v_mul_f32_e32 v000, v003, v000 - v_cndmask_b32_e64 v001, v038, v001, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - s_waitcnt vmcnt(6) ;.loc 1 401 0 - v_mul_f32_e32 v000, v040, v048 - v_add_u32_e32 v001, v252, v035 - v_mul_f32_e32 v000, v004, v000 - v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v048 ;.loc 1 401 0 - v_add_u32_e32 v001, v252, v036 - v_mul_f32_e32 v000, v005, v000 - v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v048 ;.loc 1 401 0 - v_add_u32_e32 v001, v252, v034 - v_mul_f32_e32 v000, v006, v000 - v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v048 ;.loc 1 401 0 - v_add_u32_e32 v001, v252, v002 - v_mul_f32_e32 v000, v007, v000 - v_cndmask_b32_e64 v001, v038, v001, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - s_waitcnt vmcnt(9) ;.loc 1 401 0 - v_mul_f32_e32 v000, v040, v049 - v_add_u32_e32 v001, v251, v035 - v_mul_f32_e32 v000, v008, v000 - v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v049 ;.loc 1 401 0 - v_add_u32_e32 v001, v251, v036 - v_mul_f32_e32 v000, v009, v000 - v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v049 ;.loc 1 401 0 - v_add_u32_e32 v001, v251, v034 - v_mul_f32_e32 v000, v010, v000 - v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v049 ;.loc 1 401 0 - v_add_u32_e32 v001, v251, v002 - v_mul_f32_e32 v000, v011, v000 - v_cndmask_b32_e64 v001, v038, v001, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v040, v050 ;.loc 1 401 0 - v_add_u32_e32 v001, v250, v035 - v_mul_f32_e32 v000, v012, v000 - v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v050 ;.loc 1 401 0 - v_add_u32_e32 v001, v250, v036 - v_mul_f32_e32 v000, v013, v000 - v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v050 ;.loc 1 401 0 - v_add_u32_e32 v001, v250, v034 - v_mul_f32_e32 v000, v014, v000 - v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v050 ;.loc 1 401 0 - v_add_u32_e32 v001, v250, v002 - v_mul_f32_e32 v000, v015, v000 - v_cndmask_b32_e64 v001, v038, v001, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_lo_u32 v001, v033, s35 ;.loc 1 401 0 - v_mul_f32_e32 v000, v246, v047 - v_add_u32_e32 v003, v254, v001 - v_mul_f32_e32 v000, v080, v000 - v_cndmask_b32_e64 v003, v038, v003, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 3 175 8 - buffer_store_short v000, v003, s[16:19], 0 offen - v_mul_f32_e32 v000, v247, v047 ;.loc 1 401 0 - v_mul_f32_e32 v000, v081, v000 - v_cvt_pk_bf16_f32 v003, v000, s0 - v_or_b32_e32 v000, 17, v253 - v_mul_lo_u32 v000, v000, s35 - v_add_u32_e32 v004, v254, v000 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 18, v253 ;.loc 1 401 0 - v_mul_lo_u32 v011, v004, s35 - v_mul_f32_e32 v003, v248, v047 - v_add_u32_e32 v004, v254, v011 - v_mul_f32_e32 v003, v082, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 19, v253 ;.loc 1 401 0 - v_mul_lo_u32 v012, v004, s35 - v_mul_f32_e32 v003, v249, v047 - v_add_u32_e32 v004, v254, v012 - v_mul_f32_e32 v003, v083, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v246, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v001 - v_mul_f32_e32 v003, v242, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v247, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v000 - v_mul_f32_e32 v003, v243, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v248, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v011 - v_mul_f32_e32 v003, v244, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v249, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v012 - v_mul_f32_e32 v003, v245, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v246, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v001 - v_mul_f32_e32 v003, v238, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v247, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v000 - v_mul_f32_e32 v003, v239, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v248, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v011 - v_mul_f32_e32 v003, v240, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v249, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v012 - v_mul_f32_e32 v003, v241, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v246, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v001 - v_mul_f32_e32 v003, v210, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v247, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v000 - v_mul_f32_e32 v003, v211, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v248, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v011 - v_mul_f32_e32 v003, v212, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v249, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v012 - v_mul_f32_e32 v003, v213, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v226, v047 ;.loc 1 401 0 - v_accvgpr_read_b32 v004, a172 - v_mul_lo_u32 v013, v039, s35 - v_mul_f32_e32 v003, v004, v003 - v_add_u32_e32 v004, v254, v013 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 33, v253 ;.loc 1 401 0 - v_mul_lo_u32 v230, v004, s35 - v_accvgpr_read_b32 v005, a173 - v_mul_f32_e32 v003, v227, v047 - v_add_u32_e32 v004, v254, v230 - v_mul_f32_e32 v003, v005, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 34, v253 ;.loc 1 401 0 - v_mul_lo_u32 v231, v004, s35 - v_accvgpr_read_b32 v006, a174 - v_mul_f32_e32 v003, v228, v047 - v_add_u32_e32 v004, v254, v231 - v_mul_f32_e32 v003, v006, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 35, v253 ;.loc 1 401 0 - v_mul_lo_u32 v232, v004, s35 - v_accvgpr_read_b32 v007, a175 - v_mul_f32_e32 v003, v229, v047 - v_add_u32_e32 v004, v254, v232 - v_mul_f32_e32 v003, v007, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v226, v048 ;.loc 1 401 0 - v_accvgpr_read_b32 v004, a168 - v_mul_f32_e32 v003, v004, v003 - v_add_u32_e32 v004, v252, v013 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a169 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v227, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v230 - v_mul_f32_e32 v003, v005, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v006, a170 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v228, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v231 - v_mul_f32_e32 v003, v006, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v007, a171 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v229, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v232 - v_mul_f32_e32 v003, v007, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v226, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v013 - v_mul_f32_e32 v003, v214, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v227, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v230 - v_mul_f32_e32 v003, v215, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v228, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v231 - v_mul_f32_e32 v003, v216, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v229, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v232 - v_mul_f32_e32 v003, v217, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v226, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v013 - v_mul_f32_e32 v003, v218, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v227, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v230 - v_mul_f32_e32 v003, v219, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v228, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v231 - v_mul_f32_e32 v003, v220, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v229, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v232 - v_mul_f32_e32 v003, v221, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_mul_lo_u32 v210, v045, s35 ;.loc 1 401 0 - buffer_store_short v003, v004, s[16:19], 0 offen ;.loc 3 175 8 - s_waitcnt vmcnt(48) ;.loc 1 401 0 - v_mul_f32_e32 v003, v206, v047 - v_add_u32_e32 v004, v254, v210 - v_mul_f32_e32 v003, v222, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 49, v253 ;.loc 1 401 0 - v_mul_lo_u32 v211, v004, s35 - v_mul_f32_e32 v003, v207, v047 - v_add_u32_e32 v004, v254, v211 - v_mul_f32_e32 v003, v223, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 50, v253 ;.loc 1 401 0 - v_mul_lo_u32 v212, v004, s35 - v_mul_f32_e32 v003, v208, v047 - v_add_u32_e32 v004, v254, v212 - v_mul_f32_e32 v003, v224, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_or_b32_e32 v004, 51, v253 ;.loc 1 401 0 - v_mul_lo_u32 v213, v004, s35 - v_mul_f32_e32 v003, v209, v047 - v_add_u32_e32 v004, v254, v213 - v_mul_f32_e32 v003, v225, v003 - v_cndmask_b32_e64 v004, v038, v004, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v206, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v210 - v_mul_f32_e32 v003, v234, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v207, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v211 - v_mul_f32_e32 v003, v235, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v208, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v212 - v_mul_f32_e32 v003, v236, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v209, v048 ;.loc 1 401 0 - v_add_u32_e32 v004, v252, v213 - v_mul_f32_e32 v003, v237, v003 - v_cndmask_b32_e64 v004, v038, v004, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v206, v049 ;.loc 1 401 0 - v_accvgpr_read_b32 v004, a164 - v_mul_f32_e32 v003, v004, v003 - v_add_u32_e32 v004, v251, v210 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a165 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v207, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v211 - v_mul_f32_e32 v003, v005, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v006, a166 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v208, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v212 - v_mul_f32_e32 v003, v006, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v007, a167 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v209, v049 ;.loc 1 401 0 - v_add_u32_e32 v004, v251, v213 - v_mul_f32_e32 v003, v007, v003 - v_cndmask_b32_e64 v004, v038, v004, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v206, v050 ;.loc 1 401 0 - v_accvgpr_read_b32 v004, a160 - v_mul_f32_e32 v003, v004, v003 - v_add_u32_e32 v004, v250, v210 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a161 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v207, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v211 - v_mul_f32_e32 v003, v005, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v006, a162 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v208, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v212 - v_mul_f32_e32 v003, v006, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - v_accvgpr_read_b32 v007, a163 - buffer_store_short v003, v004, s[16:19], 0 offen - v_mul_f32_e32 v003, v209, v050 ;.loc 1 401 0 - v_add_u32_e32 v004, v250, v213 - v_mul_f32_e32 v003, v007, v003 - v_cndmask_b32_e64 v004, v038, v004, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v003, v003, s0 ;.loc 1 401 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v003, v004, s[16:19], 0 offen - v_lshlrev_b32_e32 v209, 2, v204 ;.loc 3 170 8 - buffer_load_dword v003, v209, s[24:27], 0 offen - v_accvgpr_write_b32 a140, v192 - v_accvgpr_write_b32 a141, v193 - v_accvgpr_write_b32 a142, v194 - v_accvgpr_write_b32 a143, v195 - buffer_load_dwordx4 v004 v005 v006 v007, v032, s[20:23], 0 offen ;.loc 3 166 8 - buffer_load_dwordx4 v040 v041 v042 v043, v037, s[20:23], 0 offen - buffer_load_dwordx4 v198 v199 v200 v201, v044, s[20:23], 0 offen - buffer_load_dwordx4 v194 v195 v196 v197, v046, s[20:23], 0 offen - v_lshlrev_b32_e32 v208, 2, v203 ;.loc 3 170 8 - buffer_load_dword v008, v208, s[24:27], 0 offen - v_lshlrev_b32_e32 v206, 2, v202 - buffer_load_dword v009, v206, s[24:27], 0 offen - v_or_b32_e32 v205, 0xb0, v254 ;.loc 1 402 0 - v_lshlrev_b32_e32 v207, 2, v205 ;.loc 3 170 8 - buffer_load_dword v010, v207, s[24:27], 0 offen - v_cmp_gt_i32_e64 s[10:11], s35, v204 ;.loc 1 402 0 - v_accvgpr_read_b32 v044, a156 - v_add_u32_e32 v015, v204, v035 - v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - v_accvgpr_read_b32 v045, a157 - v_accvgpr_read_b32 v046, a158 - v_accvgpr_read_b32 v047, a159 - v_cmp_gt_i32_e32 vcc, s35, v205 ;.loc 1 402 0 - v_accvgpr_write_b32 a120, v108 - v_mfma_f32_16x16x128_f8f6f4 v108 v109 v110 v111, a[104:111], a[48:55], v112 v113 v114 v115 ;.loc 1 398 0 - s_waitcnt vmcnt(6) ;.loc 1 402 0 - v_mul_f32_e32 v014, v004, v003 - v_mul_f32_e32 v014, v044, v014 - v_cvt_pk_bf16_f32 v014, v014, s0 - buffer_store_short v014, v015, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v014, v005, v003 ;.loc 1 402 0 - v_add_u32_e32 v015, v204, v036 - v_mul_f32_e32 v014, v045, v014 - v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v006, v003 ;.loc 1 402 0 - v_add_u32_e32 v015, v204, v034 - v_mul_f32_e32 v014, v046, v014 - v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v007, v003 ;.loc 1 402 0 - v_add_u32_e32 v015, v204, v002 - v_mul_f32_e32 v014, v047, v014 - v_cndmask_b32_e64 v015, v038, v015, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - s_waitcnt vmcnt(6) ;.loc 1 402 0 - v_mul_f32_e32 v014, v004, v008 - v_add_u32_e32 v015, v203, v035 - v_mul_f32_e32 v014, v148, v014 - v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v005, v008 ;.loc 1 402 0 - v_add_u32_e32 v015, v203, v036 - v_mul_f32_e32 v014, v149, v014 - v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v006, v008 ;.loc 1 402 0 - v_add_u32_e32 v015, v203, v034 - v_mul_f32_e32 v014, v150, v014 - v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v007, v008 ;.loc 1 402 0 - v_add_u32_e32 v015, v203, v002 - v_mul_f32_e32 v014, v151, v014 - v_cndmask_b32_e64 v015, v038, v015, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_cmp_gt_i32_e64 s[0:1], s35, v202 ;.loc 1 402 0 - s_waitcnt vmcnt(9) - v_mul_f32_e32 v014, v004, v009 - v_add_u32_e32 v015, v202, v035 - v_mul_f32_e32 v014, v152, v014 - v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v005, v009 ;.loc 1 402 0 - v_add_u32_e32 v015, v202, v036 - v_mul_f32_e32 v014, v153, v014 - v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v006, v009 ;.loc 1 402 0 - v_add_u32_e32 v015, v202, v034 - v_mul_f32_e32 v014, v154, v014 - v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - v_mul_f32_e32 v014, v007, v009 ;.loc 1 402 0 - v_add_u32_e32 v015, v202, v002 - v_mul_f32_e32 v014, v155, v014 - v_cndmask_b32_e64 v015, v038, v015, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v014, v014, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v015, 1, v015 ;.loc 3 175 8 - buffer_store_short v014, v015, s[16:19], 0 offen - s_waitcnt vmcnt(12) ;.loc 1 402 0 - v_mul_f32_e32 v004, v004, v010 - v_add_u32_e32 v014, v205, v035 - v_mul_f32_e32 v004, v156, v004 - v_cndmask_b32_e32 v014, v038, v014, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - buffer_store_short v004, v014, s[16:19], 0 offen - v_mul_f32_e32 v004, v005, v010 ;.loc 1 402 0 - v_add_u32_e32 v005, v205, v036 - v_mul_f32_e32 v004, v157, v004 - v_cndmask_b32_e32 v005, v038, v005, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 - buffer_store_short v004, v005, s[16:19], 0 offen - v_mul_f32_e32 v004, v006, v010 ;.loc 1 402 0 - v_add_u32_e32 v005, v205, v034 - v_mul_f32_e32 v004, v158, v004 - v_cndmask_b32_e32 v005, v038, v005, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 - buffer_store_short v004, v005, s[16:19], 0 offen - v_mul_f32_e32 v004, v007, v010 ;.loc 1 402 0 - v_add_u32_e32 v002, v205, v002 - v_mul_f32_e32 v004, v159, v004 - v_cndmask_b32_e32 v002, v038, v002, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 3 175 8 - buffer_store_short v004, v002, s[16:19], 0 offen - v_mul_f32_e32 v002, v040, v003 ;.loc 1 402 0 - v_add_u32_e32 v004, v204, v001 - v_mul_f32_e32 v002, v160, v002 - v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v041, v003 ;.loc 1 402 0 - v_add_u32_e32 v004, v204, v000 - v_mul_f32_e32 v002, v161, v002 - v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v042, v003 ;.loc 1 402 0 - v_add_u32_e32 v004, v204, v011 - v_mul_f32_e32 v002, v162, v002 - v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v043, v003 ;.loc 1 402 0 - v_add_u32_e32 v004, v204, v012 - v_mul_f32_e32 v002, v163, v002 - v_cndmask_b32_e64 v004, v038, v004, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v040, v008 ;.loc 1 402 0 - v_add_u32_e32 v004, v203, v001 - v_mul_f32_e32 v002, v164, v002 - v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v041, v008 ;.loc 1 402 0 - v_add_u32_e32 v004, v203, v000 - v_mul_f32_e32 v002, v165, v002 - v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v042, v008 ;.loc 1 402 0 - v_add_u32_e32 v004, v203, v011 - v_mul_f32_e32 v002, v166, v002 - v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v043, v008 ;.loc 1 402 0 - v_add_u32_e32 v004, v203, v012 - v_mul_f32_e32 v002, v167, v002 - v_cndmask_b32_e64 v004, v038, v004, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v040, v009 ;.loc 1 402 0 - v_add_u32_e32 v004, v202, v001 - v_mul_f32_e32 v002, v168, v002 - v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v041, v009 ;.loc 1 402 0 - v_add_u32_e32 v004, v202, v000 - v_mul_f32_e32 v002, v169, v002 - v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v042, v009 ;.loc 1 402 0 - v_add_u32_e32 v004, v202, v011 - v_mul_f32_e32 v002, v170, v002 - v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v043, v009 ;.loc 1 402 0 - v_add_u32_e32 v004, v202, v012 - v_mul_f32_e32 v002, v171, v002 - v_cndmask_b32_e64 v004, v038, v004, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 3 175 8 - buffer_store_short v002, v004, s[16:19], 0 offen - v_mul_f32_e32 v002, v040, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v001 - v_mul_f32_e32 v002, v172, v002 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v002, v001, s[16:19], 0 offen - v_mul_f32_e32 v001, v041, v010 ;.loc 1 402 0 - v_add_u32_e32 v000, v205, v000 - v_mul_f32_e32 v001, v173, v001 - v_cndmask_b32_e32 v000, v038, v000, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v000, 1, v000 ;.loc 3 175 8 - buffer_store_short v001, v000, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v011 - v_mul_f32_e32 v000, v174, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v012 - v_mul_f32_e32 v000, v175, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v198, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v013 - v_mul_f32_e32 v000, v176, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v199, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v230 - v_mul_f32_e32 v000, v177, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v200, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v231 - v_mul_f32_e32 v000, v178, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v201, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v232 - v_mul_f32_e32 v000, v179, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v198, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v013 - v_mul_f32_e32 v000, v180, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v199, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v230 - v_mul_f32_e32 v000, v181, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v200, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v231 - v_mul_f32_e32 v000, v182, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v201, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v232 - v_mul_f32_e32 v000, v183, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v198, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v013 - v_mul_f32_e32 v000, v184, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v199, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v230 - v_mul_f32_e32 v000, v185, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v200, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v231 - v_mul_f32_e32 v000, v186, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v201, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v232 - v_mul_f32_e32 v000, v187, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v198, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v013 - v_mul_f32_e32 v000, v188, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v199, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v230 - v_mul_f32_e32 v000, v189, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v200, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v231 - v_mul_f32_e32 v000, v190, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v201, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v232 - v_mul_f32_e32 v000, v191, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v194, v003 ;.loc 1 402 0 - v_accvgpr_read_b32 v004, a152 - v_add_u32_e32 v001, v204, v210 - v_mul_f32_e32 v000, v004, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a153 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v195, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v211 - v_mul_f32_e32 v000, v005, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v006, a154 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v196, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v212 - v_mul_f32_e32 v000, v006, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v007, a155 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v197, v003 ;.loc 1 402 0 - v_add_u32_e32 v001, v204, v213 - v_mul_f32_e32 v000, v007, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v194, v008 ;.loc 1 402 0 - v_accvgpr_read_b32 v002, a148 - v_add_u32_e32 v001, v203, v210 - v_mul_f32_e32 v000, v002, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v003, a149 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v195, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v211 - v_mul_f32_e32 v000, v003, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v004, a150 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v196, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v212 - v_mul_f32_e32 v000, v004, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a151 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v197, v008 ;.loc 1 402 0 - v_add_u32_e32 v001, v203, v213 - v_mul_f32_e32 v000, v005, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v194, v009 ;.loc 1 402 0 - v_accvgpr_read_b32 v002, a144 - v_add_u32_e32 v001, v202, v210 - v_mul_f32_e32 v000, v002, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v003, a145 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v195, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v211 - v_mul_f32_e32 v000, v003, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v004, a146 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v196, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v212 - v_mul_f32_e32 v000, v004, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a147 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v197, v009 ;.loc 1 402 0 - v_add_u32_e32 v001, v202, v213 - v_mul_f32_e32 v000, v005, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v194, v010 ;.loc 1 402 0 - v_accvgpr_read_b32 v002, a140 - v_add_u32_e32 v001, v205, v210 - v_mul_f32_e32 v000, v002, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v003, a141 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v195, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v211 - v_mul_f32_e32 v000, v003, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v004, a142 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v196, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v212 - v_mul_f32_e32 v000, v004, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v005, a143 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v197, v010 ;.loc 1 402 0 - v_add_u32_e32 v001, v205, v213 - v_mul_f32_e32 v000, v005, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 402 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_or_b32_e32 v000, 0x80, v253 ;.loc 1 403 0 - v_lshlrev_b32_e32 v008, 2, v000 ;.loc 3 166 8 - buffer_load_dwordx4 v004 v005 v006 v007, v008, s[20:23], 0 offen - v_or_b32_e32 v015, 0xb0, v253 ;.loc 1 403 0 - v_lshlrev_b32_e32 v039, 2, v015 ;.loc 3 166 8 - v_mfma_f32_16x16x128_f8f6f4 v112 v113 v114 v115, a[112:119], a[24:31], v116 v117 v118 v119 ;.loc 1 398 0 - v_or_b32_e32 v009, 0x90, v253 ;.loc 1 403 0 - v_lshlrev_b32_e32 v010, 2, v009 ;.loc 3 166 8 - buffer_load_dwordx4 v032 v033 v034 v035, v010, s[20:23], 0 offen - v_mul_lo_u32 v000, v000, s35 ;.loc 1 403 0 - v_add_u32_e32 v002, v254, v000 - v_or_b32_e32 v013, 0xa0, v253 - v_cndmask_b32_e64 v002, v038, v002, s[2:3] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v116 v117 v118 v119, a[112:119], a[32:39], v120 v121 v122 v123 ;.loc 1 398 0 - v_lshlrev_b32_e32 v014, 2, v013 ;.loc 3 166 8 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 3 175 8 - buffer_load_dwordx4 v134 v135 v136 v137, v014, s[20:23], 0 offen ;.loc 3 166 8 - v_mul_lo_u32 v013, v013, s35 ;.loc 1 403 0 - v_mfma_f32_16x16x128_f8f6f4 v120 v121 v122 v123, a[112:119], a[40:47], v124 v125 v126 v127 ;.loc 1 398 0 - v_mfma_f32_16x16x128_f8f6f4 v124 v125 v126 v127, a[112:119], a[48:55], v128 v129 v130 v131 - s_nop 6 ;.loc 3 166 8 - buffer_load_dwordx4 v130 v131 v132 v133, v039, s[20:23], 0 offen - buffer_load_dword v036, v051, s[24:27], 0 offen ;.loc 3 170 8 - buffer_load_dword v037, v064, s[24:27], 0 offen - buffer_load_dword v040, v065, s[24:27], 0 offen - buffer_load_dword v041, v255, s[24:27], 0 offen - s_waitcnt vmcnt(3) ;.loc 1 403 0 - v_mul_f32_e32 v001, v004, v036 - v_mfma_f32_16x16x128_f8f6f4 a[136:139], a[88:95], a[24:31], a[188:191] ;.loc 1 398 0 - v_mfma_f32_16x16x128_f8f6f4 a[132:135], a[88:95], a[32:39], a[184:187] - s_nop 10 - v_accvgpr_read_b32 v042, a136 - v_mul_f32_e32 v001, v042, v001 ;.loc 1 403 0 - v_cvt_pk_bf16_f32 v001, v001, s0 - v_accvgpr_read_b32 v043, a137 - buffer_store_short v001, v002, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v001, v005, v036 ;.loc 1 403 0 - v_mul_f32_e32 v001, v043, v001 - v_cvt_pk_bf16_f32 v002, v001, s0 - v_or_b32_e32 v001, 0x81, v253 - v_mul_lo_u32 v001, v001, s35 - v_add_u32_e32 v003, v254, v001 - v_cndmask_b32_e64 v003, v038, v003, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 3 175 8 - v_accvgpr_read_b32 v044, a138 - buffer_store_short v002, v003, s[16:19], 0 offen - v_mul_f32_e32 v002, v006, v036 ;.loc 1 403 0 - v_mul_f32_e32 v002, v044, v002 - v_cvt_pk_bf16_f32 v003, v002, s0 - v_or_b32_e32 v002, 0x82, v253 - v_mul_lo_u32 v002, v002, s35 - v_add_u32_e32 v011, v254, v002 - v_cndmask_b32_e64 v011, v038, v011, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v011, 1, v011 ;.loc 3 175 8 - v_accvgpr_read_b32 v045, a139 - buffer_store_short v003, v011, s[16:19], 0 offen - v_mul_f32_e32 v003, v007, v036 ;.loc 1 403 0 - v_mul_f32_e32 v003, v045, v003 - v_cvt_pk_bf16_f32 v011, v003, s0 - v_or_b32_e32 v003, 0x83, v253 - v_mul_lo_u32 v003, v003, s35 - v_add_u32_e32 v012, v254, v003 - v_cndmask_b32_e64 v012, v038, v012, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - buffer_store_short v011, v012, s[16:19], 0 offen - s_waitcnt vmcnt(6) ;.loc 1 403 0 - v_mul_f32_e32 v011, v004, v037 - v_accvgpr_read_b32 v042, a132 - v_add_u32_e32 v012, v252, v000 - v_mul_f32_e32 v011, v042, v011 - v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v043, a133 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v005, v037 ;.loc 1 403 0 - v_add_u32_e32 v012, v252, v001 - v_mfma_f32_16x16x128_f8f6f4 a[124:127], a[88:95], a[40:47], a[180:183] ;.loc 1 398 0 - v_mul_f32_e32 v011, v043, v011 ;.loc 1 403 0 - v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v044, a134 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v006, v037 ;.loc 1 403 0 - v_add_u32_e32 v012, v252, v002 - v_mul_f32_e32 v011, v044, v011 - v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v045, a135 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v007, v037 ;.loc 1 403 0 - v_add_u32_e32 v012, v252, v003 - v_mul_f32_e32 v011, v045, v011 - v_cndmask_b32_e64 v012, v038, v012, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - buffer_store_short v011, v012, s[16:19], 0 offen - s_waitcnt vmcnt(9) ;.loc 1 403 0 - v_mul_f32_e32 v011, v004, v040 - v_accvgpr_read_b32 v042, a124 - v_add_u32_e32 v012, v251, v000 - v_mul_f32_e32 v011, v042, v011 - v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v043, a125 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v005, v040 ;.loc 1 403 0 - v_add_u32_e32 v012, v251, v001 - v_mul_f32_e32 v011, v043, v011 - v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v044, a126 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v006, v040 ;.loc 1 403 0 - v_add_u32_e32 v012, v251, v002 - v_mul_f32_e32 v011, v044, v011 - v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - v_accvgpr_read_b32 v045, a127 - buffer_store_short v011, v012, s[16:19], 0 offen - v_mul_f32_e32 v011, v007, v040 ;.loc 1 403 0 - v_add_u32_e32 v012, v251, v003 - v_mul_f32_e32 v011, v045, v011 - v_cndmask_b32_e64 v012, v038, v012, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v011, v011, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v012, 1, v012 ;.loc 3 175 8 - buffer_store_short v011, v012, s[16:19], 0 offen - s_waitcnt vmcnt(12) ;.loc 1 403 0 - v_mul_f32_e32 v004, v004, v041 - v_add_u32_e32 v011, v250, v000 - v_mul_f32_e32 v004, v138, v004 - v_cndmask_b32_e64 v011, v038, v011, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v011, 1, v011 ;.loc 3 175 8 - buffer_store_short v004, v011, s[16:19], 0 offen - v_mul_f32_e32 v004, v005, v041 ;.loc 1 403 0 - v_add_u32_e32 v005, v250, v001 - v_mul_f32_e32 v004, v139, v004 - v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v084 v085 v086 v087, a[96:103], a[24:31], v084 v085 v086 v087 ;.loc 1 398 0 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 - buffer_store_short v004, v005, s[16:19], 0 offen - v_mul_f32_e32 v004, v006, v041 ;.loc 1 403 0 - v_add_u32_e32 v005, v250, v002 - v_mul_f32_e32 v004, v140, v004 - v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 - buffer_store_short v004, v005, s[16:19], 0 offen - v_mul_f32_e32 v004, v007, v041 ;.loc 1 403 0 - v_add_u32_e32 v005, v250, v003 - v_mul_f32_e32 v004, v141, v004 - v_cndmask_b32_e64 v005, v038, v005, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v004, v004, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v005, 1, v005 ;.loc 3 175 8 - buffer_store_short v004, v005, s[16:19], 0 offen - v_mul_f32_e32 v004, v032, v036 ;.loc 1 403 0 - v_mul_f32_e32 v004, v084, v004 - v_cvt_pk_bf16_f32 v005, v004, s0 - v_mul_lo_u32 v004, v009, s35 - v_add_u32_e32 v006, v254, v004 - v_cndmask_b32_e64 v006, v038, v006, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 3 175 8 - buffer_store_short v005, v006, s[16:19], 0 offen - v_mul_f32_e32 v005, v033, v036 ;.loc 1 403 0 - v_mul_f32_e32 v005, v085, v005 - v_cvt_pk_bf16_f32 v006, v005, s0 - v_or_b32_e32 v005, 0x91, v253 - v_mul_lo_u32 v005, v005, s35 - v_add_u32_e32 v007, v254, v005 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0x92, v253 ;.loc 1 403 0 - v_mul_lo_u32 v011, v007, s35 - v_mul_f32_e32 v006, v034, v036 - v_add_u32_e32 v007, v254, v011 - v_mfma_f32_16x16x128_f8f6f4 v088 v089 v090 v091, a[96:103], a[32:39], v088 v089 v090 v091 ;.loc 1 398 0 - v_mul_f32_e32 v006, v086, v006 ;.loc 1 403 0 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0x93, v253 ;.loc 1 403 0 - v_mul_lo_u32 v012, v007, s35 - v_mul_f32_e32 v006, v035, v036 - v_add_u32_e32 v007, v254, v012 - v_mul_f32_e32 v006, v087, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v032, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v004 - v_mul_f32_e32 v006, v088, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v033, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v005 - v_mul_f32_e32 v006, v089, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v092 v093 v094 v095, a[96:103], a[40:47], v092 v093 v094 v095 ;.loc 1 398 0 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v034, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v011 - v_mul_f32_e32 v006, v090, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v035, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v012 - v_mul_f32_e32 v006, v091, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v032, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v004 - v_mul_f32_e32 v006, v092, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v033, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v005 - v_mul_f32_e32 v006, v093, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v096 v097 v098 v099, a[96:103], a[48:55], v096 v097 v098 v099 ;.loc 1 398 0 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v034, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v011 - v_mul_f32_e32 v006, v094, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v035, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v012 - v_mul_f32_e32 v006, v095, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v032, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v004 - v_mul_f32_e32 v006, v096, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v033, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v005 - v_mul_f32_e32 v006, v097, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v100 v101 v102 v103, a[104:111], a[24:31], v100 v101 v102 v103 ;.loc 1 398 0 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v034, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v011 - v_mul_f32_e32 v006, v098, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v035, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v012 - v_mul_f32_e32 v006, v099, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v134, v036 ;.loc 1 403 0 - v_add_u32_e32 v007, v254, v013 - v_mul_f32_e32 v006, v100, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xa1, v253 ;.loc 1 403 0 - v_mul_lo_u32 v094, v007, s35 - v_mul_f32_e32 v006, v135, v036 - v_add_u32_e32 v007, v254, v094 - v_mul_f32_e32 v006, v101, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xa2, v253 ;.loc 1 403 0 - v_mul_lo_u32 v095, v007, s35 - v_mul_f32_e32 v006, v136, v036 - v_add_u32_e32 v007, v254, v095 - v_mfma_f32_16x16x128_f8f6f4 v104 v105 v106 v107, a[104:111], a[32:39], v104 v105 v106 v107 ;.loc 1 398 0 - v_mul_f32_e32 v006, v102, v006 ;.loc 1 403 0 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xa3, v253 ;.loc 1 403 0 - v_mul_lo_u32 v096, v007, s35 - v_mul_f32_e32 v006, v137, v036 - v_add_u32_e32 v007, v254, v096 - v_mul_f32_e32 v006, v103, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v134, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v013 - v_mul_f32_e32 v006, v104, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v135, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v094 - v_mul_f32_e32 v006, v105, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v136, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v095 - v_mul_f32_e32 v006, v106, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v137, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v096 - v_mul_f32_e32 v006, v107, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v134, v040 ;.loc 1 403 0 - v_accvgpr_read_b32 v032, a120 - v_add_u32_e32 v007, v251, v013 - v_mul_f32_e32 v006, v032, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - v_accvgpr_read_b32 v033, a121 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v135, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v094 - v_mul_f32_e32 v006, v033, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - v_accvgpr_read_b32 v034, a122 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v136, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v095 - v_mul_f32_e32 v006, v034, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - v_accvgpr_read_b32 v035, a123 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v137, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v096 - v_mul_f32_e32 v006, v035, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v134, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v013 - v_mul_f32_e32 v006, v108, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v135, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v094 - v_mul_f32_e32 v006, v109, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v136, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v095 - v_mul_f32_e32 v006, v110, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v137, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v096 - v_mul_f32_e32 v006, v111, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - v_mul_lo_u32 v044, v015, s35 ;.loc 1 403 0 - buffer_store_short v006, v007, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v006, v130, v036 ;.loc 1 403 0 - v_add_u32_e32 v007, v254, v044 - v_mul_f32_e32 v006, v112, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xb1, v253 ;.loc 1 403 0 - v_mul_lo_u32 v045, v007, s35 - v_mul_f32_e32 v006, v131, v036 - v_add_u32_e32 v007, v254, v045 - v_mul_f32_e32 v006, v113, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xb2, v253 ;.loc 1 403 0 - v_mul_lo_u32 v080, v007, s35 - v_mul_f32_e32 v006, v132, v036 - v_add_u32_e32 v007, v254, v080 - v_mul_f32_e32 v006, v114, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_or_b32_e32 v007, 0xb3, v253 ;.loc 1 403 0 - v_mul_lo_u32 v081, v007, s35 - v_mul_f32_e32 v006, v133, v036 - v_add_u32_e32 v007, v254, v081 - v_mul_f32_e32 v006, v115, v006 - v_cndmask_b32_e64 v007, v038, v007, s[2:3] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v130, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v044 - v_mul_f32_e32 v006, v116, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v131, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v045 - v_mul_f32_e32 v006, v117, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v132, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v080 - v_mul_f32_e32 v006, v118, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v133, v037 ;.loc 1 403 0 - v_add_u32_e32 v007, v252, v081 - v_mul_f32_e32 v006, v119, v006 - v_cndmask_b32_e64 v007, v038, v007, s[4:5] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v130, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v044 - v_mul_f32_e32 v006, v120, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v131, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v045 - v_mul_f32_e32 v006, v121, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v132, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v080 - v_mul_f32_e32 v006, v122, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v133, v040 ;.loc 1 403 0 - v_add_u32_e32 v007, v251, v081 - v_mul_f32_e32 v006, v123, v006 - v_cndmask_b32_e64 v007, v038, v007, s[6:7] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v130, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v044 - v_mul_f32_e32 v006, v124, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v131, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v045 - v_mul_f32_e32 v006, v125, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v132, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v080 - v_mul_f32_e32 v006, v126, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - v_mul_f32_e32 v006, v133, v041 ;.loc 1 403 0 - v_add_u32_e32 v007, v250, v081 - v_mul_f32_e32 v006, v127, v006 - v_cndmask_b32_e64 v007, v038, v007, s[8:9] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 403 0 - v_lshlrev_b32_e32 v007, 1, v007 ;.loc 3 175 8 - buffer_store_short v006, v007, s[16:19], 0 offen - buffer_load_dwordx4 v006 v007 v008 v009, v008, s[20:23], 0 offen ;.loc 3 166 8 - s_nop 0 - buffer_load_dwordx4 v040 v041 v042 v043, v010, s[20:23], 0 offen - buffer_load_dwordx4 v070 v071 v072 v073, v014, s[20:23], 0 offen - buffer_load_dwordx4 v034 v035 v036 v037, v039, s[20:23], 0 offen - buffer_load_dword v015, v209, s[24:27], 0 offen ;.loc 3 170 8 - buffer_load_dword v032, v208, s[24:27], 0 offen - buffer_load_dword v033, v206, s[24:27], 0 offen - buffer_load_dword v046, v207, s[24:27], 0 offen - v_mfma_f32_16x16x128_f8f6f4 a[24:27], a[88:95], a[56:63], a[176:179] ;.loc 1 399 0 - v_add_u32_e32 v014, v204, v000 ;.loc 1 404 0 - v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - s_waitcnt vmcnt(3) ;.loc 1 404 0 - v_mul_f32_e32 v010, v006, v015 - s_nop 6 - v_accvgpr_read_b32 v051, a27 - v_accvgpr_read_b32 v048, a24 - v_mul_f32_e32 v010, v048, v010 - v_cvt_pk_bf16_f32 v010, v010, s0 - v_mfma_f32_16x16x128_f8f6f4 a[20:23], a[88:95], a[64:71], a[128:131] ;.loc 1 399 0 - v_accvgpr_read_b32 v049, a25 - buffer_store_short v010, v014, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v010, v007, v015 ;.loc 1 404 0 - v_add_u32_e32 v014, v204, v001 - v_mul_f32_e32 v010, v049, v010 - v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v050, a26 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v008, v015 ;.loc 1 404 0 - v_add_u32_e32 v014, v204, v002 - v_mul_f32_e32 v010, v050, v010 - v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v009, v015 ;.loc 1 404 0 - v_add_u32_e32 v014, v204, v003 - v_mul_f32_e32 v010, v051, v010 - v_cndmask_b32_e64 v014, v038, v014, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v051, a23 - buffer_store_short v010, v014, s[16:19], 0 offen - s_waitcnt vmcnt(6) ;.loc 1 404 0 - v_mul_f32_e32 v010, v006, v032 - v_accvgpr_read_b32 v048, a20 - v_add_u32_e32 v014, v203, v000 - v_mul_f32_e32 v010, v048, v010 - v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_mfma_f32_16x16x128_f8f6f4 a[28:31], a[88:95], a[72:79], a[192:195] ;.loc 1 399 0 - v_accvgpr_read_b32 v049, a21 - buffer_store_short v010, v014, s[16:19], 0 offen ;.loc 3 175 8 - v_mul_f32_e32 v010, v007, v032 ;.loc 1 404 0 - v_add_u32_e32 v014, v203, v001 - v_mul_f32_e32 v010, v049, v010 - v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v050, a22 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v008, v032 ;.loc 1 404 0 - v_add_u32_e32 v014, v203, v002 - v_mul_f32_e32 v010, v050, v010 - v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v009, v032 ;.loc 1 404 0 - v_add_u32_e32 v014, v203, v003 - v_mul_f32_e32 v010, v051, v010 - v_cndmask_b32_e64 v014, v038, v014, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a31 - buffer_store_short v010, v014, s[16:19], 0 offen - s_waitcnt vmcnt(9) ;.loc 1 404 0 - v_mul_f32_e32 v010, v006, v033 - v_accvgpr_read_b32 v074, a28 - v_add_u32_e32 v014, v202, v000 - v_mul_f32_e32 v010, v074, v010 - v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v016 v017 v018 v019, a[88:95], a[80:87], v016 v017 v018 v019 ;.loc 1 399 0 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v075, a29 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v007, v033 ;.loc 1 404 0 - v_add_u32_e32 v014, v202, v001 - v_mul_f32_e32 v010, v075, v010 - v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_accvgpr_read_b32 v076, a30 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v008, v033 ;.loc 1 404 0 - v_add_u32_e32 v014, v202, v002 - v_mul_f32_e32 v010, v076, v010 - v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - buffer_store_short v010, v014, s[16:19], 0 offen - v_mul_f32_e32 v010, v009, v033 ;.loc 1 404 0 - v_add_u32_e32 v014, v202, v003 - s_waitcnt vmcnt(11) - v_mul_f32_e32 v006, v006, v046 - v_add_u32_e32 v000, v205, v000 - v_mul_f32_e32 v010, v077, v010 - v_cndmask_b32_e64 v014, v038, v014, s[0:1] ;.loc 3 194 45 - v_mul_f32_e32 v006, v016, v006 ;.loc 1 404 0 - v_cndmask_b32_e32 v000, v038, v000, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v010, v010, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v014, 1, v014 ;.loc 3 175 8 - v_cvt_pk_bf16_f32 v006, v006, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v000, 1, v000 ;.loc 3 175 8 - buffer_store_short v010, v014, s[16:19], 0 offen - buffer_store_short v006, v000, s[16:19], 0 offen - v_mul_f32_e32 v000, v007, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v001 - v_mul_f32_e32 v000, v017, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v020 v021 v022 v023, a[96:103], a[56:63], v020 v021 v022 v023 ;.loc 1 399 0 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v008, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v002 - v_mul_f32_e32 v000, v018, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v009, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v003 - v_mul_f32_e32 v000, v019, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v040, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v004 - v_mul_f32_e32 v000, v020, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v005 - v_mul_f32_e32 v000, v021, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v024 v025 v026 v027, a[96:103], a[64:71], v024 v025 v026 v027 ;.loc 1 399 0 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v011 - v_mul_f32_e32 v000, v022, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v012 - v_mul_f32_e32 v000, v023, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v040, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v004 - v_mul_f32_e32 v000, v024, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v005 - v_mul_f32_e32 v000, v025, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v028 v029 v030 v031, a[96:103], a[72:79], v028 v029 v030 v031 ;.loc 1 399 0 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v011 - v_mul_f32_e32 v000, v026, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v012 - v_mul_f32_e32 v000, v027, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v040, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v004 - v_mul_f32_e32 v000, v028, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v005 - v_mul_f32_e32 v000, v029, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v011 - v_mul_f32_e32 v000, v030, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v012 - v_mul_f32_e32 v000, v031, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a19 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v040, v046 ;.loc 1 404 0 - v_accvgpr_read_b32 v074, a16 - v_add_u32_e32 v001, v205, v004 - v_mul_f32_e32 v000, v074, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v075, a17 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v041, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v005 - v_mul_f32_e32 v000, v075, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v076, a18 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v042, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v011 - v_mul_f32_e32 v000, v076, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v043, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v012 - v_mul_f32_e32 v000, v077, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a15 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v070, v015 ;.loc 1 404 0 - v_accvgpr_read_b32 v074, a12 - v_add_u32_e32 v001, v204, v013 - v_mul_f32_e32 v000, v074, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v075, a13 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v071, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v094 - v_mul_f32_e32 v000, v075, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v076, a14 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v072, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v095 - v_mul_f32_e32 v000, v076, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v073, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v096 - v_mul_f32_e32 v000, v077, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a11 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v070, v032 ;.loc 1 404 0 - v_accvgpr_read_b32 v074, a8 - v_add_u32_e32 v001, v203, v013 - v_mul_f32_e32 v000, v074, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v075, a9 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v071, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v094 - v_mul_f32_e32 v000, v075, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v076, a10 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v072, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v095 - v_mul_f32_e32 v000, v076, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v073, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v096 - v_mul_f32_e32 v000, v077, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a7 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v070, v033 ;.loc 1 404 0 - v_accvgpr_read_b32 v074, a4 - v_add_u32_e32 v001, v202, v013 - v_mul_f32_e32 v000, v074, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v075, a5 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v071, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v094 - v_mul_f32_e32 v000, v075, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v076, a6 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v072, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v095 - v_mul_f32_e32 v000, v076, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v073, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v096 - v_mul_f32_e32 v000, v077, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v079, a3 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v070, v046 ;.loc 1 404 0 - v_accvgpr_read_b32 v076, a0 - v_add_u32_e32 v001, v205, v013 - v_mul_f32_e32 v000, v076, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v077, a1 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v071, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v094 - v_mul_f32_e32 v000, v077, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_mfma_f32_16x16x128_f8f6f4 v052 v053 v054 v055, a[112:119], a[56:63], v052 v053 v054 v055 ;.loc 1 399 0 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - v_accvgpr_read_b32 v078, a2 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v072, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v095 - v_mul_f32_e32 v000, v078, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v073, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v096 - v_mul_f32_e32 v000, v079, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v034, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v044 - v_mul_f32_e32 v000, v052, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v035, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v045 - v_mul_f32_e32 v000, v053, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v036, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v080 - v_mul_f32_e32 v000, v054, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v037, v015 ;.loc 1 404 0 - v_add_u32_e32 v001, v204, v081 - v_mul_f32_e32 v000, v055, v000 - v_cndmask_b32_e64 v001, v038, v001, s[10:11] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v034, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v044 - v_mul_f32_e32 v000, v142, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v035, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v045 - v_mul_f32_e32 v000, v143, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v036, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v080 - v_mul_f32_e32 v000, v144, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v037, v032 ;.loc 1 404 0 - v_add_u32_e32 v001, v203, v081 - v_mul_f32_e32 v000, v145, v000 - v_cndmask_b32_e64 v001, v038, v001, s[12:13] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v034, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v044 - v_mul_f32_e32 v000, v056, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v035, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v045 - v_mul_f32_e32 v000, v057, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v036, v033 ;.loc 1 404 0 - v_add_u32_e32 v001, v202, v080 - v_mul_f32_e32 v000, v058, v000 - v_cndmask_b32_e64 v001, v038, v001, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v037, v033 ;.loc 1 404 0 - v_add_u32_e32 v011, v202, v081 - v_mul_f32_e32 v000, v059, v000 - v_cndmask_b32_e64 v001, v038, v011, s[0:1] ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v006, v034, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v044 - v_mul_f32_e32 v000, v060, v006 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v035, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v045 - v_mul_f32_e32 v000, v061, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v036, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v080 - v_mul_f32_e32 v000, v062, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - v_mul_f32_e32 v000, v037, v046 ;.loc 1 404 0 - v_add_u32_e32 v001, v205, v081 - v_mul_f32_e32 v000, v063, v000 - v_cndmask_b32_e32 v001, v038, v001, vcc ;.loc 3 194 45 - v_cvt_pk_bf16_f32 v000, v000, s0 ;.loc 1 404 0 - v_lshlrev_b32_e32 v001, 1, v001 ;.loc 3 175 8 - buffer_store_short v000, v001, s[16:19], 0 offen - s_endpgm ;.loc 1 110 0 -.Lfunc_end0: - .size kernel_gemm_0, .Lfunc_end0-kernel_gemm_0 - .cfi_endproc - .set kernel_gemm_0.num_vgpr, 256 - .set kernel_gemm_0.num_agpr, 256 - .set kernel_gemm_0.numbered_sgpr, 61 - .set kernel_gemm_0.num_named_barrier, 0 - .set kernel_gemm_0.private_seg_size, 68 - .set kernel_gemm_0.uses_vcc, 1 - .set kernel_gemm_0.uses_flat_scratch, 0 - .set kernel_gemm_0.has_dyn_sized_stack, 0 - .set kernel_gemm_0.has_recursion, 0 - .set kernel_gemm_0.has_indirect_call, 0 - .p2alignl 6, 3212836864 - .fill 256, 4, 3212836864 - .section .AMDGPU.gpr_maximums,"",@progbits - .set amdgpu.max_num_vgpr, 0 - .set amdgpu.max_num_agpr, 0 - .set amdgpu.max_num_sgpr, 0 - .set amdgpu.max_num_named_barrier, 0 - .text - .section .debug_abbrev,"",@progbits - .byte 1 - .byte 17 - .byte 0 - .byte 37 - .byte 14 - .byte 19 - .byte 5 - .byte 3 - .byte 14 - .byte 16 - .byte 23 - .byte 17 - .byte 1 - .byte 18 - .byte 6 - .byte 0 - .byte 0 - .byte 0 - .section .debug_info,"",@progbits -... - .end_amdgpu_metadata - .section .debug_line,"",@progbits -.Lline_table_start0: diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s deleted file mode 100644 index 0ed3ece5b..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_final_isa.s +++ /dev/null @@ -1,3262 +0,0 @@ - .amdgcn_target "amdgcn-amd-amdhsa--gfx950" - .amdhsa_code_object_version 6 - .text - .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .p2align 8 - .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function -hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: - s_load_dword s12, s[0:1], 0x60 - s_load_dwordx2 s[4:5], s[0:1], 0x18 - s_load_dwordx2 s[8:9], s[0:1], 0x30 - s_ashr_i32 s14, s2, 31 - s_lshr_b32 s14, s14, 27 - s_add_i32 s14, s2, s14 - s_waitcnt lgkmcnt(0) - s_ashr_i32 s13, s12, 31 - s_and_b32 s5, s5, 0xffff - s_and_b32 s9, s9, 0xffff - s_ashr_i32 s18, s14, 5 - s_and_b32 s19, s14, 0xffffffe0 - s_cmp_lg_u32 s2, s19 - s_cselect_b64 s[14:15], -1, 0 - s_cmp_lt_i32 s2, 0 - s_cselect_b64 s[16:17], -1, 0 - s_and_b64 s[14:15], s[16:17], s[14:15] - v_lshrrev_b32_e32 v2, 6, v0 - s_subb_u32 s14, s18, 0 - s_lshl_b32 s20, s14, 8 - v_readfirstlane_b32 s14, v2 - v_lshrrev_b32_e32 v109, 2, v0 - s_sub_i32 s15, s2, s19 - s_lshl_b32 s21, s14, 10 - v_xor_b32_e32 v2, v109, v0 - s_lshl_b32 s2, s3, 14 - s_ashr_i32 s19, s20, 31 - s_lshl_b32 s18, s15, 8 - v_lshlrev_b32_e32 v2, 3, v2 - s_add_i32 s25, s21, 0x10000 - v_and_b32_e32 v97, 24, v2 - v_or_b32_e32 v2, s18, v109 - s_cmpk_lt_u32 s18, 0x2000 - v_lshlrev_b32_e32 v2, 14, v2 - s_cselect_b64 vcc, -1, 0 - v_or_b32_e32 v111, s2, v97 - v_cndmask_b32_e32 v98, 0, v2, vcc - s_mov_b32 s7, 0x27000 - s_mov_b32 s6, -1 - v_add_lshl_u32 v2, v111, v98, 1 - v_or_b32_e32 v4, 64, v109 - s_mov_b32 s10, s6 - s_mov_b32 s11, s7 - ;;#ASMSTART - s_mov_b32 m0, s25 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s18, v4 - v_lshlrev_b32_e32 v2, 14, v2 - v_cndmask_b32_e32 v100, 0, v2, vcc - v_add_lshl_u32 v2, v111, v100, 1 - v_or_b32_e32 v5, 0x80, v109 - s_add_i32 s24, s21, 0x11000 - ;;#ASMSTART - s_mov_b32 m0, s24 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s18, v5 - v_lshlrev_b32_e32 v2, 14, v2 - v_cndmask_b32_e32 v101, 0, v2, vcc - v_add_lshl_u32 v2, v111, v101, 1 - v_or_b32_e32 v6, 0xc0, v109 - s_add_i32 s23, s21, 0x12000 - ;;#ASMSTART - s_mov_b32 m0, s23 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s18, v6 - v_lshlrev_b32_e32 v2, 14, v2 - v_cndmask_b32_e32 v102, 0, v2, vcc - v_add_lshl_u32 v2, v111, v102, 1 - v_or_b32_e32 v7, 32, v111 - s_add_i32 s17, s21, 0x13000 - ;;#ASMSTART - s_mov_b32 m0, s17 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v7, v98, 1 - s_add_i32 s14, s21, 0x14000 - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v7, v100, 1 - s_add_i32 s14, s21, 0x15000 - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v7, v101, 1 - s_add_i32 s14, s21, 0x16000 - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v7, v102, 1 - s_add_i32 s14, s21, 0x17000 - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s20, v109 - v_mov_b32_e32 v3, s19 - v_lshlrev_b32_e32 v8, 14, v2 - v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] - s_add_i32 s16, s21, 0x1000 - s_add_i32 s15, s21, 0x2000 - v_cndmask_b32_e32 v103, 0, v8, vcc - v_add_lshl_u32 v2, v103, v111, 1 - ;;#ASMSTART - s_mov_b32 m0, s21 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s20, v4 - v_lshlrev_b32_e32 v4, 14, v2 - v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] - s_add_i32 s14, s21, 0x3000 - s_add_i32 s27, s21, 0x4000 - v_cndmask_b32_e32 v104, 0, v4, vcc - v_add_lshl_u32 v2, v104, v111, 1 - ;;#ASMSTART - s_mov_b32 m0, s16 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s20, v5 - v_lshlrev_b32_e32 v4, 14, v2 - v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] - v_and_b32_e32 v1, 0x80, v0 - v_lshlrev_b32_e32 v34, 1, v0 - v_cndmask_b32_e32 v105, 0, v4, vcc - v_add_lshl_u32 v2, v105, v111, 1 - ;;#ASMSTART - s_mov_b32 m0, s15 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, s20, v6 - v_lshlrev_b32_e32 v4, 14, v2 - v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] - v_and_b32_e32 v35, 15, v0 - v_lshrrev_b32_e32 v94, 4, v0 - v_cndmask_b32_e32 v106, 0, v4, vcc - v_add_lshl_u32 v2, v106, v111, 1 - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v103, v7, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v104, v7, 1 - s_add_i32 s27, s21, 0x5000 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v105, v7, 1 - s_add_i32 s27, s21, 0x6000 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v2, v106, v7, 1 - s_add_i32 s27, s21, 0x7000 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_or_b32_e32 v2, 64, v111 - s_add_i32 s27, s21, 0x18000 - v_add_lshl_u32 v3, v2, v98, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0x19000 - v_add_lshl_u32 v3, v2, v100, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0x1a000 - v_add_lshl_u32 v3, v2, v101, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0x1b000 - v_add_lshl_u32 v3, v2, v102, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[8:11], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0x8000 - v_add_lshl_u32 v3, v103, v2, 1 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0x9000 - v_add_lshl_u32 v3, v104, v2, 1 - s_mov_b32 s22, 0x10000 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0xa000 - v_add_lshl_u32 v3, v105, v2, 1 - v_add_lshl_u32 v2, v106, v2, 1 - s_movk_i32 s26, 0x80 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v3, s[4:7], 0 offen sc0 lds - ;;#ASMEND - s_add_i32 s27, s21, 0xb000 - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v2, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_xor_b32_e32 v2, v94, v0 - v_lshlrev_b32_e32 v2, 4, v2 - v_and_b32_e32 v96, 48, v2 - v_lshlrev_b32_e32 v2, 5, v0 - v_and_b32_e32 v2, 0x11e0, v2 - v_lshlrev_b32_e32 v108, 1, v2 - v_or3_b32 v6, v1, v35, 16 - v_and_or_b32 v95, v34, s26, v35 - v_mov_b32_e32 v34, 0x10000 - v_or_b32_e32 v144, v108, v96 - v_lshlrev_b32_e32 v107, 6, v6 - v_lshl_or_b32 v99, v95, 6, v34 - ;;#ASMSTART - s_waitcnt vmcnt(0) - s_barrier - ;;#ASMEND - ds_read_b128 v[2:5], v144 - v_or_b32_e32 v145, v107, v96 - v_or_b32_e32 v146, v99, v96 - v_or_b32_e32 v90, 0x60, v111 - v_lshlrev_b32_e32 v110, 5, v6 - ds_read_b128 v[6:9], v145 - ds_read_b128 v[10:13], v145 offset:1024 - ds_read_b128 v[14:17], v145 offset:2048 - ds_read_b128 v[18:21], v145 offset:3072 - ds_read_b128 v[22:25], v145 offset:4096 - ds_read_b128 v[26:29], v145 offset:5120 - ds_read_b128 v[30:33], v145 offset:6144 - ds_read_b128 v[34:37], v146 - ds_read_b128 v[38:41], v146 offset:1024 - ds_read_b128 v[42:45], v146 offset:2048 - ds_read_b128 v[50:53], v146 offset:3072 - ds_read_b128 v[54:57], v146 offset:4096 - ds_read_b128 v[112:115], v146 offset:5120 - ds_read_b128 v[116:119], v146 offset:6144 - ds_read_b128 v[120:123], v146 offset:7168 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[2:5], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0x1c000 - v_add_lshl_u32 v46, v90, v98, 1 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v46, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[124:127], v144 offset:16384 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[2:5], v[38:41], 0 - ;;#ASMEND - s_waitcnt lgkmcnt(6) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[2:5], v[42:45], 0 - ;;#ASMEND - s_waitcnt lgkmcnt(5) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[2:5], v[50:53], 0 - ;;#ASMEND - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[2:5], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[128:131], v145 offset:16384 - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[2:5], v[112:115], 0 - ;;#ASMEND - s_waitcnt lgkmcnt(3) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[2:5], v[116:119], 0 - ;;#ASMEND - s_waitcnt lgkmcnt(2) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[2:5], v[120:123], 0 - ;;#ASMEND - v_add_lshl_u32 v2, v90, v100, 1 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[6:9], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0x1d000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[2:5], v145 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[6:9], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[6:9], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[6:9], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[6:9], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[132:135], v145 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[6:9], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[6:9], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[6:9], v[120:123], 0 - ;;#ASMEND - v_add_lshl_u32 v6, v90, v101, 1 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[10:13], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0x1e000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v90, v102, 1 - ds_read_b128 v[136:139], v145 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[10:13], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[10:13], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[10:13], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[10:13], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[46:49], v145 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[10:13], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[10:13], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[10:13], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[14:17], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0x1f000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v103, v90, 1 - ds_read_b128 v[58:61], v145 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[14:17], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[14:17], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[14:17], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[14:17], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[66:69], v145 offset:22528 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[14:17], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[14:17], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[14:17], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[18:21], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0xc000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v104, v90, 1 - ds_read_b128 v[70:73], v146 offset:16384 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[18:21], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[18:21], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[18:21], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[18:21], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[62:65], v146 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[18:21], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[18:21], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[18:21], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[22:25], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0xd000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v105, v90, 1 - ds_read_b128 v[74:77], v146 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[22:25], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[22:25], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[22:25], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[22:25], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[78:81], v146 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[22:25], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[22:25], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[22:25], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[26:29], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0xe000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v106, v90, 1 - v_or_b32_e32 v111, 0x80, v111 - ds_read_b128 v[82:85], v146 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[26:29], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[26:29], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[26:29], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[26:29], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[86:89], v146 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[26:29], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[26:29], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[26:29], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[30:33], v[34:37], 0 - ;;#ASMEND - s_add_i32 s26, s21, 0xf000 - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v6, s[4:7], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v111, v98, 1 - ds_read_b128 v[90:93], v146 offset:22528 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[30:33], v[38:41], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[30:33], v[42:45], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[30:33], v[50:53], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[30:33], v[54:57], 0 - ;;#ASMEND - ds_read_b128 v[140:143], v146 offset:23552 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[30:33], v[112:115], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[30:33], v[116:119], 0 - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[30:33], v[120:123], 0 - ;;#ASMEND - ;;#ASMSTART - s_waitcnt lgkmcnt(0) - s_barrier - ;;#ASMEND - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[124:127], v[70:73], a[252:255] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s25 - buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds - ;;#ASMEND - v_add_lshl_u32 v6, v111, v100, 1 - ds_read_b128 v[50:53], v144 offset:32768 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[124:127], v[62:65], a[248:251] - ;;#ASMEND - s_waitcnt lgkmcnt(6) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[124:127], v[74:77], a[244:247] - ;;#ASMEND - s_waitcnt lgkmcnt(5) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[124:127], v[78:81], a[240:243] - ;;#ASMEND - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[124:127], v[82:85], a[236:239] - ;;#ASMEND - ds_read_b128 v[42:45], v145 offset:32768 - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[124:127], v[86:89], a[232:235] - ;;#ASMEND - s_waitcnt lgkmcnt(3) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[124:127], v[90:93], a[228:231] - ;;#ASMEND - s_waitcnt lgkmcnt(2) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[124:127], v[140:143], a[224:227] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[128:131], v[70:73], a[220:223] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s24 - buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[34:37], v145 offset:33792 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[128:131], v[62:65], a[216:219] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[128:131], v[74:77], a[212:215] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[128:131], v[78:81], a[208:211] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[128:131], v[82:85], a[204:207] - ;;#ASMEND - ds_read_b128 v[26:29], v145 offset:34816 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[128:131], v[86:89], a[200:203] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[128:131], v[90:93], a[196:199] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[128:131], v[140:143], a[192:195] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[2:5], v[70:73], a[188:191] - ;;#ASMEND - v_add_lshl_u32 v6, v111, v101, 1 - ;;#ASMSTART - s_mov_b32 m0, s23 - buffer_load_dwordx4 v6, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[14:17], v145 offset:35840 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[2:5], v[62:65], a[184:187] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[2:5], v[74:77], a[180:183] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[2:5], v[78:81], a[176:179] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[2:5], v[82:85], a[172:175] - ;;#ASMEND - ds_read_b128 v[10:13], v145 offset:36864 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[2:5], v[86:89], a[168:171] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[2:5], v[90:93], a[164:167] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[2:5], v[140:143], a[160:163] - ;;#ASMEND - v_add_lshl_u32 v2, v111, v102, 1 - v_add_lshl_u32 v18, v103, v111, 1 - v_add_lshl_u32 v30, v104, v111, 1 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[132:135], v[70:73], a[156:159] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s17 - buffer_load_dwordx4 v2, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[6:9], v145 offset:37888 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[132:135], v[62:65], a[152:155] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[132:135], v[74:77], a[148:151] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[132:135], v[78:81], a[144:147] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[132:135], v[82:85], a[140:143] - ;;#ASMEND - ds_read_b128 v[2:5], v145 offset:38912 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[132:135], v[86:89], a[136:139] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[132:135], v[90:93], a[132:135] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[132:135], v[140:143], a[128:131] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[136:139], v[70:73], a[124:127] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s21 - buffer_load_dwordx4 v18, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[18:21], v146 offset:32768 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[136:139], v[62:65], a[120:123] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[136:139], v[74:77], a[116:119] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[136:139], v[78:81], a[112:115] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[136:139], v[82:85], a[108:111] - ;;#ASMEND - ds_read_b128 v[22:25], v146 offset:33792 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[136:139], v[86:89], a[104:107] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[136:139], v[90:93], a[100:103] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[136:139], v[140:143], a[96:99] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[46:49], v[70:73], a[92:95] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s16 - buffer_load_dwordx4 v30, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[30:33], v146 offset:34816 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[46:49], v[62:65], a[88:91] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[46:49], v[74:77], a[84:87] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[46:49], v[78:81], a[80:83] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[46:49], v[82:85], a[76:79] - ;;#ASMEND - ds_read_b128 v[38:41], v146 offset:35840 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[46:49], v[86:89], a[72:75] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[46:49], v[90:93], a[68:71] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[46:49], v[140:143], a[64:67] - ;;#ASMEND - v_add_lshl_u32 v46, v105, v111, 1 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[58:61], v[70:73], a[60:63] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s15 - buffer_load_dwordx4 v46, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[46:49], v146 offset:36864 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[58:61], v[62:65], a[56:59] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[58:61], v[74:77], a[52:55] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[58:61], v[78:81], a[48:51] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[58:61], v[82:85], a[44:47] - ;;#ASMEND - ds_read_b128 v[54:57], v146 offset:37888 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[58:61], v[86:89], a[40:43] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[58:61], v[90:93], a[36:39] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[58:61], v[140:143], a[32:35] - ;;#ASMEND - v_add_lshl_u32 v58, v106, v111, 1 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[66:69], v[70:73], a[28:31] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s14 - buffer_load_dwordx4 v58, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[58:61], v146 offset:38912 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[66:69], v[62:65], a[24:27] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[66:69], v[74:77], a[20:23] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[66:69], v[78:81], a[16:19] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[66:69], v[82:85], a[12:15] - ;;#ASMEND - ds_read_b128 v[62:65], v146 offset:39936 - v_lshlrev_b32_e32 v71, 5, v95 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[66:69], v[86:89], a[8:11] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[66:69], v[90:93], a[4:7] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[66:69], v[140:143], a[0:3] - ;;#ASMEND - v_bitop3_b32 v66, v109, 3, v0 bitop3:0x48 - v_lshlrev_b32_e32 v66, 4, v66 - s_or_b32 s23, s2, 0x3fc0 - s_or_b32 s24, s2, 0xc0 - v_lshl_or_b32 v67, s3, 15, v66 - s_movk_i32 s2, 0x8100 - v_lshl_add_u32 v66, v102, 1, v67 - v_lshl_add_u32 v68, v106, 1, v67 - v_lshl_add_u32 v70, v101, 1, v67 - v_lshl_add_u32 v72, v105, 1, v67 - v_lshl_add_u32 v74, v100, 1, v67 - v_lshl_add_u32 v76, v104, 1, v67 - v_lshl_add_u32 v78, v103, 1, v67 - v_lshl_add_u32 v80, v98, 1, v67 - s_mov_b64 s[14:15], 1 - s_mov_b32 s3, -1 - v_lshlrev_b32_e32 v67, 1, v110 - v_lshlrev_b32_e32 v69, 1, v71 - ;;#ASMSTART - s_waitcnt vmcnt(16) - s_barrier - ;;#ASMEND -.LBB0_1: - s_mov_b64 s[16:17], s[14:15] - s_min_i32 s15, s24, s23 - v_add_u32_e32 v82, s2, v72 - v_add_u32_e32 v83, s2, v68 - s_xor_b32 s14, s16, 1 - s_lshl_b32 s16, s16, 15 - v_add_u32_e32 v109, 0x8040, v82 - v_add_u32_e32 v154, 0x8040, v83 - v_or_b32_e32 v82, s15, v97 - s_lshl_b32 s17, s14, 15 - v_or_b32_e32 v83, s16, v96 - v_add_u32_e32 v71, s2, v80 - v_add_u32_e32 v73, s2, v74 - v_add_u32_e32 v75, s2, v70 - v_add_u32_e32 v77, s2, v66 - v_add_u32_e32 v79, s2, v78 - v_add_u32_e32 v81, s2, v76 - s_add_i32 s15, s16, s21 - v_add_lshl_u32 v162, v82, v98, 1 - v_add_lshl_u32 v163, v82, v100, 1 - v_add_lshl_u32 v164, v82, v101, 1 - v_add_lshl_u32 v165, v82, v102, 1 - v_add_lshl_u32 v166, v82, v103, 1 - v_add_lshl_u32 v167, v82, v104, 1 - v_add_lshl_u32 v168, v82, v105, 1 - v_add_lshl_u32 v169, v82, v106, 1 - s_add_i32 s16, s21, s17 - v_add_u32_e32 v82, v83, v108 - v_add_u32_e32 v126, v83, v67 - v_add3_u32 v158, v83, v69, s22 - v_or_b32_e32 v83, s17, v96 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[50:53], v[18:21], a[252:255] - ;;#ASMEND - v_add_u32_e32 v71, 0x8040, v71 - v_add_u32_e32 v73, 0x8040, v73 - v_add_u32_e32 v75, 0x8040, v75 - v_add_u32_e32 v77, 0x8040, v77 - v_add_u32_e32 v79, 0x8040, v79 - v_add_u32_e32 v81, 0x8040, v81 - s_add_i32 s31, s16, 0x4000 - s_add_i32 s33, s16, 0x14000 - s_add_i32 s34, s16, 0x5000 - s_add_i32 s35, s16, 0x15000 - s_add_i32 s36, s16, 0x6000 - s_add_i32 s37, s16, 0x16000 - s_add_i32 s38, s16, 0x7000 - s_add_i32 s16, s16, 0x17000 - v_add_u32_e32 v170, v83, v108 - v_add_u32_e32 v171, v83, v67 - v_add3_u32 v172, v83, v69, s22 - ;;#ASMSTART - s_mov_b32 m0, s33 - buffer_load_dwordx4 v71, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[82:85], v82 offset:16384 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[50:53], v[22:25], a[248:251] - ;;#ASMEND - s_waitcnt lgkmcnt(6) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[50:53], v[30:33], a[244:247] - ;;#ASMEND - s_waitcnt lgkmcnt(5) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[50:53], v[38:41], a[240:243] - ;;#ASMEND - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[50:53], v[46:49], a[236:239] - ;;#ASMEND - ds_read_b128 v[86:89], v126 offset:16384 - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[50:53], v[54:57], a[232:235] - ;;#ASMEND - s_waitcnt lgkmcnt(3) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[50:53], v[58:61], a[228:231] - ;;#ASMEND - s_waitcnt lgkmcnt(2) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[50:53], v[62:65], a[224:227] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[42:45], v[18:21], a[220:223] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s35 - buffer_load_dwordx4 v73, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[90:93], v126 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[42:45], v[22:25], a[216:219] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[42:45], v[30:33], a[212:215] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[42:45], v[38:41], a[208:211] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[42:45], v[46:49], a[204:207] - ;;#ASMEND - ds_read_b128 v[110:113], v126 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[42:45], v[54:57], a[200:203] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[42:45], v[58:61], a[196:199] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[42:45], v[62:65], a[192:195] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[34:37], v[18:21], a[188:191] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s37 - buffer_load_dwordx4 v75, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[114:117], v126 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[34:37], v[22:25], a[184:187] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[34:37], v[30:33], a[180:183] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[34:37], v[38:41], a[176:179] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[34:37], v[46:49], a[172:175] - ;;#ASMEND - ds_read_b128 v[118:121], v126 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[34:37], v[54:57], a[168:171] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[34:37], v[58:61], a[164:167] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[34:37], v[62:65], a[160:163] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[26:29], v[18:21], a[156:159] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s16 - buffer_load_dwordx4 v77, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[122:125], v126 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[26:29], v[22:25], a[152:155] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[26:29], v[30:33], a[148:151] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[26:29], v[38:41], a[144:147] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[26:29], v[46:49], a[140:143] - ;;#ASMEND - ds_read_b128 v[126:129], v126 offset:22528 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[26:29], v[54:57], a[136:139] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[26:29], v[58:61], a[132:135] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[26:29], v[62:65], a[128:131] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[14:17], v[18:21], a[124:127] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s31 - buffer_load_dwordx4 v79, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[130:133], v158 offset:16384 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[14:17], v[22:25], a[120:123] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[14:17], v[30:33], a[116:119] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[14:17], v[38:41], a[112:115] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[14:17], v[46:49], a[108:111] - ;;#ASMEND - ds_read_b128 v[134:137], v158 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[14:17], v[54:57], a[104:107] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[14:17], v[58:61], a[100:103] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[14:17], v[62:65], a[96:99] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[10:13], v[18:21], a[92:95] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s34 - buffer_load_dwordx4 v81, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[138:141], v158 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[10:13], v[22:25], a[88:91] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[10:13], v[30:33], a[84:87] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[10:13], v[38:41], a[80:83] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[10:13], v[46:49], a[76:79] - ;;#ASMEND - ds_read_b128 v[142:145], v158 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[10:13], v[54:57], a[72:75] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[10:13], v[58:61], a[68:71] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[10:13], v[62:65], a[64:67] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[6:9], v[18:21], a[60:63] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s36 - buffer_load_dwordx4 v109, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[146:149], v158 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[6:9], v[22:25], a[56:59] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[6:9], v[30:33], a[52:55] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[6:9], v[38:41], a[48:51] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[6:9], v[46:49], a[44:47] - ;;#ASMEND - ds_read_b128 v[150:153], v158 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[6:9], v[54:57], a[40:43] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[6:9], v[58:61], a[36:39] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[6:9], v[62:65], a[32:35] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[2:5], v[18:21], a[28:31] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s38 - buffer_load_dwordx4 v154, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[154:157], v158 offset:22528 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[2:5], v[22:25], a[24:27] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[2:5], v[30:33], a[20:23] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[2:5], v[38:41], a[16:19] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[2:5], v[46:49], a[12:15] - ;;#ASMEND - s_add_i32 s25, s15, 0x10000 - s_add_i32 s17, s15, 0x11000 - s_add_i32 s26, s15, 0x12000 - s_add_i32 s27, s15, 0x13000 - s_add_i32 s28, s15, 0x1000 - s_add_i32 s29, s15, 0x2000 - s_add_i32 s30, s15, 0x3000 - ds_read_b128 v[158:161], v158 offset:23552 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[2:5], v[54:57], a[8:11] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[2:5], v[58:61], a[4:7] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[2:5], v[62:65], a[0:3] - ;;#ASMEND - ;;#ASMSTART - s_waitcnt lgkmcnt(0) - s_barrier - ;;#ASMEND - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[82:85], v[130:133], a[252:255] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s25 - buffer_load_dwordx4 v162, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[50:53], v170 - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[82:85], v[134:137], a[248:251] - ;;#ASMEND - s_waitcnt lgkmcnt(6) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[82:85], v[138:141], a[244:247] - ;;#ASMEND - s_waitcnt lgkmcnt(5) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[82:85], v[142:145], a[240:243] - ;;#ASMEND - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[82:85], v[146:149], a[236:239] - ;;#ASMEND - ds_read_b128 v[42:45], v171 - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[82:85], v[150:153], a[232:235] - ;;#ASMEND - s_waitcnt lgkmcnt(3) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[82:85], v[154:157], a[228:231] - ;;#ASMEND - s_waitcnt lgkmcnt(2) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[82:85], v[158:161], a[224:227] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[86:89], v[130:133], a[220:223] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s17 - buffer_load_dwordx4 v163, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[34:37], v171 offset:1024 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[86:89], v[134:137], a[216:219] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[86:89], v[138:141], a[212:215] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[86:89], v[142:145], a[208:211] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[86:89], v[146:149], a[204:207] - ;;#ASMEND - ds_read_b128 v[26:29], v171 offset:2048 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[86:89], v[150:153], a[200:203] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[86:89], v[154:157], a[196:199] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[86:89], v[158:161], a[192:195] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[90:93], v[130:133], a[188:191] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s26 - buffer_load_dwordx4 v164, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[14:17], v171 offset:3072 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[90:93], v[134:137], a[184:187] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[90:93], v[138:141], a[180:183] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[90:93], v[142:145], a[176:179] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[90:93], v[146:149], a[172:175] - ;;#ASMEND - ds_read_b128 v[10:13], v171 offset:4096 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[90:93], v[150:153], a[168:171] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[90:93], v[154:157], a[164:167] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[90:93], v[158:161], a[160:163] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[110:113], v[130:133], a[156:159] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s27 - buffer_load_dwordx4 v165, s[8:11], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[6:9], v171 offset:5120 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[110:113], v[134:137], a[152:155] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[110:113], v[138:141], a[148:151] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[110:113], v[142:145], a[144:147] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[110:113], v[146:149], a[140:143] - ;;#ASMEND - ds_read_b128 v[2:5], v171 offset:6144 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[110:113], v[150:153], a[136:139] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[110:113], v[154:157], a[132:135] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[110:113], v[158:161], a[128:131] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[114:117], v[130:133], a[124:127] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s15 - buffer_load_dwordx4 v166, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[18:21], v172 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[114:117], v[134:137], a[120:123] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[114:117], v[138:141], a[116:119] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[114:117], v[142:145], a[112:115] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[114:117], v[146:149], a[108:111] - ;;#ASMEND - ds_read_b128 v[22:25], v172 offset:1024 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[114:117], v[150:153], a[104:107] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[114:117], v[154:157], a[100:103] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[114:117], v[158:161], a[96:99] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[118:121], v[130:133], a[92:95] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s28 - buffer_load_dwordx4 v167, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[30:33], v172 offset:2048 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[118:121], v[134:137], a[88:91] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[118:121], v[138:141], a[84:87] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[118:121], v[142:145], a[80:83] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[118:121], v[146:149], a[76:79] - ;;#ASMEND - ds_read_b128 v[38:41], v172 offset:3072 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[118:121], v[150:153], a[72:75] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[118:121], v[154:157], a[68:71] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[118:121], v[158:161], a[64:67] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[122:125], v[130:133], a[60:63] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s29 - buffer_load_dwordx4 v168, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[46:49], v172 offset:4096 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[122:125], v[134:137], a[56:59] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[122:125], v[138:141], a[52:55] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[122:125], v[142:145], a[48:51] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[122:125], v[146:149], a[44:47] - ;;#ASMEND - ds_read_b128 v[54:57], v172 offset:5120 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[122:125], v[150:153], a[40:43] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[122:125], v[154:157], a[36:39] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[122:125], v[158:161], a[32:35] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[126:129], v[130:133], a[28:31] - ;;#ASMEND - ;;#ASMSTART - s_mov_b32 m0, s30 - buffer_load_dwordx4 v169, s[4:7], 0 offen sc0 lds - ;;#ASMEND - ds_read_b128 v[58:61], v172 offset:6144 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[126:129], v[134:137], a[24:27] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[126:129], v[138:141], a[20:23] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[126:129], v[142:145], a[16:19] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[126:129], v[146:149], a[12:15] - ;;#ASMEND - ds_read_b128 v[62:65], v172 offset:7168 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[126:129], v[150:153], a[8:11] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[126:129], v[154:157], a[4:7] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[126:129], v[158:161], a[0:3] - ;;#ASMEND - s_add_i32 s24, s24, 64 - s_add_u32 s2, s2, 0x80 - s_addc_u32 s3, s3, 0 - s_cmp_lg_u64 s[2:3], 0 - ;;#ASMSTART - s_waitcnt vmcnt(16) - s_barrier - ;;#ASMEND - s_cbranch_scc1 .LBB0_1 - s_load_dwordx2 s[0:1], s[0:1], 0x0 - s_lshl_b32 s4, s14, 14 - s_lshl_b32 s4, s4, 1 - v_add3_u32 v67, v108, s4, v96 - s_waitcnt lgkmcnt(0) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[50:53], v[18:21], a[252:255] - ;;#ASMEND - ds_read_b128 v[68:71], v67 offset:16384 - v_add3_u32 v67, v107, s4, v96 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[50:53], v[22:25], a[248:251] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[50:53], v[30:33], a[244:247] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[50:53], v[38:41], a[240:243] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[50:53], v[46:49], a[236:239] - ;;#ASMEND - ds_read_b128 v[72:75], v67 offset:16384 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[50:53], v[54:57], a[232:235] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[50:53], v[58:61], a[228:231] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[50:53], v[62:65], a[224:227] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[42:45], v[18:21], a[220:223] - ;;#ASMEND - ds_read_b128 v[76:79], v67 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[42:45], v[22:25], a[216:219] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[42:45], v[30:33], a[212:215] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[42:45], v[38:41], a[208:211] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[42:45], v[46:49], a[204:207] - ;;#ASMEND - ds_read_b128 v[80:83], v67 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[42:45], v[54:57], a[200:203] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[42:45], v[58:61], a[196:199] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[42:45], v[62:65], a[192:195] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[34:37], v[18:21], a[188:191] - ;;#ASMEND - ds_read_b128 v[84:87], v67 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[34:37], v[22:25], a[184:187] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[34:37], v[30:33], a[180:183] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[34:37], v[38:41], a[176:179] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[34:37], v[46:49], a[172:175] - ;;#ASMEND - ds_read_b128 v[50:53], v67 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[34:37], v[54:57], a[168:171] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[34:37], v[58:61], a[164:167] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[34:37], v[62:65], a[160:163] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[26:29], v[18:21], a[156:159] - ;;#ASMEND - ds_read_b128 v[42:45], v67 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[26:29], v[22:25], a[152:155] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[26:29], v[30:33], a[148:151] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[26:29], v[38:41], a[144:147] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[26:29], v[46:49], a[140:143] - ;;#ASMEND - ds_read_b128 v[34:37], v67 offset:22528 - v_add3_u32 v67, v99, s4, v96 - s_mov_b32 s3, 0x27000 - s_mov_b32 s2, -1 - s_and_b32 s1, s1, 0xffff - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[26:29], v[54:57], a[136:139] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[26:29], v[58:61], a[132:135] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[26:29], v[62:65], a[128:131] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[14:17], v[18:21], a[124:127] - ;;#ASMEND - ds_read_b128 v[26:29], v67 offset:16384 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[14:17], v[22:25], a[120:123] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[14:17], v[30:33], a[116:119] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[14:17], v[38:41], a[112:115] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[14:17], v[46:49], a[108:111] - ;;#ASMEND - ds_read_b128 v[88:91], v67 offset:17408 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[14:17], v[54:57], a[104:107] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[14:17], v[58:61], a[100:103] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[14:17], v[62:65], a[96:99] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[10:13], v[18:21], a[92:95] - ;;#ASMEND - ds_read_b128 v[14:17], v67 offset:18432 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[10:13], v[22:25], a[88:91] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[10:13], v[30:33], a[84:87] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[10:13], v[38:41], a[80:83] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[10:13], v[46:49], a[76:79] - ;;#ASMEND - ds_read_b128 v[96:99], v67 offset:19456 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[10:13], v[54:57], a[72:75] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[10:13], v[58:61], a[68:71] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[10:13], v[62:65], a[64:67] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[6:9], v[18:21], a[60:63] - ;;#ASMEND - ds_read_b128 v[10:13], v67 offset:20480 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[6:9], v[22:25], a[56:59] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[6:9], v[30:33], a[52:55] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[6:9], v[38:41], a[48:51] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[6:9], v[46:49], a[44:47] - ;;#ASMEND - ds_read_b128 v[100:103], v67 offset:21504 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[6:9], v[54:57], a[40:43] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[6:9], v[58:61], a[36:39] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[6:9], v[62:65], a[32:35] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[2:5], v[18:21], a[28:31] - ;;#ASMEND - ds_read_b128 v[6:9], v67 offset:22528 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[2:5], v[22:25], a[24:27] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[2:5], v[30:33], a[20:23] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[2:5], v[38:41], a[16:19] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[2:5], v[46:49], a[12:15] - ;;#ASMEND - ds_read_b128 v[18:21], v67 offset:23552 - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[2:5], v[54:57], a[8:11] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[2:5], v[58:61], a[4:7] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[2:5], v[62:65], a[0:3] - ;;#ASMEND - v_or_b32_e32 v66, 0x70, v1 - ;;#ASMSTART - s_waitcnt lgkmcnt(0) - s_barrier - ;;#ASMEND - s_waitcnt lgkmcnt(7) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[252:255], v[68:71], v[26:29], a[252:255] - ;;#ASMEND - s_waitcnt lgkmcnt(6) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[248:251], v[68:71], v[88:91], a[248:251] - ;;#ASMEND - s_waitcnt lgkmcnt(5) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[244:247], v[68:71], v[14:17], a[244:247] - ;;#ASMEND - s_waitcnt lgkmcnt(4) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[240:243], v[68:71], v[96:99], a[240:243] - ;;#ASMEND - s_waitcnt lgkmcnt(3) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[236:239], v[68:71], v[10:13], a[236:239] - ;;#ASMEND - s_waitcnt lgkmcnt(2) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[232:235], v[68:71], v[100:103], a[232:235] - ;;#ASMEND - s_waitcnt lgkmcnt(1) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[228:231], v[68:71], v[6:9], a[228:231] - ;;#ASMEND - s_waitcnt lgkmcnt(0) - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[224:227], v[68:71], v[18:21], a[224:227] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[220:223], v[72:75], v[26:29], a[220:223] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[216:219], v[72:75], v[88:91], a[216:219] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[212:215], v[72:75], v[14:17], a[212:215] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[208:211], v[72:75], v[96:99], a[208:211] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[204:207], v[72:75], v[10:13], a[204:207] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[200:203], v[72:75], v[100:103], a[200:203] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[196:199], v[72:75], v[6:9], a[196:199] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[192:195], v[72:75], v[18:21], a[192:195] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[188:191], v[76:79], v[26:29], a[188:191] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[184:187], v[76:79], v[88:91], a[184:187] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[180:183], v[76:79], v[14:17], a[180:183] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[176:179], v[76:79], v[96:99], a[176:179] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[172:175], v[76:79], v[10:13], a[172:175] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[168:171], v[76:79], v[100:103], a[168:171] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[164:167], v[76:79], v[6:9], a[164:167] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[160:163], v[76:79], v[18:21], a[160:163] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[156:159], v[80:83], v[26:29], a[156:159] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[152:155], v[80:83], v[88:91], a[152:155] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[148:151], v[80:83], v[14:17], a[148:151] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[144:147], v[80:83], v[96:99], a[144:147] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[140:143], v[80:83], v[10:13], a[140:143] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[136:139], v[80:83], v[100:103], a[136:139] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[132:135], v[80:83], v[6:9], a[132:135] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[128:131], v[80:83], v[18:21], a[128:131] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[124:127], v[84:87], v[26:29], a[124:127] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[120:123], v[84:87], v[88:91], a[120:123] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[116:119], v[84:87], v[14:17], a[116:119] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[112:115], v[84:87], v[96:99], a[112:115] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[108:111], v[84:87], v[10:13], a[108:111] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[104:107], v[84:87], v[100:103], a[104:107] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[100:103], v[84:87], v[6:9], a[100:103] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[96:99], v[84:87], v[18:21], a[96:99] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[92:95], v[50:53], v[26:29], a[92:95] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[88:91], v[50:53], v[88:91], a[88:91] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[84:87], v[50:53], v[14:17], a[84:87] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[80:83], v[50:53], v[96:99], a[80:83] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[76:79], v[50:53], v[10:13], a[76:79] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[72:75], v[50:53], v[100:103], a[72:75] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[68:71], v[50:53], v[6:9], a[68:71] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[64:67], v[50:53], v[18:21], a[64:67] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[60:63], v[42:45], v[26:29], a[60:63] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[56:59], v[42:45], v[88:91], a[56:59] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[52:55], v[42:45], v[14:17], a[52:55] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[48:51], v[42:45], v[96:99], a[48:51] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[44:47], v[42:45], v[10:13], a[44:47] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[40:43], v[42:45], v[100:103], a[40:43] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[36:39], v[42:45], v[6:9], a[36:39] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[32:35], v[42:45], v[18:21], a[32:35] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[28:31], v[34:37], v[26:29], a[28:31] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[24:27], v[34:37], v[88:91], a[24:27] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[20:23], v[34:37], v[14:17], a[20:23] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[16:19], v[34:37], v[96:99], a[16:19] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[12:15], v[34:37], v[10:13], a[12:15] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[8:11], v[34:37], v[100:103], a[8:11] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[4:7], v[34:37], v[6:9], a[4:7] - ;;#ASMEND - ;;#ASMSTART - v_mfma_f32_16x16x32_bf16 a[0:3], v[34:37], v[18:21], a[0:3] - ;;#ASMEND - v_lshlrev_b32_e32 v2, 2, v94 - v_accvgpr_read_b32 v3, a252 - v_and_or_b32 v4, v2, 12, v1 - v_cvt_pk_bf16_f32 v5, v3, s0 - v_lshlrev_b32_e32 v3, 1, v95 - v_lshl_or_b32 v4, v4, 9, v3 - s_barrier - ds_write_b16 v4, v5 - v_accvgpr_read_b32 v5, a253 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:512 - v_accvgpr_read_b32 v5, a254 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1024 - v_accvgpr_read_b32 v5, a255 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1536 - v_accvgpr_read_b32 v5, a248 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:32 - v_accvgpr_read_b32 v5, a249 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:544 - v_accvgpr_read_b32 v5, a250 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1056 - v_accvgpr_read_b32 v5, a251 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1568 - v_accvgpr_read_b32 v5, a244 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:64 - v_accvgpr_read_b32 v5, a245 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:576 - v_accvgpr_read_b32 v5, a246 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1088 - v_accvgpr_read_b32 v5, a247 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1600 - v_accvgpr_read_b32 v5, a240 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:96 - v_accvgpr_read_b32 v5, a241 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:608 - v_accvgpr_read_b32 v5, a242 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1120 - v_accvgpr_read_b32 v5, a243 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1632 - v_accvgpr_read_b32 v5, a236 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:128 - v_accvgpr_read_b32 v5, a237 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:640 - v_accvgpr_read_b32 v5, a238 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1152 - v_accvgpr_read_b32 v5, a239 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1664 - v_accvgpr_read_b32 v5, a232 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:160 - v_accvgpr_read_b32 v5, a233 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:672 - v_accvgpr_read_b32 v5, a234 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1184 - v_accvgpr_read_b32 v5, a235 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1696 - v_accvgpr_read_b32 v5, a228 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:192 - v_accvgpr_read_b32 v5, a229 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:704 - v_accvgpr_read_b32 v5, a230 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1216 - v_accvgpr_read_b32 v5, a231 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1728 - v_accvgpr_read_b32 v5, a224 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:224 - v_accvgpr_read_b32 v5, a225 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:736 - v_accvgpr_read_b32 v5, a226 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1248 - v_accvgpr_read_b32 v5, a227 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:1760 - v_accvgpr_read_b32 v5, a220 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8192 - v_accvgpr_read_b32 v5, a221 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8704 - v_accvgpr_read_b32 v5, a222 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9216 - v_accvgpr_read_b32 v5, a223 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9728 - v_accvgpr_read_b32 v5, a216 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8224 - v_accvgpr_read_b32 v5, a217 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8736 - v_accvgpr_read_b32 v5, a218 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9248 - v_accvgpr_read_b32 v5, a219 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9760 - v_accvgpr_read_b32 v5, a212 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8256 - v_accvgpr_read_b32 v5, a213 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8768 - v_accvgpr_read_b32 v5, a214 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9280 - v_accvgpr_read_b32 v5, a215 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9792 - v_accvgpr_read_b32 v5, a208 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8288 - v_accvgpr_read_b32 v5, a209 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8800 - v_accvgpr_read_b32 v5, a210 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9312 - v_accvgpr_read_b32 v5, a211 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9824 - v_accvgpr_read_b32 v5, a204 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8320 - v_accvgpr_read_b32 v5, a205 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8832 - v_accvgpr_read_b32 v5, a206 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9344 - v_accvgpr_read_b32 v5, a207 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9856 - v_accvgpr_read_b32 v5, a200 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8352 - v_accvgpr_read_b32 v5, a201 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8864 - v_accvgpr_read_b32 v5, a202 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9376 - v_accvgpr_read_b32 v5, a203 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9888 - v_accvgpr_read_b32 v5, a196 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8384 - v_accvgpr_read_b32 v5, a197 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8896 - v_accvgpr_read_b32 v5, a198 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9408 - v_accvgpr_read_b32 v5, a199 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9920 - v_accvgpr_read_b32 v5, a192 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8416 - v_accvgpr_read_b32 v5, a193 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:8928 - v_accvgpr_read_b32 v5, a194 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9440 - v_accvgpr_read_b32 v5, a195 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:9952 - v_accvgpr_read_b32 v5, a188 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16384 - v_accvgpr_read_b32 v5, a189 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16896 - v_accvgpr_read_b32 v5, a190 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17408 - v_accvgpr_read_b32 v5, a191 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17920 - v_accvgpr_read_b32 v5, a184 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16416 - v_accvgpr_read_b32 v5, a185 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16928 - v_accvgpr_read_b32 v5, a186 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17440 - v_accvgpr_read_b32 v5, a187 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17952 - v_accvgpr_read_b32 v5, a180 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16448 - v_accvgpr_read_b32 v5, a181 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16960 - v_accvgpr_read_b32 v5, a182 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17472 - v_accvgpr_read_b32 v5, a183 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17984 - v_accvgpr_read_b32 v5, a176 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16480 - v_accvgpr_read_b32 v5, a177 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16992 - v_accvgpr_read_b32 v5, a178 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17504 - v_accvgpr_read_b32 v5, a179 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:18016 - v_accvgpr_read_b32 v5, a172 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16512 - v_accvgpr_read_b32 v5, a173 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17024 - v_accvgpr_read_b32 v5, a174 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17536 - v_accvgpr_read_b32 v5, a175 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:18048 - v_accvgpr_read_b32 v5, a168 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16544 - v_accvgpr_read_b32 v5, a169 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17056 - v_accvgpr_read_b32 v5, a170 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17568 - v_accvgpr_read_b32 v5, a171 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:18080 - v_accvgpr_read_b32 v5, a164 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16576 - v_accvgpr_read_b32 v5, a165 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17088 - v_accvgpr_read_b32 v5, a166 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17600 - v_accvgpr_read_b32 v5, a167 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:18112 - v_accvgpr_read_b32 v5, a160 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:16608 - v_accvgpr_read_b32 v5, a161 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17120 - v_accvgpr_read_b32 v5, a162 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:17632 - v_accvgpr_read_b32 v5, a163 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v4, v5 offset:18144 - v_or3_b32 v1, v1, 48, v2 - v_accvgpr_read_b32 v5, a156 - v_cvt_pk_bf16_f32 v5, v5, s0 - v_lshl_or_b32 v1, v1, 9, v3 - ds_write_b16 v1, v5 - v_accvgpr_read_b32 v5, a157 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:512 - v_accvgpr_read_b32 v5, a158 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1024 - v_accvgpr_read_b32 v5, a159 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1536 - v_accvgpr_read_b32 v5, a152 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:32 - v_accvgpr_read_b32 v5, a153 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:544 - v_accvgpr_read_b32 v5, a154 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1056 - v_accvgpr_read_b32 v5, a155 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1568 - v_accvgpr_read_b32 v5, a148 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:64 - v_accvgpr_read_b32 v5, a149 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:576 - v_accvgpr_read_b32 v5, a150 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1088 - v_accvgpr_read_b32 v5, a151 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1600 - v_accvgpr_read_b32 v5, a144 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:96 - v_accvgpr_read_b32 v5, a145 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:608 - v_accvgpr_read_b32 v5, a146 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1120 - v_accvgpr_read_b32 v5, a147 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1632 - v_accvgpr_read_b32 v5, a140 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:128 - v_accvgpr_read_b32 v5, a141 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:640 - v_accvgpr_read_b32 v5, a142 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1152 - v_accvgpr_read_b32 v5, a143 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1664 - v_accvgpr_read_b32 v5, a136 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:160 - v_accvgpr_read_b32 v5, a137 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:672 - v_accvgpr_read_b32 v5, a138 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1184 - v_accvgpr_read_b32 v5, a139 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1696 - v_accvgpr_read_b32 v5, a132 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:192 - v_accvgpr_read_b32 v5, a133 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:704 - v_accvgpr_read_b32 v5, a134 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1216 - v_accvgpr_read_b32 v5, a135 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1728 - v_accvgpr_read_b32 v5, a128 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:224 - v_accvgpr_read_b32 v5, a129 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:736 - v_accvgpr_read_b32 v5, a130 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1248 - v_accvgpr_read_b32 v5, a131 - v_cvt_pk_bf16_f32 v5, v5, s0 - ds_write_b16 v1, v5 offset:1760 - v_accvgpr_read_b32 v1, a124 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32768 - v_accvgpr_read_b32 v1, a125 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33280 - v_accvgpr_read_b32 v1, a126 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33792 - v_accvgpr_read_b32 v1, a127 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34304 - v_accvgpr_read_b32 v1, a120 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32800 - v_accvgpr_read_b32 v1, a121 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33312 - v_accvgpr_read_b32 v1, a122 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33824 - v_accvgpr_read_b32 v1, a123 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34336 - v_accvgpr_read_b32 v1, a116 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32832 - v_accvgpr_read_b32 v1, a117 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33344 - v_accvgpr_read_b32 v1, a118 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33856 - v_accvgpr_read_b32 v1, a119 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34368 - v_accvgpr_read_b32 v1, a112 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32864 - v_accvgpr_read_b32 v1, a113 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33376 - v_accvgpr_read_b32 v1, a114 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33888 - v_accvgpr_read_b32 v1, a115 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34400 - v_accvgpr_read_b32 v1, a108 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32896 - v_accvgpr_read_b32 v1, a109 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33408 - v_accvgpr_read_b32 v1, a110 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33920 - v_accvgpr_read_b32 v1, a111 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34432 - v_accvgpr_read_b32 v1, a104 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32928 - v_accvgpr_read_b32 v1, a105 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33440 - v_accvgpr_read_b32 v1, a106 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33952 - v_accvgpr_read_b32 v1, a107 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34464 - v_accvgpr_read_b32 v1, a100 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32960 - v_accvgpr_read_b32 v1, a101 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33472 - v_accvgpr_read_b32 v1, a102 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33984 - v_accvgpr_read_b32 v1, a103 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34496 - v_accvgpr_read_b32 v1, a96 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:32992 - v_accvgpr_read_b32 v1, a97 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:33504 - v_accvgpr_read_b32 v1, a98 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34016 - v_accvgpr_read_b32 v1, a99 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:34528 - v_accvgpr_read_b32 v1, a92 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:40960 - v_accvgpr_read_b32 v1, a93 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41472 - v_accvgpr_read_b32 v1, a94 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41984 - v_accvgpr_read_b32 v1, a95 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42496 - v_accvgpr_read_b32 v1, a88 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:40992 - v_accvgpr_read_b32 v1, a89 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41504 - v_accvgpr_read_b32 v1, a90 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42016 - v_accvgpr_read_b32 v1, a91 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42528 - v_accvgpr_read_b32 v1, a84 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41024 - v_accvgpr_read_b32 v1, a85 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41536 - v_accvgpr_read_b32 v1, a86 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42048 - v_accvgpr_read_b32 v1, a87 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42560 - v_accvgpr_read_b32 v1, a80 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41056 - v_accvgpr_read_b32 v1, a81 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41568 - v_accvgpr_read_b32 v1, a82 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42080 - v_accvgpr_read_b32 v1, a83 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42592 - v_accvgpr_read_b32 v1, a76 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41088 - v_accvgpr_read_b32 v1, a77 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41600 - v_accvgpr_read_b32 v1, a78 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42112 - v_accvgpr_read_b32 v1, a79 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42624 - v_accvgpr_read_b32 v1, a72 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41120 - v_accvgpr_read_b32 v1, a73 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41632 - v_accvgpr_read_b32 v1, a74 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42144 - v_accvgpr_read_b32 v1, a75 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42656 - v_accvgpr_read_b32 v1, a68 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41152 - v_accvgpr_read_b32 v1, a69 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41664 - v_accvgpr_read_b32 v1, a70 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42176 - v_accvgpr_read_b32 v1, a71 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42688 - v_accvgpr_read_b32 v1, a64 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41184 - v_accvgpr_read_b32 v1, a65 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:41696 - v_accvgpr_read_b32 v1, a66 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42208 - v_accvgpr_read_b32 v1, a67 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:42720 - v_accvgpr_read_b32 v1, a60 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49152 - v_accvgpr_read_b32 v1, a61 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49664 - v_accvgpr_read_b32 v1, a62 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50176 - v_accvgpr_read_b32 v1, a63 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50688 - v_accvgpr_read_b32 v1, a56 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49184 - v_accvgpr_read_b32 v1, a57 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49696 - v_accvgpr_read_b32 v1, a58 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50208 - v_accvgpr_read_b32 v1, a59 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50720 - v_accvgpr_read_b32 v1, a52 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49216 - v_accvgpr_read_b32 v1, a53 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49728 - v_accvgpr_read_b32 v1, a54 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50240 - v_accvgpr_read_b32 v1, a55 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50752 - v_accvgpr_read_b32 v1, a48 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49248 - v_accvgpr_read_b32 v1, a49 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49760 - v_accvgpr_read_b32 v1, a50 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50272 - v_accvgpr_read_b32 v1, a51 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50784 - v_accvgpr_read_b32 v1, a44 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49280 - v_accvgpr_read_b32 v1, a45 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49792 - v_accvgpr_read_b32 v1, a46 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50304 - v_accvgpr_read_b32 v1, a47 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50816 - v_accvgpr_read_b32 v1, a40 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49312 - v_accvgpr_read_b32 v1, a41 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49824 - v_accvgpr_read_b32 v1, a42 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50336 - v_accvgpr_read_b32 v1, a43 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50848 - v_accvgpr_read_b32 v1, a36 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49344 - v_accvgpr_read_b32 v1, a37 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49856 - v_accvgpr_read_b32 v1, a38 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50368 - v_accvgpr_read_b32 v1, a39 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50880 - v_accvgpr_read_b32 v1, a32 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49376 - v_accvgpr_read_b32 v1, a33 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:49888 - v_accvgpr_read_b32 v1, a34 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50400 - v_accvgpr_read_b32 v1, a35 - v_cvt_pk_bf16_f32 v1, v1, s0 - ds_write_b16 v4, v1 offset:50912 - v_or_b32_e32 v1, v2, v66 - v_accvgpr_read_b32 v2, a28 - v_cvt_pk_bf16_f32 v2, v2, s0 - v_lshl_or_b32 v1, v1, 9, v3 - ds_write_b16 v1, v2 - v_accvgpr_read_b32 v2, a29 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:512 - v_accvgpr_read_b32 v2, a30 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1024 - v_accvgpr_read_b32 v2, a31 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1536 - v_accvgpr_read_b32 v2, a24 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:32 - v_accvgpr_read_b32 v2, a25 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:544 - v_accvgpr_read_b32 v2, a26 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1056 - v_accvgpr_read_b32 v2, a27 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1568 - v_accvgpr_read_b32 v2, a20 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:64 - v_accvgpr_read_b32 v2, a21 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:576 - v_accvgpr_read_b32 v2, a22 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1088 - v_accvgpr_read_b32 v2, a23 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1600 - v_accvgpr_read_b32 v2, a16 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:96 - v_accvgpr_read_b32 v2, a17 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:608 - v_accvgpr_read_b32 v2, a18 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1120 - v_accvgpr_read_b32 v2, a19 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1632 - v_accvgpr_read_b32 v2, a12 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:128 - v_accvgpr_read_b32 v2, a13 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:640 - v_accvgpr_read_b32 v2, a14 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1152 - v_accvgpr_read_b32 v2, a15 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1664 - v_accvgpr_read_b32 v2, a8 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:160 - v_accvgpr_read_b32 v2, a9 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:672 - v_accvgpr_read_b32 v2, a10 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1184 - v_accvgpr_read_b32 v2, a11 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1696 - v_accvgpr_read_b32 v2, a4 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:192 - v_accvgpr_read_b32 v2, a5 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:704 - v_accvgpr_read_b32 v2, a6 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1216 - v_accvgpr_read_b32 v2, a7 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1728 - v_accvgpr_read_b32 v2, a0 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:224 - v_accvgpr_read_b32 v2, a1 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:736 - v_accvgpr_read_b32 v2, a2 - v_cvt_pk_bf16_f32 v2, v2, s0 - ds_write_b16 v1, v2 offset:1248 - v_accvgpr_read_b32 v2, a3 - v_cvt_pk_bf16_f32 v2, v2, s0 - v_lshrrev_b32_e32 v4, 5, v0 - ds_write_b16 v1, v2 offset:1760 - v_or_b32_e32 v2, s20, v4 - v_mov_b32_e32 v3, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[2:3] - v_lshlrev_b32_e32 v3, 3, v0 - s_waitcnt lgkmcnt(0) - s_barrier - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_4 - v_and_b32_e32 v0, 0xf8, v3 - v_lshlrev_b32_e32 v1, 1, v0 - v_lshl_or_b32 v1, v4, 9, v1 - ds_read_b128 v[6:9], v1 - v_or_b32_e32 v0, s18, v0 - v_lshlrev_b32_e32 v1, 14, v2 - v_lshl_add_u32 v0, v0, 1, v1 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_4: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_6 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_6: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 16, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_8 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_8: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 24, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_10 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_10: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 32, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_12 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_12: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 40, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_14 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_14: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 48, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_16 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_16: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 56, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_18 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_18: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 64, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_20 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_20: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x48, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_22 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_22: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x50, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_24 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_24: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x58, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_26 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_26: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x60, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_28 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_28: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x68, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_30 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_30: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x70, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_32 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_32: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x78, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_34 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_34: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x80, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_36 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_36: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x88, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_38 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_38: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x90, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_40 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_40: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0x98, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_42 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_42: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xa0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_44 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_44: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xa8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_46 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_46: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xb0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_48 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_48: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xb8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_50 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_50: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xc0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_52 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_52: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xc8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_54 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_54: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xd0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_56 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_56: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xd8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_58 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_58: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xe0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_60 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_60: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xe8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_62 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_62: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xf0, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_64 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v5, 1, v1 - v_lshl_or_b32 v2, v2, 9, v5 - ds_read_b128 v[6:9], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[6:9], v0, s[0:3], 0 offen -.LBB0_64: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v2, 0xf8, v4 - v_or_b32_e32 v0, s20, v2 - v_mov_b32_e32 v1, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v[0:1] - s_and_saveexec_b64 s[4:5], vcc - s_cbranch_execz .LBB0_66 - v_and_b32_e32 v1, 0xf8, v3 - v_lshlrev_b32_e32 v3, 1, v1 - v_lshl_or_b32 v2, v2, 9, v3 - ds_read_b128 v[2:5], v2 - v_or_b32_e32 v1, s18, v1 - v_lshlrev_b32_e32 v0, 14, v0 - v_lshl_add_u32 v0, v1, 1, v0 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v[2:5], v0, s[0:3], 0 offen -.LBB0_66: - s_endpgm - .section .rodata,"a",@progbits - .p2align 6, 0x0 - .amdhsa_kernel hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .amdhsa_group_segment_fixed_size 131072 - .amdhsa_private_segment_fixed_size 0 - .amdhsa_kernarg_size 132 - .amdhsa_user_sgpr_count 2 - .amdhsa_user_sgpr_dispatch_ptr 0 - .amdhsa_user_sgpr_queue_ptr 0 - .amdhsa_user_sgpr_kernarg_segment_ptr 1 - .amdhsa_user_sgpr_dispatch_id 0 - .amdhsa_user_sgpr_kernarg_preload_length 0 - .amdhsa_user_sgpr_kernarg_preload_offset 0 - .amdhsa_user_sgpr_private_segment_size 0 - .amdhsa_uses_dynamic_stack 0 - .amdhsa_enable_private_segment 0 - .amdhsa_system_sgpr_workgroup_id_x 1 - .amdhsa_system_sgpr_workgroup_id_y 1 - .amdhsa_system_sgpr_workgroup_id_z 0 - .amdhsa_system_sgpr_workgroup_info 0 - .amdhsa_system_vgpr_workitem_id 0 - .amdhsa_next_free_vgpr 432 - .amdhsa_next_free_sgpr 96 - .amdhsa_accum_offset 176 - .amdhsa_reserve_vcc 1 - .amdhsa_float_round_mode_32 0 - .amdhsa_float_round_mode_16_64 0 - .amdhsa_float_denorm_mode_32 3 - .amdhsa_float_denorm_mode_16_64 3 - .amdhsa_dx10_clamp 1 - .amdhsa_ieee_mode 1 - .amdhsa_fp16_overflow 0 - .amdhsa_tg_split 0 - .amdhsa_exception_fp_ieee_invalid_op 0 - .amdhsa_exception_fp_denorm_src 0 - .amdhsa_exception_fp_ieee_div_zero 0 - .amdhsa_exception_fp_ieee_overflow 0 - .amdhsa_exception_fp_ieee_underflow 0 - .amdhsa_exception_fp_ieee_inexact 0 - .amdhsa_exception_int_div_zero 0 - .end_amdhsa_kernel - .text -.Lfunc_end0: - .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 - .p2alignl 6, 3212836864 - .fill 256, 4, 3212836864 - .section .AMDGPU.gpr_maximums,"",@progbits - .set amdgpu.max_num_vgpr, 0 - .set amdgpu.max_num_agpr, 0 - .set amdgpu.max_num_sgpr, 0 - .set amdgpu.max_num_named_barrier, 0 - .text - .section ".note.GNU-stack","",@progbits - .amdgpu_metadata ---- -amdhsa.kernels: - - .agpr_count: 256 - .args: - - .address_space: global - .offset: 0 - .size: 8 - .value_kind: global_buffer - - .offset: 8 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 24 - .size: 8 - .value_kind: global_buffer - - .offset: 32 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 48 - .size: 8 - .value_kind: global_buffer - - .offset: 56 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 72 - .size: 8 - .value_kind: global_buffer - - .offset: 80 - .size: 16 - .value_kind: by_value - - .offset: 96 - .size: 4 - .value_kind: by_value - - .address_space: global - .offset: 104 - .size: 8 - .value_kind: global_buffer - - .offset: 112 - .size: 4 - .value_kind: by_value - - .address_space: global - .offset: 120 - .size: 8 - .value_kind: global_buffer - - .offset: 128 - .size: 4 - .value_kind: by_value - .group_segment_fixed_size: 131072 - .kernarg_segment_align: 8 - .kernarg_segment_size: 132 - .max_flat_workgroup_size: 256 - .name: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .private_segment_fixed_size: 0 - .reqd_workgroup_size: - - 256 - - 1 - - 1 - .sgpr_count: 45 - .sgpr_spill_count: 0 - .symbol: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.kd - .uniform_work_group_size: 1 - .uses_dynamic_stack: false - .vgpr_count: 432 - .vgpr_spill_count: 0 - .wavefront_size: 64 -amdhsa.target: amdgcn-amd-amdhsa--gfx950 -amdhsa.version: - - 1 - - 2 -... - - .end_amdgpu_metadata diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt deleted file mode 100644 index fb0b7f9bf..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_hotloop.txt +++ /dev/null @@ -1,184 +0,0 @@ -Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s) -Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier -Per loop: M=128 r=32 L=16 B=2 -============================================================ -M v_mfma_f32_16x16x32_bf16 a[252:255] -L buffer_load_dwordx4 v071 -r ds_read_b128 v082 v083 v084 v085 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v086 v087 v088 v089 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v073 -r ds_read_b128 v090 v091 v092 v093 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v110 v111 v112 v113 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -M v_mfma_f32_16x16x32_bf16 a[188:191] -L buffer_load_dwordx4 v075 -r ds_read_b128 v114 v115 v116 v117 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v118 v119 v120 v121 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -L buffer_load_dwordx4 v077 -r ds_read_b128 v122 v123 v124 v125 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v126 v127 v128 v129 -M v_mfma_f32_16x16x32_bf16 a[136:139] -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -L buffer_load_dwordx4 v079 -r ds_read_b128 v130 v131 v132 v133 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -r ds_read_b128 v134 v135 v136 v137 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -L buffer_load_dwordx4 v081 -r ds_read_b128 v138 v139 v140 v141 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v142 v143 v144 v145 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -L buffer_load_dwordx4 v109 -r ds_read_b128 v146 v147 v148 v149 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v150 v151 v152 v153 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -L buffer_load_dwordx4 v154 -r ds_read_b128 v154 v155 v156 v157 -M v_mfma_f32_16x16x32_bf16 a[24:27] -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v158 v159 v160 v161 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 0) -------- -M v_mfma_f32_16x16x32_bf16 a[252:255] -L buffer_load_dwordx4 v162 -r ds_read_b128 v050 v051 v052 v053 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v042 v043 v044 v045 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v163 -r ds_read_b128 v034 v035 v036 v037 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v026 v027 v028 v029 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -M v_mfma_f32_16x16x32_bf16 a[188:191] -L buffer_load_dwordx4 v164 -r ds_read_b128 v014 v015 v016 v017 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v010 v011 v012 v013 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -L buffer_load_dwordx4 v165 -r ds_read_b128 v006 v007 v008 v009 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v002 v003 v004 v005 -M v_mfma_f32_16x16x32_bf16 a[136:139] -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -L buffer_load_dwordx4 v166 -r ds_read_b128 v018 v019 v020 v021 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -r ds_read_b128 v022 v023 v024 v025 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -L buffer_load_dwordx4 v167 -r ds_read_b128 v030 v031 v032 v033 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v038 v039 v040 v041 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -L buffer_load_dwordx4 v168 -r ds_read_b128 v046 v047 v048 v049 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v054 v055 v056 v057 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -L buffer_load_dwordx4 v169 -r ds_read_b128 v058 v059 v060 v061 -M v_mfma_f32_16x16x32_bf16 a[24:27] -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v062 v063 v064 v065 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 1) -------- -============================================================ -stream: MLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s deleted file mode 100644 index 3e94db9de..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_1117tflops_pure.s +++ /dev/null @@ -1,2359 +0,0 @@ - .amdgcn_target "amdgcn-amd-amdhsa--gfx950" - .amdhsa_code_object_version 6 - .text - .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .p2align 8 - .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function -hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: - s_load_dword s12, s[0:1], 0x60 - s_load_dwordx2 s[4:5], s[0:1], 0x18 - s_load_dwordx2 s[8:9], s[0:1], 0x30 - s_ashr_i32 s14, s2, 31 - s_lshr_b32 s14, s14, 27 - s_add_i32 s14, s2, s14 - s_waitcnt lgkmcnt(0) - s_ashr_i32 s13, s12, 31 - s_and_b32 s5, s5, 0xffff - s_and_b32 s9, s9, 0xffff - s_ashr_i32 s18, s14, 5 - s_and_b32 s19, s14, 0xffffffe0 - s_cmp_lg_u32 s2, s19 - s_cselect_b64 s[14:15], -1, 0 - s_cmp_lt_i32 s2, 0 - s_cselect_b64 s[16:17], -1, 0 - s_and_b64 s[14:15], s[16:17], s[14:15] - v_lshrrev_b32_e32 v002, 6, v000 - s_subb_u32 s14, s18, 0 - s_lshl_b32 s20, s14, 8 - v_readfirstlane_b32 s14, v002 - v_lshrrev_b32_e32 v109, 2, v000 - s_sub_i32 s15, s2, s19 - s_lshl_b32 s21, s14, 10 - v_xor_b32_e32 v002, v109, v000 - s_lshl_b32 s2, s3, 14 - s_ashr_i32 s19, s20, 31 - s_lshl_b32 s18, s15, 8 - v_lshlrev_b32_e32 v002, 3, v002 - s_add_i32 s25, s21, 0x10000 - v_and_b32_e32 v097, 24, v002 - v_or_b32_e32 v002, s18, v109 - s_cmpk_lt_u32 s18, 0x2000 - v_lshlrev_b32_e32 v002, 14, v002 - s_cselect_b64 vcc, -1, 0 - v_or_b32_e32 v111, s2, v097 - v_cndmask_b32_e32 v098, 0, v002, vcc - s_mov_b32 s7, 0x27000 - s_mov_b32 s6, -1 - v_add_lshl_u32 v002, v111, v098, 1 - v_or_b32_e32 v004, 64, v109 - s_mov_b32 s10, s6 - s_mov_b32 s11, s7 - s_mov_b32 m0, s25 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v004 - v_lshlrev_b32_e32 v002, 14, v002 - v_cndmask_b32_e32 v100, 0, v002, vcc - v_add_lshl_u32 v002, v111, v100, 1 - v_or_b32_e32 v005, 0x80, v109 - s_add_i32 s24, s21, 0x11000 - s_mov_b32 m0, s24 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v005 - v_lshlrev_b32_e32 v002, 14, v002 - v_cndmask_b32_e32 v101, 0, v002, vcc - v_add_lshl_u32 v002, v111, v101, 1 - v_or_b32_e32 v006, 0xc0, v109 - s_add_i32 s23, s21, 0x12000 - s_mov_b32 m0, s23 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v006 - v_lshlrev_b32_e32 v002, 14, v002 - v_cndmask_b32_e32 v102, 0, v002, vcc - v_add_lshl_u32 v002, v111, v102, 1 - v_or_b32_e32 v007, 32, v111 - s_add_i32 s17, s21, 0x13000 - s_mov_b32 m0, s17 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v007, v098, 1 - s_add_i32 s14, s21, 0x14000 - s_mov_b32 m0, s14 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v007, v100, 1 - s_add_i32 s14, s21, 0x15000 - s_mov_b32 m0, s14 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v007, v101, 1 - s_add_i32 s14, s21, 0x16000 - s_mov_b32 m0, s14 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v007, v102, 1 - s_add_i32 s14, s21, 0x17000 - s_mov_b32 m0, s14 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v002, s20, v109 - v_mov_b32_e32 v003, s19 - v_lshlrev_b32_e32 v008, 14, v002 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 - s_add_i32 s16, s21, 0x1000 - s_add_i32 s15, s21, 0x2000 - v_cndmask_b32_e32 v103, 0, v008, vcc - v_add_lshl_u32 v002, v103, v111, 1 - s_mov_b32 m0, s21 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s20, v004 - v_lshlrev_b32_e32 v004, 14, v002 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 - s_add_i32 s14, s21, 0x3000 - s_add_i32 s27, s21, 0x4000 - v_cndmask_b32_e32 v104, 0, v004, vcc - v_add_lshl_u32 v002, v104, v111, 1 - s_mov_b32 m0, s16 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s20, v005 - v_lshlrev_b32_e32 v004, 14, v002 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 - v_and_b32_e32 v001, 0x80, v000 - v_lshlrev_b32_e32 v034, 1, v000 - v_cndmask_b32_e32 v105, 0, v004, vcc - v_add_lshl_u32 v002, v105, v111, 1 - s_mov_b32 m0, s15 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s20, v006 - v_lshlrev_b32_e32 v004, 14, v002 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 - v_and_b32_e32 v035, 15, v000 - v_lshrrev_b32_e32 v094, 4, v000 - v_cndmask_b32_e32 v106, 0, v004, vcc - v_add_lshl_u32 v002, v106, v111, 1 - s_mov_b32 m0, s14 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v103, v007, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v104, v007, 1 - s_add_i32 s27, s21, 0x5000 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v105, v007, 1 - s_add_i32 s27, s21, 0x6000 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v106, v007, 1 - s_add_i32 s27, s21, 0x7000 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, 64, v111 - s_add_i32 s27, s21, 0x18000 - v_add_lshl_u32 v003, v002, v098, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - s_add_i32 s27, s21, 0x19000 - v_add_lshl_u32 v003, v002, v100, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - s_add_i32 s27, s21, 0x1a000 - v_add_lshl_u32 v003, v002, v101, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - s_add_i32 s27, s21, 0x1b000 - v_add_lshl_u32 v003, v002, v102, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - s_add_i32 s27, s21, 0x8000 - v_add_lshl_u32 v003, v103, v002, 1 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - s_add_i32 s27, s21, 0x9000 - v_add_lshl_u32 v003, v104, v002, 1 - s_mov_b32 s22, 0x10000 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - s_add_i32 s27, s21, 0xa000 - v_add_lshl_u32 v003, v105, v002, 1 - v_add_lshl_u32 v002, v106, v002, 1 - s_movk_i32 s26, 0x80 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - s_add_i32 s27, s21, 0xb000 - s_mov_b32 m0, s27 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_xor_b32_e32 v002, v094, v000 - v_lshlrev_b32_e32 v002, 4, v002 - v_and_b32_e32 v096, 48, v002 - v_lshlrev_b32_e32 v002, 5, v000 - v_and_b32_e32 v002, 0x11e0, v002 - v_lshlrev_b32_e32 v108, 1, v002 - v_or3_b32 v006, v001, v035, 16 - v_and_or_b32 v095, v034, s26, v035 - v_mov_b32_e32 v034, 0x10000 - v_or_b32_e32 v144, v108, v096 - v_lshlrev_b32_e32 v107, 6, v006 - v_lshl_or_b32 v099, v095, 6, v034 - s_waitcnt vmcnt(0) - s_barrier - ds_read_b128 v002 v003 v004 v005, v144 - v_or_b32_e32 v145, v107, v096 - v_or_b32_e32 v146, v099, v096 - v_or_b32_e32 v090, 0x60, v111 - v_lshlrev_b32_e32 v110, 5, v006 - ds_read_b128 v006 v007 v008 v009, v145 - ds_read_b128 v010 v011 v012 v013, v145 offset:1024 - ds_read_b128 v014 v015 v016 v017, v145 offset:2048 - ds_read_b128 v018 v019 v020 v021, v145 offset:3072 - ds_read_b128 v022 v023 v024 v025, v145 offset:4096 - ds_read_b128 v026 v027 v028 v029, v145 offset:5120 - ds_read_b128 v030 v031 v032 v033, v145 offset:6144 - ds_read_b128 v034 v035 v036 v037, v146 - ds_read_b128 v038 v039 v040 v041, v146 offset:1024 - ds_read_b128 v042 v043 v044 v045, v146 offset:2048 - ds_read_b128 v050 v051 v052 v053, v146 offset:3072 - ds_read_b128 v054 v055 v056 v057, v146 offset:4096 - ds_read_b128 v112 v113 v114 v115, v146 offset:5120 - ds_read_b128 v116 v117 v118 v119, v146 offset:6144 - ds_read_b128 v120 v121 v122 v123, v146 offset:7168 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0x1c000 - v_add_lshl_u32 v046, v090, v098, 1 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v046, s[8:11], 0 offen sc0 lds - ds_read_b128 v124 v125 v126 v127, v144 offset:16384 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v038 v039 v040 v041, 0 - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v042 v043 v044 v045, 0 - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v050 v051 v052 v053, 0 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v054 v055 v056 v057, 0 - ds_read_b128 v128 v129 v130 v131, v145 offset:16384 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v112 v113 v114 v115, 0 - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v116 v117 v118 v119, 0 - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v120 v121 v122 v123, 0 - v_add_lshl_u32 v002, v090, v100, 1 - v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0x1d000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - ds_read_b128 v002 v003 v004 v005, v145 offset:17408 - v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v054 v055 v056 v057, 0 - ds_read_b128 v132 v133 v134 v135, v145 offset:18432 - v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v120 v121 v122 v123, 0 - v_add_lshl_u32 v006, v090, v101, 1 - v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0x1e000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v090, v102, 1 - ds_read_b128 v136 v137 v138 v139, v145 offset:19456 - v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v054 v055 v056 v057, 0 - ds_read_b128 v046 v047 v048 v049, v145 offset:20480 - v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v120 v121 v122 v123, 0 - v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0x1f000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v103, v090, 1 - ds_read_b128 v058 v059 v060 v061, v145 offset:21504 - v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v054 v055 v056 v057, 0 - ds_read_b128 v066 v067 v068 v069, v145 offset:22528 - v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v120 v121 v122 v123, 0 - v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0xc000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v104, v090, 1 - ds_read_b128 v070 v071 v072 v073, v146 offset:16384 - v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v054 v055 v056 v057, 0 - ds_read_b128 v062 v063 v064 v065, v146 offset:17408 - v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v120 v121 v122 v123, 0 - v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0xd000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v105, v090, 1 - ds_read_b128 v074 v075 v076 v077, v146 offset:18432 - v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v054 v055 v056 v057, 0 - ds_read_b128 v078 v079 v080 v081, v146 offset:19456 - v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v120 v121 v122 v123, 0 - v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0xe000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v106, v090, 1 - v_or_b32_e32 v111, 0x80, v111 - ds_read_b128 v082 v083 v084 v085, v146 offset:20480 - v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v054 v055 v056 v057, 0 - ds_read_b128 v086 v087 v088 v089, v146 offset:21504 - v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v120 v121 v122 v123, 0 - v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v034 v035 v036 v037, 0 - s_add_i32 s26, s21, 0xf000 - s_mov_b32 m0, s26 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v111, v098, 1 - ds_read_b128 v090 v091 v092 v093, v146 offset:22528 - v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v038 v039 v040 v041, 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v054 v055 v056 v057, 0 - ds_read_b128 v140 v141 v142 v143, v146 offset:23552 - v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v112 v113 v114 v115, 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v116 v117 v118 v119, 0 - v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v120 v121 v122 v123, 0 - s_waitcnt lgkmcnt(0) - s_barrier - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[252:255], v124 v125 v126 v127, v070 v071 v072 v073, a[252:255] - s_mov_b32 m0, s25 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v111, v100, 1 - ds_read_b128 v050 v051 v052 v053, v144 offset:32768 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[248:251], v124 v125 v126 v127, v062 v063 v064 v065, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v124 v125 v126 v127, v074 v075 v076 v077, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v124 v125 v126 v127, v078 v079 v080 v081, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v124 v125 v126 v127, v082 v083 v084 v085, a[236:239] - ds_read_b128 v042 v043 v044 v045, v145 offset:32768 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[232:235], v124 v125 v126 v127, v086 v087 v088 v089, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v124 v125 v126 v127, v090 v091 v092 v093, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v124 v125 v126 v127, v140 v141 v142 v143, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v128 v129 v130 v131, v070 v071 v072 v073, a[220:223] - s_mov_b32 m0, s24 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - ds_read_b128 v034 v035 v036 v037, v145 offset:33792 - v_mfma_f32_16x16x32_bf16 a[216:219], v128 v129 v130 v131, v062 v063 v064 v065, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v128 v129 v130 v131, v074 v075 v076 v077, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v128 v129 v130 v131, v078 v079 v080 v081, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v128 v129 v130 v131, v082 v083 v084 v085, a[204:207] - ds_read_b128 v026 v027 v028 v029, v145 offset:34816 - v_mfma_f32_16x16x32_bf16 a[200:203], v128 v129 v130 v131, v086 v087 v088 v089, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v128 v129 v130 v131, v090 v091 v092 v093, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v128 v129 v130 v131, v140 v141 v142 v143, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v070 v071 v072 v073, a[188:191] - v_add_lshl_u32 v006, v111, v101, 1 - s_mov_b32 m0, s23 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - ds_read_b128 v014 v015 v016 v017, v145 offset:35840 - v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v062 v063 v064 v065, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] - ds_read_b128 v010 v011 v012 v013, v145 offset:36864 - v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v140 v141 v142 v143, a[160:163] - v_add_lshl_u32 v002, v111, v102, 1 - v_add_lshl_u32 v018, v103, v111, 1 - v_add_lshl_u32 v030, v104, v111, 1 - v_mfma_f32_16x16x32_bf16 a[156:159], v132 v133 v134 v135, v070 v071 v072 v073, a[156:159] - s_mov_b32 m0, s17 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - ds_read_b128 v006 v007 v008 v009, v145 offset:37888 - v_mfma_f32_16x16x32_bf16 a[152:155], v132 v133 v134 v135, v062 v063 v064 v065, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v132 v133 v134 v135, v074 v075 v076 v077, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v132 v133 v134 v135, v078 v079 v080 v081, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v132 v133 v134 v135, v082 v083 v084 v085, a[140:143] - ds_read_b128 v002 v003 v004 v005, v145 offset:38912 - v_mfma_f32_16x16x32_bf16 a[136:139], v132 v133 v134 v135, v086 v087 v088 v089, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v132 v133 v134 v135, v090 v091 v092 v093, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v132 v133 v134 v135, v140 v141 v142 v143, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v136 v137 v138 v139, v070 v071 v072 v073, a[124:127] - s_mov_b32 m0, s21 - buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds - ds_read_b128 v018 v019 v020 v021, v146 offset:32768 - v_mfma_f32_16x16x32_bf16 a[120:123], v136 v137 v138 v139, v062 v063 v064 v065, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v136 v137 v138 v139, v074 v075 v076 v077, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v136 v137 v138 v139, v078 v079 v080 v081, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v136 v137 v138 v139, v082 v083 v084 v085, a[108:111] - ds_read_b128 v022 v023 v024 v025, v146 offset:33792 - v_mfma_f32_16x16x32_bf16 a[104:107], v136 v137 v138 v139, v086 v087 v088 v089, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v136 v137 v138 v139, v090 v091 v092 v093, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v136 v137 v138 v139, v140 v141 v142 v143, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v070 v071 v072 v073, a[92:95] - s_mov_b32 m0, s16 - buffer_load_dwordx4 v030, s[4:7], 0 offen sc0 lds - ds_read_b128 v030 v031 v032 v033, v146 offset:34816 - v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v062 v063 v064 v065, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v074 v075 v076 v077, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v078 v079 v080 v081, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v082 v083 v084 v085, a[76:79] - ds_read_b128 v038 v039 v040 v041, v146 offset:35840 - v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v086 v087 v088 v089, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v090 v091 v092 v093, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v140 v141 v142 v143, a[64:67] - v_add_lshl_u32 v046, v105, v111, 1 - v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v070 v071 v072 v073, a[60:63] - s_mov_b32 m0, s15 - buffer_load_dwordx4 v046, s[4:7], 0 offen sc0 lds - ds_read_b128 v046 v047 v048 v049, v146 offset:36864 - v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v062 v063 v064 v065, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] - ds_read_b128 v054 v055 v056 v057, v146 offset:37888 - v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v140 v141 v142 v143, a[32:35] - v_add_lshl_u32 v058, v106, v111, 1 - v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v070 v071 v072 v073, a[28:31] - s_mov_b32 m0, s14 - buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds - ds_read_b128 v058 v059 v060 v061, v146 offset:38912 - v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v062 v063 v064 v065, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] - ds_read_b128 v062 v063 v064 v065, v146 offset:39936 - v_lshlrev_b32_e32 v071, 5, v095 - v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v140 v141 v142 v143, a[0:3] - v_bitop3_b32 v066, v109, 3, v000 bitop3:0x48 - v_lshlrev_b32_e32 v066, 4, v066 - s_or_b32 s23, s2, 0x3fc0 - s_or_b32 s24, s2, 0xc0 - v_lshl_or_b32 v067, s3, 15, v066 - s_movk_i32 s2, 0x8100 - v_lshl_add_u32 v066, v102, 1, v067 - v_lshl_add_u32 v068, v106, 1, v067 - v_lshl_add_u32 v070, v101, 1, v067 - v_lshl_add_u32 v072, v105, 1, v067 - v_lshl_add_u32 v074, v100, 1, v067 - v_lshl_add_u32 v076, v104, 1, v067 - v_lshl_add_u32 v078, v103, 1, v067 - v_lshl_add_u32 v080, v098, 1, v067 - s_mov_b64 s[14:15], 1 - s_mov_b32 s3, -1 - v_lshlrev_b32_e32 v067, 1, v110 - v_lshlrev_b32_e32 v069, 1, v071 - s_waitcnt vmcnt(16) - s_barrier -.LBB0_1: - s_mov_b64 s[16:17], s[14:15] - s_min_i32 s15, s24, s23 - v_add_u32_e32 v082, s2, v072 - v_add_u32_e32 v083, s2, v068 - s_xor_b32 s14, s16, 1 - s_lshl_b32 s16, s16, 15 - v_add_u32_e32 v109, 0x8040, v082 - v_add_u32_e32 v154, 0x8040, v083 - v_or_b32_e32 v082, s15, v097 - s_lshl_b32 s17, s14, 15 - v_or_b32_e32 v083, s16, v096 - v_add_u32_e32 v071, s2, v080 - v_add_u32_e32 v073, s2, v074 - v_add_u32_e32 v075, s2, v070 - v_add_u32_e32 v077, s2, v066 - v_add_u32_e32 v079, s2, v078 - v_add_u32_e32 v081, s2, v076 - s_add_i32 s15, s16, s21 - v_add_lshl_u32 v162, v082, v098, 1 - v_add_lshl_u32 v163, v082, v100, 1 - v_add_lshl_u32 v164, v082, v101, 1 - v_add_lshl_u32 v165, v082, v102, 1 - v_add_lshl_u32 v166, v082, v103, 1 - v_add_lshl_u32 v167, v082, v104, 1 - v_add_lshl_u32 v168, v082, v105, 1 - v_add_lshl_u32 v169, v082, v106, 1 - s_add_i32 s16, s21, s17 - v_add_u32_e32 v082, v083, v108 - v_add_u32_e32 v126, v083, v067 - v_add3_u32 v158, v083, v069, s22 - v_or_b32_e32 v083, s17, v096 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[252:255], v050 v051 v052 v053, v018 v019 v020 v021, a[252:255] - v_add_u32_e32 v071, 0x8040, v071 - v_add_u32_e32 v073, 0x8040, v073 - v_add_u32_e32 v075, 0x8040, v075 - v_add_u32_e32 v077, 0x8040, v077 - v_add_u32_e32 v079, 0x8040, v079 - v_add_u32_e32 v081, 0x8040, v081 - s_add_i32 s31, s16, 0x4000 - s_add_i32 s33, s16, 0x14000 - s_add_i32 s34, s16, 0x5000 - s_add_i32 s35, s16, 0x15000 - s_add_i32 s36, s16, 0x6000 - s_add_i32 s37, s16, 0x16000 - s_add_i32 s38, s16, 0x7000 - s_add_i32 s16, s16, 0x17000 - v_add_u32_e32 v170, v083, v108 - v_add_u32_e32 v171, v083, v067 - v_add3_u32 v172, v083, v069, s22 - s_mov_b32 m0, s33 - buffer_load_dwordx4 v071, s[8:11], 0 offen sc0 lds - ds_read_b128 v082 v083 v084 v085, v082 offset:16384 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[248:251], v050 v051 v052 v053, v022 v023 v024 v025, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v050 v051 v052 v053, v030 v031 v032 v033, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v050 v051 v052 v053, v038 v039 v040 v041, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v050 v051 v052 v053, v046 v047 v048 v049, a[236:239] - ds_read_b128 v086 v087 v088 v089, v126 offset:16384 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[232:235], v050 v051 v052 v053, v054 v055 v056 v057, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v050 v051 v052 v053, v058 v059 v060 v061, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v050 v051 v052 v053, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] - s_mov_b32 m0, s35 - buffer_load_dwordx4 v073, s[8:11], 0 offen sc0 lds - ds_read_b128 v090 v091 v092 v093, v126 offset:17408 - v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] - ds_read_b128 v110 v111 v112 v113, v126 offset:18432 - v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v054 v055 v056 v057, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] - s_mov_b32 m0, s37 - buffer_load_dwordx4 v075, s[8:11], 0 offen sc0 lds - ds_read_b128 v114 v115 v116 v117, v126 offset:19456 - v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] - ds_read_b128 v118 v119 v120 v121, v126 offset:20480 - v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v054 v055 v056 v057, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] - s_mov_b32 m0, s16 - buffer_load_dwordx4 v077, s[8:11], 0 offen sc0 lds - ds_read_b128 v122 v123 v124 v125, v126 offset:21504 - v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] - ds_read_b128 v126 v127 v128 v129, v126 offset:22528 - v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v054 v055 v056 v057, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - s_mov_b32 m0, s31 - buffer_load_dwordx4 v079, s[4:7], 0 offen sc0 lds - ds_read_b128 v130 v131 v132 v133, v158 offset:16384 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] - ds_read_b128 v134 v135 v136 v137, v158 offset:17408 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - s_mov_b32 m0, s34 - buffer_load_dwordx4 v081, s[4:7], 0 offen sc0 lds - ds_read_b128 v138 v139 v140 v141, v158 offset:18432 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] - ds_read_b128 v142 v143 v144 v145, v158 offset:19456 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - s_mov_b32 m0, s36 - buffer_load_dwordx4 v109, s[4:7], 0 offen sc0 lds - ds_read_b128 v146 v147 v148 v149, v158 offset:20480 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] - ds_read_b128 v150 v151 v152 v153, v158 offset:21504 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - s_mov_b32 m0, s38 - buffer_load_dwordx4 v154, s[4:7], 0 offen sc0 lds - ds_read_b128 v154 v155 v156 v157, v158 offset:22528 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] - s_add_i32 s25, s15, 0x10000 - s_add_i32 s17, s15, 0x11000 - s_add_i32 s26, s15, 0x12000 - s_add_i32 s27, s15, 0x13000 - s_add_i32 s28, s15, 0x1000 - s_add_i32 s29, s15, 0x2000 - s_add_i32 s30, s15, 0x3000 - ds_read_b128 v158 v159 v160 v161, v158 offset:23552 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - s_waitcnt lgkmcnt(0) - s_barrier - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[252:255], v082 v083 v084 v085, v130 v131 v132 v133, a[252:255] - s_mov_b32 m0, s25 - buffer_load_dwordx4 v162, s[8:11], 0 offen sc0 lds - ds_read_b128 v050 v051 v052 v053, v170 - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[248:251], v082 v083 v084 v085, v134 v135 v136 v137, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v082 v083 v084 v085, v138 v139 v140 v141, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v082 v083 v084 v085, v142 v143 v144 v145, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v082 v083 v084 v085, v146 v147 v148 v149, a[236:239] - ds_read_b128 v042 v043 v044 v045, v171 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[232:235], v082 v083 v084 v085, v150 v151 v152 v153, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v082 v083 v084 v085, v154 v155 v156 v157, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v082 v083 v084 v085, v158 v159 v160 v161, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v086 v087 v088 v089, v130 v131 v132 v133, a[220:223] - s_mov_b32 m0, s17 - buffer_load_dwordx4 v163, s[8:11], 0 offen sc0 lds - ds_read_b128 v034 v035 v036 v037, v171 offset:1024 - v_mfma_f32_16x16x32_bf16 a[216:219], v086 v087 v088 v089, v134 v135 v136 v137, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v086 v087 v088 v089, v138 v139 v140 v141, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v086 v087 v088 v089, v142 v143 v144 v145, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v086 v087 v088 v089, v146 v147 v148 v149, a[204:207] - ds_read_b128 v026 v027 v028 v029, v171 offset:2048 - v_mfma_f32_16x16x32_bf16 a[200:203], v086 v087 v088 v089, v150 v151 v152 v153, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v086 v087 v088 v089, v154 v155 v156 v157, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v086 v087 v088 v089, v158 v159 v160 v161, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v090 v091 v092 v093, v130 v131 v132 v133, a[188:191] - s_mov_b32 m0, s26 - buffer_load_dwordx4 v164, s[8:11], 0 offen sc0 lds - ds_read_b128 v014 v015 v016 v017, v171 offset:3072 - v_mfma_f32_16x16x32_bf16 a[184:187], v090 v091 v092 v093, v134 v135 v136 v137, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v090 v091 v092 v093, v138 v139 v140 v141, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v090 v091 v092 v093, v142 v143 v144 v145, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v090 v091 v092 v093, v146 v147 v148 v149, a[172:175] - ds_read_b128 v010 v011 v012 v013, v171 offset:4096 - v_mfma_f32_16x16x32_bf16 a[168:171], v090 v091 v092 v093, v150 v151 v152 v153, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v090 v091 v092 v093, v154 v155 v156 v157, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v090 v091 v092 v093, v158 v159 v160 v161, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v110 v111 v112 v113, v130 v131 v132 v133, a[156:159] - s_mov_b32 m0, s27 - buffer_load_dwordx4 v165, s[8:11], 0 offen sc0 lds - ds_read_b128 v006 v007 v008 v009, v171 offset:5120 - v_mfma_f32_16x16x32_bf16 a[152:155], v110 v111 v112 v113, v134 v135 v136 v137, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v110 v111 v112 v113, v138 v139 v140 v141, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v110 v111 v112 v113, v142 v143 v144 v145, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v110 v111 v112 v113, v146 v147 v148 v149, a[140:143] - ds_read_b128 v002 v003 v004 v005, v171 offset:6144 - v_mfma_f32_16x16x32_bf16 a[136:139], v110 v111 v112 v113, v150 v151 v152 v153, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v110 v111 v112 v113, v154 v155 v156 v157, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v110 v111 v112 v113, v158 v159 v160 v161, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v114 v115 v116 v117, v130 v131 v132 v133, a[124:127] - s_mov_b32 m0, s15 - buffer_load_dwordx4 v166, s[4:7], 0 offen sc0 lds - ds_read_b128 v018 v019 v020 v021, v172 - v_mfma_f32_16x16x32_bf16 a[120:123], v114 v115 v116 v117, v134 v135 v136 v137, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v114 v115 v116 v117, v138 v139 v140 v141, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v114 v115 v116 v117, v142 v143 v144 v145, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v114 v115 v116 v117, v146 v147 v148 v149, a[108:111] - ds_read_b128 v022 v023 v024 v025, v172 offset:1024 - v_mfma_f32_16x16x32_bf16 a[104:107], v114 v115 v116 v117, v150 v151 v152 v153, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v114 v115 v116 v117, v154 v155 v156 v157, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v114 v115 v116 v117, v158 v159 v160 v161, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v118 v119 v120 v121, v130 v131 v132 v133, a[92:95] - s_mov_b32 m0, s28 - buffer_load_dwordx4 v167, s[4:7], 0 offen sc0 lds - ds_read_b128 v030 v031 v032 v033, v172 offset:2048 - v_mfma_f32_16x16x32_bf16 a[88:91], v118 v119 v120 v121, v134 v135 v136 v137, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v118 v119 v120 v121, v138 v139 v140 v141, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v118 v119 v120 v121, v142 v143 v144 v145, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v118 v119 v120 v121, v146 v147 v148 v149, a[76:79] - ds_read_b128 v038 v039 v040 v041, v172 offset:3072 - v_mfma_f32_16x16x32_bf16 a[72:75], v118 v119 v120 v121, v150 v151 v152 v153, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v118 v119 v120 v121, v154 v155 v156 v157, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v118 v119 v120 v121, v158 v159 v160 v161, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v122 v123 v124 v125, v130 v131 v132 v133, a[60:63] - s_mov_b32 m0, s29 - buffer_load_dwordx4 v168, s[4:7], 0 offen sc0 lds - ds_read_b128 v046 v047 v048 v049, v172 offset:4096 - v_mfma_f32_16x16x32_bf16 a[56:59], v122 v123 v124 v125, v134 v135 v136 v137, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v122 v123 v124 v125, v138 v139 v140 v141, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v122 v123 v124 v125, v142 v143 v144 v145, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v122 v123 v124 v125, v146 v147 v148 v149, a[44:47] - ds_read_b128 v054 v055 v056 v057, v172 offset:5120 - v_mfma_f32_16x16x32_bf16 a[40:43], v122 v123 v124 v125, v150 v151 v152 v153, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v122 v123 v124 v125, v154 v155 v156 v157, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v122 v123 v124 v125, v158 v159 v160 v161, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v126 v127 v128 v129, v130 v131 v132 v133, a[28:31] - s_mov_b32 m0, s30 - buffer_load_dwordx4 v169, s[4:7], 0 offen sc0 lds - ds_read_b128 v058 v059 v060 v061, v172 offset:6144 - v_mfma_f32_16x16x32_bf16 a[24:27], v126 v127 v128 v129, v134 v135 v136 v137, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v126 v127 v128 v129, v138 v139 v140 v141, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v126 v127 v128 v129, v142 v143 v144 v145, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v126 v127 v128 v129, v146 v147 v148 v149, a[12:15] - ds_read_b128 v062 v063 v064 v065, v172 offset:7168 - v_mfma_f32_16x16x32_bf16 a[8:11], v126 v127 v128 v129, v150 v151 v152 v153, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v126 v127 v128 v129, v154 v155 v156 v157, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v126 v127 v128 v129, v158 v159 v160 v161, a[0:3] - s_add_i32 s24, s24, 64 - s_add_u32 s2, s2, 0x80 - s_addc_u32 s3, s3, 0 - s_cmp_lg_u64 s[2:3], 0 - s_waitcnt vmcnt(16) - s_barrier -.JUMP.LBB0_1: - s_cbranch_scc1 .LBB0_1 - s_load_dwordx2 s[0:1], s[0:1], 0x0 - s_lshl_b32 s4, s14, 14 - s_lshl_b32 s4, s4, 1 - v_add3_u32 v067, v108, s4, v096 - s_waitcnt lgkmcnt(0) - v_mfma_f32_16x16x32_bf16 a[252:255], v050 v051 v052 v053, v018 v019 v020 v021, a[252:255] - ds_read_b128 v068 v069 v070 v071, v067 offset:16384 - v_add3_u32 v067, v107, s4, v096 - v_mfma_f32_16x16x32_bf16 a[248:251], v050 v051 v052 v053, v022 v023 v024 v025, a[248:251] - v_mfma_f32_16x16x32_bf16 a[244:247], v050 v051 v052 v053, v030 v031 v032 v033, a[244:247] - v_mfma_f32_16x16x32_bf16 a[240:243], v050 v051 v052 v053, v038 v039 v040 v041, a[240:243] - v_mfma_f32_16x16x32_bf16 a[236:239], v050 v051 v052 v053, v046 v047 v048 v049, a[236:239] - ds_read_b128 v072 v073 v074 v075, v067 offset:16384 - v_mfma_f32_16x16x32_bf16 a[232:235], v050 v051 v052 v053, v054 v055 v056 v057, a[232:235] - v_mfma_f32_16x16x32_bf16 a[228:231], v050 v051 v052 v053, v058 v059 v060 v061, a[228:231] - v_mfma_f32_16x16x32_bf16 a[224:227], v050 v051 v052 v053, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] - ds_read_b128 v076 v077 v078 v079, v067 offset:17408 - v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] - ds_read_b128 v080 v081 v082 v083, v067 offset:18432 - v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v054 v055 v056 v057, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] - ds_read_b128 v084 v085 v086 v087, v067 offset:19456 - v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] - ds_read_b128 v050 v051 v052 v053, v067 offset:20480 - v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v054 v055 v056 v057, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] - ds_read_b128 v042 v043 v044 v045, v067 offset:21504 - v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] - ds_read_b128 v034 v035 v036 v037, v067 offset:22528 - v_add3_u32 v067, v099, s4, v096 - s_mov_b32 s3, 0x27000 - s_mov_b32 s2, -1 - s_and_b32 s1, s1, 0xffff - v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v054 v055 v056 v057, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - ds_read_b128 v026 v027 v028 v029, v067 offset:16384 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] - ds_read_b128 v088 v089 v090 v091, v067 offset:17408 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - ds_read_b128 v014 v015 v016 v017, v067 offset:18432 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] - ds_read_b128 v096 v097 v098 v099, v067 offset:19456 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - ds_read_b128 v010 v011 v012 v013, v067 offset:20480 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] - ds_read_b128 v100 v101 v102 v103, v067 offset:21504 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - ds_read_b128 v006 v007 v008 v009, v067 offset:22528 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] - ds_read_b128 v018 v019 v020 v021, v067 offset:23552 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - v_or_b32_e32 v066, 0x70, v001 - s_waitcnt lgkmcnt(0) - s_barrier - s_waitcnt lgkmcnt(7) - v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v026 v027 v028 v029, a[252:255] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v096 v097 v098 v099, a[240:243] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v100 v101 v102 v103, a[232:235] - s_waitcnt lgkmcnt(1) - v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] - s_waitcnt lgkmcnt(0) - v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v026 v027 v028 v029, a[220:223] - v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v096 v097 v098 v099, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] - v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v100 v101 v102 v103, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v026 v027 v028 v029, a[188:191] - v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v096 v097 v098 v099, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] - v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v100 v101 v102 v103, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v026 v027 v028 v029, a[156:159] - v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v096 v097 v098 v099, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] - v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v100 v101 v102 v103, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v026 v027 v028 v029, a[124:127] - v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v096 v097 v098 v099, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] - v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v100 v101 v102 v103, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v050 v051 v052 v053, v026 v027 v028 v029, a[92:95] - v_mfma_f32_16x16x32_bf16 a[88:91], v050 v051 v052 v053, v088 v089 v090 v091, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v050 v051 v052 v053, v014 v015 v016 v017, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v050 v051 v052 v053, v096 v097 v098 v099, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v050 v051 v052 v053, v010 v011 v012 v013, a[76:79] - v_mfma_f32_16x16x32_bf16 a[72:75], v050 v051 v052 v053, v100 v101 v102 v103, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v050 v051 v052 v053, v006 v007 v008 v009, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v050 v051 v052 v053, v018 v019 v020 v021, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v042 v043 v044 v045, v026 v027 v028 v029, a[60:63] - v_mfma_f32_16x16x32_bf16 a[56:59], v042 v043 v044 v045, v088 v089 v090 v091, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v042 v043 v044 v045, v014 v015 v016 v017, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v042 v043 v044 v045, v096 v097 v098 v099, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v042 v043 v044 v045, v010 v011 v012 v013, a[44:47] - v_mfma_f32_16x16x32_bf16 a[40:43], v042 v043 v044 v045, v100 v101 v102 v103, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v042 v043 v044 v045, v006 v007 v008 v009, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v042 v043 v044 v045, v018 v019 v020 v021, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v034 v035 v036 v037, v026 v027 v028 v029, a[28:31] - v_mfma_f32_16x16x32_bf16 a[24:27], v034 v035 v036 v037, v088 v089 v090 v091, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v034 v035 v036 v037, v014 v015 v016 v017, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v034 v035 v036 v037, v096 v097 v098 v099, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v034 v035 v036 v037, v010 v011 v012 v013, a[12:15] - v_mfma_f32_16x16x32_bf16 a[8:11], v034 v035 v036 v037, v100 v101 v102 v103, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v034 v035 v036 v037, v006 v007 v008 v009, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v034 v035 v036 v037, v018 v019 v020 v021, a[0:3] - v_lshlrev_b32_e32 v002, 2, v094 - v_accvgpr_read_b32 v003, a252 - v_and_or_b32 v004, v002, 12, v001 - v_cvt_pk_bf16_f32 v005, v003, s0 - v_lshlrev_b32_e32 v003, 1, v095 - v_lshl_or_b32 v004, v004, 9, v003 - s_barrier - ds_write_b16 v004, v005 - v_accvgpr_read_b32 v005, a253 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:512 - v_accvgpr_read_b32 v005, a254 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1024 - v_accvgpr_read_b32 v005, a255 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1536 - v_accvgpr_read_b32 v005, a248 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:32 - v_accvgpr_read_b32 v005, a249 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:544 - v_accvgpr_read_b32 v005, a250 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1056 - v_accvgpr_read_b32 v005, a251 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1568 - v_accvgpr_read_b32 v005, a244 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:64 - v_accvgpr_read_b32 v005, a245 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:576 - v_accvgpr_read_b32 v005, a246 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1088 - v_accvgpr_read_b32 v005, a247 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1600 - v_accvgpr_read_b32 v005, a240 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:96 - v_accvgpr_read_b32 v005, a241 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:608 - v_accvgpr_read_b32 v005, a242 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1120 - v_accvgpr_read_b32 v005, a243 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1632 - v_accvgpr_read_b32 v005, a236 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:128 - v_accvgpr_read_b32 v005, a237 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:640 - v_accvgpr_read_b32 v005, a238 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1152 - v_accvgpr_read_b32 v005, a239 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1664 - v_accvgpr_read_b32 v005, a232 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:160 - v_accvgpr_read_b32 v005, a233 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:672 - v_accvgpr_read_b32 v005, a234 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1184 - v_accvgpr_read_b32 v005, a235 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1696 - v_accvgpr_read_b32 v005, a228 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:192 - v_accvgpr_read_b32 v005, a229 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:704 - v_accvgpr_read_b32 v005, a230 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1216 - v_accvgpr_read_b32 v005, a231 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1728 - v_accvgpr_read_b32 v005, a224 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:224 - v_accvgpr_read_b32 v005, a225 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:736 - v_accvgpr_read_b32 v005, a226 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1248 - v_accvgpr_read_b32 v005, a227 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:1760 - v_accvgpr_read_b32 v005, a220 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8192 - v_accvgpr_read_b32 v005, a221 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8704 - v_accvgpr_read_b32 v005, a222 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9216 - v_accvgpr_read_b32 v005, a223 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9728 - v_accvgpr_read_b32 v005, a216 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8224 - v_accvgpr_read_b32 v005, a217 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8736 - v_accvgpr_read_b32 v005, a218 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9248 - v_accvgpr_read_b32 v005, a219 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9760 - v_accvgpr_read_b32 v005, a212 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8256 - v_accvgpr_read_b32 v005, a213 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8768 - v_accvgpr_read_b32 v005, a214 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9280 - v_accvgpr_read_b32 v005, a215 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9792 - v_accvgpr_read_b32 v005, a208 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8288 - v_accvgpr_read_b32 v005, a209 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8800 - v_accvgpr_read_b32 v005, a210 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9312 - v_accvgpr_read_b32 v005, a211 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9824 - v_accvgpr_read_b32 v005, a204 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8320 - v_accvgpr_read_b32 v005, a205 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8832 - v_accvgpr_read_b32 v005, a206 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9344 - v_accvgpr_read_b32 v005, a207 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9856 - v_accvgpr_read_b32 v005, a200 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8352 - v_accvgpr_read_b32 v005, a201 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8864 - v_accvgpr_read_b32 v005, a202 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9376 - v_accvgpr_read_b32 v005, a203 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9888 - v_accvgpr_read_b32 v005, a196 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8384 - v_accvgpr_read_b32 v005, a197 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8896 - v_accvgpr_read_b32 v005, a198 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9408 - v_accvgpr_read_b32 v005, a199 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9920 - v_accvgpr_read_b32 v005, a192 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8416 - v_accvgpr_read_b32 v005, a193 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:8928 - v_accvgpr_read_b32 v005, a194 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9440 - v_accvgpr_read_b32 v005, a195 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:9952 - v_accvgpr_read_b32 v005, a188 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16384 - v_accvgpr_read_b32 v005, a189 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16896 - v_accvgpr_read_b32 v005, a190 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17408 - v_accvgpr_read_b32 v005, a191 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17920 - v_accvgpr_read_b32 v005, a184 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16416 - v_accvgpr_read_b32 v005, a185 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16928 - v_accvgpr_read_b32 v005, a186 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17440 - v_accvgpr_read_b32 v005, a187 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17952 - v_accvgpr_read_b32 v005, a180 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16448 - v_accvgpr_read_b32 v005, a181 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16960 - v_accvgpr_read_b32 v005, a182 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17472 - v_accvgpr_read_b32 v005, a183 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17984 - v_accvgpr_read_b32 v005, a176 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16480 - v_accvgpr_read_b32 v005, a177 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16992 - v_accvgpr_read_b32 v005, a178 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17504 - v_accvgpr_read_b32 v005, a179 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:18016 - v_accvgpr_read_b32 v005, a172 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16512 - v_accvgpr_read_b32 v005, a173 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17024 - v_accvgpr_read_b32 v005, a174 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17536 - v_accvgpr_read_b32 v005, a175 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:18048 - v_accvgpr_read_b32 v005, a168 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16544 - v_accvgpr_read_b32 v005, a169 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17056 - v_accvgpr_read_b32 v005, a170 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17568 - v_accvgpr_read_b32 v005, a171 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:18080 - v_accvgpr_read_b32 v005, a164 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16576 - v_accvgpr_read_b32 v005, a165 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17088 - v_accvgpr_read_b32 v005, a166 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17600 - v_accvgpr_read_b32 v005, a167 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:18112 - v_accvgpr_read_b32 v005, a160 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:16608 - v_accvgpr_read_b32 v005, a161 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17120 - v_accvgpr_read_b32 v005, a162 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:17632 - v_accvgpr_read_b32 v005, a163 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v004, v005 offset:18144 - v_or3_b32 v001, v001, 48, v002 - v_accvgpr_read_b32 v005, a156 - v_cvt_pk_bf16_f32 v005, v005, s0 - v_lshl_or_b32 v001, v001, 9, v003 - ds_write_b16 v001, v005 - v_accvgpr_read_b32 v005, a157 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:512 - v_accvgpr_read_b32 v005, a158 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1024 - v_accvgpr_read_b32 v005, a159 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1536 - v_accvgpr_read_b32 v005, a152 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:32 - v_accvgpr_read_b32 v005, a153 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:544 - v_accvgpr_read_b32 v005, a154 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1056 - v_accvgpr_read_b32 v005, a155 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1568 - v_accvgpr_read_b32 v005, a148 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:64 - v_accvgpr_read_b32 v005, a149 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:576 - v_accvgpr_read_b32 v005, a150 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1088 - v_accvgpr_read_b32 v005, a151 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1600 - v_accvgpr_read_b32 v005, a144 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:96 - v_accvgpr_read_b32 v005, a145 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:608 - v_accvgpr_read_b32 v005, a146 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1120 - v_accvgpr_read_b32 v005, a147 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1632 - v_accvgpr_read_b32 v005, a140 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:128 - v_accvgpr_read_b32 v005, a141 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:640 - v_accvgpr_read_b32 v005, a142 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1152 - v_accvgpr_read_b32 v005, a143 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1664 - v_accvgpr_read_b32 v005, a136 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:160 - v_accvgpr_read_b32 v005, a137 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:672 - v_accvgpr_read_b32 v005, a138 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1184 - v_accvgpr_read_b32 v005, a139 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1696 - v_accvgpr_read_b32 v005, a132 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:192 - v_accvgpr_read_b32 v005, a133 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:704 - v_accvgpr_read_b32 v005, a134 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1216 - v_accvgpr_read_b32 v005, a135 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1728 - v_accvgpr_read_b32 v005, a128 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:224 - v_accvgpr_read_b32 v005, a129 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:736 - v_accvgpr_read_b32 v005, a130 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1248 - v_accvgpr_read_b32 v005, a131 - v_cvt_pk_bf16_f32 v005, v005, s0 - ds_write_b16 v001, v005 offset:1760 - v_accvgpr_read_b32 v001, a124 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32768 - v_accvgpr_read_b32 v001, a125 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33280 - v_accvgpr_read_b32 v001, a126 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33792 - v_accvgpr_read_b32 v001, a127 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34304 - v_accvgpr_read_b32 v001, a120 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32800 - v_accvgpr_read_b32 v001, a121 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33312 - v_accvgpr_read_b32 v001, a122 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33824 - v_accvgpr_read_b32 v001, a123 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34336 - v_accvgpr_read_b32 v001, a116 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32832 - v_accvgpr_read_b32 v001, a117 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33344 - v_accvgpr_read_b32 v001, a118 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33856 - v_accvgpr_read_b32 v001, a119 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34368 - v_accvgpr_read_b32 v001, a112 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32864 - v_accvgpr_read_b32 v001, a113 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33376 - v_accvgpr_read_b32 v001, a114 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33888 - v_accvgpr_read_b32 v001, a115 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34400 - v_accvgpr_read_b32 v001, a108 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32896 - v_accvgpr_read_b32 v001, a109 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33408 - v_accvgpr_read_b32 v001, a110 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33920 - v_accvgpr_read_b32 v001, a111 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34432 - v_accvgpr_read_b32 v001, a104 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32928 - v_accvgpr_read_b32 v001, a105 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33440 - v_accvgpr_read_b32 v001, a106 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33952 - v_accvgpr_read_b32 v001, a107 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34464 - v_accvgpr_read_b32 v001, a100 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32960 - v_accvgpr_read_b32 v001, a101 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33472 - v_accvgpr_read_b32 v001, a102 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33984 - v_accvgpr_read_b32 v001, a103 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34496 - v_accvgpr_read_b32 v001, a96 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:32992 - v_accvgpr_read_b32 v001, a97 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:33504 - v_accvgpr_read_b32 v001, a98 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34016 - v_accvgpr_read_b32 v001, a99 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:34528 - v_accvgpr_read_b32 v001, a92 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:40960 - v_accvgpr_read_b32 v001, a93 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41472 - v_accvgpr_read_b32 v001, a94 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41984 - v_accvgpr_read_b32 v001, a95 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42496 - v_accvgpr_read_b32 v001, a88 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:40992 - v_accvgpr_read_b32 v001, a89 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41504 - v_accvgpr_read_b32 v001, a90 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42016 - v_accvgpr_read_b32 v001, a91 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42528 - v_accvgpr_read_b32 v001, a84 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41024 - v_accvgpr_read_b32 v001, a85 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41536 - v_accvgpr_read_b32 v001, a86 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42048 - v_accvgpr_read_b32 v001, a87 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42560 - v_accvgpr_read_b32 v001, a80 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41056 - v_accvgpr_read_b32 v001, a81 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41568 - v_accvgpr_read_b32 v001, a82 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42080 - v_accvgpr_read_b32 v001, a83 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42592 - v_accvgpr_read_b32 v001, a76 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41088 - v_accvgpr_read_b32 v001, a77 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41600 - v_accvgpr_read_b32 v001, a78 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42112 - v_accvgpr_read_b32 v001, a79 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42624 - v_accvgpr_read_b32 v001, a72 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41120 - v_accvgpr_read_b32 v001, a73 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41632 - v_accvgpr_read_b32 v001, a74 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42144 - v_accvgpr_read_b32 v001, a75 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42656 - v_accvgpr_read_b32 v001, a68 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41152 - v_accvgpr_read_b32 v001, a69 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41664 - v_accvgpr_read_b32 v001, a70 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42176 - v_accvgpr_read_b32 v001, a71 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42688 - v_accvgpr_read_b32 v001, a64 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41184 - v_accvgpr_read_b32 v001, a65 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:41696 - v_accvgpr_read_b32 v001, a66 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42208 - v_accvgpr_read_b32 v001, a67 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:42720 - v_accvgpr_read_b32 v001, a60 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49152 - v_accvgpr_read_b32 v001, a61 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49664 - v_accvgpr_read_b32 v001, a62 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50176 - v_accvgpr_read_b32 v001, a63 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50688 - v_accvgpr_read_b32 v001, a56 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49184 - v_accvgpr_read_b32 v001, a57 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49696 - v_accvgpr_read_b32 v001, a58 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50208 - v_accvgpr_read_b32 v001, a59 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50720 - v_accvgpr_read_b32 v001, a52 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49216 - v_accvgpr_read_b32 v001, a53 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49728 - v_accvgpr_read_b32 v001, a54 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50240 - v_accvgpr_read_b32 v001, a55 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50752 - v_accvgpr_read_b32 v001, a48 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49248 - v_accvgpr_read_b32 v001, a49 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49760 - v_accvgpr_read_b32 v001, a50 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50272 - v_accvgpr_read_b32 v001, a51 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50784 - v_accvgpr_read_b32 v001, a44 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49280 - v_accvgpr_read_b32 v001, a45 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49792 - v_accvgpr_read_b32 v001, a46 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50304 - v_accvgpr_read_b32 v001, a47 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50816 - v_accvgpr_read_b32 v001, a40 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49312 - v_accvgpr_read_b32 v001, a41 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49824 - v_accvgpr_read_b32 v001, a42 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50336 - v_accvgpr_read_b32 v001, a43 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50848 - v_accvgpr_read_b32 v001, a36 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49344 - v_accvgpr_read_b32 v001, a37 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49856 - v_accvgpr_read_b32 v001, a38 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50368 - v_accvgpr_read_b32 v001, a39 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50880 - v_accvgpr_read_b32 v001, a32 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49376 - v_accvgpr_read_b32 v001, a33 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:49888 - v_accvgpr_read_b32 v001, a34 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50400 - v_accvgpr_read_b32 v001, a35 - v_cvt_pk_bf16_f32 v001, v001, s0 - ds_write_b16 v004, v001 offset:50912 - v_or_b32_e32 v001, v002, v066 - v_accvgpr_read_b32 v002, a28 - v_cvt_pk_bf16_f32 v002, v002, s0 - v_lshl_or_b32 v001, v001, 9, v003 - ds_write_b16 v001, v002 - v_accvgpr_read_b32 v002, a29 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:512 - v_accvgpr_read_b32 v002, a30 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1024 - v_accvgpr_read_b32 v002, a31 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1536 - v_accvgpr_read_b32 v002, a24 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:32 - v_accvgpr_read_b32 v002, a25 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:544 - v_accvgpr_read_b32 v002, a26 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1056 - v_accvgpr_read_b32 v002, a27 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1568 - v_accvgpr_read_b32 v002, a20 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:64 - v_accvgpr_read_b32 v002, a21 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:576 - v_accvgpr_read_b32 v002, a22 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1088 - v_accvgpr_read_b32 v002, a23 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1600 - v_accvgpr_read_b32 v002, a16 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:96 - v_accvgpr_read_b32 v002, a17 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:608 - v_accvgpr_read_b32 v002, a18 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1120 - v_accvgpr_read_b32 v002, a19 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1632 - v_accvgpr_read_b32 v002, a12 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:128 - v_accvgpr_read_b32 v002, a13 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:640 - v_accvgpr_read_b32 v002, a14 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1152 - v_accvgpr_read_b32 v002, a15 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1664 - v_accvgpr_read_b32 v002, a8 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:160 - v_accvgpr_read_b32 v002, a9 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:672 - v_accvgpr_read_b32 v002, a10 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1184 - v_accvgpr_read_b32 v002, a11 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1696 - v_accvgpr_read_b32 v002, a4 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:192 - v_accvgpr_read_b32 v002, a5 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:704 - v_accvgpr_read_b32 v002, a6 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1216 - v_accvgpr_read_b32 v002, a7 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1728 - v_accvgpr_read_b32 v002, a0 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:224 - v_accvgpr_read_b32 v002, a1 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:736 - v_accvgpr_read_b32 v002, a2 - v_cvt_pk_bf16_f32 v002, v002, s0 - ds_write_b16 v001, v002 offset:1248 - v_accvgpr_read_b32 v002, a3 - v_cvt_pk_bf16_f32 v002, v002, s0 - v_lshrrev_b32_e32 v004, 5, v000 - ds_write_b16 v001, v002 offset:1760 - v_or_b32_e32 v002, s20, v004 - v_mov_b32_e32 v003, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 - v_lshlrev_b32_e32 v003, 3, v000 - s_waitcnt lgkmcnt(0) - s_barrier - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_4: - s_cbranch_execz .LBB0_4 - v_and_b32_e32 v000, 0xf8, v003 - v_lshlrev_b32_e32 v001, 1, v000 - v_lshl_or_b32 v001, v004, 9, v001 - ds_read_b128 v006 v007 v008 v009, v001 - v_or_b32_e32 v000, s18, v000 - v_lshlrev_b32_e32 v001, 14, v002 - v_lshl_add_u32 v000, v000, 1, v001 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_4: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_6: - s_cbranch_execz .LBB0_6 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_6: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 16, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_8: - s_cbranch_execz .LBB0_8 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_8: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 24, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_10: - s_cbranch_execz .LBB0_10 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_10: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 32, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_12: - s_cbranch_execz .LBB0_12 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_12: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 40, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_14: - s_cbranch_execz .LBB0_14 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_14: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 48, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_16: - s_cbranch_execz .LBB0_16 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_16: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 56, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_18: - s_cbranch_execz .LBB0_18 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_18: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 64, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_20: - s_cbranch_execz .LBB0_20 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_20: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x48, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_22: - s_cbranch_execz .LBB0_22 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_22: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x50, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_24: - s_cbranch_execz .LBB0_24 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_24: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x58, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_26: - s_cbranch_execz .LBB0_26 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_26: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x60, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_28: - s_cbranch_execz .LBB0_28 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_28: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x68, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_30: - s_cbranch_execz .LBB0_30 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_30: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x70, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_32: - s_cbranch_execz .LBB0_32 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_32: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x78, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_34: - s_cbranch_execz .LBB0_34 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_34: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x80, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_36: - s_cbranch_execz .LBB0_36 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_36: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x88, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_38: - s_cbranch_execz .LBB0_38 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_38: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x90, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_40: - s_cbranch_execz .LBB0_40 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_40: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0x98, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_42: - s_cbranch_execz .LBB0_42 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_42: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xa0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_44: - s_cbranch_execz .LBB0_44 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_44: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xa8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_46: - s_cbranch_execz .LBB0_46 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_46: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xb0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_48: - s_cbranch_execz .LBB0_48 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_48: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xb8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_50: - s_cbranch_execz .LBB0_50 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_50: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xc0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_52: - s_cbranch_execz .LBB0_52 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_52: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xc8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_54: - s_cbranch_execz .LBB0_54 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_54: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xd0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_56: - s_cbranch_execz .LBB0_56 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_56: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xd8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_58: - s_cbranch_execz .LBB0_58 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_58: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xe0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_60: - s_cbranch_execz .LBB0_60 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_60: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xe8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_62: - s_cbranch_execz .LBB0_62 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_62: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xf0, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_64: - s_cbranch_execz .LBB0_64 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v005, 1, v001 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_64: - s_or_b64 exec, exec, s[4:5] - v_or_b32_e32 v002, 0xf8, v004 - v_or_b32_e32 v000, s20, v002 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 - s_and_saveexec_b64 s[4:5], vcc -.JUMP.LBB0_66: - s_cbranch_execz .LBB0_66 - v_and_b32_e32 v001, 0xf8, v003 - v_lshlrev_b32_e32 v003, 1, v001 - v_lshl_or_b32 v002, v002, 9, v003 - ds_read_b128 v002 v003 v004 v005, v002 - v_or_b32_e32 v001, s18, v001 - v_lshlrev_b32_e32 v000, 14, v000 - v_lshl_add_u32 v000, v001, 1, v000 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen -.LBB0_66: - s_endpgm -.Lfunc_end0: - .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 - .p2alignl 6, 3212836864 - .fill 256, 4, 3212836864 - .section .AMDGPU.gpr_maximums,"",@progbits - .set amdgpu.max_num_vgpr, 0 - .set amdgpu.max_num_agpr, 0 - .set amdgpu.max_num_sgpr, 0 - .set amdgpu.max_num_named_barrier, 0 - .text - .section ".note.GNU-stack","",@progbits - .amdgpu_metadata ---- -amdhsa.kernels: - - .agpr_count: 256 - .args: - - .address_space: global - .offset: 0 - .size: 8 - .value_kind: global_buffer - - .offset: 8 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 24 - .size: 8 - .value_kind: global_buffer - - .offset: 32 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 48 - .size: 8 - .value_kind: global_buffer - - .offset: 56 - .size: 16 - .value_kind: by_value - - .address_space: global - .offset: 72 - .size: 8 - .value_kind: global_buffer - - .offset: 80 - .size: 16 - .value_kind: by_value - - .offset: 96 - .size: 4 - .value_kind: by_value - - .address_space: global - .offset: 104 - .size: 8 - .value_kind: global_buffer - - .offset: 112 - .size: 4 - .value_kind: by_value - - .address_space: global - .offset: 120 - .size: 8 - .value_kind: global_buffer - - .offset: 128 - .size: 4 - .value_kind: by_value - .group_segment_fixed_size: 131072 - .kernarg_segment_align: 8 - .kernarg_segment_size: 132 - .max_flat_workgroup_size: 256 - .name: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .private_segment_fixed_size: 0 - .reqd_workgroup_size: - - 256 - - 1 - - 1 - .sgpr_count: 45 - .sgpr_spill_count: 0 - .symbol: hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.kd - .uniform_work_group_size: 1 - .uses_dynamic_stack: false - .vgpr_count: 432 - .vgpr_spill_count: 0 - .wavefront_size: 64 -amdhsa.target: amdgcn-amd-amdhsa--gfx950 -amdhsa.version: - - 1 - - 2 -... - .end_amdgpu_metadata diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt deleted file mode 100644 index 3acabe07f..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_hotloop.txt +++ /dev/null @@ -1,184 +0,0 @@ -Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s) -Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier -Per loop: M=128 r=32 L=16 B=2 -============================================================ -M v_mfma_f32_16x16x32_bf16 a[252:255] -L buffer_load_dwordx4 v071 -r ds_read_b128 v070 v071 v072 v073 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v074 v075 v076 v077 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v088 -r ds_read_b128 v078 v079 v080 v081 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v082 v083 v084 v085 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -M v_mfma_f32_16x16x32_bf16 a[188:191] -L buffer_load_dwordx4 v089 -r ds_read_b128 v086 v087 v088 v089 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v090 v091 v092 v093 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -L buffer_load_dwordx4 v094 -r ds_read_b128 v094 v095 v096 v097 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v130 v131 v132 v133 -M v_mfma_f32_16x16x32_bf16 a[136:139] -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -L buffer_load_dwordx4 v117 -r ds_read_b128 v134 v135 v136 v137 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -r ds_read_b128 v138 v139 v140 v141 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -L buffer_load_dwordx4 v119 -r ds_read_b128 v142 v143 v144 v145 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v146 v147 v148 v149 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -L buffer_load_dwordx4 v121 -r ds_read_b128 v150 v151 v152 v153 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v154 v155 v156 v157 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -L buffer_load_dwordx4 v069 -r ds_read_b128 v158 v159 v160 v161 -M v_mfma_f32_16x16x32_bf16 a[24:27] -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v162 v163 v164 v165 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 0) -------- -M v_mfma_f32_16x16x32_bf16 a[252:255] -L buffer_load_dwordx4 v002 -r ds_read_b128 v046 v047 v048 v049 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v038 v039 v040 v041 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v003 -r ds_read_b128 v030 v031 v032 v033 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v022 v023 v024 v025 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -M v_mfma_f32_16x16x32_bf16 a[188:191] -L buffer_load_dwordx4 v004 -r ds_read_b128 v014 v015 v016 v017 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v010 v011 v012 v013 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -L buffer_load_dwordx4 v005 -r ds_read_b128 v006 v007 v008 v009 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v002 v003 v004 v005 -M v_mfma_f32_16x16x32_bf16 a[136:139] -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -L buffer_load_dwordx4 v018 -r ds_read_b128 v018 v019 v020 v021 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -r ds_read_b128 v026 v027 v028 v029 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -L buffer_load_dwordx4 v034 -r ds_read_b128 v034 v035 v036 v037 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v042 v043 v044 v045 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -L buffer_load_dwordx4 v050 -r ds_read_b128 v050 v051 v052 v053 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v054 v055 v056 v057 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -L buffer_load_dwordx4 v058 -r ds_read_b128 v058 v059 v060 v061 -M v_mfma_f32_16x16x32_bf16 a[24:27] -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v062 v063 v064 v065 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 1) -------- -============================================================ -stream: MLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s deleted file mode 100644 index 651103b60..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_1313tflops_pure.s +++ /dev/null @@ -1,2457 +0,0 @@ - .amdgcn_target "amdgcn-amd-amdhsa--gfx950" - .amdhsa_code_object_version 6 - .text - .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .p2align 8 - .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function -hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: -.Lfunc_begin0: - .cfi_sections .debug_frame - .cfi_startproc - .file 1 "/root/FlyDSL/kernels" "tensor_shim.py" - s_load_dword s12, s[0:1], 0x60 ;.loc 1 289 24 prologue_end - s_load_dwordx2 s[4:5], s[0:1], 0x18 - s_load_dwordx2 s[8:9], s[0:1], 0x30 - .file 2 "/root/FlyDSL/kernels" "hgemm_splitk.py" - s_ashr_i32 s14, s2, 31 ;.loc 2 382 0 - s_lshr_b32 s14, s14, 27 - s_add_i32 s14, s2, s14 - s_waitcnt lgkmcnt(0) ;.loc 1 289 24 - s_ashr_i32 s13, s12, 31 - s_and_b32 s5, s5, 0xffff - s_and_b32 s9, s9, 0xffff - s_ashr_i32 s18, s14, 5 ;.loc 2 382 0 - s_and_b32 s19, s14, 0xffffffe0 - s_cmp_lg_u32 s2, s19 - s_cselect_b64 s[14:15], -1, 0 - s_cmp_lt_i32 s2, 0 - s_cselect_b64 s[16:17], -1, 0 - s_and_b64 s[14:15], s[16:17], s[14:15] - v_lshrrev_b32_e32 v002, 6, v000 ;.loc 2 375 0 - s_subb_u32 s14, s18, 0 ;.loc 2 382 0 - s_sub_i32 s15, s2, s19 - s_lshl_b32 s18, s14, 8 ;.loc 2 388 0 - v_readfirstlane_b32 s14, v002 ;.loc 2 552 0 - s_lshl_b32 s16, s15, 8 ;.loc 2 389 0 - s_lshl_b32 s19, s14, 10 ;.loc 2 552 0 - s_mul_i32 s2, s3, 0x3fc0 ;.loc 2 386 0 - .file 3 "/root/FlyDSL/python/flydsl/expr" "numeric.py" - s_ashr_i32 s17, s18, 31 ;.loc 3 875 16 - s_ashr_i32 s3, s16, 31 - s_add_i32 s24, s19, 0x10000 ;.loc 2 583 0 - v_lshrrev_b32_e32 v002, 2, v000 ;.loc 2 626 0 - s_cmpk_lt_u32 s16, 0x2000 ;.loc 2 644 12 - v_xor_b32_e32 v003, v002, v000 ;.loc 2 630 0 - s_cselect_b64 vcc, -1, 0 ;.loc 2 644 12 - v_lshlrev_b32_e32 v003, 3, v003 ;.loc 2 630 0 - s_and_b64 s[14:15], vcc, exec ;.loc 2 643 23 - v_and_b32_e32 v105, 24, v003 ;.loc 2 630 0 - v_or_b32_e32 v003, s16, v002 ;.loc 2 642 0 - s_cselect_b32 s3, s3, 0 ;.loc 2 643 23 - v_cndmask_b32_e32 v004, 0, v003, vcc - v_mov_b32_e32 v003, s3 - v_alignbit_b32 v003, v003, v004, 8 ;.loc 2 355 0 - s_movk_i32 s28, 0xff - v_mad_u64_u32 v098 v099, s[14:15], v003, s28, 0 - v_lshlrev_b32_e32 v003, 6, v004 - s_lshr_b32 s29, s2, 6 ;.loc 2 353 0 - v_and_b32_e32 v100, 0xfc0, v003 ;.loc 2 355 0 - v_add_u32_e32 v003, s29, v098 - v_lshl_or_b32 v004, v003, 14, v100 - v_or_b32_e32 v003, v004, v105 - s_mov_b32 s7, 0x27000 - s_mov_b32 s6, -1 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 - v_or_b32_e32 v005, 64, v002 ;.loc 2 628 0 - s_mov_b32 s10, s6 ;.loc 1 289 24 - s_mov_b32 s11, s7 - s_mov_b32 m0, s24 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v003, s16, v005 ;.loc 2 642 0 - v_cndmask_b32_e32 v006, 0, v003, vcc ;.loc 2 643 23 - v_mov_b32_e32 v003, s3 - v_alignbit_b32 v003, v003, v006, 8 ;.loc 2 355 0 - v_mad_u64_u32 v102 v103, s[14:15], v003, s28, 0 - v_lshlrev_b32_e32 v003, 6, v006 - v_and_b32_e32 v104, 0x3fc0, v003 - v_add_u32_e32 v003, s29, v102 - v_lshl_or_b32 v006, v003, 14, v104 - v_or_b32_e32 v003, v006, v105 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 - v_or_b32_e32 v007, 0x80, v002 ;.loc 2 628 0 - s_add_i32 s23, s19, 0x11000 ;.loc 2 583 0 - s_mov_b32 m0, s23 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v003, s16, v007 ;.loc 2 642 0 - v_cndmask_b32_e32 v008, 0, v003, vcc ;.loc 2 643 23 - v_mov_b32_e32 v003, s3 - v_alignbit_b32 v003, v003, v008, 8 ;.loc 2 355 0 - v_mad_u64_u32 v106 v107, s[14:15], v003, s28, 0 - v_lshlrev_b32_e32 v003, 6, v008 - v_and_b32_e32 v108, 0x3fc0, v003 - v_add_u32_e32 v003, s29, v106 - v_lshl_or_b32 v008, v003, 14, v108 - v_or_b32_e32 v003, v008, v105 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 - v_or_b32_e32 v009, 0xc0, v002 ;.loc 2 628 0 - s_add_i32 s22, s19, 0x12000 ;.loc 2 583 0 - s_mov_b32 m0, s22 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v003, s16, v009 ;.loc 2 642 0 - v_cndmask_b32_e32 v010, 0, v003, vcc ;.loc 2 643 23 - v_mov_b32_e32 v003, s3 - v_alignbit_b32 v003, v003, v010, 8 ;.loc 2 355 0 - v_mad_u64_u32 v110 v111, s[14:15], v003, s28, 0 - v_lshlrev_b32_e32 v003, 6, v010 - v_and_b32_e32 v112, 0x3fc0, v003 - v_add_u32_e32 v003, s29, v110 - v_lshl_or_b32 v003, v003, 14, v112 - v_or_b32_e32 v010, v003, v105 - v_lshlrev_b32_e32 v010, 1, v010 ;.loc 2 652 24 - s_add_i32 s21, s19, 0x13000 ;.loc 2 583 0 - s_mov_b32 m0, s21 ;.loc 2 567 0 - buffer_load_dwordx4 v010, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v010, 32, v105 ;.loc 2 631 0 - v_or_b32_e32 v004, v004, v010 ;.loc 2 355 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 2 652 24 - s_add_i32 s3, s19, 0x14000 ;.loc 2 583 0 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v004, v006, v010 ;.loc 2 355 0 - s_add_i32 s3, s19, 0x15000 ;.loc 2 583 0 - v_lshlrev_b32_e32 v004, 1, v004 ;.loc 2 652 24 - v_or_b32_e32 v003, v003, v010 ;.loc 2 355 0 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds - s_add_i32 s3, s19, 0x16000 ;.loc 2 583 0 - v_or_b32_e32 v004, v008, v010 ;.loc 2 355 0 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 652 24 - v_lshlrev_b32_e32 v004, 1, v004 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds - s_add_i32 s3, s19, 0x17000 ;.loc 2 583 0 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v002 ;.loc 2 605 0 - v_mov_b32_e32 v003, s17 - v_mov_b32_e32 v004, s17 ;.loc 2 606 23 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 - s_add_i32 s3, s19, 0x3000 ;.loc 2 583 0 - v_and_b32_e32 v001, 0x80, v000 ;.loc 2 392 0 - v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 - v_cndmask_b32_e32 v002, 0, v002, vcc - v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 - v_mad_u64_u32 v114 v115, s[14:15], v003, s28, 0 - v_lshlrev_b32_e32 v002, 6, v002 - v_and_b32_e32 v116, 0xfc0, v002 - v_add_u32_e32 v002, s29, v114 - v_lshl_or_b32 v006, v002, 14, v116 - v_or_b32_e32 v002, v006, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_mov_b32 m0, s19 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v005 ;.loc 2 605 0 - v_mov_b32_e32 v003, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 - s_add_i32 s15, s19, 0x1000 ;.loc 2 583 0 - s_add_i32 s14, s19, 0x2000 - v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 - v_cndmask_b32_e32 v002, 0, v002, vcc - v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 - v_mad_u64_u32 v118 v119, s[26:27], v003, s28, 0 - v_lshlrev_b32_e32 v002, 6, v002 - v_and_b32_e32 v120, 0x3fc0, v002 - v_add_u32_e32 v002, s29, v118 - v_lshl_or_b32 v005, v002, 14, v120 - v_or_b32_e32 v002, v005, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_mov_b32 m0, s15 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v007 ;.loc 2 605 0 - v_mov_b32_e32 v003, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 - v_lshlrev_b32_e32 v034, 1, v000 ;.loc 2 393 0 - v_and_b32_e32 v035, 15, v000 ;.loc 2 394 0 - v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 - v_cndmask_b32_e32 v002, 0, v002, vcc - v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 - v_mad_u64_u32 v122 v123, s[26:27], v003, s28, 0 - v_lshlrev_b32_e32 v002, 6, v002 - v_and_b32_e32 v124, 0x3fc0, v002 - v_add_u32_e32 v002, s29, v122 - v_lshl_or_b32 v007, v002, 14, v124 - v_or_b32_e32 v002, v007, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_mov_b32 m0, s14 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v002, s18, v009 ;.loc 2 605 0 - v_mov_b32_e32 v003, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 607 12 - v_lshrrev_b32_e32 v101, 4, v000 ;.loc 2 395 0 - s_mov_b32 s20, 0x10000 - v_cndmask_b32_e32 v003, 0, v004, vcc ;.loc 2 606 23 - v_cndmask_b32_e32 v002, 0, v002, vcc - v_alignbit_b32 v003, v003, v002, 8 ;.loc 2 355 0 - v_mad_u64_u32 v126 v127, s[26:27], v003, s28, 0 - v_lshlrev_b32_e32 v002, 6, v002 - v_and_b32_e32 v128, 0x3fc0, v002 - v_add_u32_e32 v002, s29, v126 - v_lshl_or_b32 v002, v002, 14, v128 - v_or_b32_e32 v003, v002, v105 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v003, v006, v010 ;.loc 2 355 0 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 - s_add_i32 s26, s19, 0x4000 ;.loc 2 583 0 - s_mov_b32 m0, s26 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - v_or_b32_e32 v003, v005, v010 ;.loc 2 355 0 - s_add_i32 s26, s19, 0x5000 ;.loc 2 583 0 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 - s_mov_b32 m0, s26 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - s_add_i32 s26, s19, 0x6000 ;.loc 2 583 0 - v_or_b32_e32 v003, v007, v010 ;.loc 2 355 0 - v_lshlrev_b32_e32 v003, 1, v003 ;.loc 2 615 24 - s_mov_b32 m0, s26 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen sc0 lds - s_add_i32 s26, s19, 0x7000 ;.loc 2 583 0 - v_or_b32_e32 v002, v002, v010 ;.loc 2 355 0 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_mov_b32 m0, s26 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - s_add_i32 s26, s2, 64 ;.loc 2 1046 0 - s_lshr_b32 s26, s26, 6 ;.loc 2 353 0 - v_add_lshl_u32 v002, v098, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v100, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - s_add_i32 s27, s19, 0x18000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v102, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v104, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - s_add_i32 s27, s19, 0x19000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v106, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v108, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - s_add_i32 s27, s19, 0x1a000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v110, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v112, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - s_add_i32 s27, s19, 0x1b000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v002, v114, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v116, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_add_i32 s27, s19, 0x8000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v118, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v120, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_add_i32 s27, s19, 0x9000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v122, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v124, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_add_i32 s27, s19, 0xa000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v002, v126, s26, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v128, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 615 24 - s_movk_i32 s25, 0x80 - v_or_b32_e32 v113, s2, v105 ;.loc 2 631 0 - s_add_i32 s27, s19, 0xb000 ;.loc 2 583 0 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen sc0 lds - v_xor_b32_e32 v002, v101, v000 ;.loc 2 701 0 - v_lshlrev_b32_e32 v002, 4, v002 - v_and_b32_e32 v103, 48, v002 - v_lshlrev_b32_e32 v002, 5, v000 ;.loc 2 702 0 - v_and_b32_e32 v002, 0x11e0, v002 - v_and_or_b32 v099, v034, s25, v035 ;.loc 2 713 0 - s_add_i32 s25, s2, 0x60 ;.loc 2 631 0 - v_lshlrev_b32_e32 v111, 1, v002 ;.loc 1 317 12 - v_or3_b32 v006, v001, v035, 16 ;.loc 2 696 0 - v_mov_b32_e32 v034, 0x10000 ;.loc 1 317 12 - s_lshr_b32 s28, s25, 6 ;.loc 2 353 0 - v_or_b32_e32 v117, v111, v103 ;.loc 1 317 12 - v_lshlrev_b32_e32 v109, 6, v006 - v_lshl_or_b32 v107, v099, 6, v034 - v_bitop3_b32 v090, v105, 56, s25 bitop3:0xc8 ;.loc 2 354 0 - v_add_lshl_u32 v034, v098, s28, 14 ;.loc 2 355 0 - s_waitcnt vmcnt(0) ;.loc 2 408 0 - s_barrier - ds_read_b128 v002 v003 v004 v005, v117 ;.loc 1 317 12 - v_or_b32_e32 v119, v109, v103 - v_or_b32_e32 v121, v107, v103 - v_or3_b32 v034, v034, v100, v090 ;.loc 2 355 0 - v_lshlrev_b32_e32 v115, 5, v006 ;.loc 2 702 0 - ds_read_b128 v006 v007 v008 v009, v119 ;.loc 1 317 12 - ds_read_b128 v010 v011 v012 v013, v119 offset:1024 - ds_read_b128 v014 v015 v016 v017, v119 offset:2048 - ds_read_b128 v018 v019 v020 v021, v119 offset:3072 - ds_read_b128 v022 v023 v024 v025, v119 offset:4096 - ds_read_b128 v026 v027 v028 v029, v119 offset:5120 - ds_read_b128 v030 v031 v032 v033, v119 offset:6144 - ds_read_b128 v038 v039 v040 v041, v121 - ds_read_b128 v042 v043 v044 v045, v121 offset:1024 - ds_read_b128 v046 v047 v048 v049, v121 offset:2048 - ds_read_b128 v054 v055 v056 v057, v121 offset:3072 - ds_read_b128 v094 v095 v096 v097, v121 offset:4096 - ds_read_b128 v130 v131 v132 v133, v121 offset:5120 - ds_read_b128 v134 v135 v136 v137, v121 offset:6144 - ds_read_b128 v138 v139 v140 v141, v121 offset:7168 - s_waitcnt lgkmcnt(7) ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v038 v039 v040 v041, 0 - s_add_i32 s27, s19, 0x1c000 ;.loc 2 583 0 - v_lshlrev_b32_e32 v034, 1, v034 ;.loc 2 652 24 - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v034, s[8:11], 0 offen sc0 lds - ds_read_b128 v142 v143 v144 v145, v117 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v042 v043 v044 v045, 0 - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v046 v047 v048 v049, 0 - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v054 v055 v056 v057, 0 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v094 v095 v096 v097, 0 - ds_read_b128 v146 v147 v148 v149, v119 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v130 v131 v132 v133, 0 - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v134 v135 v136 v137, 0 - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v138 v139 v140 v141, 0 - v_add_lshl_u32 v002, v102, s28, 14 ;.loc 2 355 0 - v_or3_b32 v002, v002, v104, v090 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v038 v039 v040 v041, 0 ;.loc 2 977 0 - s_add_i32 s25, s19, 0x1d000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - ds_read_b128 v002 v003 v004 v005, v119 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v094 v095 v096 v097, 0 - ds_read_b128 v150 v151 v152 v153, v119 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v138 v139 v140 v141, 0 - v_add_lshl_u32 v006, v106, s28, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v108, v090 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 - v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v038 v039 v040 v041, 0 ;.loc 2 977 0 - s_add_i32 s25, s19, 0x1e000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v110, s28, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v112, v090 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 - ds_read_b128 v034 v035 v036 v037, v119 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v094 v095 v096 v097, 0 - ds_read_b128 v050 v051 v052 v053, v119 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v138 v139 v140 v141, 0 - v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v038 v039 v040 v041, 0 - s_add_i32 s25, s19, 0x1f000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v114, s28, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v116, v090 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 - ds_read_b128 v058 v059 v060 v061, v119 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v094 v095 v096 v097, 0 - ds_read_b128 v066 v067 v068 v069, v119 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v138 v139 v140 v141, 0 - v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v038 v039 v040 v041, 0 - s_add_i32 s25, s19, 0xc000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v118, s28, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v120, v090 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 - ds_read_b128 v070 v071 v072 v073, v121 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v094 v095 v096 v097, 0 - ds_read_b128 v062 v063 v064 v065, v121 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v138 v139 v140 v141, 0 - v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v038 v039 v040 v041, 0 - s_add_i32 s25, s19, 0xd000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v122, s28, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v124, v090 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 - ds_read_b128 v074 v075 v076 v077, v121 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v094 v095 v096 v097, 0 - ds_read_b128 v078 v079 v080 v081, v121 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v138 v139 v140 v141, 0 - v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v038 v039 v040 v041, 0 - s_add_i32 s25, s19, 0xe000 ;.loc 2 583 0 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - v_add_lshl_u32 v006, v126, s28, 14 ;.loc 2 355 0 - s_add_i32 s26, s2, 0x80 ;.loc 2 1124 0 - s_add_i32 s25, s19, 0xf000 ;.loc 2 583 0 - v_or3_b32 v006, v006, v128, v090 ;.loc 2 355 0 - ds_read_b128 v082 v083 v084 v085, v121 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v094 v095 v096 v097, 0 - ds_read_b128 v086 v087 v088 v089, v121 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v138 v139 v140 v141, 0 - v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v038 v039 v040 v041, 0 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 615 24 - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen sc0 lds - s_lshr_b32 s25, s26, 6 ;.loc 2 353 0 - v_add_lshl_u32 v006, v098, s25, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v100, v105 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 - ds_read_b128 v090 v091 v092 v093, v121 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v042 v043 v044 v045, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v046 v047 v048 v049, 0 - v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v054 v055 v056 v057, 0 - v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v094 v095 v096 v097, 0 - ds_read_b128 v094 v095 v096 v097, v121 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v130 v131 v132 v133, 0 ;.loc 2 977 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v138 v139 v140 v141, 0 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v142 v143 v144 v145, v070 v071 v072 v073, a[252:255] - s_mov_b32 m0, s24 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v102, s25, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v104, v105 - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 - ds_read_b128 v046 v047 v048 v049, v117 offset:32768 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v142 v143 v144 v145, v062 v063 v064 v065, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v142 v143 v144 v145, v074 v075 v076 v077, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v142 v143 v144 v145, v078 v079 v080 v081, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v142 v143 v144 v145, v082 v083 v084 v085, a[236:239] - ds_read_b128 v038 v039 v040 v041, v119 offset:32768 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v142 v143 v144 v145, v086 v087 v088 v089, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v142 v143 v144 v145, v090 v091 v092 v093, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v142 v143 v144 v145, v094 v095 v096 v097, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v146 v147 v148 v149, v070 v071 v072 v073, a[220:223] - s_mov_b32 m0, s23 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - v_add_lshl_u32 v006, v106, s25, 14 ;.loc 2 355 0 - v_or3_b32 v006, v006, v108, v105 - ds_read_b128 v030 v031 v032 v033, v119 offset:33792 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v146 v147 v148 v149, v062 v063 v064 v065, a[216:219] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v146 v147 v148 v149, v074 v075 v076 v077, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v146 v147 v148 v149, v078 v079 v080 v081, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v146 v147 v148 v149, v082 v083 v084 v085, a[204:207] - ds_read_b128 v022 v023 v024 v025, v119 offset:34816 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v146 v147 v148 v149, v086 v087 v088 v089, a[200:203] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v146 v147 v148 v149, v090 v091 v092 v093, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v146 v147 v148 v149, v094 v095 v096 v097, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v070 v071 v072 v073, a[188:191] - v_lshlrev_b32_e32 v006, 1, v006 ;.loc 2 652 24 - s_mov_b32 m0, s22 ;.loc 2 567 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen sc0 lds - ds_read_b128 v014 v015 v016 v017, v119 offset:35840 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v062 v063 v064 v065, a[184:187] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] - ds_read_b128 v010 v011 v012 v013, v119 offset:36864 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v094 v095 v096 v097, a[160:163] - v_add_lshl_u32 v002, v110, s25, 14 ;.loc 2 355 0 - v_add_lshl_u32 v018, v114, s25, 14 - v_or3_b32 v002, v002, v112, v105 - v_or3_b32 v018, v018, v116, v105 - v_lshlrev_b32_e32 v002, 1, v002 ;.loc 2 652 24 - v_lshlrev_b32_e32 v018, 1, v018 ;.loc 2 615 24 - v_mfma_f32_16x16x32_bf16 a[156:159], v150 v151 v152 v153, v070 v071 v072 v073, a[156:159] ;.loc 2 939 0 - s_mov_b32 m0, s21 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - ds_read_b128 v006 v007 v008 v009, v119 offset:37888 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v150 v151 v152 v153, v062 v063 v064 v065, a[152:155] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v150 v151 v152 v153, v074 v075 v076 v077, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v150 v151 v152 v153, v078 v079 v080 v081, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v150 v151 v152 v153, v082 v083 v084 v085, a[140:143] - ds_read_b128 v002 v003 v004 v005, v119 offset:38912 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v150 v151 v152 v153, v086 v087 v088 v089, a[136:139] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v150 v151 v152 v153, v090 v091 v092 v093, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v150 v151 v152 v153, v094 v095 v096 v097, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v034 v035 v036 v037, v070 v071 v072 v073, a[124:127] - s_mov_b32 m0, s19 ;.loc 2 567 0 - buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds - ds_read_b128 v018 v019 v020 v021, v121 offset:32768 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v034 v035 v036 v037, v062 v063 v064 v065, a[120:123] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v034 v035 v036 v037, v074 v075 v076 v077, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v034 v035 v036 v037, v078 v079 v080 v081, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v034 v035 v036 v037, v082 v083 v084 v085, a[108:111] - ds_read_b128 v026 v027 v028 v029, v121 offset:33792 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v034 v035 v036 v037, v086 v087 v088 v089, a[104:107] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v034 v035 v036 v037, v090 v091 v092 v093, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v034 v035 v036 v037, v094 v095 v096 v097, a[96:99] - v_add_lshl_u32 v034, v118, s25, 14 ;.loc 2 355 0 - v_or3_b32 v034, v034, v120, v105 - v_lshlrev_b32_e32 v034, 1, v034 ;.loc 2 615 24 - v_mfma_f32_16x16x32_bf16 a[92:95], v050 v051 v052 v053, v070 v071 v072 v073, a[92:95] ;.loc 2 939 0 - s_mov_b32 m0, s15 ;.loc 2 567 0 - buffer_load_dwordx4 v034, s[4:7], 0 offen sc0 lds - ds_read_b128 v034 v035 v036 v037, v121 offset:34816 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v050 v051 v052 v053, v062 v063 v064 v065, a[88:91] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v050 v051 v052 v053, v074 v075 v076 v077, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v050 v051 v052 v053, v078 v079 v080 v081, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v050 v051 v052 v053, v082 v083 v084 v085, a[76:79] - ds_read_b128 v042 v043 v044 v045, v121 offset:35840 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v050 v051 v052 v053, v086 v087 v088 v089, a[72:75] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v050 v051 v052 v053, v090 v091 v092 v093, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v050 v051 v052 v053, v094 v095 v096 v097, a[64:67] - v_add_lshl_u32 v050, v122, s25, 14 ;.loc 2 355 0 - v_or3_b32 v050, v050, v124, v105 - v_lshlrev_b32_e32 v050, 1, v050 ;.loc 2 615 24 - v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v070 v071 v072 v073, a[60:63] ;.loc 2 939 0 - s_mov_b32 m0, s14 ;.loc 2 567 0 - buffer_load_dwordx4 v050, s[4:7], 0 offen sc0 lds - ds_read_b128 v050 v051 v052 v053, v121 offset:36864 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v062 v063 v064 v065, a[56:59] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] - ds_read_b128 v054 v055 v056 v057, v121 offset:37888 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v094 v095 v096 v097, a[32:35] - v_add_lshl_u32 v058, v126, s25, 14 ;.loc 2 355 0 - v_or3_b32 v058, v058, v128, v105 - v_lshlrev_b32_e32 v058, 1, v058 ;.loc 2 615 24 - v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v070 v071 v072 v073, a[28:31] ;.loc 2 939 0 - s_mov_b32 m0, s3 ;.loc 2 567 0 - buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds - ds_read_b128 v058 v059 v060 v061, v121 offset:38912 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v062 v063 v064 v065, a[24:27] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] - ds_read_b128 v062 v063 v064 v065, v121 offset:39936 ;.loc 1 317 12 - v_lshlrev_b32_e32 v070, 5, v099 ;.loc 2 719 0 - v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v094 v095 v096 v097, a[0:3] - s_add_i32 s21, s2, 0x3f80 - s_add_i32 s22, s2, 0xc0 ;.loc 2 1144 0 - v_add_u32_e32 v066, 0xa0, v113 - s_mov_b64 s[14:15], 1 - s_mov_b64 s[2:3], 0 - v_lshlrev_b32_e32 v067, 1, v115 - v_lshlrev_b32_e32 v068, 1, v070 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 - s_barrier -.LBB0_1: - s_mov_b64 s[24:25], s[14:15] ;.loc 2 0 0 is_stmt 0 - s_add_i32 s15, s22, s2 ;.loc 2 1156 31 is_stmt 1 - v_add_u32_e32 v069, s2, v066 ;.loc 3 875 16 - s_min_i32 s23, s15, s21 ;.loc 2 1156 31 - v_lshrrev_b32_e32 v070, 6, v069 ;.loc 2 353 0 - s_lshl_b32 s15, s24, 15 ;.loc 1 317 12 - s_xor_b32 s14, s24, 1 ;.loc 2 1150 0 - v_and_b32_e32 v069, 56, v069 ;.loc 2 354 0 - v_add_lshl_u32 v071, v070, v098, 14 ;.loc 2 355 0 - v_or_b32_e32 v072, s15, v103 ;.loc 1 317 12 - v_add_lshl_u32 v073, v070, v102, 14 ;.loc 2 355 0 - v_add_lshl_u32 v074, v070, v106, 14 - v_add_lshl_u32 v075, v070, v110, 14 - v_add_lshl_u32 v076, v070, v114, 14 - v_add_lshl_u32 v077, v070, v118, 14 - v_add_lshl_u32 v078, v070, v122, 14 - v_add_lshl_u32 v070, v070, v126, 14 - s_lshr_b32 s30, s23, 6 ;.loc 2 353 0 - s_lshl_b32 s24, s14, 15 ;.loc 2 582 0 - v_bitop3_b32 v079, s23, 63, v105 bitop3:0xc8 ;.loc 2 354 0 - v_or3_b32 v071, v071, v100, v069 ;.loc 2 355 0 - v_add_u32_e32 v080, v072, v111 ;.loc 1 317 12 - v_add_u32_e32 v113, v072, v067 - v_or3_b32 v073, v073, v104, v069 ;.loc 2 355 0 - v_or3_b32 v074, v074, v108, v069 - v_or3_b32 v075, v075, v112, v069 - v_or3_b32 v076, v076, v116, v069 - v_add3_u32 v115, v072, v068, s20 ;.loc 1 317 12 - v_or3_b32 v072, v077, v120, v069 ;.loc 2 355 0 - v_or3_b32 v077, v078, v124, v069 - v_or3_b32 v069, v070, v128, v069 - v_add_lshl_u32 v070, s30, v098, 14 - v_add_lshl_u32 v081, s30, v102, 14 - v_add_lshl_u32 v082, s30, v106, 14 - v_add_lshl_u32 v083, s30, v110, 14 - v_add_lshl_u32 v084, s30, v114, 14 - v_add_lshl_u32 v085, s30, v118, 14 - v_add_lshl_u32 v086, s30, v122, 14 - v_add_lshl_u32 v087, s30, v126, 14 - s_add_i32 s31, s19, s24 ;.loc 2 582 0 - v_or_b32_e32 v078, s24, v103 ;.loc 1 317 12 - v_lshlrev_b32_e32 v071, 1, v071 ;.loc 2 652 24 - v_lshlrev_b32_e32 v088, 1, v073 - v_lshlrev_b32_e32 v089, 1, v074 - v_lshlrev_b32_e32 v094, 1, v075 - v_or3_b32 v123, v070, v100, v079 ;.loc 2 355 0 - v_or3_b32 v129, v081, v104, v079 - v_or3_b32 v166, v082, v108, v079 - v_or3_b32 v167, v083, v112, v079 - v_or3_b32 v168, v084, v116, v079 - v_or3_b32 v170, v085, v120, v079 - v_or3_b32 v171, v086, v124, v079 - v_or3_b32 v172, v087, v128, v079 - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v046 v047 v048 v049, v018 v019 v020 v021, a[252:255] - s_add_i32 s15, s15, s19 ;.loc 2 582 0 - s_add_i32 s30, s31, 0x4000 - s_add_i32 s33, s31, 0x14000 ;.loc 2 583 0 - s_add_i32 s34, s31, 0x5000 ;.loc 2 582 0 - s_add_i32 s35, s31, 0x15000 ;.loc 2 583 0 - s_add_i32 s36, s31, 0x6000 ;.loc 2 582 0 - s_add_i32 s37, s31, 0x16000 ;.loc 2 583 0 - s_add_i32 s38, s31, 0x7000 ;.loc 2 582 0 - s_add_i32 s31, s31, 0x17000 ;.loc 2 583 0 - v_lshlrev_b32_e32 v117, 1, v076 ;.loc 2 615 24 - v_lshlrev_b32_e32 v119, 1, v072 - v_lshlrev_b32_e32 v121, 1, v077 - v_lshlrev_b32_e32 v069, 1, v069 - v_add_u32_e32 v125, v078, v111 ;.loc 1 317 12 - v_add_u32_e32 v127, v078, v067 - v_add3_u32 v169, v078, v068, s20 - s_mov_b32 m0, s33 ;.loc 2 567 0 - buffer_load_dwordx4 v071, s[8:11], 0 offen sc0 lds - ds_read_b128 v070 v071 v072 v073, v080 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v046 v047 v048 v049, v026 v027 v028 v029, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v046 v047 v048 v049, v034 v035 v036 v037, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v046 v047 v048 v049, v042 v043 v044 v045, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v046 v047 v048 v049, v050 v051 v052 v053, a[236:239] - ds_read_b128 v074 v075 v076 v077, v113 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v046 v047 v048 v049, v054 v055 v056 v057, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v046 v047 v048 v049, v058 v059 v060 v061, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v046 v047 v048 v049, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v038 v039 v040 v041, v018 v019 v020 v021, a[220:223] - s_mov_b32 m0, s35 ;.loc 2 567 0 - buffer_load_dwordx4 v088, s[8:11], 0 offen sc0 lds - ds_read_b128 v078 v079 v080 v081, v113 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v038 v039 v040 v041, v026 v027 v028 v029, a[216:219] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v038 v039 v040 v041, v034 v035 v036 v037, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v038 v039 v040 v041, v042 v043 v044 v045, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v038 v039 v040 v041, v050 v051 v052 v053, a[204:207] - ds_read_b128 v082 v083 v084 v085, v113 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v038 v039 v040 v041, v054 v055 v056 v057, a[200:203] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v038 v039 v040 v041, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v038 v039 v040 v041, v062 v063 v064 v065, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v030 v031 v032 v033, v018 v019 v020 v021, a[188:191] - s_mov_b32 m0, s37 ;.loc 2 567 0 - buffer_load_dwordx4 v089, s[8:11], 0 offen sc0 lds - ds_read_b128 v086 v087 v088 v089, v113 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v030 v031 v032 v033, v026 v027 v028 v029, a[184:187] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v030 v031 v032 v033, v034 v035 v036 v037, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v030 v031 v032 v033, v042 v043 v044 v045, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v030 v031 v032 v033, v050 v051 v052 v053, a[172:175] - ds_read_b128 v090 v091 v092 v093, v113 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v030 v031 v032 v033, v054 v055 v056 v057, a[168:171] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v030 v031 v032 v033, v058 v059 v060 v061, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v030 v031 v032 v033, v062 v063 v064 v065, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v022 v023 v024 v025, v018 v019 v020 v021, a[156:159] - s_mov_b32 m0, s31 ;.loc 2 567 0 - buffer_load_dwordx4 v094, s[8:11], 0 offen sc0 lds - ds_read_b128 v094 v095 v096 v097, v113 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v022 v023 v024 v025, v026 v027 v028 v029, a[152:155] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v022 v023 v024 v025, v034 v035 v036 v037, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v022 v023 v024 v025, v042 v043 v044 v045, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v022 v023 v024 v025, v050 v051 v052 v053, a[140:143] - ds_read_b128 v130 v131 v132 v133, v113 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v022 v023 v024 v025, v054 v055 v056 v057, a[136:139] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v022 v023 v024 v025, v058 v059 v060 v061, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v022 v023 v024 v025, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - s_mov_b32 m0, s30 ;.loc 2 567 0 - buffer_load_dwordx4 v117, s[4:7], 0 offen sc0 lds - ds_read_b128 v134 v135 v136 v137, v115 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v026 v027 v028 v029, a[120:123] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v034 v035 v036 v037, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v042 v043 v044 v045, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v050 v051 v052 v053, a[108:111] - ds_read_b128 v138 v139 v140 v141, v115 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - s_mov_b32 m0, s34 ;.loc 2 567 0 - buffer_load_dwordx4 v119, s[4:7], 0 offen sc0 lds - ds_read_b128 v142 v143 v144 v145, v115 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v026 v027 v028 v029, a[88:91] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v034 v035 v036 v037, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v042 v043 v044 v045, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v050 v051 v052 v053, a[76:79] - ds_read_b128 v146 v147 v148 v149, v115 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - s_mov_b32 m0, s36 ;.loc 2 567 0 - buffer_load_dwordx4 v121, s[4:7], 0 offen sc0 lds - ds_read_b128 v150 v151 v152 v153, v115 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v026 v027 v028 v029, a[56:59] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v034 v035 v036 v037, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v042 v043 v044 v045, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v050 v051 v052 v053, a[44:47] - ds_read_b128 v154 v155 v156 v157, v115 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - s_mov_b32 m0, s38 ;.loc 2 567 0 - buffer_load_dwordx4 v069, s[4:7], 0 offen sc0 lds - ds_read_b128 v158 v159 v160 v161, v115 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v026 v027 v028 v029, a[24:27] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v034 v035 v036 v037, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v042 v043 v044 v045, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v050 v051 v052 v053, a[12:15] - ds_read_b128 v162 v163 v164 v165, v115 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - v_lshlrev_b32_e32 v002, 1, v123 ;.loc 2 652 24 - v_lshlrev_b32_e32 v003, 1, v129 - v_lshlrev_b32_e32 v004, 1, v166 - v_lshlrev_b32_e32 v005, 1, v167 - v_lshlrev_b32_e32 v018, 1, v168 ;.loc 2 615 24 - v_lshlrev_b32_e32 v034, 1, v170 - v_lshlrev_b32_e32 v050, 1, v171 - v_lshlrev_b32_e32 v058, 1, v172 - s_add_i32 s23, s15, 0x10000 ;.loc 2 583 0 - s_add_i32 s24, s15, 0x11000 - s_add_i32 s25, s15, 0x12000 - s_add_i32 s26, s15, 0x13000 - s_add_i32 s27, s15, 0x1000 - s_add_i32 s28, s15, 0x2000 - s_add_i32 s29, s15, 0x3000 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v070 v071 v072 v073, v134 v135 v136 v137, a[252:255] - s_mov_b32 m0, s23 ;.loc 2 567 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen sc0 lds - ds_read_b128 v046 v047 v048 v049, v125 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v070 v071 v072 v073, v138 v139 v140 v141, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v070 v071 v072 v073, v142 v143 v144 v145, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v070 v071 v072 v073, v146 v147 v148 v149, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v070 v071 v072 v073, v150 v151 v152 v153, a[236:239] - ds_read_b128 v038 v039 v040 v041, v127 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v070 v071 v072 v073, v154 v155 v156 v157, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v070 v071 v072 v073, v158 v159 v160 v161, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v070 v071 v072 v073, v162 v163 v164 v165, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v074 v075 v076 v077, v134 v135 v136 v137, a[220:223] - s_mov_b32 m0, s24 ;.loc 2 567 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen sc0 lds - ds_read_b128 v030 v031 v032 v033, v127 offset:1024 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v074 v075 v076 v077, v138 v139 v140 v141, a[216:219] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v074 v075 v076 v077, v142 v143 v144 v145, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v074 v075 v076 v077, v146 v147 v148 v149, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v074 v075 v076 v077, v150 v151 v152 v153, a[204:207] - ds_read_b128 v022 v023 v024 v025, v127 offset:2048 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v074 v075 v076 v077, v154 v155 v156 v157, a[200:203] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v074 v075 v076 v077, v158 v159 v160 v161, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v074 v075 v076 v077, v162 v163 v164 v165, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v078 v079 v080 v081, v134 v135 v136 v137, a[188:191] - s_mov_b32 m0, s25 ;.loc 2 567 0 - buffer_load_dwordx4 v004, s[8:11], 0 offen sc0 lds - ds_read_b128 v014 v015 v016 v017, v127 offset:3072 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v078 v079 v080 v081, v138 v139 v140 v141, a[184:187] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v078 v079 v080 v081, v142 v143 v144 v145, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v078 v079 v080 v081, v146 v147 v148 v149, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v078 v079 v080 v081, v150 v151 v152 v153, a[172:175] - ds_read_b128 v010 v011 v012 v013, v127 offset:4096 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v078 v079 v080 v081, v154 v155 v156 v157, a[168:171] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v078 v079 v080 v081, v158 v159 v160 v161, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v078 v079 v080 v081, v162 v163 v164 v165, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v082 v083 v084 v085, v134 v135 v136 v137, a[156:159] - s_mov_b32 m0, s26 ;.loc 2 567 0 - buffer_load_dwordx4 v005, s[8:11], 0 offen sc0 lds - ds_read_b128 v006 v007 v008 v009, v127 offset:5120 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v082 v083 v084 v085, v138 v139 v140 v141, a[152:155] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v082 v083 v084 v085, v142 v143 v144 v145, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v082 v083 v084 v085, v146 v147 v148 v149, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v082 v083 v084 v085, v150 v151 v152 v153, a[140:143] - ds_read_b128 v002 v003 v004 v005, v127 offset:6144 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v082 v083 v084 v085, v154 v155 v156 v157, a[136:139] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v082 v083 v084 v085, v158 v159 v160 v161, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v082 v083 v084 v085, v162 v163 v164 v165, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v086 v087 v088 v089, v134 v135 v136 v137, a[124:127] - s_mov_b32 m0, s15 ;.loc 2 567 0 - buffer_load_dwordx4 v018, s[4:7], 0 offen sc0 lds - ds_read_b128 v018 v019 v020 v021, v169 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v086 v087 v088 v089, v138 v139 v140 v141, a[120:123] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v086 v087 v088 v089, v142 v143 v144 v145, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v086 v087 v088 v089, v146 v147 v148 v149, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v086 v087 v088 v089, v150 v151 v152 v153, a[108:111] - ds_read_b128 v026 v027 v028 v029, v169 offset:1024 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v086 v087 v088 v089, v154 v155 v156 v157, a[104:107] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v086 v087 v088 v089, v158 v159 v160 v161, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v086 v087 v088 v089, v162 v163 v164 v165, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v090 v091 v092 v093, v134 v135 v136 v137, a[92:95] - s_mov_b32 m0, s27 ;.loc 2 567 0 - buffer_load_dwordx4 v034, s[4:7], 0 offen sc0 lds - ds_read_b128 v034 v035 v036 v037, v169 offset:2048 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v090 v091 v092 v093, v138 v139 v140 v141, a[88:91] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v090 v091 v092 v093, v142 v143 v144 v145, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v090 v091 v092 v093, v146 v147 v148 v149, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v090 v091 v092 v093, v150 v151 v152 v153, a[76:79] - ds_read_b128 v042 v043 v044 v045, v169 offset:3072 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v090 v091 v092 v093, v154 v155 v156 v157, a[72:75] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v090 v091 v092 v093, v158 v159 v160 v161, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v090 v091 v092 v093, v162 v163 v164 v165, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v094 v095 v096 v097, v134 v135 v136 v137, a[60:63] - s_mov_b32 m0, s28 ;.loc 2 567 0 - buffer_load_dwordx4 v050, s[4:7], 0 offen sc0 lds - ds_read_b128 v050 v051 v052 v053, v169 offset:4096 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v094 v095 v096 v097, v138 v139 v140 v141, a[56:59] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v094 v095 v096 v097, v142 v143 v144 v145, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v094 v095 v096 v097, v146 v147 v148 v149, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v094 v095 v096 v097, v150 v151 v152 v153, a[44:47] - ds_read_b128 v054 v055 v056 v057, v169 offset:5120 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v094 v095 v096 v097, v154 v155 v156 v157, a[40:43] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v094 v095 v096 v097, v158 v159 v160 v161, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v094 v095 v096 v097, v162 v163 v164 v165, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v130 v131 v132 v133, v134 v135 v136 v137, a[28:31] - s_mov_b32 m0, s29 ;.loc 2 567 0 - buffer_load_dwordx4 v058, s[4:7], 0 offen sc0 lds - ds_read_b128 v058 v059 v060 v061, v169 offset:6144 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v130 v131 v132 v133, v138 v139 v140 v141, a[24:27] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v130 v131 v132 v133, v142 v143 v144 v145, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v130 v131 v132 v133, v146 v147 v148 v149, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v130 v131 v132 v133, v150 v151 v152 v153, a[12:15] - ds_read_b128 v062 v063 v064 v065, v169 offset:7168 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v130 v131 v132 v133, v154 v155 v156 v157, a[8:11] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v130 v131 v132 v133, v158 v159 v160 v161, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v130 v131 v132 v133, v162 v163 v164 v165, a[0:3] - s_add_u32 s2, s2, 64 ;.loc 2 1144 0 - s_addc_u32 s3, s3, 0 - s_cmp_lg_u64 s[2:3], 0x3f40 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 - s_barrier -.JUMP.LBB0_1: - s_cbranch_scc1 .LBB0_1 ;.loc 2 1144 0 - s_load_dwordx2 s[0:1], s[0:1], 0x0 ;.loc 1 289 24 - s_lshl_b32 s4, s14, 14 ;.loc 1 0 0 is_stmt 0 - s_lshl_b32 s4, s4, 1 ;.loc 1 317 12 is_stmt 1 - v_add3_u32 v067, v111, s4, v103 - s_waitcnt lgkmcnt(0) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v046 v047 v048 v049, v018 v019 v020 v021, a[252:255] - ds_read_b128 v068 v069 v070 v071, v067 offset:16384 ;.loc 1 317 12 - v_add3_u32 v067, v109, s4, v103 - v_mfma_f32_16x16x32_bf16 a[248:251], v046 v047 v048 v049, v026 v027 v028 v029, a[248:251] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[244:247], v046 v047 v048 v049, v034 v035 v036 v037, a[244:247] - v_mfma_f32_16x16x32_bf16 a[240:243], v046 v047 v048 v049, v042 v043 v044 v045, a[240:243] - v_mfma_f32_16x16x32_bf16 a[236:239], v046 v047 v048 v049, v050 v051 v052 v053, a[236:239] - ds_read_b128 v072 v073 v074 v075, v067 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[232:235], v046 v047 v048 v049, v054 v055 v056 v057, a[232:235] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[228:231], v046 v047 v048 v049, v058 v059 v060 v061, a[228:231] - v_mfma_f32_16x16x32_bf16 a[224:227], v046 v047 v048 v049, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v038 v039 v040 v041, v018 v019 v020 v021, a[220:223] - ds_read_b128 v076 v077 v078 v079, v067 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v038 v039 v040 v041, v026 v027 v028 v029, a[216:219] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v038 v039 v040 v041, v034 v035 v036 v037, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v038 v039 v040 v041, v042 v043 v044 v045, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v038 v039 v040 v041, v050 v051 v052 v053, a[204:207] - ds_read_b128 v080 v081 v082 v083, v067 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v038 v039 v040 v041, v054 v055 v056 v057, a[200:203] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v038 v039 v040 v041, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v038 v039 v040 v041, v062 v063 v064 v065, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v030 v031 v032 v033, v018 v019 v020 v021, a[188:191] - ds_read_b128 v084 v085 v086 v087, v067 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v030 v031 v032 v033, v026 v027 v028 v029, a[184:187] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v030 v031 v032 v033, v034 v035 v036 v037, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v030 v031 v032 v033, v042 v043 v044 v045, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v030 v031 v032 v033, v050 v051 v052 v053, a[172:175] - ds_read_b128 v046 v047 v048 v049, v067 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v030 v031 v032 v033, v054 v055 v056 v057, a[168:171] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v030 v031 v032 v033, v058 v059 v060 v061, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v030 v031 v032 v033, v062 v063 v064 v065, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v022 v023 v024 v025, v018 v019 v020 v021, a[156:159] - ds_read_b128 v038 v039 v040 v041, v067 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v022 v023 v024 v025, v026 v027 v028 v029, a[152:155] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v022 v023 v024 v025, v034 v035 v036 v037, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v022 v023 v024 v025, v042 v043 v044 v045, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v022 v023 v024 v025, v050 v051 v052 v053, a[140:143] - ds_read_b128 v030 v031 v032 v033, v067 offset:22528 ;.loc 1 317 12 - v_add3_u32 v067, v107, s4, v103 - s_mov_b32 s3, 0x27000 - s_mov_b32 s2, -1 - s_and_b32 s1, s1, 0xffff ;.loc 1 289 24 - v_mfma_f32_16x16x32_bf16 a[136:139], v022 v023 v024 v025, v054 v055 v056 v057, a[136:139] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v022 v023 v024 v025, v058 v059 v060 v061, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v022 v023 v024 v025, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - ds_read_b128 v022 v023 v024 v025, v067 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v026 v027 v028 v029, a[120:123] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v034 v035 v036 v037, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v042 v043 v044 v045, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v050 v051 v052 v053, a[108:111] - ds_read_b128 v088 v089 v090 v091, v067 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v054 v055 v056 v057, a[104:107] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - ds_read_b128 v014 v015 v016 v017, v067 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v026 v027 v028 v029, a[88:91] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v034 v035 v036 v037, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v042 v043 v044 v045, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v050 v051 v052 v053, a[76:79] - ds_read_b128 v092 v093 v094 v095, v067 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v054 v055 v056 v057, a[72:75] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - ds_read_b128 v010 v011 v012 v013, v067 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v026 v027 v028 v029, a[56:59] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v034 v035 v036 v037, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v042 v043 v044 v045, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v050 v051 v052 v053, a[44:47] - ds_read_b128 v102 v103 v104 v105, v067 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v054 v055 v056 v057, a[40:43] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - ds_read_b128 v006 v007 v008 v009, v067 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v026 v027 v028 v029, a[24:27] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v034 v035 v036 v037, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v042 v043 v044 v045, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v050 v051 v052 v053, a[12:15] - ds_read_b128 v018 v019 v020 v021, v067 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v054 v055 v056 v057, a[8:11] ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - v_or_b32_e32 v066, 0x70, v001 ;.loc 2 695 0 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 421 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 939 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v022 v023 v024 v025, a[252:255] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v092 v093 v094 v095, a[240:243] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v102 v103 v104 v105, a[232:235] - s_waitcnt lgkmcnt(1) - v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] - s_waitcnt lgkmcnt(0) - v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v022 v023 v024 v025, a[220:223] - v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v092 v093 v094 v095, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] - v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v102 v103 v104 v105, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v022 v023 v024 v025, a[188:191] - v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v092 v093 v094 v095, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] - v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v102 v103 v104 v105, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v022 v023 v024 v025, a[156:159] - v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v092 v093 v094 v095, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] - v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v102 v103 v104 v105, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v022 v023 v024 v025, a[124:127] - v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v092 v093 v094 v095, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] - v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v102 v103 v104 v105, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v022 v023 v024 v025, a[92:95] - v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v088 v089 v090 v091, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v014 v015 v016 v017, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v092 v093 v094 v095, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v010 v011 v012 v013, a[76:79] - v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v102 v103 v104 v105, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v006 v007 v008 v009, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v018 v019 v020 v021, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v038 v039 v040 v041, v022 v023 v024 v025, a[60:63] - v_mfma_f32_16x16x32_bf16 a[56:59], v038 v039 v040 v041, v088 v089 v090 v091, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v038 v039 v040 v041, v014 v015 v016 v017, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v038 v039 v040 v041, v092 v093 v094 v095, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v038 v039 v040 v041, v010 v011 v012 v013, a[44:47] - v_mfma_f32_16x16x32_bf16 a[40:43], v038 v039 v040 v041, v102 v103 v104 v105, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v038 v039 v040 v041, v006 v007 v008 v009, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v038 v039 v040 v041, v018 v019 v020 v021, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v022 v023 v024 v025, a[28:31] - v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v088 v089 v090 v091, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v014 v015 v016 v017, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v092 v093 v094 v095, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v010 v011 v012 v013, a[12:15] - v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v102 v103 v104 v105, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v006 v007 v008 v009, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v018 v019 v020 v021, a[0:3] - v_lshlrev_b32_e32 v002, 2, v101 ;.loc 2 1298 0 - v_accvgpr_read_b32 v003, a252 ;.loc 2 1308 22 - v_and_or_b32 v004, v002, 12, v001 ;.loc 2 1306 0 - v_cvt_pk_bf16_f32 v005, v003, s0 ;.loc 2 1309 0 - v_lshlrev_b32_e32 v003, 1, v099 ;.loc 1 330 12 - v_lshl_or_b32 v004, v004, 9, v003 - s_barrier ;.loc 2 1300 0 - ds_write_b16 v004, v005 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a253 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a254 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a255 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a248 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a249 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a250 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a251 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a244 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a245 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a246 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a247 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a240 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a241 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a242 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a243 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a236 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a237 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a238 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a239 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a232 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a233 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a234 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a235 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a228 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a229 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a230 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a231 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a224 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a225 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a226 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a227 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:1760 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a220 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a221 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a222 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a223 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a216 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a217 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a218 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a219 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9760 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a212 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8256 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a213 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8768 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a214 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9280 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a215 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9792 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a208 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8288 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a209 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8800 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a210 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9312 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a211 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9824 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a204 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8320 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a205 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8832 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a206 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9344 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a207 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9856 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a200 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8352 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a201 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8864 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a202 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9376 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a203 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9888 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a196 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8384 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a197 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8896 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a198 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9408 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a199 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9920 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a192 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8416 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a193 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:8928 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a194 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9440 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a195 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:9952 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a188 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16384 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a189 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16896 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a190 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17408 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a191 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17920 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a184 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16416 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a185 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16928 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a186 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17440 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a187 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17952 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a180 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16448 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a181 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16960 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a182 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17472 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a183 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17984 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a176 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16480 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a177 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16992 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a178 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17504 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a179 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:18016 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a172 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a173 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a174 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a175 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:18048 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a168 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a169 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a170 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a171 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:18080 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a164 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a165 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a166 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a167 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:18112 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a160 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:16608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a161 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a162 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:17632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a163 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v005 offset:18144 ;.loc 1 330 12 - v_or3_b32 v001, v001, 48, v002 ;.loc 2 1306 0 - v_accvgpr_read_b32 v005, a156 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 - ds_write_b16 v001, v005 - v_accvgpr_read_b32 v005, a157 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a158 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a159 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a152 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a153 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a154 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a155 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a148 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a149 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a150 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a151 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a144 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a145 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a146 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a147 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a140 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a141 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a142 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a143 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a136 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a137 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a138 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a139 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a132 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a133 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a134 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a135 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a128 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a129 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a130 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a131 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v005 offset:1760 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a124 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32768 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a125 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33280 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a126 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33792 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a127 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34304 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a120 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32800 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a121 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33312 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a122 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33824 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a123 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34336 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a116 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32832 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a117 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33344 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a118 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33856 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a119 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34368 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a112 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32864 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a113 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33376 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a114 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33888 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a115 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34400 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a108 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32896 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a109 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33408 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a110 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33920 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a111 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34432 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a104 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32928 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a105 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33440 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a106 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33952 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a107 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34464 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a100 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32960 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a101 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33472 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a102 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33984 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a103 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34496 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a96 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:32992 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a97 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:33504 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a98 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34016 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a99 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:34528 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a92 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:40960 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a93 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41472 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a94 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41984 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a95 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42496 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a88 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:40992 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a89 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41504 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a90 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42016 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a91 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42528 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a84 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41024 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a85 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41536 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a86 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42048 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a87 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42560 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a80 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41056 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a81 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41568 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a82 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42080 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a83 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42592 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a76 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41088 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a77 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41600 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a78 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42112 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a79 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42624 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a72 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41120 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a73 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41632 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a74 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42144 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a75 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42656 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a68 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41152 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a69 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41664 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a70 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42176 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a71 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42688 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a64 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41184 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a65 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:41696 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a66 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42208 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a67 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:42720 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a60 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49152 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a61 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49664 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a62 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50176 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a63 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50688 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a56 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49184 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a57 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49696 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a58 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50208 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a59 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50720 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a52 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49216 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a53 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49728 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a54 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50240 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a55 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50752 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a48 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49248 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a49 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49760 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a50 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50272 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a51 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50784 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a44 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49280 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a45 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49792 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a46 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50304 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a47 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50816 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a40 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49312 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a41 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49824 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a42 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50336 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a43 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50848 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a36 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49344 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a37 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49856 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a38 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50368 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a39 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50880 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a32 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49376 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a33 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:49888 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a34 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50400 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a35 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1309 0 - ds_write_b16 v004, v001 offset:50912 ;.loc 1 330 12 - v_or_b32_e32 v001, v002, v066 ;.loc 2 1306 0 - v_accvgpr_read_b32 v002, a28 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 - ds_write_b16 v001, v002 - v_accvgpr_read_b32 v002, a29 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a30 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a31 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a24 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a25 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a26 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a27 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a20 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a21 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a22 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a23 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a16 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a17 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a18 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a19 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a12 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a13 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a14 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a15 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a8 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a9 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a10 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a11 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a4 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a5 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a6 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a7 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a0 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a1 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a2 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - ds_write_b16 v001, v002 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a3 ;.loc 2 1308 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1309 0 - v_lshrrev_b32_e32 v004, 5, v000 ;.loc 2 1352 0 - ds_write_b16 v001, v002 offset:1760 ;.loc 1 330 12 - v_or_b32_e32 v002, s18, v004 ;.loc 2 1354 0 - v_mov_b32_e32 v003, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 1355 28 - v_lshlrev_b32_e32 v003, 3, v000 - s_waitcnt lgkmcnt(0) ;.loc 2 1349 0 - s_barrier - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_4: - s_cbranch_execz .LBB0_4 - v_and_b32_e32 v000, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v001, 1, v000 ;.loc 1 317 12 - v_lshl_or_b32 v001, v004, 9, v001 - ds_read_b128 v006 v007 v008 v009, v001 - v_or_b32_e32 v000, s16, v000 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v001, 13, v002 - v_add_lshl_u32 v000, v000, v001, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_4: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_6: - s_cbranch_execz .LBB0_6 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_6: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 16, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_8: - s_cbranch_execz .LBB0_8 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_8: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 24, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_10: - s_cbranch_execz .LBB0_10 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_10: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 32, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_12: - s_cbranch_execz .LBB0_12 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_12: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 40, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_14: - s_cbranch_execz .LBB0_14 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_14: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 48, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_16: - s_cbranch_execz .LBB0_16 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_16: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 56, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_18: - s_cbranch_execz .LBB0_18 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_18: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 64, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_20: - s_cbranch_execz .LBB0_20 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_20: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x48, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_22: - s_cbranch_execz .LBB0_22 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_22: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x50, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_24: - s_cbranch_execz .LBB0_24 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_24: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x58, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_26: - s_cbranch_execz .LBB0_26 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_26: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x60, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_28: - s_cbranch_execz .LBB0_28 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_28: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x68, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_30: - s_cbranch_execz .LBB0_30 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_30: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x70, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_32: - s_cbranch_execz .LBB0_32 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_32: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x78, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_34: - s_cbranch_execz .LBB0_34 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_34: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x80, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_36: - s_cbranch_execz .LBB0_36 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_36: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x88, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_38: - s_cbranch_execz .LBB0_38 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_38: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x90, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_40: - s_cbranch_execz .LBB0_40 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_40: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x98, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_42: - s_cbranch_execz .LBB0_42 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_42: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xa0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_44: - s_cbranch_execz .LBB0_44 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_44: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xa8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_46: - s_cbranch_execz .LBB0_46 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_46: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xb0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_48: - s_cbranch_execz .LBB0_48 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_48: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xb8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_50: - s_cbranch_execz .LBB0_50 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_50: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xc0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_52: - s_cbranch_execz .LBB0_52 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_52: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xc8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_54: - s_cbranch_execz .LBB0_54 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_54: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xd0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_56: - s_cbranch_execz .LBB0_56 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_56: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xd8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_58: - s_cbranch_execz .LBB0_58 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_58: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xe0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_60: - s_cbranch_execz .LBB0_60 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_60: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xe8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_62: - s_cbranch_execz .LBB0_62 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_62: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xf0, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_64: - s_cbranch_execz .LBB0_64 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_64: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xf8, v004 ;.loc 2 1352 0 is_stmt 1 - v_or_b32_e32 v000, s18, v002 ;.loc 2 1354 0 - v_mov_b32_e32 v001, s17 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1355 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1356 0 -.JUMP.LBB0_66: - s_cbranch_execz .LBB0_66 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1353 0 - v_lshlrev_b32_e32 v003, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v003 - ds_read_b128 v002 v003 v004 v005, v002 - v_or_b32_e32 v001, s16, v001 ;.loc 2 1364 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen -.LBB0_66: - s_endpgm ;.loc 2 325 0 -.Lfunc_end0: - .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .cfi_endproc - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 173 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 - .p2alignl 6, 3212836864 - .fill 256, 4, 3212836864 - .section .AMDGPU.gpr_maximums,"",@progbits - .set amdgpu.max_num_vgpr, 0 - .set amdgpu.max_num_agpr, 0 - .set amdgpu.max_num_sgpr, 0 - .set amdgpu.max_num_named_barrier, 0 - .text - .section .debug_abbrev,"",@progbits - .byte 1 - .byte 17 - .byte 0 - .byte 37 - .byte 14 - .byte 19 - .byte 5 - .byte 3 - .byte 14 - .byte 16 - .byte 23 - .byte 17 - .byte 1 - .byte 18 - .byte 6 - .byte 0 - .byte 0 - .byte 0 - .section .debug_info,"",@progbits -... - .end_amdgpu_metadata - .section .debug_line,"",@progbits -.Lline_table_start0: diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt deleted file mode 100644 index ee40112fa..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_hotloop.txt +++ /dev/null @@ -1,184 +0,0 @@ -Hot-loop table for main loop .LBB0_1 (ISA: resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s) -Tags: M=v_mfma r=ds_read L=buffer_load B=s_barrier -Per loop: M=128 r=32 L=16 B=2 -============================================================ -M v_mfma_f32_16x16x32_bf16 a[252:255] -r ds_read_b128 v082 v083 v084 v085 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v086 v087 v088 v089 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v071 -r ds_read_b128 v090 v091 v092 v093 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v110 v111 v112 v113 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -L buffer_load_dwordx4 v073 -M v_mfma_f32_16x16x32_bf16 a[188:191] -r ds_read_b128 v114 v115 v116 v117 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v118 v119 v120 v121 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -L buffer_load_dwordx4 v075 -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -r ds_read_b128 v122 v123 v124 v125 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v126 v127 v128 v129 -M v_mfma_f32_16x16x32_bf16 a[136:139] -L buffer_load_dwordx4 v077 -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -r ds_read_b128 v130 v131 v132 v133 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -L buffer_load_dwordx4 v079 -r ds_read_b128 v134 v135 v136 v137 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -r ds_read_b128 v138 v139 v140 v141 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -L buffer_load_dwordx4 v081 -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v142 v143 v144 v145 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -r ds_read_b128 v146 v147 v148 v149 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -L buffer_load_dwordx4 v107 -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v150 v151 v152 v153 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -r ds_read_b128 v154 v155 v156 v157 -M v_mfma_f32_16x16x32_bf16 a[24:27] -L buffer_load_dwordx4 v109 -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v158 v159 v160 v161 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 0) -------- -M v_mfma_f32_16x16x32_bf16 a[252:255] -L buffer_load_dwordx4 v162 -r ds_read_b128 v054 v055 v056 v057 -M v_mfma_f32_16x16x32_bf16 a[248:251] -M v_mfma_f32_16x16x32_bf16 a[244:247] -M v_mfma_f32_16x16x32_bf16 a[240:243] -M v_mfma_f32_16x16x32_bf16 a[236:239] -r ds_read_b128 v042 v043 v044 v045 -M v_mfma_f32_16x16x32_bf16 a[232:235] -M v_mfma_f32_16x16x32_bf16 a[228:231] -M v_mfma_f32_16x16x32_bf16 a[224:227] -M v_mfma_f32_16x16x32_bf16 a[220:223] -L buffer_load_dwordx4 v163 -r ds_read_b128 v034 v035 v036 v037 -M v_mfma_f32_16x16x32_bf16 a[216:219] -M v_mfma_f32_16x16x32_bf16 a[212:215] -M v_mfma_f32_16x16x32_bf16 a[208:211] -M v_mfma_f32_16x16x32_bf16 a[204:207] -r ds_read_b128 v026 v027 v028 v029 -M v_mfma_f32_16x16x32_bf16 a[200:203] -M v_mfma_f32_16x16x32_bf16 a[196:199] -M v_mfma_f32_16x16x32_bf16 a[192:195] -M v_mfma_f32_16x16x32_bf16 a[188:191] -L buffer_load_dwordx4 v164 -r ds_read_b128 v014 v015 v016 v017 -M v_mfma_f32_16x16x32_bf16 a[184:187] -M v_mfma_f32_16x16x32_bf16 a[180:183] -M v_mfma_f32_16x16x32_bf16 a[176:179] -M v_mfma_f32_16x16x32_bf16 a[172:175] -r ds_read_b128 v010 v011 v012 v013 -M v_mfma_f32_16x16x32_bf16 a[168:171] -M v_mfma_f32_16x16x32_bf16 a[164:167] -M v_mfma_f32_16x16x32_bf16 a[160:163] -M v_mfma_f32_16x16x32_bf16 a[156:159] -L buffer_load_dwordx4 v165 -r ds_read_b128 v006 v007 v008 v009 -M v_mfma_f32_16x16x32_bf16 a[152:155] -M v_mfma_f32_16x16x32_bf16 a[148:151] -M v_mfma_f32_16x16x32_bf16 a[144:147] -M v_mfma_f32_16x16x32_bf16 a[140:143] -r ds_read_b128 v002 v003 v004 v005 -M v_mfma_f32_16x16x32_bf16 a[136:139] -M v_mfma_f32_16x16x32_bf16 a[132:135] -M v_mfma_f32_16x16x32_bf16 a[128:131] -M v_mfma_f32_16x16x32_bf16 a[124:127] -L buffer_load_dwordx4 v166 -r ds_read_b128 v018 v019 v020 v021 -M v_mfma_f32_16x16x32_bf16 a[120:123] -M v_mfma_f32_16x16x32_bf16 a[116:119] -M v_mfma_f32_16x16x32_bf16 a[112:115] -M v_mfma_f32_16x16x32_bf16 a[108:111] -r ds_read_b128 v022 v023 v024 v025 -M v_mfma_f32_16x16x32_bf16 a[104:107] -M v_mfma_f32_16x16x32_bf16 a[100:103] -M v_mfma_f32_16x16x32_bf16 a[96:99] -M v_mfma_f32_16x16x32_bf16 a[92:95] -L buffer_load_dwordx4 v167 -r ds_read_b128 v030 v031 v032 v033 -M v_mfma_f32_16x16x32_bf16 a[88:91] -M v_mfma_f32_16x16x32_bf16 a[84:87] -M v_mfma_f32_16x16x32_bf16 a[80:83] -M v_mfma_f32_16x16x32_bf16 a[76:79] -r ds_read_b128 v038 v039 v040 v041 -M v_mfma_f32_16x16x32_bf16 a[72:75] -M v_mfma_f32_16x16x32_bf16 a[68:71] -M v_mfma_f32_16x16x32_bf16 a[64:67] -M v_mfma_f32_16x16x32_bf16 a[60:63] -L buffer_load_dwordx4 v168 -r ds_read_b128 v046 v047 v048 v049 -M v_mfma_f32_16x16x32_bf16 a[56:59] -M v_mfma_f32_16x16x32_bf16 a[52:55] -M v_mfma_f32_16x16x32_bf16 a[48:51] -M v_mfma_f32_16x16x32_bf16 a[44:47] -r ds_read_b128 v050 v051 v052 v053 -M v_mfma_f32_16x16x32_bf16 a[40:43] -M v_mfma_f32_16x16x32_bf16 a[36:39] -M v_mfma_f32_16x16x32_bf16 a[32:35] -M v_mfma_f32_16x16x32_bf16 a[28:31] -L buffer_load_dwordx4 v169 -r ds_read_b128 v058 v059 v060 v061 -M v_mfma_f32_16x16x32_bf16 a[24:27] -M v_mfma_f32_16x16x32_bf16 a[20:23] -M v_mfma_f32_16x16x32_bf16 a[16:19] -M v_mfma_f32_16x16x32_bf16 a[12:15] -r ds_read_b128 v062 v063 v064 v065 -M v_mfma_f32_16x16x32_bf16 a[8:11] -M v_mfma_f32_16x16x32_bf16 a[4:7] -M v_mfma_f32_16x16x32_bf16 a[0:3] -B -------- barrier (end of half 1) -------- -============================================================ -stream: MrMMMMrMMMMLrMMMMrMMMLMrMMMMrMMLMMrMMMMrMLMMMrMMMMLrMMMMrMMMLMrMMMMrMMLMMrMMMMrMLMMMrMMMBMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMMLrMMMMrMMMB diff --git a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s b/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s deleted file mode 100644 index e9621781a..000000000 --- a/resource_inspect/snapshots/hgemm_bf16_rp1_presh_nosc0_pure.s +++ /dev/null @@ -1,2418 +0,0 @@ - .amdgcn_target "amdgcn-amd-amdhsa--gfx950" - .amdhsa_code_object_version 6 - .text - .globl hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .p2align 8 - .type hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0,@function -hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0: -.Lfunc_begin0: - .cfi_sections .debug_frame - .cfi_startproc - .file 1 "/root/FlyDSL/kernels" "tensor_shim.py" - s_load_dword s12, s[0:1], 0x60 ;.loc 1 289 24 prologue_end - s_load_dwordx2 s[4:5], s[0:1], 0x18 - s_load_dwordx2 s[8:9], s[0:1], 0x30 - .file 2 "/root/FlyDSL/kernels" "hgemm_splitk.py" - s_ashr_i32 s14, s2, 31 ;.loc 2 399 0 - s_lshr_b32 s14, s14, 27 - s_add_i32 s14, s2, s14 - s_waitcnt lgkmcnt(0) ;.loc 1 289 24 - s_ashr_i32 s13, s12, 31 - s_and_b32 s5, s5, 0xffff - s_and_b32 s9, s9, 0xffff - s_ashr_i32 s18, s14, 5 ;.loc 2 399 0 - s_and_b32 s19, s14, 0xffffffe0 - s_cmp_lg_u32 s2, s19 - s_cselect_b64 s[14:15], -1, 0 - s_cmp_lt_i32 s2, 0 - s_cselect_b64 s[16:17], -1, 0 - s_and_b64 s[14:15], s[16:17], s[14:15] - v_lshrrev_b32_e32 v002, 6, v000 ;.loc 2 392 0 - s_subb_u32 s14, s18, 0 ;.loc 2 399 0 - s_sub_i32 s15, s2, s19 - s_lshl_b32 s20, s14, 8 ;.loc 2 442 0 - v_readfirstlane_b32 s14, v002 ;.loc 2 606 0 - s_lshl_b32 s18, s15, 8 ;.loc 2 443 0 - s_lshl_b32 s21, s14, 10 ;.loc 2 606 0 - s_lshl_b32 s2, s3, 13 ;.loc 2 440 0 - .file 3 "/root/FlyDSL/python/flydsl/expr" "numeric.py" - s_ashr_i32 s19, s20, 31 ;.loc 3 875 16 - s_ashr_i32 s16, s18, 31 - s_add_i32 s25, s21, 0x10000 ;.loc 2 641 0 - v_lshrrev_b32_e32 v109, 2, v000 ;.loc 2 685 0 - s_cmpk_lt_u32 s18, 0x2000 ;.loc 2 704 12 - v_xor_b32_e32 v002, v109, v000 ;.loc 2 689 0 - s_cselect_b64 vcc, -1, 0 ;.loc 2 704 12 - v_lshlrev_b32_e32 v002, 3, v002 ;.loc 2 689 0 - s_and_b64 s[14:15], vcc, exec ;.loc 2 703 23 - v_and_b32_e32 v010, 24, v002 ;.loc 2 689 0 - v_or_b32_e32 v002, s18, v109 ;.loc 2 702 0 - s_cselect_b32 s14, s16, 0 ;.loc 2 703 23 - v_cndmask_b32_e32 v110, 0, v002, vcc - v_mov_b32_e32 v111, s14 - v_lshlrev_b64 v002 v003, 7, v110 v111 ;.loc 2 371 0 - v_and_b32_e32 v107, 63, v110 ;.loc 2 1225 0 - v_and_b32_e32 v002, 0xffff8000, v002 ;.loc 2 371 0 - v_and_b32_e32 v003, 0x3ffffff, v003 - v_or_b32_e32 v002, v002, v107 - v_lshlrev_b64 v002 v003, 6, v002 v003 - v_or_b32_e32 v094, v002, v010 - s_lshl_b32 s26, s3, 21 ;.loc 2 372 0 - s_mov_b32 s7, 0x27000 - s_mov_b32 s6, -1 - v_add_lshl_u32 v003, v094, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v011, 64, v109 ;.loc 2 687 0 - s_mov_b32 s10, s6 ;.loc 1 289 24 - s_mov_b32 s11, s7 - s_mov_b32 m0, s25 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen lds - v_or_b32_e32 v003, s18, v011 ;.loc 2 702 0 - v_cndmask_b32_e32 v112, 0, v003, vcc ;.loc 2 703 23 - v_mov_b32_e32 v113, s14 - v_lshlrev_b64 v004 v005, 7, v112 v113 ;.loc 2 371 0 - v_and_b32_e32 v003, 0x7f, v112 ;.loc 2 369 0 - v_and_b32_e32 v004, 0xffff8000, v004 ;.loc 2 371 0 - v_and_b32_e32 v005, 0x3ffffff, v005 - v_or_b32_e32 v004, v004, v003 - v_lshlrev_b64 v004 v005, 6, v004 v005 - v_or_b32_e32 v096, v004, v010 - v_add_lshl_u32 v003, v096, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v012, 0x80, v109 ;.loc 2 687 0 - s_add_i32 s24, s21, 0x11000 ;.loc 2 641 0 - s_mov_b32 m0, s24 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen lds - v_or_b32_e32 v003, s18, v012 ;.loc 2 702 0 - v_cndmask_b32_e32 v114, 0, v003, vcc ;.loc 2 703 23 - v_mov_b32_e32 v115, s14 - v_lshlrev_b64 v006 v007, 7, v114 v115 ;.loc 2 371 0 - v_and_b32_e32 v003, 0xbf, v114 ;.loc 2 369 0 - v_and_b32_e32 v005, 0xffff8000, v006 ;.loc 2 371 0 - v_and_b32_e32 v007, 0x3ffffff, v007 - v_or_b32_e32 v006, v005, v003 - v_lshlrev_b64 v006 v007, 6, v006 v007 - v_or_b32_e32 v098, v006, v010 - v_add_lshl_u32 v003, v098, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v013, 0xc0, v109 ;.loc 2 687 0 - s_add_i32 s23, s21, 0x12000 ;.loc 2 641 0 - s_mov_b32 m0, s23 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen lds - v_or_b32_e32 v003, s18, v013 ;.loc 2 702 0 - v_cndmask_b32_e32 v116, 0, v003, vcc ;.loc 2 703 23 - v_mov_b32_e32 v117, s14 - v_lshlrev_b64 v008 v009, 7, v116 v117 ;.loc 2 371 0 - v_and_b32_e32 v111, 0xff, v116 ;.loc 2 1225 0 - v_and_b32_e32 v003, 0xffff8000, v008 ;.loc 2 371 0 - v_and_b32_e32 v009, 0x3ffffff, v009 - v_or_b32_e32 v008, v003, v111 - v_or_b32_e32 v014, 32, v010 ;.loc 2 690 0 - v_lshlrev_b64 v008 v009, 6, v008 v009 ;.loc 2 371 0 - v_or_b32_e32 v046, v002, v014 - v_or_b32_e32 v100, v008, v010 - v_add_lshl_u32 v002, v046, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v047, v004, v014 ;.loc 2 371 0 - s_add_i32 s17, s21, 0x13000 ;.loc 2 641 0 - v_add_lshl_u32 v003, v100, s26, 1 ;.loc 2 712 24 - s_mov_b32 m0, s17 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[8:11], 0 offen lds - s_add_i32 s14, s21, 0x14000 ;.loc 2 641 0 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v047, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v058, v006, v014 ;.loc 2 371 0 - s_add_i32 s14, s21, 0x15000 ;.loc 2 641 0 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v058, s26, 1 ;.loc 2 712 24 - v_or_b32_e32 v062, v008, v014 ;.loc 2 371 0 - s_add_i32 s14, s21, 0x16000 ;.loc 2 641 0 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v062, s26, 1 ;.loc 2 712 24 - s_add_i32 s14, s21, 0x17000 ;.loc 2 641 0 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_or_b32_e32 v002, s20, v109 ;.loc 2 664 0 - v_mov_b32_e32 v003, s19 - v_mov_b32_e32 v015, s19 ;.loc 2 665 23 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 666 12 - v_or_b32_e32 v004, s20, v011 ;.loc 2 664 0 - v_mov_b32_e32 v005, s19 - v_cndmask_b32_e32 v119, 0, v015, vcc ;.loc 2 665 23 - v_cndmask_b32_e32 v118, 0, v002, vcc - v_lshlrev_b64 v002 v003, 7, v118 v119 ;.loc 2 371 0 - v_and_b32_e32 v113, 63, v118 ;.loc 2 1225 0 - v_and_b32_e32 v002, 0xffff8000, v002 ;.loc 2 371 0 - v_and_b32_e32 v003, 0x3ffffff, v003 - v_or_b32_e32 v002, v002, v113 - v_lshlrev_b64 v002 v003, 6, v002 v003 - v_cmp_gt_u64_e32 vcc, s[12:13], v004 v005 ;.loc 2 666 12 - v_or_b32_e32 v102, v002, v010 ;.loc 2 371 0 - v_add_lshl_u32 v003, v102, s26, 1 ;.loc 2 674 24 - v_cndmask_b32_e32 v121, 0, v015, vcc ;.loc 2 665 23 - v_cndmask_b32_e32 v120, 0, v004, vcc - v_lshlrev_b64 v004 v005, 7, v120 v121 ;.loc 2 371 0 - s_mov_b32 m0, s21 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen lds - v_and_b32_e32 v003, 0x7f, v120 ;.loc 2 369 0 - v_and_b32_e32 v004, 0xffff8000, v004 ;.loc 2 371 0 - v_and_b32_e32 v005, 0x3ffffff, v005 - v_or_b32_e32 v004, v004, v003 - v_or_b32_e32 v006, s20, v012 ;.loc 2 664 0 - v_mov_b32_e32 v007, s19 - v_lshlrev_b64 v004 v005, 6, v004 v005 ;.loc 2 371 0 - v_cmp_gt_u64_e32 vcc, s[12:13], v006 v007 ;.loc 2 666 12 - v_or_b32_e32 v104, v004, v010 ;.loc 2 371 0 - v_add_lshl_u32 v003, v104, s26, 1 ;.loc 2 674 24 - v_cndmask_b32_e32 v123, 0, v015, vcc ;.loc 2 665 23 - v_cndmask_b32_e32 v122, 0, v006, vcc - v_lshlrev_b64 v006 v007, 7, v122 v123 ;.loc 2 371 0 - s_add_i32 s16, s21, 0x1000 ;.loc 2 641 0 - s_mov_b32 m0, s16 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen lds - v_and_b32_e32 v003, 0xbf, v122 ;.loc 2 369 0 - v_and_b32_e32 v005, 0xffff8000, v006 ;.loc 2 371 0 - v_and_b32_e32 v007, 0x3ffffff, v007 - v_or_b32_e32 v006, v005, v003 - v_or_b32_e32 v008, s20, v013 ;.loc 2 664 0 - v_mov_b32_e32 v009, s19 - v_lshlrev_b64 v006 v007, 6, v006 v007 ;.loc 2 371 0 - v_cmp_gt_u64_e32 vcc, s[12:13], v008 v009 ;.loc 2 666 12 - v_or_b32_e32 v106, v006, v010 ;.loc 2 371 0 - v_add_lshl_u32 v003, v106, s26, 1 ;.loc 2 674 24 - v_cndmask_b32_e32 v125, 0, v015, vcc ;.loc 2 665 23 - v_cndmask_b32_e32 v124, 0, v008, vcc - v_lshlrev_b64 v008 v009, 7, v124 v125 ;.loc 2 371 0 - s_add_i32 s15, s21, 0x2000 ;.loc 2 641 0 - s_mov_b32 m0, s15 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen lds - v_and_b32_e32 v117, 0xff, v124 ;.loc 2 1225 0 - v_and_b32_e32 v003, 0xffff8000, v008 ;.loc 2 371 0 - v_and_b32_e32 v009, 0x3ffffff, v009 - v_or_b32_e32 v008, v003, v117 - v_lshlrev_b64 v008 v009, 6, v008 v009 - v_or_b32_e32 v070, v002, v014 - v_or_b32_e32 v108, v008, v010 - v_add_lshl_u32 v002, v070, s26, 1 ;.loc 2 674 24 - v_or_b32_e32 v078, v004, v014 ;.loc 2 371 0 - s_add_i32 s14, s21, 0x3000 ;.loc 2 641 0 - v_add_lshl_u32 v003, v108, s26, 1 ;.loc 2 674 24 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v003, s[4:7], 0 offen lds - s_add_i32 s28, s21, 0x4000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v078, s26, 1 ;.loc 2 674 24 - v_or_b32_e32 v086, v006, v014 ;.loc 2 371 0 - s_add_i32 s28, s21, 0x5000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v086, s26, 1 ;.loc 2 674 24 - v_or_b32_e32 v119, v008, v014 ;.loc 2 371 0 - s_add_i32 s28, s21, 0x6000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v119, s26, 1 ;.loc 2 674 24 - s_or_b32 s29, s26, 0x4000 ;.loc 2 372 0 - s_add_i32 s28, s21, 0x7000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v094, s29, 1 ;.loc 2 712 24 - s_add_i32 s28, s21, 0x18000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v096, s29, 1 ;.loc 2 712 24 - s_add_i32 s28, s21, 0x19000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v098, s29, 1 ;.loc 2 712 24 - s_add_i32 s28, s21, 0x1a000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v100, s29, 1 ;.loc 2 712 24 - s_add_i32 s28, s21, 0x1b000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - v_add_lshl_u32 v002, v102, s29, 1 ;.loc 2 674 24 - s_add_i32 s28, s21, 0x8000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v104, s29, 1 ;.loc 2 674 24 - s_add_i32 s28, s21, 0x9000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v106, s29, 1 ;.loc 2 674 24 - v_and_b32_e32 v001, 0x80, v000 ;.loc 2 446 0 - v_lshlrev_b32_e32 v034, 1, v000 ;.loc 2 447 0 - v_and_b32_e32 v035, 15, v000 ;.loc 2 448 0 - v_lshrrev_b32_e32 v095, 4, v000 ;.loc 2 449 0 - s_mov_b32 s22, 0x10000 - s_add_i32 s28, s21, 0xa000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_add_lshl_u32 v002, v108, s29, 1 ;.loc 2 674 24 - s_movk_i32 s27, 0x80 - s_add_i32 s28, s21, 0xb000 ;.loc 2 641 0 - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[4:7], 0 offen lds - v_xor_b32_e32 v002, v095, v000 ;.loc 2 761 0 - v_lshlrev_b32_e32 v002, 4, v002 - v_and_b32_e32 v099, 48, v002 - v_lshlrev_b32_e32 v002, 5, v000 ;.loc 2 762 0 - v_and_b32_e32 v002, 0x11e0, v002 - v_lshlrev_b32_e32 v105, 1, v002 ;.loc 1 317 12 - v_or3_b32 v006, v001, v035, 16 ;.loc 2 756 0 - v_and_or_b32 v097, v034, s27, v035 ;.loc 2 773 0 - v_mov_b32_e32 v034, 0x10000 ;.loc 1 317 12 - v_or_b32_e32 v121, v105, v099 - v_lshlrev_b32_e32 v103, 6, v006 - v_lshl_or_b32 v101, v097, 6, v034 - s_waitcnt vmcnt(0) ;.loc 2 462 0 - s_barrier - ds_read_b128 v002 v003 v004 v005, v121 ;.loc 1 317 12 - v_or_b32_e32 v123, v103, v099 - v_or_b32_e32 v125, v101, v099 - v_lshlrev_b32_e32 v115, 5, v006 ;.loc 2 762 0 - ds_read_b128 v006 v007 v008 v009, v123 ;.loc 1 317 12 - ds_read_b128 v010 v011 v012 v013, v123 offset:1024 - ds_read_b128 v014 v015 v016 v017, v123 offset:2048 - ds_read_b128 v018 v019 v020 v021, v123 offset:3072 - ds_read_b128 v022 v023 v024 v025, v123 offset:4096 - ds_read_b128 v026 v027 v028 v029, v123 offset:5120 - ds_read_b128 v030 v031 v032 v033, v123 offset:6144 - ds_read_b128 v034 v035 v036 v037, v125 - ds_read_b128 v038 v039 v040 v041, v125 offset:1024 - ds_read_b128 v042 v043 v044 v045, v125 offset:2048 - ds_read_b128 v050 v051 v052 v053, v125 offset:3072 - ds_read_b128 v054 v055 v056 v057, v125 offset:4096 - ds_read_b128 v126 v127 v128 v129, v125 offset:5120 - ds_read_b128 v130 v131 v132 v133, v125 offset:6144 - ds_read_b128 v134 v135 v136 v137, v125 offset:7168 - s_waitcnt lgkmcnt(7) ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v002 v003 v004 v005, v034 v035 v036 v037, 0 - ds_read_b128 v138 v139 v140 v141, v121 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v002 v003 v004 v005, v038 v039 v040 v041, 0 - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v002 v003 v004 v005, v042 v043 v044 v045, 0 - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v002 v003 v004 v005, v050 v051 v052 v053, 0 - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v002 v003 v004 v005, v054 v055 v056 v057, 0 - ds_read_b128 v142 v143 v144 v145, v123 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v002 v003 v004 v005, v126 v127 v128 v129, 0 - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v002 v003 v004 v005, v130 v131 v132 v133, 0 - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v002 v003 v004 v005, v134 v135 v136 v137, 0 - v_add_lshl_u32 v002, v046, s29, 1 ;.loc 2 712 24 - v_mfma_f32_16x16x32_bf16 a[220:223], v006 v007 v008 v009, v034 v035 v036 v037, 0 ;.loc 2 1054 0 - s_add_i32 s27, s21, 0x1c000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - ds_read_b128 v002 v003 v004 v005, v123 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v006 v007 v008 v009, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v006 v007 v008 v009, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[208:211], v006 v007 v008 v009, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[204:207], v006 v007 v008 v009, v054 v055 v056 v057, 0 - ds_read_b128 v146 v147 v148 v149, v123 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v006 v007 v008 v009, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v006 v007 v008 v009, v130 v131 v132 v133, 0 - v_mfma_f32_16x16x32_bf16 a[192:195], v006 v007 v008 v009, v134 v135 v136 v137, 0 - v_add_lshl_u32 v006, v047, s29, 1 ;.loc 2 712 24 - s_add_i32 s27, s21, 0x1d000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - v_add_lshl_u32 v006, v058, s29, 1 ;.loc 2 712 24 - v_mfma_f32_16x16x32_bf16 a[188:191], v010 v011 v012 v013, v034 v035 v036 v037, 0 ;.loc 2 1054 0 - ds_read_b128 v150 v151 v152 v153, v123 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v010 v011 v012 v013, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v010 v011 v012 v013, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[176:179], v010 v011 v012 v013, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[172:175], v010 v011 v012 v013, v054 v055 v056 v057, 0 - ds_read_b128 v046 v047 v048 v049, v123 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v010 v011 v012 v013, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v010 v011 v012 v013, v130 v131 v132 v133, 0 - s_add_i32 s27, s21, 0x1e000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - v_add_lshl_u32 v006, v062, s29, 1 ;.loc 2 712 24 - v_mfma_f32_16x16x32_bf16 a[160:163], v010 v011 v012 v013, v134 v135 v136 v137, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[156:159], v014 v015 v016 v017, v034 v035 v036 v037, 0 - ds_read_b128 v058 v059 v060 v061, v123 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v014 v015 v016 v017, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v014 v015 v016 v017, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[144:147], v014 v015 v016 v017, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[140:143], v014 v015 v016 v017, v054 v055 v056 v057, 0 - ds_read_b128 v066 v067 v068 v069, v123 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v014 v015 v016 v017, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - s_add_i32 s27, s21, 0x1f000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - v_add_lshl_u32 v006, v070, s29, 1 ;.loc 2 674 24 - v_mfma_f32_16x16x32_bf16 a[132:135], v014 v015 v016 v017, v130 v131 v132 v133, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[128:131], v014 v015 v016 v017, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[124:127], v018 v019 v020 v021, v034 v035 v036 v037, 0 - ds_read_b128 v062 v063 v064 v065, v125 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v018 v019 v020 v021, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v018 v019 v020 v021, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[112:115], v018 v019 v020 v021, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[108:111], v018 v019 v020 v021, v054 v055 v056 v057, 0 - s_add_i32 s27, s21, 0xc000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen lds - v_add_lshl_u32 v006, v078, s29, 1 ;.loc 2 674 24 - ds_read_b128 v070 v071 v072 v073, v125 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v018 v019 v020 v021, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v018 v019 v020 v021, v130 v131 v132 v133, 0 - v_mfma_f32_16x16x32_bf16 a[96:99], v018 v019 v020 v021, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[92:95], v022 v023 v024 v025, v034 v035 v036 v037, 0 - ds_read_b128 v074 v075 v076 v077, v125 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v022 v023 v024 v025, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v022 v023 v024 v025, v042 v043 v044 v045, 0 - v_mfma_f32_16x16x32_bf16 a[80:83], v022 v023 v024 v025, v050 v051 v052 v053, 0 - s_add_i32 s27, s21, 0xd000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen lds - v_add_lshl_u32 v006, v086, s29, 1 ;.loc 2 674 24 - v_mfma_f32_16x16x32_bf16 a[76:79], v022 v023 v024 v025, v054 v055 v056 v057, 0 ;.loc 2 1054 0 - ds_read_b128 v078 v079 v080 v081, v125 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v022 v023 v024 v025, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v022 v023 v024 v025, v130 v131 v132 v133, 0 - v_mfma_f32_16x16x32_bf16 a[64:67], v022 v023 v024 v025, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[60:63], v026 v027 v028 v029, v034 v035 v036 v037, 0 - ds_read_b128 v082 v083 v084 v085, v125 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v026 v027 v028 v029, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v026 v027 v028 v029, v042 v043 v044 v045, 0 - s_add_i32 s27, s21, 0xe000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen lds - v_add_lshl_u32 v006, v119, s29, 1 ;.loc 2 674 24 - s_bitset1_b32 s26, 15 ;.loc 2 372 0 - v_mfma_f32_16x16x32_bf16 a[48:51], v026 v027 v028 v029, v050 v051 v052 v053, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[44:47], v026 v027 v028 v029, v054 v055 v056 v057, 0 - ds_read_b128 v086 v087 v088 v089, v125 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v026 v027 v028 v029, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v026 v027 v028 v029, v130 v131 v132 v133, 0 - v_mfma_f32_16x16x32_bf16 a[32:35], v026 v027 v028 v029, v134 v135 v136 v137, 0 - v_mfma_f32_16x16x32_bf16 a[28:31], v030 v031 v032 v033, v034 v035 v036 v037, 0 - ds_read_b128 v090 v091 v092 v093, v125 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v030 v031 v032 v033, v038 v039 v040 v041, 0 ;.loc 2 1054 0 - s_add_i32 s27, s21, 0xf000 ;.loc 2 641 0 - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[4:7], 0 offen lds - v_add_lshl_u32 v006, v094, s26, 1 ;.loc 2 712 24 - v_mfma_f32_16x16x32_bf16 a[20:23], v030 v031 v032 v033, v042 v043 v044 v045, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[16:19], v030 v031 v032 v033, v050 v051 v052 v053, 0 - v_mfma_f32_16x16x32_bf16 a[12:15], v030 v031 v032 v033, v054 v055 v056 v057, 0 - ds_read_b128 v154 v155 v156 v157, v125 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v030 v031 v032 v033, v126 v127 v128 v129, 0 ;.loc 2 1054 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v030 v031 v032 v033, v130 v131 v132 v133, 0 - v_mfma_f32_16x16x32_bf16 a[0:3], v030 v031 v032 v033, v134 v135 v136 v137, 0 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v138 v139 v140 v141, v062 v063 v064 v065, a[252:255] - s_mov_b32 m0, s25 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - v_add_lshl_u32 v006, v096, s26, 1 ;.loc 2 712 24 - ds_read_b128 v054 v055 v056 v057, v121 offset:32768 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v138 v139 v140 v141, v070 v071 v072 v073, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v138 v139 v140 v141, v074 v075 v076 v077, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v138 v139 v140 v141, v078 v079 v080 v081, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v138 v139 v140 v141, v082 v083 v084 v085, a[236:239] - ds_read_b128 v042 v043 v044 v045, v123 offset:32768 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v138 v139 v140 v141, v086 v087 v088 v089, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v138 v139 v140 v141, v090 v091 v092 v093, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v138 v139 v140 v141, v154 v155 v156 v157, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v142 v143 v144 v145, v062 v063 v064 v065, a[220:223] - s_mov_b32 m0, s24 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - ds_read_b128 v034 v035 v036 v037, v123 offset:33792 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v142 v143 v144 v145, v070 v071 v072 v073, a[216:219] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v142 v143 v144 v145, v074 v075 v076 v077, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v142 v143 v144 v145, v078 v079 v080 v081, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v142 v143 v144 v145, v082 v083 v084 v085, a[204:207] - ds_read_b128 v026 v027 v028 v029, v123 offset:34816 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v142 v143 v144 v145, v086 v087 v088 v089, a[200:203] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v142 v143 v144 v145, v090 v091 v092 v093, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v142 v143 v144 v145, v154 v155 v156 v157, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v002 v003 v004 v005, v062 v063 v064 v065, a[188:191] - v_add_lshl_u32 v006, v098, s26, 1 ;.loc 2 712 24 - s_mov_b32 m0, s23 ;.loc 2 625 0 - buffer_load_dwordx4 v006, s[8:11], 0 offen lds - ds_read_b128 v014 v015 v016 v017, v123 offset:35840 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v002 v003 v004 v005, v070 v071 v072 v073, a[184:187] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v002 v003 v004 v005, v074 v075 v076 v077, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v002 v003 v004 v005, v078 v079 v080 v081, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v002 v003 v004 v005, v082 v083 v084 v085, a[172:175] - ds_read_b128 v010 v011 v012 v013, v123 offset:36864 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v002 v003 v004 v005, v086 v087 v088 v089, a[168:171] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v002 v003 v004 v005, v090 v091 v092 v093, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v002 v003 v004 v005, v154 v155 v156 v157, a[160:163] - v_add_lshl_u32 v002, v100, s26, 1 ;.loc 2 712 24 - v_add_lshl_u32 v018, v102, s26, 1 ;.loc 2 674 24 - v_add_lshl_u32 v030, v104, s26, 1 - v_mfma_f32_16x16x32_bf16 a[156:159], v146 v147 v148 v149, v062 v063 v064 v065, a[156:159] ;.loc 2 999 0 - s_mov_b32 m0, s17 ;.loc 2 625 0 - buffer_load_dwordx4 v002, s[8:11], 0 offen lds - ds_read_b128 v006 v007 v008 v009, v123 offset:37888 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v146 v147 v148 v149, v070 v071 v072 v073, a[152:155] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v146 v147 v148 v149, v074 v075 v076 v077, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v146 v147 v148 v149, v078 v079 v080 v081, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v146 v147 v148 v149, v082 v083 v084 v085, a[140:143] - ds_read_b128 v002 v003 v004 v005, v123 offset:38912 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v146 v147 v148 v149, v086 v087 v088 v089, a[136:139] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v146 v147 v148 v149, v090 v091 v092 v093, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v146 v147 v148 v149, v154 v155 v156 v157, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v150 v151 v152 v153, v062 v063 v064 v065, a[124:127] - s_mov_b32 m0, s21 ;.loc 2 625 0 - buffer_load_dwordx4 v018, s[4:7], 0 offen lds - ds_read_b128 v018 v019 v020 v021, v125 offset:32768 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v150 v151 v152 v153, v070 v071 v072 v073, a[120:123] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v150 v151 v152 v153, v074 v075 v076 v077, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v150 v151 v152 v153, v078 v079 v080 v081, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v150 v151 v152 v153, v082 v083 v084 v085, a[108:111] - ds_read_b128 v022 v023 v024 v025, v125 offset:33792 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v150 v151 v152 v153, v086 v087 v088 v089, a[104:107] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v150 v151 v152 v153, v090 v091 v092 v093, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v150 v151 v152 v153, v154 v155 v156 v157, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v046 v047 v048 v049, v062 v063 v064 v065, a[92:95] - s_mov_b32 m0, s16 ;.loc 2 625 0 - buffer_load_dwordx4 v030, s[4:7], 0 offen lds - ds_read_b128 v030 v031 v032 v033, v125 offset:34816 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v046 v047 v048 v049, v070 v071 v072 v073, a[88:91] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v046 v047 v048 v049, v074 v075 v076 v077, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v046 v047 v048 v049, v078 v079 v080 v081, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v046 v047 v048 v049, v082 v083 v084 v085, a[76:79] - ds_read_b128 v038 v039 v040 v041, v125 offset:35840 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v046 v047 v048 v049, v086 v087 v088 v089, a[72:75] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v046 v047 v048 v049, v090 v091 v092 v093, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v046 v047 v048 v049, v154 v155 v156 v157, a[64:67] - v_add_lshl_u32 v046, v106, s26, 1 ;.loc 2 674 24 - v_mfma_f32_16x16x32_bf16 a[60:63], v058 v059 v060 v061, v062 v063 v064 v065, a[60:63] ;.loc 2 999 0 - s_mov_b32 m0, s15 ;.loc 2 625 0 - buffer_load_dwordx4 v046, s[4:7], 0 offen lds - ds_read_b128 v046 v047 v048 v049, v125 offset:36864 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v058 v059 v060 v061, v070 v071 v072 v073, a[56:59] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v058 v059 v060 v061, v074 v075 v076 v077, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v058 v059 v060 v061, v078 v079 v080 v081, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v058 v059 v060 v061, v082 v083 v084 v085, a[44:47] - ds_read_b128 v050 v051 v052 v053, v125 offset:37888 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v058 v059 v060 v061, v086 v087 v088 v089, a[40:43] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v058 v059 v060 v061, v090 v091 v092 v093, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v058 v059 v060 v061, v154 v155 v156 v157, a[32:35] - v_add_lshl_u32 v058, v108, s26, 1 ;.loc 2 674 24 - v_mfma_f32_16x16x32_bf16 a[28:31], v066 v067 v068 v069, v062 v063 v064 v065, a[28:31] ;.loc 2 999 0 - s_mov_b32 m0, s14 ;.loc 2 625 0 - buffer_load_dwordx4 v058, s[4:7], 0 offen lds - ds_read_b128 v058 v059 v060 v061, v125 offset:38912 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v066 v067 v068 v069, v070 v071 v072 v073, a[24:27] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v066 v067 v068 v069, v074 v075 v076 v077, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v066 v067 v068 v069, v078 v079 v080 v081, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v066 v067 v068 v069, v082 v083 v084 v085, a[12:15] - ds_read_b128 v062 v063 v064 v065, v125 offset:39936 ;.loc 1 317 12 - v_lshlrev_b32_e32 v071, 5, v097 ;.loc 2 779 0 - v_mfma_f32_16x16x32_bf16 a[8:11], v066 v067 v068 v069, v086 v087 v088 v089, a[8:11] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v066 v067 v068 v069, v090 v091 v092 v093, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v066 v067 v068 v069, v154 v155 v156 v157, a[0:3] - v_lshlrev_b32_e32 v066, 14, v124 ;.loc 2 1225 0 - s_lshl_b32 s3, s3, 22 - v_and_b32_e32 v066, 0xffc00000, v066 - v_bitop3_b32 v068, v109, 3, v000 bitop3:0x48 - v_add_u32_e32 v066, s3, v066 - v_lshlrev_b32_e32 v067, 7, v117 - v_lshlrev_b32_e32 v069, 4, v068 - v_or3_b32 v066, v066, v067, v069 - v_lshlrev_b32_e32 v067, 14, v122 - v_and_b32_e32 v067, 0xffc00000, v067 - v_mov_b32_e32 v073, 7 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_sdwa v068, v073, v122 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 - v_or3_b32 v068, v067, v068, v069 - v_lshlrev_b32_e32 v067, 14, v120 - v_and_b32_e32 v067, 0xffc00000, v067 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_sdwa v070, v073, v120 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 - v_or3_b32 v070, v067, v070, v069 - v_lshlrev_b32_e32 v067, 14, v118 - v_and_b32_e32 v067, 0xffc00000, v067 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_e32 v072, 7, v113 - v_or3_b32 v072, v067, v072, v069 - v_lshlrev_b32_e32 v067, 14, v116 - v_and_b32_e32 v067, 0xffc00000, v067 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_e32 v074, 7, v111 - v_or3_b32 v074, v067, v074, v069 - v_lshlrev_b32_e32 v067, 14, v114 - v_and_b32_e32 v067, 0xffc00000, v067 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_sdwa v075, v073, v114 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 - v_or3_b32 v076, v067, v075, v069 - v_lshlrev_b32_e32 v067, 14, v112 - v_and_b32_e32 v067, 0xffc00000, v067 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_sdwa v073, v073, v112 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 - v_or3_b32 v078, v067, v073, v069 - v_lshlrev_b32_e32 v067, 14, v110 - v_and_b32_e32 v067, 0xffc00000, v067 - s_or_b32 s23, s2, 0x1fc0 - v_add_u32_e32 v067, s3, v067 - v_lshlrev_b32_e32 v073, 7, v107 - s_or_b32 s24, s2, 0xc0 - s_mov_b32 s2, 0xffc10000 - v_or3_b32 v080, v067, v073, v069 - s_mov_b64 s[14:15], 1 - s_mov_b32 s3, -1 - v_lshlrev_b32_e32 v067, 1, v115 - v_lshlrev_b32_e32 v069, 1, v071 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 - s_barrier -.LBB0_1: - s_mov_b64 s[16:17], s[14:15] ;.loc 2 0 0 is_stmt 0 - v_add_u32_e32 v082, s2, v068 ;.loc 2 625 0 is_stmt 1 - s_xor_b32 s14, s16, 1 ;.loc 2 1231 0 - s_lshl_b32 s16, s16, 15 ;.loc 1 317 12 - s_min_i32 s15, s24, s23 ;.loc 2 1237 31 - v_add_u32_e32 v083, s2, v066 ;.loc 2 625 0 - v_add_u32_e32 v107, 0x400040, v082 - v_or_b32_e32 v082, s16, v099 ;.loc 1 317 12 - s_lshl_b32 s25, s14, 15 ;.loc 2 640 0 - v_add_u32_e32 v071, s2, v080 ;.loc 2 625 0 - v_add_u32_e32 v073, s2, v078 - v_add_u32_e32 v075, s2, v076 - v_add_u32_e32 v077, s2, v074 - v_add_u32_e32 v079, s2, v072 - v_add_u32_e32 v081, s2, v070 - v_add_u32_e32 v109, 0x400040, v083 - s_lshl_b32 s17, s15, 8 ;.loc 2 372 0 - s_add_i32 s15, s16, s21 ;.loc 2 640 0 - v_add_u32_e32 v083, v082, v105 ;.loc 1 317 12 - v_add_u32_e32 v126, v082, v067 - s_add_i32 s16, s21, s25 ;.loc 2 640 0 - v_add3_u32 v158, v082, v069, s22 ;.loc 1 317 12 - v_or_b32_e32 v090, s25, v099 - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v054 v055 v056 v057, v018 v019 v020 v021, a[252:255] - v_add_u32_e32 v071, 0x400040, v071 ;.loc 2 625 0 - v_add_u32_e32 v073, 0x400040, v073 - v_add_u32_e32 v075, 0x400040, v075 - v_add_u32_e32 v077, 0x400040, v077 - v_add_u32_e32 v079, 0x400040, v079 - v_add_u32_e32 v081, 0x400040, v081 - ds_read_b128 v082 v083 v084 v085, v083 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v054 v055 v056 v057, v022 v023 v024 v025, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v054 v055 v056 v057, v030 v031 v032 v033, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v054 v055 v056 v057, v038 v039 v040 v041, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v054 v055 v056 v057, v046 v047 v048 v049, a[236:239] - ds_read_b128 v086 v087 v088 v089, v126 offset:16384 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v054 v055 v056 v057, v050 v051 v052 v053, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v054 v055 v056 v057, v058 v059 v060 v061, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v054 v055 v056 v057, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] - s_add_i32 s31, s16, 0x4000 ;.loc 2 640 0 - s_add_i32 s33, s16, 0x14000 ;.loc 2 641 0 - s_add_i32 s34, s16, 0x5000 ;.loc 2 640 0 - s_add_i32 s35, s16, 0x15000 ;.loc 2 641 0 - s_add_i32 s36, s16, 0x6000 ;.loc 2 640 0 - s_add_i32 s37, s16, 0x16000 ;.loc 2 641 0 - s_add_i32 s38, s16, 0x7000 ;.loc 2 640 0 - s_add_i32 s16, s16, 0x17000 ;.loc 2 641 0 - v_add_u32_e32 v054, v090, v105 ;.loc 1 317 12 - v_add_u32_e32 v170, v090, v067 - v_add3_u32 v171, v090, v069, s22 - s_mov_b32 m0, s33 ;.loc 2 625 0 - buffer_load_dwordx4 v071, s[8:11], 0 offen lds - ds_read_b128 v090 v091 v092 v093, v126 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] - ds_read_b128 v110 v111 v112 v113, v126 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v050 v051 v052 v053, a[200:203] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] - s_mov_b32 m0, s35 ;.loc 2 625 0 - buffer_load_dwordx4 v073, s[8:11], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] ;.loc 2 999 0 - ds_read_b128 v114 v115 v116 v117, v126 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] - ds_read_b128 v118 v119 v120 v121, v126 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v050 v051 v052 v053, a[168:171] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] - s_mov_b32 m0, s37 ;.loc 2 625 0 - buffer_load_dwordx4 v075, s[8:11], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] - ds_read_b128 v122 v123 v124 v125, v126 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] - ds_read_b128 v126 v127 v128 v129, v126 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v050 v051 v052 v053, a[136:139] ;.loc 2 999 0 - s_mov_b32 m0, s16 ;.loc 2 625 0 - buffer_load_dwordx4 v077, s[8:11], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - ds_read_b128 v130 v131 v132 v133, v158 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] - s_mov_b32 m0, s31 ;.loc 2 625 0 - buffer_load_dwordx4 v079, s[4:7], 0 offen lds - ds_read_b128 v134 v135 v136 v137, v158 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v050 v051 v052 v053, a[104:107] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - ds_read_b128 v138 v139 v140 v141, v158 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] - s_mov_b32 m0, s34 ;.loc 2 625 0 - buffer_load_dwordx4 v081, s[4:7], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] ;.loc 2 999 0 - ds_read_b128 v142 v143 v144 v145, v158 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v050 v051 v052 v053, a[72:75] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - ds_read_b128 v146 v147 v148 v149, v158 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] - s_mov_b32 m0, s36 ;.loc 2 625 0 - buffer_load_dwordx4 v107, s[4:7], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] - ds_read_b128 v150 v151 v152 v153, v158 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v050 v051 v052 v053, a[40:43] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - ds_read_b128 v154 v155 v156 v157, v158 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] ;.loc 2 999 0 - s_mov_b32 m0, s38 ;.loc 2 625 0 - buffer_load_dwordx4 v109, s[4:7], 0 offen lds - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] - v_add_lshl_u32 v162, s17, v094, 1 ;.loc 2 712 24 - v_add_lshl_u32 v163, s17, v096, 1 - v_add_lshl_u32 v164, s17, v098, 1 - v_add_lshl_u32 v165, s17, v100, 1 - v_add_lshl_u32 v166, s17, v102, 1 ;.loc 2 674 24 - v_add_lshl_u32 v167, s17, v104, 1 - v_add_lshl_u32 v168, s17, v106, 1 - v_add_lshl_u32 v169, s17, v108, 1 - s_add_i32 s17, s15, 0x10000 ;.loc 2 641 0 - s_add_i32 s25, s15, 0x11000 - s_add_i32 s26, s15, 0x12000 - s_add_i32 s27, s15, 0x13000 - s_add_i32 s28, s15, 0x1000 - s_add_i32 s29, s15, 0x2000 - s_add_i32 s30, s15, 0x3000 - ds_read_b128 v158 v159 v160 v161, v158 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v050 v051 v052 v053, a[8:11] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v082 v083 v084 v085, v130 v131 v132 v133, a[252:255] - s_mov_b32 m0, s17 ;.loc 2 625 0 - buffer_load_dwordx4 v162, s[8:11], 0 offen lds - ds_read_b128 v054 v055 v056 v057, v054 ;.loc 1 317 12 - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[248:251], v082 v083 v084 v085, v134 v135 v136 v137, a[248:251] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[244:247], v082 v083 v084 v085, v138 v139 v140 v141, a[244:247] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[240:243], v082 v083 v084 v085, v142 v143 v144 v145, a[240:243] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[236:239], v082 v083 v084 v085, v146 v147 v148 v149, a[236:239] - ds_read_b128 v042 v043 v044 v045, v170 ;.loc 1 317 12 - s_waitcnt lgkmcnt(4) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[232:235], v082 v083 v084 v085, v150 v151 v152 v153, a[232:235] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[228:231], v082 v083 v084 v085, v154 v155 v156 v157, a[228:231] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[224:227], v082 v083 v084 v085, v158 v159 v160 v161, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v086 v087 v088 v089, v130 v131 v132 v133, a[220:223] - s_mov_b32 m0, s25 ;.loc 2 625 0 - buffer_load_dwordx4 v163, s[8:11], 0 offen lds - ds_read_b128 v034 v035 v036 v037, v170 offset:1024 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v086 v087 v088 v089, v134 v135 v136 v137, a[216:219] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v086 v087 v088 v089, v138 v139 v140 v141, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v086 v087 v088 v089, v142 v143 v144 v145, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v086 v087 v088 v089, v146 v147 v148 v149, a[204:207] - ds_read_b128 v026 v027 v028 v029, v170 offset:2048 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v086 v087 v088 v089, v150 v151 v152 v153, a[200:203] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v086 v087 v088 v089, v154 v155 v156 v157, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v086 v087 v088 v089, v158 v159 v160 v161, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v090 v091 v092 v093, v130 v131 v132 v133, a[188:191] - s_mov_b32 m0, s26 ;.loc 2 625 0 - buffer_load_dwordx4 v164, s[8:11], 0 offen lds - ds_read_b128 v014 v015 v016 v017, v170 offset:3072 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v090 v091 v092 v093, v134 v135 v136 v137, a[184:187] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v090 v091 v092 v093, v138 v139 v140 v141, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v090 v091 v092 v093, v142 v143 v144 v145, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v090 v091 v092 v093, v146 v147 v148 v149, a[172:175] - ds_read_b128 v010 v011 v012 v013, v170 offset:4096 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v090 v091 v092 v093, v150 v151 v152 v153, a[168:171] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v090 v091 v092 v093, v154 v155 v156 v157, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v090 v091 v092 v093, v158 v159 v160 v161, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v110 v111 v112 v113, v130 v131 v132 v133, a[156:159] - s_mov_b32 m0, s27 ;.loc 2 625 0 - buffer_load_dwordx4 v165, s[8:11], 0 offen lds - ds_read_b128 v006 v007 v008 v009, v170 offset:5120 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v110 v111 v112 v113, v134 v135 v136 v137, a[152:155] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v110 v111 v112 v113, v138 v139 v140 v141, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v110 v111 v112 v113, v142 v143 v144 v145, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v110 v111 v112 v113, v146 v147 v148 v149, a[140:143] - ds_read_b128 v002 v003 v004 v005, v170 offset:6144 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[136:139], v110 v111 v112 v113, v150 v151 v152 v153, a[136:139] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v110 v111 v112 v113, v154 v155 v156 v157, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v110 v111 v112 v113, v158 v159 v160 v161, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v114 v115 v116 v117, v130 v131 v132 v133, a[124:127] - s_mov_b32 m0, s15 ;.loc 2 625 0 - buffer_load_dwordx4 v166, s[4:7], 0 offen lds - ds_read_b128 v018 v019 v020 v021, v171 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v114 v115 v116 v117, v134 v135 v136 v137, a[120:123] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v114 v115 v116 v117, v138 v139 v140 v141, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v114 v115 v116 v117, v142 v143 v144 v145, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v114 v115 v116 v117, v146 v147 v148 v149, a[108:111] - ds_read_b128 v022 v023 v024 v025, v171 offset:1024 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v114 v115 v116 v117, v150 v151 v152 v153, a[104:107] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v114 v115 v116 v117, v154 v155 v156 v157, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v114 v115 v116 v117, v158 v159 v160 v161, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v118 v119 v120 v121, v130 v131 v132 v133, a[92:95] - s_mov_b32 m0, s28 ;.loc 2 625 0 - buffer_load_dwordx4 v167, s[4:7], 0 offen lds - ds_read_b128 v030 v031 v032 v033, v171 offset:2048 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v118 v119 v120 v121, v134 v135 v136 v137, a[88:91] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v118 v119 v120 v121, v138 v139 v140 v141, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v118 v119 v120 v121, v142 v143 v144 v145, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v118 v119 v120 v121, v146 v147 v148 v149, a[76:79] - ds_read_b128 v038 v039 v040 v041, v171 offset:3072 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v118 v119 v120 v121, v150 v151 v152 v153, a[72:75] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v118 v119 v120 v121, v154 v155 v156 v157, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v118 v119 v120 v121, v158 v159 v160 v161, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v122 v123 v124 v125, v130 v131 v132 v133, a[60:63] - s_mov_b32 m0, s29 ;.loc 2 625 0 - buffer_load_dwordx4 v168, s[4:7], 0 offen lds - ds_read_b128 v046 v047 v048 v049, v171 offset:4096 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v122 v123 v124 v125, v134 v135 v136 v137, a[56:59] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v122 v123 v124 v125, v138 v139 v140 v141, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v122 v123 v124 v125, v142 v143 v144 v145, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v122 v123 v124 v125, v146 v147 v148 v149, a[44:47] - ds_read_b128 v050 v051 v052 v053, v171 offset:5120 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v122 v123 v124 v125, v150 v151 v152 v153, a[40:43] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v122 v123 v124 v125, v154 v155 v156 v157, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v122 v123 v124 v125, v158 v159 v160 v161, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v126 v127 v128 v129, v130 v131 v132 v133, a[28:31] - s_mov_b32 m0, s30 ;.loc 2 625 0 - buffer_load_dwordx4 v169, s[4:7], 0 offen lds - ds_read_b128 v058 v059 v060 v061, v171 offset:6144 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v126 v127 v128 v129, v134 v135 v136 v137, a[24:27] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v126 v127 v128 v129, v138 v139 v140 v141, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v126 v127 v128 v129, v142 v143 v144 v145, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v126 v127 v128 v129, v146 v147 v148 v149, a[12:15] - ds_read_b128 v062 v063 v064 v065, v171 offset:7168 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v126 v127 v128 v129, v150 v151 v152 v153, a[8:11] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v126 v127 v128 v129, v154 v155 v156 v157, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v126 v127 v128 v129, v158 v159 v160 v161, a[0:3] - s_add_u32 s2, s2, 0x8000 ;.loc 2 1225 0 - s_addc_u32 s3, s3, 0 - s_add_i32 s24, s24, 64 - s_cmp_lg_u64 s[2:3], 0 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 - s_barrier -.JUMP.LBB0_1: - s_cbranch_scc1 .LBB0_1 ;.loc 2 1225 0 - s_load_dwordx2 s[0:1], s[0:1], 0x0 ;.loc 1 289 24 - s_lshl_b32 s4, s14, 14 ;.loc 1 0 0 is_stmt 0 - s_lshl_b32 s4, s4, 1 ;.loc 1 317 12 is_stmt 1 - v_add3_u32 v067, v105, s4, v099 - s_waitcnt lgkmcnt(0) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v054 v055 v056 v057, v018 v019 v020 v021, a[252:255] - ds_read_b128 v068 v069 v070 v071, v067 offset:16384 ;.loc 1 317 12 - v_add3_u32 v067, v103, s4, v099 - v_mfma_f32_16x16x32_bf16 a[248:251], v054 v055 v056 v057, v022 v023 v024 v025, a[248:251] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[244:247], v054 v055 v056 v057, v030 v031 v032 v033, a[244:247] - v_mfma_f32_16x16x32_bf16 a[240:243], v054 v055 v056 v057, v038 v039 v040 v041, a[240:243] - v_mfma_f32_16x16x32_bf16 a[236:239], v054 v055 v056 v057, v046 v047 v048 v049, a[236:239] - ds_read_b128 v072 v073 v074 v075, v067 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[232:235], v054 v055 v056 v057, v050 v051 v052 v053, a[232:235] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[228:231], v054 v055 v056 v057, v058 v059 v060 v061, a[228:231] - v_mfma_f32_16x16x32_bf16 a[224:227], v054 v055 v056 v057, v062 v063 v064 v065, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v042 v043 v044 v045, v018 v019 v020 v021, a[220:223] - ds_read_b128 v076 v077 v078 v079, v067 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[216:219], v042 v043 v044 v045, v022 v023 v024 v025, a[216:219] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[212:215], v042 v043 v044 v045, v030 v031 v032 v033, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v042 v043 v044 v045, v038 v039 v040 v041, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v042 v043 v044 v045, v046 v047 v048 v049, a[204:207] - ds_read_b128 v080 v081 v082 v083, v067 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[200:203], v042 v043 v044 v045, v050 v051 v052 v053, a[200:203] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[196:199], v042 v043 v044 v045, v058 v059 v060 v061, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v042 v043 v044 v045, v062 v063 v064 v065, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v034 v035 v036 v037, v018 v019 v020 v021, a[188:191] - ds_read_b128 v084 v085 v086 v087, v067 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[184:187], v034 v035 v036 v037, v022 v023 v024 v025, a[184:187] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[180:183], v034 v035 v036 v037, v030 v031 v032 v033, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v034 v035 v036 v037, v038 v039 v040 v041, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v034 v035 v036 v037, v046 v047 v048 v049, a[172:175] - ds_read_b128 v054 v055 v056 v057, v067 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[168:171], v034 v035 v036 v037, v050 v051 v052 v053, a[168:171] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[164:167], v034 v035 v036 v037, v058 v059 v060 v061, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v034 v035 v036 v037, v062 v063 v064 v065, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v026 v027 v028 v029, v018 v019 v020 v021, a[156:159] - ds_read_b128 v042 v043 v044 v045, v067 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[152:155], v026 v027 v028 v029, v022 v023 v024 v025, a[152:155] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[148:151], v026 v027 v028 v029, v030 v031 v032 v033, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v026 v027 v028 v029, v038 v039 v040 v041, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v026 v027 v028 v029, v046 v047 v048 v049, a[140:143] - ds_read_b128 v034 v035 v036 v037, v067 offset:22528 ;.loc 1 317 12 - v_add3_u32 v067, v101, s4, v099 - s_mov_b32 s3, 0x27000 - s_mov_b32 s2, -1 - s_and_b32 s1, s1, 0xffff ;.loc 1 289 24 - v_mfma_f32_16x16x32_bf16 a[136:139], v026 v027 v028 v029, v050 v051 v052 v053, a[136:139] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[132:135], v026 v027 v028 v029, v058 v059 v060 v061, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v026 v027 v028 v029, v062 v063 v064 v065, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v014 v015 v016 v017, v018 v019 v020 v021, a[124:127] - ds_read_b128 v026 v027 v028 v029, v067 offset:16384 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[120:123], v014 v015 v016 v017, v022 v023 v024 v025, a[120:123] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[116:119], v014 v015 v016 v017, v030 v031 v032 v033, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v014 v015 v016 v017, v038 v039 v040 v041, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v014 v015 v016 v017, v046 v047 v048 v049, a[108:111] - ds_read_b128 v088 v089 v090 v091, v067 offset:17408 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[104:107], v014 v015 v016 v017, v050 v051 v052 v053, a[104:107] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[100:103], v014 v015 v016 v017, v058 v059 v060 v061, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v014 v015 v016 v017, v062 v063 v064 v065, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v010 v011 v012 v013, v018 v019 v020 v021, a[92:95] - ds_read_b128 v014 v015 v016 v017, v067 offset:18432 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[88:91], v010 v011 v012 v013, v022 v023 v024 v025, a[88:91] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[84:87], v010 v011 v012 v013, v030 v031 v032 v033, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v010 v011 v012 v013, v038 v039 v040 v041, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v010 v011 v012 v013, v046 v047 v048 v049, a[76:79] - ds_read_b128 v098 v099 v100 v101, v067 offset:19456 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[72:75], v010 v011 v012 v013, v050 v051 v052 v053, a[72:75] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[68:71], v010 v011 v012 v013, v058 v059 v060 v061, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v010 v011 v012 v013, v062 v063 v064 v065, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v006 v007 v008 v009, v018 v019 v020 v021, a[60:63] - ds_read_b128 v010 v011 v012 v013, v067 offset:20480 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[56:59], v006 v007 v008 v009, v022 v023 v024 v025, a[56:59] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[52:55], v006 v007 v008 v009, v030 v031 v032 v033, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v006 v007 v008 v009, v038 v039 v040 v041, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v006 v007 v008 v009, v046 v047 v048 v049, a[44:47] - ds_read_b128 v102 v103 v104 v105, v067 offset:21504 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[40:43], v006 v007 v008 v009, v050 v051 v052 v053, a[40:43] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[36:39], v006 v007 v008 v009, v058 v059 v060 v061, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v006 v007 v008 v009, v062 v063 v064 v065, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v002 v003 v004 v005, v018 v019 v020 v021, a[28:31] - ds_read_b128 v006 v007 v008 v009, v067 offset:22528 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[24:27], v002 v003 v004 v005, v022 v023 v024 v025, a[24:27] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[20:23], v002 v003 v004 v005, v030 v031 v032 v033, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v002 v003 v004 v005, v038 v039 v040 v041, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v002 v003 v004 v005, v046 v047 v048 v049, a[12:15] - ds_read_b128 v018 v019 v020 v021, v067 offset:23552 ;.loc 1 317 12 - v_mfma_f32_16x16x32_bf16 a[8:11], v002 v003 v004 v005, v050 v051 v052 v053, a[8:11] ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[4:7], v002 v003 v004 v005, v058 v059 v060 v061, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v002 v003 v004 v005, v062 v063 v064 v065, a[0:3] - v_or_b32_e32 v066, 0x70, v001 ;.loc 2 755 0 - s_waitcnt vmcnt(8) lgkmcnt(0) ;.loc 2 475 0 - s_barrier - s_waitcnt lgkmcnt(7) ;.loc 2 999 0 - v_mfma_f32_16x16x32_bf16 a[252:255], v068 v069 v070 v071, v026 v027 v028 v029, a[252:255] - s_waitcnt lgkmcnt(6) - v_mfma_f32_16x16x32_bf16 a[248:251], v068 v069 v070 v071, v088 v089 v090 v091, a[248:251] - s_waitcnt lgkmcnt(5) - v_mfma_f32_16x16x32_bf16 a[244:247], v068 v069 v070 v071, v014 v015 v016 v017, a[244:247] - s_waitcnt lgkmcnt(4) - v_mfma_f32_16x16x32_bf16 a[240:243], v068 v069 v070 v071, v098 v099 v100 v101, a[240:243] - s_waitcnt lgkmcnt(3) - v_mfma_f32_16x16x32_bf16 a[236:239], v068 v069 v070 v071, v010 v011 v012 v013, a[236:239] - s_waitcnt lgkmcnt(2) - v_mfma_f32_16x16x32_bf16 a[232:235], v068 v069 v070 v071, v102 v103 v104 v105, a[232:235] - s_waitcnt lgkmcnt(1) - v_mfma_f32_16x16x32_bf16 a[228:231], v068 v069 v070 v071, v006 v007 v008 v009, a[228:231] - s_waitcnt lgkmcnt(0) - v_mfma_f32_16x16x32_bf16 a[224:227], v068 v069 v070 v071, v018 v019 v020 v021, a[224:227] - v_mfma_f32_16x16x32_bf16 a[220:223], v072 v073 v074 v075, v026 v027 v028 v029, a[220:223] - v_mfma_f32_16x16x32_bf16 a[216:219], v072 v073 v074 v075, v088 v089 v090 v091, a[216:219] - v_mfma_f32_16x16x32_bf16 a[212:215], v072 v073 v074 v075, v014 v015 v016 v017, a[212:215] - v_mfma_f32_16x16x32_bf16 a[208:211], v072 v073 v074 v075, v098 v099 v100 v101, a[208:211] - v_mfma_f32_16x16x32_bf16 a[204:207], v072 v073 v074 v075, v010 v011 v012 v013, a[204:207] - v_mfma_f32_16x16x32_bf16 a[200:203], v072 v073 v074 v075, v102 v103 v104 v105, a[200:203] - v_mfma_f32_16x16x32_bf16 a[196:199], v072 v073 v074 v075, v006 v007 v008 v009, a[196:199] - v_mfma_f32_16x16x32_bf16 a[192:195], v072 v073 v074 v075, v018 v019 v020 v021, a[192:195] - v_mfma_f32_16x16x32_bf16 a[188:191], v076 v077 v078 v079, v026 v027 v028 v029, a[188:191] - v_mfma_f32_16x16x32_bf16 a[184:187], v076 v077 v078 v079, v088 v089 v090 v091, a[184:187] - v_mfma_f32_16x16x32_bf16 a[180:183], v076 v077 v078 v079, v014 v015 v016 v017, a[180:183] - v_mfma_f32_16x16x32_bf16 a[176:179], v076 v077 v078 v079, v098 v099 v100 v101, a[176:179] - v_mfma_f32_16x16x32_bf16 a[172:175], v076 v077 v078 v079, v010 v011 v012 v013, a[172:175] - v_mfma_f32_16x16x32_bf16 a[168:171], v076 v077 v078 v079, v102 v103 v104 v105, a[168:171] - v_mfma_f32_16x16x32_bf16 a[164:167], v076 v077 v078 v079, v006 v007 v008 v009, a[164:167] - v_mfma_f32_16x16x32_bf16 a[160:163], v076 v077 v078 v079, v018 v019 v020 v021, a[160:163] - v_mfma_f32_16x16x32_bf16 a[156:159], v080 v081 v082 v083, v026 v027 v028 v029, a[156:159] - v_mfma_f32_16x16x32_bf16 a[152:155], v080 v081 v082 v083, v088 v089 v090 v091, a[152:155] - v_mfma_f32_16x16x32_bf16 a[148:151], v080 v081 v082 v083, v014 v015 v016 v017, a[148:151] - v_mfma_f32_16x16x32_bf16 a[144:147], v080 v081 v082 v083, v098 v099 v100 v101, a[144:147] - v_mfma_f32_16x16x32_bf16 a[140:143], v080 v081 v082 v083, v010 v011 v012 v013, a[140:143] - v_mfma_f32_16x16x32_bf16 a[136:139], v080 v081 v082 v083, v102 v103 v104 v105, a[136:139] - v_mfma_f32_16x16x32_bf16 a[132:135], v080 v081 v082 v083, v006 v007 v008 v009, a[132:135] - v_mfma_f32_16x16x32_bf16 a[128:131], v080 v081 v082 v083, v018 v019 v020 v021, a[128:131] - v_mfma_f32_16x16x32_bf16 a[124:127], v084 v085 v086 v087, v026 v027 v028 v029, a[124:127] - v_mfma_f32_16x16x32_bf16 a[120:123], v084 v085 v086 v087, v088 v089 v090 v091, a[120:123] - v_mfma_f32_16x16x32_bf16 a[116:119], v084 v085 v086 v087, v014 v015 v016 v017, a[116:119] - v_mfma_f32_16x16x32_bf16 a[112:115], v084 v085 v086 v087, v098 v099 v100 v101, a[112:115] - v_mfma_f32_16x16x32_bf16 a[108:111], v084 v085 v086 v087, v010 v011 v012 v013, a[108:111] - v_mfma_f32_16x16x32_bf16 a[104:107], v084 v085 v086 v087, v102 v103 v104 v105, a[104:107] - v_mfma_f32_16x16x32_bf16 a[100:103], v084 v085 v086 v087, v006 v007 v008 v009, a[100:103] - v_mfma_f32_16x16x32_bf16 a[96:99], v084 v085 v086 v087, v018 v019 v020 v021, a[96:99] - v_mfma_f32_16x16x32_bf16 a[92:95], v054 v055 v056 v057, v026 v027 v028 v029, a[92:95] - v_mfma_f32_16x16x32_bf16 a[88:91], v054 v055 v056 v057, v088 v089 v090 v091, a[88:91] - v_mfma_f32_16x16x32_bf16 a[84:87], v054 v055 v056 v057, v014 v015 v016 v017, a[84:87] - v_mfma_f32_16x16x32_bf16 a[80:83], v054 v055 v056 v057, v098 v099 v100 v101, a[80:83] - v_mfma_f32_16x16x32_bf16 a[76:79], v054 v055 v056 v057, v010 v011 v012 v013, a[76:79] - v_mfma_f32_16x16x32_bf16 a[72:75], v054 v055 v056 v057, v102 v103 v104 v105, a[72:75] - v_mfma_f32_16x16x32_bf16 a[68:71], v054 v055 v056 v057, v006 v007 v008 v009, a[68:71] - v_mfma_f32_16x16x32_bf16 a[64:67], v054 v055 v056 v057, v018 v019 v020 v021, a[64:67] - v_mfma_f32_16x16x32_bf16 a[60:63], v042 v043 v044 v045, v026 v027 v028 v029, a[60:63] - v_mfma_f32_16x16x32_bf16 a[56:59], v042 v043 v044 v045, v088 v089 v090 v091, a[56:59] - v_mfma_f32_16x16x32_bf16 a[52:55], v042 v043 v044 v045, v014 v015 v016 v017, a[52:55] - v_mfma_f32_16x16x32_bf16 a[48:51], v042 v043 v044 v045, v098 v099 v100 v101, a[48:51] - v_mfma_f32_16x16x32_bf16 a[44:47], v042 v043 v044 v045, v010 v011 v012 v013, a[44:47] - v_mfma_f32_16x16x32_bf16 a[40:43], v042 v043 v044 v045, v102 v103 v104 v105, a[40:43] - v_mfma_f32_16x16x32_bf16 a[36:39], v042 v043 v044 v045, v006 v007 v008 v009, a[36:39] - v_mfma_f32_16x16x32_bf16 a[32:35], v042 v043 v044 v045, v018 v019 v020 v021, a[32:35] - v_mfma_f32_16x16x32_bf16 a[28:31], v034 v035 v036 v037, v026 v027 v028 v029, a[28:31] - v_mfma_f32_16x16x32_bf16 a[24:27], v034 v035 v036 v037, v088 v089 v090 v091, a[24:27] - v_mfma_f32_16x16x32_bf16 a[20:23], v034 v035 v036 v037, v014 v015 v016 v017, a[20:23] - v_mfma_f32_16x16x32_bf16 a[16:19], v034 v035 v036 v037, v098 v099 v100 v101, a[16:19] - v_mfma_f32_16x16x32_bf16 a[12:15], v034 v035 v036 v037, v010 v011 v012 v013, a[12:15] - v_mfma_f32_16x16x32_bf16 a[8:11], v034 v035 v036 v037, v102 v103 v104 v105, a[8:11] - v_mfma_f32_16x16x32_bf16 a[4:7], v034 v035 v036 v037, v006 v007 v008 v009, a[4:7] - v_mfma_f32_16x16x32_bf16 a[0:3], v034 v035 v036 v037, v018 v019 v020 v021, a[0:3] - v_lshlrev_b32_e32 v002, 2, v095 ;.loc 2 1379 0 - v_accvgpr_read_b32 v003, a252 ;.loc 2 1389 22 - v_and_or_b32 v004, v002, 12, v001 ;.loc 2 1387 0 - v_cvt_pk_bf16_f32 v005, v003, s0 ;.loc 2 1390 0 - v_lshlrev_b32_e32 v003, 1, v097 ;.loc 1 330 12 - v_lshl_or_b32 v004, v004, 9, v003 - s_barrier ;.loc 2 1381 0 - ds_write_b16 v004, v005 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a253 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a254 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a255 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a248 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a249 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a250 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a251 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a244 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a245 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a246 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a247 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a240 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a241 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a242 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a243 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a236 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a237 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a238 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a239 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a232 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a233 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a234 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a235 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a228 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a229 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a230 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a231 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a224 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a225 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a226 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a227 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:1760 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a220 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a221 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a222 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a223 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a216 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a217 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a218 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a219 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9760 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a212 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8256 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a213 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8768 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a214 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9280 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a215 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9792 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a208 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8288 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a209 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8800 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a210 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9312 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a211 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9824 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a204 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8320 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a205 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8832 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a206 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9344 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a207 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9856 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a200 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8352 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a201 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8864 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a202 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9376 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a203 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9888 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a196 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8384 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a197 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8896 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a198 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9408 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a199 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9920 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a192 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8416 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a193 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:8928 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a194 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9440 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a195 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:9952 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a188 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16384 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a189 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16896 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a190 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17408 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a191 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17920 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a184 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16416 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a185 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16928 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a186 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17440 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a187 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17952 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a180 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16448 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a181 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16960 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a182 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17472 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a183 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17984 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a176 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16480 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a177 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16992 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a178 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17504 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a179 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:18016 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a172 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a173 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a174 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a175 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:18048 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a168 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a169 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a170 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a171 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:18080 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a164 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a165 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a166 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a167 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:18112 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a160 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:16608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a161 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a162 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:17632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a163 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v005 offset:18144 ;.loc 1 330 12 - v_or3_b32 v001, v001, 48, v002 ;.loc 2 1387 0 - v_accvgpr_read_b32 v005, a156 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 - ds_write_b16 v001, v005 - v_accvgpr_read_b32 v005, a157 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a158 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a159 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a152 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a153 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a154 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a155 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a148 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a149 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a150 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a151 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a144 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a145 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a146 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a147 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a140 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a141 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a142 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a143 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a136 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a137 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a138 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a139 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a132 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a133 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a134 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a135 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a128 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a129 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a130 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v005, a131 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v005, v005, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v005 offset:1760 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a124 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32768 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a125 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33280 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a126 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33792 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a127 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34304 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a120 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32800 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a121 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33312 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a122 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33824 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a123 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34336 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a116 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32832 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a117 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33344 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a118 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33856 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a119 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34368 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a112 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32864 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a113 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33376 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a114 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33888 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a115 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34400 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a108 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32896 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a109 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33408 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a110 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33920 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a111 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34432 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a104 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32928 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a105 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33440 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a106 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33952 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a107 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34464 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a100 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32960 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a101 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33472 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a102 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33984 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a103 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34496 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a96 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:32992 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a97 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:33504 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a98 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34016 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a99 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:34528 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a92 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:40960 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a93 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41472 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a94 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41984 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a95 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42496 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a88 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:40992 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a89 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41504 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a90 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42016 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a91 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42528 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a84 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41024 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a85 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41536 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a86 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42048 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a87 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42560 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a80 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41056 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a81 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41568 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a82 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42080 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a83 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42592 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a76 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41088 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a77 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41600 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a78 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42112 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a79 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42624 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a72 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41120 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a73 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41632 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a74 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42144 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a75 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42656 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a68 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41152 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a69 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41664 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a70 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42176 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a71 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42688 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a64 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41184 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a65 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:41696 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a66 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42208 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a67 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:42720 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a60 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49152 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a61 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49664 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a62 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50176 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a63 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50688 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a56 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49184 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a57 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49696 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a58 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50208 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a59 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50720 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a52 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49216 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a53 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49728 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a54 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50240 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a55 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50752 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a48 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49248 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a49 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49760 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a50 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50272 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a51 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50784 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a44 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49280 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a45 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49792 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a46 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50304 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a47 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50816 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a40 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49312 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a41 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49824 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a42 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50336 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a43 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50848 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a36 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49344 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a37 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49856 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a38 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50368 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a39 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50880 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a32 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49376 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a33 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:49888 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a34 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50400 ;.loc 1 330 12 - v_accvgpr_read_b32 v001, a35 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v001, v001, s0 ;.loc 2 1390 0 - ds_write_b16 v004, v001 offset:50912 ;.loc 1 330 12 - v_or_b32_e32 v001, v002, v066 ;.loc 2 1387 0 - v_accvgpr_read_b32 v002, a28 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - v_lshl_or_b32 v001, v001, 9, v003 ;.loc 1 330 12 - ds_write_b16 v001, v002 - v_accvgpr_read_b32 v002, a29 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:512 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a30 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1024 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a31 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1536 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a24 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:32 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a25 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:544 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a26 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1056 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a27 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1568 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a20 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:64 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a21 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:576 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a22 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1088 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a23 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1600 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a16 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:96 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a17 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:608 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a18 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1120 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a19 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1632 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a12 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:128 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a13 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:640 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a14 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1152 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a15 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1664 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a8 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:160 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a9 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:672 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a10 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1184 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a11 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1696 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a4 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:192 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a5 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:704 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a6 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1216 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a7 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1728 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a0 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:224 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a1 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:736 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a2 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - ds_write_b16 v001, v002 offset:1248 ;.loc 1 330 12 - v_accvgpr_read_b32 v002, a3 ;.loc 2 1389 22 - v_cvt_pk_bf16_f32 v002, v002, s0 ;.loc 2 1390 0 - v_lshrrev_b32_e32 v004, 5, v000 ;.loc 2 1433 0 - ds_write_b16 v001, v002 offset:1760 ;.loc 1 330 12 - v_or_b32_e32 v002, s20, v004 ;.loc 2 1435 0 - v_mov_b32_e32 v003, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v002 v003 ;.loc 2 1436 28 - v_lshlrev_b32_e32 v003, 3, v000 - s_waitcnt lgkmcnt(0) ;.loc 2 1430 0 - s_barrier - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_4: - s_cbranch_execz .LBB0_4 - v_and_b32_e32 v000, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v001, 1, v000 ;.loc 1 317 12 - v_lshl_or_b32 v001, v004, 9, v001 - ds_read_b128 v006 v007 v008 v009, v001 - v_or_b32_e32 v000, s18, v000 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v001, 13, v002 - v_add_lshl_u32 v000, v000, v001, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_4: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_6: - s_cbranch_execz .LBB0_6 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_6: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 16, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_8: - s_cbranch_execz .LBB0_8 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_8: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 24, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_10: - s_cbranch_execz .LBB0_10 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_10: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 32, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_12: - s_cbranch_execz .LBB0_12 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_12: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 40, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_14: - s_cbranch_execz .LBB0_14 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_14: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 48, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_16: - s_cbranch_execz .LBB0_16 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_16: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 56, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_18: - s_cbranch_execz .LBB0_18 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_18: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 64, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_20: - s_cbranch_execz .LBB0_20 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_20: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x48, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_22: - s_cbranch_execz .LBB0_22 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_22: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x50, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_24: - s_cbranch_execz .LBB0_24 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_24: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x58, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_26: - s_cbranch_execz .LBB0_26 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_26: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x60, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_28: - s_cbranch_execz .LBB0_28 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_28: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x68, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_30: - s_cbranch_execz .LBB0_30 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_30: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x70, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_32: - s_cbranch_execz .LBB0_32 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_32: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x78, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_34: - s_cbranch_execz .LBB0_34 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_34: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x80, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_36: - s_cbranch_execz .LBB0_36 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_36: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x88, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_38: - s_cbranch_execz .LBB0_38 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_38: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x90, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_40: - s_cbranch_execz .LBB0_40 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_40: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0x98, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_42: - s_cbranch_execz .LBB0_42 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_42: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xa0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_44: - s_cbranch_execz .LBB0_44 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_44: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xa8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_46: - s_cbranch_execz .LBB0_46 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_46: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xb0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_48: - s_cbranch_execz .LBB0_48 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_48: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xb8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_50: - s_cbranch_execz .LBB0_50 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_50: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xc0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_52: - s_cbranch_execz .LBB0_52 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_52: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xc8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_54: - s_cbranch_execz .LBB0_54 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_54: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xd0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_56: - s_cbranch_execz .LBB0_56 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_56: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xd8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_58: - s_cbranch_execz .LBB0_58 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_58: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xe0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_60: - s_cbranch_execz .LBB0_60 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_60: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xe8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_62: - s_cbranch_execz .LBB0_62 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_62: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xf0, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_64: - s_cbranch_execz .LBB0_64 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v005, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v005 - ds_read_b128 v006 v007 v008 v009, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v006 v007 v008 v009, v000, s[0:3], 0 offen -.LBB0_64: - s_or_b64 exec, exec, s[4:5] ;.loc 1 0 8 is_stmt 0 - v_or_b32_e32 v002, 0xf8, v004 ;.loc 2 1433 0 is_stmt 1 - v_or_b32_e32 v000, s20, v002 ;.loc 2 1435 0 - v_mov_b32_e32 v001, s19 - v_cmp_gt_u64_e32 vcc, s[12:13], v000 v001 ;.loc 2 1436 28 - s_and_saveexec_b64 s[4:5], vcc ;.loc 2 1437 0 -.JUMP.LBB0_66: - s_cbranch_execz .LBB0_66 - v_and_b32_e32 v001, 0xf8, v003 ;.loc 2 1434 0 - v_lshlrev_b32_e32 v003, 1, v001 ;.loc 1 317 12 - v_lshl_or_b32 v002, v002, 9, v003 - ds_read_b128 v002 v003 v004 v005, v002 - v_or_b32_e32 v001, s18, v001 ;.loc 2 1445 0 - v_lshlrev_b32_e32 v000, 13, v000 - v_add_lshl_u32 v000, v001, v000, 1 ;.loc 1 299 8 - s_waitcnt lgkmcnt(0) - buffer_store_dwordx4 v002 v003 v004 v005, v000, s[0:3], 0 offen -.LBB0_66: - s_endpgm ;.loc 2 327 0 -.Lfunc_end0: - .size hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0, .Lfunc_end0-hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0 - .cfi_endproc - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_vgpr, 172 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_agpr, 256 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.numbered_sgpr, 39 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.num_named_barrier, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.private_seg_size, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_vcc, 1 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.uses_flat_scratch, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_dyn_sized_stack, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_recursion, 0 - .set hgemm_bf16_256x256x64x2_SPK1_W2x2x1_BLDS1_TN_AS1_AK32_BK32_RP1_0.has_indirect_call, 0 - .p2alignl 6, 3212836864 - .fill 256, 4, 3212836864 - .section .AMDGPU.gpr_maximums,"",@progbits - .set amdgpu.max_num_vgpr, 0 - .set amdgpu.max_num_agpr, 0 - .set amdgpu.max_num_sgpr, 0 - .set amdgpu.max_num_named_barrier, 0 - .text - .section .debug_abbrev,"",@progbits - .byte 1 - .byte 17 - .byte 0 - .byte 37 - .byte 14 - .byte 19 - .byte 5 - .byte 3 - .byte 14 - .byte 16 - .byte 23 - .byte 17 - .byte 1 - .byte 18 - .byte 6 - .byte 0 - .byte 0 - .byte 0 - .section .debug_info,"",@progbits -... - .end_amdgpu_metadata - .section .debug_line,"",@progbits -.Lline_table_start0: From 112d21c7c49e881e10ccca29df382492194b61bf Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Fri, 3 Jul 2026 10:21:26 +0000 Subject: [PATCH 116/118] zty_tmp --- kernels/fp8_gemm_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernels/fp8_gemm_utils.py b/kernels/fp8_gemm_utils.py index 7ea3552cb..4b3462320 100644 --- a/kernels/fp8_gemm_utils.py +++ b/kernels/fp8_gemm_utils.py @@ -47,10 +47,10 @@ def swizzle_128(row, col): return swizzled_offset // 128, swizzled_offset % 128 -def compute_global_swizzle(lane_id, wave_id, K, n_rounds__4, preshuffled): +def compute_global_swizzle(lane_id, wave_id, K, n_rounds, preshuffled): offsets = [] n_waves = fx.block_dim.x // 64 - for round in range_constexpr(n_rounds__4): + for round in range_constexpr(n_rounds): if const_expr(preshuffled): row = lane_id % 8 + wave_id * 8 + round * (n_waves * 8) col = (lane_id // 8) * 16 From 88d532383214ba397b2124dd0f4df96a44e721fd Mon Sep 17 00:00:00 2001 From: zhutaoyu Date: Mon, 6 Jul 2026 03:14:42 +0000 Subject: [PATCH 117/118] delete skills --- .../skills/vgpr-pressure-analysis/SKILL.md | 76 ---------- .../scripts/vgpr_pressure.py | 134 ------------------ 2 files changed, 210 deletions(-) delete mode 100644 .claude/skills/vgpr-pressure-analysis/SKILL.md delete mode 100644 .claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py diff --git a/.claude/skills/vgpr-pressure-analysis/SKILL.md b/.claude/skills/vgpr-pressure-analysis/SKILL.md deleted file mode 100644 index 6906c26a5..000000000 --- a/.claude/skills/vgpr-pressure-analysis/SKILL.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -name: vgpr-pressure-analysis -description: Analyze AMDGCN VGPR/AGPR register pressure of a FlyDSL kernel from its ISA dump — report the compiler high-water (vgpr/agpr/accum_offset/spill/headroom) AND a per-purpose breakdown of where the arch VGPRs go (A/B fragment ds_read, address ALU, scale loads, epilogue), plus the true peak-pressure region. Use when the user asks "how many VGPRs does X use", "where is the register pressure", "为啥 vgpr 这么高 / 占用统计 / 寄存器压力", is chasing spill, or wants to free registers (deeper prefetch, more occupancy) on CDNA GEMM/attention kernels. ---- - -# VGPR Pressure Analysis - -Find out where a kernel's registers go so you can target what to cut (to kill -spill, deepen a prefetch, or raise occupancy). Works from the ISA dump, using the -compiler's own allocation — not guesses. - -## Mental model (CDNA3/4, wave64) - -- A SIMD has **512 VGPRs total**, split into **arch VGPRs** (v0..accum_offset-1) - and the **AGPR file** (accum_offset..511). MFMA accumulators normally live in - AGPR (pin them there — see [[feedback-4wave-1occ-is-optimal]]). -- So a 256x256 tile that needs **256 AGPR for accumulators** leaves only **256 - arch VGPRs** for everything else (A/B fragments, scale, addresses, temps). - That ~256 is the budget you actually fight over. -- `accum_offset` in the ISA metadata **IS the compiler's arch-VGPR high-water** - (the AGPR file starts right after the last arch VGPR). Trust it over hand counts. -- **spill** (`.vgpr_spill_count > 0`) is catastrophic on the hot loop — treat any - spill as the top priority. Always analyze the BIG shape (small shapes / short K - loops often don't spill and mislead). - -## How to get the ISA dump - -```bash -rm -rf /tmp/kdump -FLYDSL_RUNTIME_ENABLE_CACHE=0 FLYDSL_DUMP_IR=1 FLYDSL_DEBUG_DUMP_ASM=1 \ - FLYDSL_DUMP_DIR=/tmp/kdump PYTHONPATH= HIP_VISIBLE_DEVICES= \ - python3 # use a realistic/large shape -# -> /tmp/kdump/_0/21_final_isa.s -``` - -## Run the analysis - -```bash -python3 .claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py /tmp/kdump -``` - -Three sections: -1. **high-water** — vgpr/agpr/accum_offset/sgpr, spill flags, headroom (512-total). -2. **arch-VGPR breakdown** — each arch VGPR bucketed by the op that LAST defines it: - `ds_read` (A/B fragment data), `address/index ALU`, `buffer_load dword` (scale), - `cvt` (epilogue), `mov/accvgpr`. This tells you the proportion: e.g. fragments - 136, address ALU 89, scale 23. -3. **peak region** — the instructions that touch the very top arch VGPRs - (those numbers only get allocated at the pressure peak), so you see exactly - what is co-live at the worst point. - -## Reading the result / what to cut - -- **`mov/accvgpr` or `MFMA dest` showing many ARCH regs** => accumulators are NOT - AGPR-pinned (compiler spilled them to arch VGPR + inserted v_accvgpr_mov/read). - Fix: pin the accumulator in AGPR via inline asm (`=a,...,0`). Biggest single win. -- **`ds_read (A/B fragment)` dominates** => that's real operand data; to cut it you - must reduce *simultaneously-live* fragments (e.g. don't pre-load all M/N tiles up - front; load some inside the loop) — costs scheduling latitude, do only if spilling. -- **`address/index ALU` surprisingly high** => many live address/offset registers - (LDS swizzle bases, per-buffer LDS bases, scale addresses). Often reducible by - sharing one base + immediate offsets (ds_read/buffer_load have immediate offset - fields) instead of materializing a full address per access. Watch the 16-bit - immediate-offset limit (65535) — group accesses so the spread fits. -- **`buffer_load dword (scale)`** => per-block scale; carrying it as loop-carried - (prefetch) costs regs but hides latency. Trade-off: dropping the carry frees ~8 - regs but exposes scale latency (measure both). - -## Caveats - -- The breakdown buckets by *last* defining op, so a reg reused across phases is - attributed to its final use — it's a proportional map of pressure, not exact - per-instant liveness. For exact peak liveness trust `accum_offset`. -- Re-dump after every change (cache off) and re-check spill on the big shape. -- Related: [[project-fp4-gemm-4wave-status]] has a worked example (arch 252: - fragment 136 / address 89 / scale 23). diff --git a/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py b/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py deleted file mode 100644 index 20d0b7b29..000000000 --- a/.claude/skills/vgpr-pressure-analysis/scripts/vgpr_pressure.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 -"""Analyze AMDGCN VGPR/AGPR register pressure from a FlyDSL ISA dump. - -Two reports: - 1. High-water summary (compiler-authoritative): vgpr/agpr/sgpr counts, spill, - accum_offset (= arch-VGPR high-water; AGPR file starts here), headroom. - 2. Per-purpose arch-VGPR breakdown: bucket each arch VGPR (v0..accum_offset-1) - by the instruction that LAST defines it (ds_read=A/B fragment, address ALU, - buffer_load=scale/data, cvt=epilogue, ...). Shows where the pressure goes. - -Usage: - python3 vgpr_pressure.py # dir containing *_final_isa.s - python3 vgpr_pressure.py # an ISA file directly -""" -import collections -import glob -import os -import re -import sys - - -def find_isa(path): - if os.path.isfile(path): - return path - files = glob.glob(f"{path}/**/*_final_isa.s", recursive=True) - if not files: - files = glob.glob(f"{path}/**/*.s", recursive=True) - return max(files, key=os.path.getmtime) if files else None - - -def summary(text): - def g(pat): - m = re.search(pat, text) - return m.group(1) if m else None - - vgpr = g(r"\.vgpr_count:\s*(\d+)") - agpr = g(r"\.agpr_count:\s*(\d+)") - sgpr = g(r"\.sgpr_count:\s*(\d+)") - vspill = g(r"\.vgpr_spill_count:\s*(\d+)") or "0" - sspill = g(r"\.sgpr_spill_count:\s*(\d+)") or "0" - acc = g(r"\.amdhsa_accum_offset\s*(\d+)") - print("== high-water (compiler-authoritative) ==") - print(f" vgpr_total={vgpr} agpr={agpr} accum_offset(arch hi-water)={acc} sgpr={sgpr}") - print(f" spill: vgpr={vspill} sgpr={sspill}{' *** SPILL ***' if vspill != '0' or sspill != '0' else ''}") - if vgpr and vgpr.isdigit(): - print(f" total {vgpr}/512 headroom={512 - int(vgpr)}") - return int(acc) if acc and acc.isdigit() else (int(vgpr) if vgpr and vgpr.isdigit() else 256) - - -def dests(line): - l = line.strip() - if not l or l.startswith((";", "s_", ".")): - return ([], None) - m = re.match(r"(\S+)\s+(v\[(\d+):(\d+)\]|v(\d+))", l) - if not m: - return ([], None) - op = m.group(1) - rs = list(range(int(m.group(3)), int(m.group(4)) + 1)) if m.group(3) is not None else [int(m.group(5))] - return (rs, op) - - -def bucket(op): - if op.startswith("v_mfma"): - return "MFMA dest (accum; mostly AGPR, arch only if spilled)" - if op.startswith("ds_read"): - return "ds_read dest (S2R A/B fragment - data)" - if op.startswith("buffer_load_dwordx4"): - return "buffer_load x4 (wide A/B data)" - if op.startswith("buffer_load"): - return "buffer_load dword (scale / narrow)" - if op.startswith(("v_add", "v_or", "v_lshl", "v_and", "v_mul", "v_sub", "v_bitop", "v_lshr", "v_bfe")): - return "address / index ALU" - if op.startswith("v_cvt"): - return "cvt (epilogue dtype convert)" - if op.startswith(("v_mov", "v_accvgpr")): - return "mov / accvgpr shuffle" - return f"other ({op})" - - -def breakdown(text, arch_hi): - owner = {} # reg -> bucket of its LAST defining op (its "current" use at peak) - for l in text.splitlines(): - rs, op = dests(l) - if op is None: - continue - b = bucket(op) - for r in rs: - if r < arch_hi: - owner[r] = b - tab = collections.Counter(owner.values()) - print(f"\n== arch-VGPR breakdown (v0..v{arch_hi-1}, by last-defining op) ==") - print(f" {len(owner)}/{arch_hi} arch VGPRs defined in-kernel") - print(f" {'bucket':52s} #regs") - for b, n in tab.most_common(): - print(f" {b:52s} {n}") - - -def peak_region(text, arch_hi): - """Show instructions touching the TOP arch VGPRs (v[hi-12..hi-1]) -- the true - peak-pressure region (those high numbers only get allocated at the peak).""" - lo = max(0, arch_hi - 12) - lines = text.splitlines() - hits = [] - for i, l in enumerate(lines): - vs = set() - for m in re.findall(r"v\[(\d+):(\d+)\]", l): - vs.update(range(int(m[0]), int(m[1]) + 1)) - for m in re.findall(r"(? 1 else "/tmp/fp4_dump" - f = find_isa(path) - if not f: - print(f"no ISA .s under {path}") - sys.exit(1) - print(f"ISA: {f}") - text = open(f).read() - arch_hi = summary(text) - breakdown(text, arch_hi) - peak_region(text, arch_hi) - - -if __name__ == "__main__": - main() From b296d89e90859ed3de873d47552e83f3ad779c26 Mon Sep 17 00:00:00 2001 From: Taoyu Zhu Date: Mon, 6 Jul 2026 11:19:50 +0800 Subject: [PATCH 118/118] Update SKILL.md --- .../4wave-mfma-coverage-analysis/SKILL.md | 47 +++++-------------- 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md b/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md index 365d549c7..03976271b 100644 --- a/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md +++ b/.claude/skills/4wave-mfma-coverage-analysis/SKILL.md @@ -1,42 +1,26 @@ --- name: 4wave-mfma-coverage-analysis -description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED cycles, then tiles those idle cycles by OCCUPYING instruction (issue_dur + stall, intersected with the idle gaps) so the ranking says which non-MFMA ops steal issue bandwidth between MFMAs. Reports %exp and %all. Use when a GEMM/attention kernel is MFMA-bound and you want to push cyc/mfma toward the floor, or the user asks "what isn't hidden behind MFMA", "哪些指令没被 mfma 掩盖", "暴露的指令", or which non-MFMA op is the biggest exposed stall. +description: From an ATT trace, find which hot-loop instructions are NOT hidden behind MFMA execution -- i.e. what is keeping cyc/mfma above the MFMA execute floor (16 for fp4 16x16x128, 32 for fp8 16x16x128). Models the matrix unit as a pipeline (next_free) for the EXPOSED cycles, then tiles those idle cycles by OCCUPYING instruction (issue_dur + stall, intersected with the idle gaps) so the ranking says which non-MFMA ops steal issue bandwidth between MFMAs. Reports %exp and %all. Use when a GEMM/attention kernel is MFMA-bound and is 256 threads/4waves and you want to push cyc/mfma toward the floor, or which non-MFMA op is the biggest exposed stall. --- # MFMA Coverage Analysis ## The model -**Step 1 — EXPOSED via next_free (matrix-unit pipeline).** Each MFMA occupies ONE -EXEC-cycle execute slot, but consecutive MFMAs can **issue < EXEC apart** and still -both be hidden (dense fp4 MFMAs issue ~8 cyc apart yet each execute-slot is 16). +**Step 1 — EXPOSED via next_free (matrix-unit pipeline).** Each MFMA occupies ONE EXEC-cycle execute slot, but consecutive MFMAs can **issue < EXEC apart** and still both be hidden (dense fp4 MFMAs issue (4~8) cyc apart yet each execute-slot is 16). Track `next_free` = the cycle the unit becomes free: - MFMA issues at `t <= next_free` → hidden; `next_free += EXEC` - MFMA issues at `t > next_free` → unit IDLE for `t - next_free` → **EXPOSED** -EXPOSED = sum of idle gaps; shrink toward 0 so cyc/mfma → EXEC (see -[[feedback-mfma-bound-reduce-scalar-toward-cyc16]]). (This replaces an older -union-of-`[issue,issue+EXEC)` model that over-reported exposure.) +EXPOSED = sum of idle gaps; shrink toward 0 so cyc/mfma → EXEC(This replaces an older union-of-`[issue,issue+EXEC)` model that over-reported exposure.) -**Step 2 — attribute EXPOSED by OCCUPANCY.** For every idle cycle, credit it to -whichever instruction was on the issue port then. Each non-MFMA instruction occupies -`[its issue, next instruction's issue)` = its issue_dur PLUS any stall (r[2]) — we do -NOT split issue vs stall, and do NOT ask "who blocks". The question is simply: while -the matrix unit sat idle, which non-MFMA ops were stealing issue bandwidth? Intersect -each op's occupancy with the idle gaps and sum. This tiles the whole EXPOSED window -(every idle cycle has an owner), so the ranking directly says which ops must be -REMOVED / SHRUNK from between the MFMAs to push cyc/mfma toward the floor. +**Step 2 — attribute EXPOSED by OCCUPANCY.** For every idle cycle, credit it to whichever instruction was on the issue port then. Each non-MFMA instruction occupies `[its issue, next instruction's issue)` = its issue_dur PLUS any stall (r[2]) — we do NOT split issue vs stall, and do NOT ask "who blocks". The question is simply: while the matrix unit sat idle, which non-MFMA ops were stealing issue bandwidth? Intersect each op's occupancy with the idle gaps and sum. This tiles the whole EXPOSED window (every idle cycle has an owner), so the ranking directly says which ops must be REMOVED / SHRUNK from between the MFMAs to push cyc/mfma toward the floor. -Two percent columns: **%exp** (of the EXPOSED cycles) and **%all** (of the whole -window incl. MFMA — the real wall-clock lever, since MFMA execute is ~85%+). +Two percent columns: **%exp** (of the EXPOSED cycles) and **%all** (of the whole window incl. MFMA — the real wall-clock lever, since MFMA execute is ~85%+). -Example (fp4_gemm_4wave, cyc/mfma 18.73, EXPOSED 6344 = 14.4% of全局): -`buffer_load_dwordx4 30%exp/4.3%all · v_readfirstlane 17%/2.5% · s_barrier 16%/2.3% · -s_waitcnt(lgkmcnt) 8%/1.2% · s_add_i32 6%/0.8% · ds_read_b128 6%/0.8% · …`. -Read it as: the exposed time is scale/g2s **gather + readfirstlane + address -arithmetic** stealing issue slots between MFMAs; cut their count/occupancy. -Row schema: `[cycle, issue_dur, stall, total_dur, code_id]`; s_waitcnt is split -vmcnt / lgkmcnt so you see whether VMEM or LDS waits dominate. +Example (fp4_gemm_4wave, cyc/mfma 18.73, EXPOSED 6344 = 14.4% of all): `buffer_load_dwordx4 30%exp/4.3%all · v_readfirstlane 17%/2.5% · s_barrier 16%/2.3% · s_waitcnt(lgkmcnt) 8%/1.2% · s_add_i32 6%/0.8% · ds_read_b128 6%/0.8% · …`. +Read it as: the exposed time is scale/g2s **gather + readfirstlane + address arithmetic** stealing issue slots between MFMAs; cut their count/occupancy. +Row schema: `[cycle, issue_dur, stall, total_dur, code_id]`; s_waitcnt is split vmcnt / lgkmcnt so you see whether VMEM or LDS waits dominate. EXEC is the MFMA **execute** latency, NOT issue latency: - fp4 `mfma_scale_f32_16x16x128_f8f6f4` → **16** @@ -46,7 +30,7 @@ Pass the right `--exec`. ## How to run ```bash -# 1. capture ATT (see att-hotloop-benchmark skill) on an idle GPU, long-K shape +# 1. capture ATT on an idle GPU # 2. run, first without --range to print the cycle span: python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py # 3. pick a mid steady slice spanning ~10 outer-loop iters, re-run: @@ -54,7 +38,7 @@ python3 .claude/skills/mfma-coverage-analysis/scripts/mfma_coverage.py \ --range 219000,245000 --exec 16 ``` -Output: MFMA-covered %, EXPOSED % (and % of全局), cyc/mfma vs floor, then the exposed +Output: MFMA-covered %, EXPOSED % (and % of all), cyc/mfma vs floor, then the exposed cycles tiled by OCCUPYING instruction with two columns (%exp, %all). ## Reading it @@ -67,14 +51,9 @@ cycles tiled by OCCUPYING instruction with two columns (%exp, %all). (wider load), move to a different MFMA's shadow, or cut the count. - **v_readfirstlane high** → v→s serialization; precompute the wave-uniform SGPR once outside the loop instead of per-use. -- **s_add / s_and / v_cmp / s_lshl** (address & loop arithmetic) → recompute less; - hoist loop-invariants, use s_add increment chains, fold offsets into instruction - immediates. -- **s_barrier high** → per-iter cross-wave sync (4 waves finish the iter at slightly - different times). Structural for a fixed wave count; not cuttable without changing - sync granularity / wave layout. -- **s_waitcnt(lgkmcnt/vmcnt)** → LDS/VMEM waits; deepen the corresponding prefetch or - relax the count. Usually small once loads are hidden. +- **s_add / s_and / v_cmp / s_lshl** (address & loop arithmetic) → recompute less; hoist loop-invariants, use s_add increment chains, fold offsets into instruction immediates. +- **s_barrier high** → per-iter cross-wave sync (4 waves finish the iter at slightly different times). Structural for a fixed wave count; not cuttable without changing sync granularity / wave layout. +- **s_waitcnt(lgkmcnt/vmcnt)** → LDS/VMEM waits; deepen the corresponding prefetch or relax the count. Usually small once loads are hidden. ## Caveats