[llvm] [AMDGPU] Add DAG mutation to sink consumers of VMEM-pending registers (PR #197452)
Barbara Mitic via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 6 03:07:26 PDT 2026
https://github.com/barbara-amd updated https://github.com/llvm/llvm-project/pull/197452
>From 938813988d95bbe3ea31f2628cf0fed1c93d0418 Mon Sep 17 00:00:00 2001
From: barbara-amd <Barbara.Mitic at amd.com>
Date: Thu, 6 Aug 2026 10:24:57 +0200
Subject: [PATCH] [AMDGPU] Add DAG mutation to sink consumers of VMEM-pending
registers
The post-RA scheduler only sees dependencies within its current region.
A value still pending from before the region - a live-in across a block
boundary, or a def from an earlier scheduling region in the same block -
has no defining SUnit, so its consumer has no edge and can be hoisted to
the top of the region.
When that value comes from a VMEM load, SIInsertWaitcnts must then wait
for it before the region's own VMEM loads are issued, serializing those
independent loads behind the wait. This applies to any pure VMEM load
(buffer_load, image_sample, image_bvh_intersect_ray, global_load, ...),
not one opcode.
Add a post-RA ScheduleDAGMutation, AMDGPUVMemUseOrdering, that marks a
register unit VMEM-pending when its closest reaching def (found by a
depth-bounded backward walk) is a pure VMEM load, and adds artificial,
zero-latency edges from each in-region VMEM load to every in-region
consumer of such a unit, so one later wait covers both.
Edges are added per counter class (loadcnt/samplecnt/bvhcnt on GFX12+,
unified vmcnt before). A class already saturated at region entry is
skipped, and a load whose ordering is already implied by another is
pruned.
Runs post-RA only (needs physreg defs/live-ins).
---
.../lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 14 +
.../Target/AMDGPU/AMDGPUVMemUseOrdering.cpp | 414 ++++
.../lib/Target/AMDGPU/AMDGPUVMemUseOrdering.h | 24 +
llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.cpp | 77 +-
llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h | 43 +
llvm/lib/Target/AMDGPU/CMakeLists.txt | 1 +
llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp | 9 +-
.../AMDGPU/sched-vmem-use-ordering-gfx9.mir | 278 +++
.../sched-vmem-use-ordering-waitcnt.mir | 1112 +++++++++
.../AMDGPU/sched-vmem-use-ordering.mir | 2151 +++++++++++++++++
llvm/test/CodeGen/AMDGPU/wqm.ll | 4 +-
11 files changed, 4117 insertions(+), 10 deletions(-)
create mode 100644 llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.cpp
create mode 100644 llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.h
create mode 100644 llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-gfx9.mir
create mode 100644 llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-waitcnt.mir
create mode 100644 llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering.mir
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 30ea659cbf322..6629e3bf4c00e 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -39,6 +39,7 @@
#include "AMDGPUTargetObjectFile.h"
#include "AMDGPUTargetTransformInfo.h"
#include "AMDGPUUnifyDivergentExitNodes.h"
+#include "AMDGPUVMemUseOrdering.h"
#include "AMDGPUWaitSGPRHazards.h"
#include "GCNDPPCombine.h"
#include "GCNIterativeScheduler.h"
@@ -533,6 +534,13 @@ static cl::opt<bool>
cl::desc("Enable VOPD, dual issue of VALU in wave32"),
cl::init(true), cl::Hidden);
+static cl::opt<bool> EnableVMemUseOrdering(
+ "amdgpu-vmem-use-ordering",
+ cl::desc("Add ordering edges so post-RA scheduling does not move "
+ "consumers of VMEM-pending live-ins ahead of in-region VMEM "
+ "loads"),
+ cl::init(true), cl::Hidden);
+
// Option is used in lit tests to prevent deadcoding of patterns inspected.
static cl::opt<bool>
EnableDCEInRA("amdgpu-dce-in-ra",
@@ -1456,6 +1464,12 @@ GCNTargetMachine::createPostMachineScheduler(MachineSchedContext *C) const {
DAG->addMutation(createAMDGPUExportClusteringDAGMutation());
DAG->addMutation(createAMDGPUBarrierLatencyDAGMutation(C->MF));
DAG->addMutation(createAMDGPUHazardLatencyDAGMutation(C->MF));
+ // Post-RA only: uses physreg live-ins and physreg defs; not applicable to
+ // pre-RA iterative schedulers.
+ if ((EnableVMemUseOrdering.getNumOccurrences() ||
+ getOptLevel() >= CodeGenOptLevel::Less) &&
+ EnableVMemUseOrdering)
+ DAG->addMutation(createAMDGPUVMemUseOrderingDAGMutation(C->MF));
return DAG;
}
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.cpp
new file mode 100644
index 0000000000000..bc47bbd2ecee2
--- /dev/null
+++ b/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.cpp
@@ -0,0 +1,414 @@
+//===-- AMDGPUVMemUseOrdering.cpp - AMDGPU VMEM Use Ordering --------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file Post-RA DAG mutation that keeps consumers of VMEM-pending registers
+/// from being hoisted ahead of the region's own VMEM loads.
+///
+/// A register is VMEM-pending at region entry when its closest reaching
+/// definition is a pure VMEM load. Hoisting such a consumer to the top
+/// of the region forces SIInsertWaitcnts to emit an early wait that
+/// serialises the loads; adding Artificial order edges from each
+/// in-region VMEM load to the consumer instead lets one later partial
+/// wait cover them all.
+//
+//===----------------------------------------------------------------------===//
+
+#include "AMDGPUVMemUseOrdering.h"
+#include "AMDGPUWaitcntUtils.h"
+#include "GCNSubtarget.h"
+#include "llvm/ADT/BitVector.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/CodeGen/MachineOperand.h"
+#include "llvm/CodeGen/ScheduleDAGInstrs.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include <algorithm>
+#include <cstdint>
+#include <utility>
+
+using namespace llvm;
+
+#define DEBUG_TYPE "amdgpu-vmem-use-ordering"
+
+// Maximum predecessor-block depth the backward classification walk descends.
+// Bounds compile-time on deep CFGs; the value is a conservative, untuned guess.
+static cl::opt<unsigned> VMemUseOrderingMaxDepth(
+ "amdgpu-vmem-use-ordering-max-depth",
+ cl::desc("Maximum predecessor-block depth searched when classifying "
+ "VMEM-pending registers"),
+ cl::init(8), cl::Hidden);
+
+// A counter class already holding many outstanding loads at region entry is
+// counter-bound; adding edges there collapses SIInsertWaitcnts's partial-wait
+// staircase into a full drain, so leave such classes alone (0 disables).
+static cl::opt<unsigned> VMemUseOrderingMaxPendingDepth(
+ "amdgpu-vmem-use-ordering-max-pending-depth",
+ cl::desc("Skip adding VMEM-load ordering edges for a counter class once "
+ "more than this many register units are already VMEM-pending at "
+ "region entry on that class (0 disables the gate)"),
+ cl::init(8), cl::Hidden);
+
+namespace {
+
+// Only VGPR/AGPR units can ever be VMEM-pending, since a pure VMEM load only
+// writes vector registers.
+static bool isVectorPhysReg(MCRegister Reg, const TargetRegisterInfo &TRI) {
+ const TargetRegisterClass *RC = TRI.getPhysRegBaseClass(Reg);
+ return RC &&
+ (SIRegisterInfo::isVGPRClass(RC) || SIRegisterInfo::isAGPRClass(RC));
+}
+
+class VMemUseOrdering : public ScheduleDAGMutation {
+ // In-region pure VMEM loads paired with the counter class each completes on.
+ using VMemLoadList =
+ SmallVector<std::pair<SUnit *, AMDGPU::InstCounterType>, 8>;
+
+ const GCNSubtarget &ST;
+
+ // Scratch reused across regions: grown lazily, reset per region.
+ BitVector VisitedMBBs; // [MBB number] block already seen by classify()
+ BitVector DfsBV; // [SUnit NodeNum] node seen by leaf-pruning DFS
+ BitVector CandsBV; // [reg unit] candidate use awaiting classify
+ BitVector DefinedBV; // [reg unit] defined somewhere in the region
+ // [reg unit] bitmask of VMEM counter classes the unit is pending on (0 = not
+ // pending, one bit = unambiguous, several = matches any VMEM counter).
+ SmallVector<uint16_t> PendingMask;
+ unsigned PendingDepth[AMDGPU::NUM_INST_CNTS] = {}; // #units pending per class
+ bool AnyPending = false; // any unit pending at all
+
+ // MCRegUnit is enum class : unsigned; BitVector needs a plain unsigned index.
+ static unsigned ruIdx(MCRegUnit U) { return static_cast<unsigned>(U); }
+
+ void growSU(unsigned N) {
+ if (DfsBV.size() < N)
+ DfsBV.resize(N);
+ }
+ void growRU(unsigned N) {
+ if (CandsBV.size() < N)
+ CandsBV.resize(N);
+ if (DefinedBV.size() < N)
+ DefinedBV.resize(N);
+ if (PendingMask.size() < N)
+ PendingMask.resize(N);
+ }
+
+ /// Mark reg unit \p U as VMEM-pending on counter class \p Cls: the first
+ /// class seen sticks; a later different class makes the unit ambiguous (set
+ /// in every VMEM class so it matches any counter); the same class is a no-op.
+ /// PendingDepth (per-class unit count) is maintained incrementally.
+ void markPending(unsigned U, AMDGPU::InstCounterType Cls) {
+ uint16_t Bit = uint16_t(1) << Cls;
+ uint16_t &M = PendingMask[U];
+ if (M == Bit)
+ return;
+ AnyPending = true;
+ if (M == 0) { // first reaching VMEM def: its class sticks
+ M = Bit;
+ ++PendingDepth[Cls];
+ return;
+ }
+ // Conflicting class: promote to ambiguous (pending on every VMEM class).
+ for (AMDGPU::InstCounterType C :
+ {AMDGPU::LOAD_CNT, AMDGPU::SAMPLE_CNT, AMDGPU::BVH_CNT})
+ if (!(M & (uint16_t(1) << C))) {
+ M |= uint16_t(1) << C;
+ ++PendingDepth[C];
+ }
+ }
+
+ /// Counter class completed by a pure VMEM load. getVmemLoadCounter treats a
+ /// BUNDLE header as LOAD_CNT, so for a clause use its first VMEM-load member.
+ AMDGPU::InstCounterType loadCounter(const MachineInstr &MI) const {
+ if (!MI.isBundle())
+ return AMDGPU::getVmemLoadCounter(MI, ST);
+ for (auto It = std::next(MI.getIterator()), E = MI.getParent()->instr_end();
+ It != E && It->isBundledWithPred(); ++It) {
+ if (It->isMetaInstruction())
+ continue;
+ if (AMDGPU::isVmemCounterLoad(*It, ST))
+ return AMDGPU::getVmemLoadCounter(*It, ST);
+ }
+ return AMDGPU::LOAD_CNT;
+ }
+
+ /// Backward walk from \p Stop in \p MBB, then predecessors (depth-bounded,
+ /// each block visited once via VisitedMBBs). Resolves each candidate at its
+ /// closest reaching reference: a pure VMEM-load def marks it pending, any
+ /// other def or a use drops it. CandsBV/CandsCount are backtracked on return
+ /// so sibling paths see the original set.
+ void classify(const MachineBasicBlock *MBB,
+ MachineBasicBlock::const_iterator Stop, unsigned &CandsCount,
+ const TargetRegisterInfo &TRI, unsigned Depth) {
+ SmallVector<MCRegUnit, 16> Resolved; // restored on return (backtracking)
+ for (auto It = MachineBasicBlock::const_reverse_iterator(Stop),
+ E = MBB->rend();
+ It != E && CandsCount > 0; ++It) {
+ const MachineInstr &MI = *It;
+ if (MI.isMetaInstruction())
+ continue;
+ // Classification is only needed once this instruction actually resolves
+ // a candidate def, so defer it (most scanned instructions resolve none).
+ int IsVMem = -1; // -1 unknown, 0 no, 1 yes
+ AMDGPU::InstCounterType Cls = AMDGPU::LOAD_CNT;
+ // Defs first: a pure VMEM-load def leaves the unit pending in its class.
+ for (const MachineOperand &MO : MI.operands()) {
+ if (!MO.isReg() || !MO.isDef() || !MO.getReg().isPhysical())
+ continue;
+ for (MCRegUnit U : TRI.regunits(MO.getReg().asMCReg())) {
+ if (!CandsBV.test(ruIdx(U)))
+ continue;
+ if (IsVMem < 0) {
+ IsVMem = AMDGPU::isPureVMemLoad(MI, ST) ? 1 : 0;
+ if (IsVMem)
+ Cls = loadCounter(MI);
+ }
+ CandsBV.reset(ruIdx(U));
+ --CandsCount;
+ Resolved.push_back(U);
+ if (IsVMem)
+ markPending(ruIdx(U), Cls);
+ }
+ }
+ // A use reached before any def means the value was consumed (waited)
+ // pre-region. Defs run first, so a read-modify-write is classified by
+ // its def.
+ for (const MachineOperand &MO : MI.operands()) {
+ if (!MO.isReg() || MO.isDef() || !MO.getReg().isPhysical())
+ continue;
+ for (MCRegUnit U : TRI.regunits(MO.getReg().asMCReg())) {
+ if (!CandsBV.test(ruIdx(U)))
+ continue;
+ CandsBV.reset(ruIdx(U));
+ --CandsCount;
+ Resolved.push_back(U);
+ }
+ }
+ }
+ if (CandsCount > 0 && Depth < VMemUseOrderingMaxDepth) {
+ for (const MachineBasicBlock *Pred : MBB->predecessors()) {
+ unsigned PredNum = static_cast<unsigned>(Pred->getNumber());
+ if (!VisitedMBBs.test(PredNum)) {
+ VisitedMBBs.set(PredNum);
+ classify(Pred, Pred->end(), CandsCount, TRI, Depth + 1);
+ }
+ }
+ }
+ // Backtrack so sibling predecessors and the caller see the original set.
+ for (MCRegUnit U : Resolved) {
+ CandsBV.set(ruIdx(U));
+ ++CandsCount;
+ }
+ }
+
+ /// Collects in-region pure VMEM loads with the class each completes on.
+ /// \returns false if there are none (nothing to sink consumers past).
+ bool collectRegionLoads(ScheduleDAGInstrs *DAG,
+ VMemLoadList &VMemLoads) const {
+ for (SUnit &SU : DAG->SUnits) {
+ const MachineInstr *MI = SU.getInstr();
+ if (MI && AMDGPU::isPureVMemLoad(*MI, ST))
+ VMemLoads.push_back({&SU, loadCounter(*MI)});
+ }
+ return !VMemLoads.empty();
+ }
+
+ /// Drops a load whose successor cone reaches another in-region load of the
+ /// same class: the survivor's edges already cover it. Classes are read from
+ /// the original list so a pruned load never stands in for another.
+ void pruneCoveredLoads(ScheduleDAGInstrs *DAG, VMemLoadList &VMemLoads) {
+ if (VMemLoads.size() <= 1)
+ return;
+ growSU(DAG->SUnits.size());
+ auto reachesLoadOfClass = [&](unsigned NodeNum,
+ AMDGPU::InstCounterType Cls) {
+ for (auto &[L, C] : VMemLoads)
+ if (L->NodeNum == NodeNum)
+ return C == Cls;
+ return false;
+ };
+ SmallVector<SUnit *, 16> Stack;
+ llvm::erase_if(VMemLoads,
+ [&](const std::pair<SUnit *, AMDGPU::InstCounterType> &LC) {
+ DfsBV.reset();
+ Stack.clear();
+ for (const SDep &D : LC.first->Succs)
+ if (D.getSUnit()->NodeNum < DfsBV.size())
+ Stack.push_back(D.getSUnit());
+ while (!Stack.empty()) {
+ SUnit *S = Stack.pop_back_val();
+ if (DfsBV.test(S->NodeNum))
+ continue;
+ DfsBV.set(S->NodeNum);
+ if (reachesLoadOfClass(S->NodeNum, LC.second))
+ return true;
+ for (const SDep &D : S->Succs)
+ if (D.getSUnit()->NodeNum < DfsBV.size())
+ Stack.push_back(D.getSUnit());
+ }
+ return false;
+ });
+ }
+
+ /// Seeds candidate reg units from in-region vector uses, minus units also
+ /// defined in-region (those already carry a Data dep on the in-region
+ /// producer).
+ /// \returns the number of candidate reg units.
+ unsigned collectCandidateUnits(ScheduleDAGInstrs *DAG,
+ const TargetRegisterInfo &TRI) {
+ growRU(TRI.getNumRegUnits());
+ CandsBV.reset();
+ DefinedBV.reset();
+ for (SUnit &SU : DAG->SUnits) {
+ const MachineInstr *MI = SU.getInstr();
+ if (!MI || MI->isMetaInstruction())
+ continue;
+ for (const MachineOperand &MO : MI->operands()) {
+ if (!MO.isReg() || !MO.getReg().isPhysical())
+ continue;
+ MCRegister Reg = MO.getReg().asMCReg();
+ if (MO.isDef())
+ for (MCRegUnit U : TRI.regunits(Reg))
+ DefinedBV.set(ruIdx(U));
+ else if (isVectorPhysReg(Reg, TRI))
+ for (MCRegUnit U : TRI.regunits(Reg))
+ CandsBV.set(ruIdx(U));
+ }
+ }
+ CandsBV.reset(DefinedBV); // CandsBV &= ~DefinedBV
+ return CandsBV.count();
+ }
+
+ /// Resets per-region pending state and marks \p MBB as the classify() origin.
+ void resetPendingState(const MachineBasicBlock *MBB) {
+ std::fill(PendingMask.begin(), PendingMask.end(), uint16_t(0));
+ std::fill(std::begin(PendingDepth), std::end(PendingDepth), 0u);
+ AnyPending = false;
+ unsigned NumBlocks = MBB->getParent()->getNumBlockIDs();
+ if (VisitedMBBs.size() < NumBlocks)
+ VisitedMBBs.resize(NumBlocks);
+ VisitedMBBs.reset();
+ VisitedMBBs.set(static_cast<unsigned>(MBB->getNumber()));
+ }
+
+ /// Drops loads whose counter class is already deep at region entry (see
+ /// VMemUseOrderingMaxPendingDepth); they can never contribute an edge.
+ void applyPendingDepthGate(VMemLoadList &VMemLoads) const {
+ if (!VMemUseOrderingMaxPendingDepth)
+ return;
+ llvm::erase_if(
+ VMemLoads, [&](const std::pair<SUnit *, AMDGPU::InstCounterType> &LC) {
+ return PendingDepth[LC.second] > VMemUseOrderingMaxPendingDepth;
+ });
+ }
+
+ /// \returns the counter classes \p MI waits on via the pending units it reads
+ /// (0 if none). An ambiguous unit selects every class.
+ unsigned pendingClassesRead(const MachineInstr &MI,
+ const TargetRegisterInfo &TRI) const {
+ const unsigned AllMask = (1u << AMDGPU::LOAD_CNT) |
+ (1u << AMDGPU::SAMPLE_CNT) |
+ (1u << AMDGPU::BVH_CNT);
+ unsigned ClassMask = 0;
+ for (const MachineOperand &MO : MI.uses()) {
+ if (!MO.isReg() || !MO.getReg().isPhysical())
+ continue;
+ for (MCRegUnit U : TRI.regunits(MO.getReg().asMCReg()))
+ ClassMask |= PendingMask[ruIdx(U)];
+ if (ClassMask == AllMask) // cannot gain more classes; stop scanning
+ break;
+ }
+ return ClassMask;
+ }
+
+ /// For each SUnit reading a pending unit, adds Artificial order edges from
+ /// the matching in-region loads. addEdge() drops self/cycle edges; redundant
+ /// ones are harmless (Artificial latency is 0).
+ void addOrderingEdges(ScheduleDAGInstrs *DAG, const TargetRegisterInfo &TRI,
+ const VMemLoadList &VMemLoads) const {
+ // Bucket by class so each consumer visits only the classes it waits on.
+ SmallVector<SUnit *, 8> LoadsByClass[AMDGPU::NUM_INST_CNTS];
+ for (auto &[L, C] : VMemLoads)
+ LoadsByClass[C].push_back(L);
+
+ for (SUnit &SU : DAG->SUnits) {
+ MachineInstr *MI = SU.getInstr();
+ if (!MI || MI->isMetaInstruction())
+ continue;
+ unsigned ClassMask = pendingClassesRead(*MI, TRI);
+ if (!ClassMask)
+ continue;
+ [[maybe_unused]] unsigned Added = 0;
+ for (unsigned C = 0; C != AMDGPU::NUM_INST_CNTS; ++C) {
+ if (!(ClassMask & (1u << C)))
+ continue;
+ for (SUnit *L : LoadsByClass[C])
+ if (L != &SU && DAG->addEdge(&SU, SDep(L, SDep::Artificial)))
+ ++Added;
+ }
+ LLVM_DEBUG(if (Added) dbgs()
+ << "VMemUseOrdering: added " << Added << " edge(s) to SU("
+ << SU.NodeNum << ") " << *MI);
+ }
+ }
+
+public:
+ VMemUseOrdering(MachineFunction *MF) : ST(MF->getSubtarget<GCNSubtarget>()) {}
+
+ void apply(ScheduleDAGInstrs *DAG) override {
+ // EntrySU/ExitSU are not in DAG->SUnits, so every element has a real MI.
+ if (DAG->SUnits.empty())
+ return;
+ const TargetRegisterInfo &TRI = *DAG->TRI;
+
+ VMemLoadList VMemLoads;
+ if (!collectRegionLoads(DAG, VMemLoads))
+ return;
+
+ pruneCoveredLoads(DAG, VMemLoads);
+
+ unsigned CandsCount = collectCandidateUnits(DAG, TRI);
+ if (CandsCount == 0)
+ return;
+
+ const MachineBasicBlock *MBB = DAG->begin()->getParent();
+ resetPendingState(MBB);
+ classify(MBB, DAG->begin(), CandsCount, TRI, 0);
+ if (!AnyPending)
+ return;
+
+ LLVM_DEBUG({
+ dbgs() << "VMemUseOrdering: pending units by class in "
+ << MBB->getFullName() << "\n";
+ for (unsigned C = 0; C != AMDGPU::NUM_INST_CNTS; ++C)
+ if (PendingDepth[C])
+ dbgs() << " class " << C << ": " << PendingDepth[C]
+ << (VMemUseOrderingMaxPendingDepth &&
+ PendingDepth[C] > VMemUseOrderingMaxPendingDepth
+ ? " (saturated)"
+ : "")
+ << "\n";
+ });
+
+ applyPendingDepthGate(VMemLoads);
+ if (VMemLoads.empty())
+ return;
+
+ addOrderingEdges(DAG, TRI, VMemLoads);
+ }
+};
+
+} // end namespace
+
+std::unique_ptr<ScheduleDAGMutation>
+llvm::createAMDGPUVMemUseOrderingDAGMutation(MachineFunction *MF) {
+ return std::make_unique<VMemUseOrdering>(MF);
+}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.h b/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.h
new file mode 100644
index 0000000000000..fa5f39bad3f0d
--- /dev/null
+++ b/llvm/lib/Target/AMDGPU/AMDGPUVMemUseOrdering.h
@@ -0,0 +1,24 @@
+//===- AMDGPUVMemUseOrdering.h - AMDGPU VMEM Use Ordering -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUVMEMUSEORDERING_H
+#define LLVM_LIB_TARGET_AMDGPU_AMDGPUVMEMUSEORDERING_H
+
+#include "llvm/CodeGen/ScheduleDAGMutation.h"
+#include <memory>
+
+namespace llvm {
+
+class MachineFunction;
+
+std::unique_ptr<ScheduleDAGMutation>
+createAMDGPUVMemUseOrderingDAGMutation(MachineFunction *MF);
+
+} // namespace llvm
+
+#endif // LLVM_LIB_TARGET_AMDGPU_AMDGPUVMEMUSEORDERING_H
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.cpp b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.cpp
index 43896675621f0..8046a8a1112fc 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.cpp
@@ -7,8 +7,11 @@
//===----------------------------------------------------------------------===//
#include "AMDGPUWaitcntUtils.h"
-#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
+#include "GCNSubtarget.h"
+#include "SIInstrInfo.h"
#include "Utils/AMDGPUBaseInfo.h"
+#include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/CodeGen/MachineMemOperand.h"
namespace llvm::AMDGPU {
@@ -167,4 +170,76 @@ std::optional<AMDGPU::InstCounterType> counterTypeForInstr(unsigned Opcode) {
}
}
+//===----------------------------------------------------------------------===//
+// VMEM-load classification primitives.
+//===----------------------------------------------------------------------===//
+
+bool updateVMCntOnly(const MachineInstr &MI) {
+ return (SIInstrInfo::isVMEM(MI) && !SIInstrInfo::isFLAT(MI)) ||
+ SIInstrInfo::isFLATGlobal(MI) || SIInstrInfo::isFLATScratch(MI);
+}
+
+InstCounterType getVmemFamily(const MachineInstr &MI) {
+ assert(updateVMCntOnly(MI));
+ if (!SIInstrInfo::isImage(MI))
+ return LOAD_CNT;
+
+ const MIMGInfo *Info = getMIMGInfo(MI.getOpcode());
+ if (!Info)
+ return LOAD_CNT;
+ const MIMGBaseOpcodeInfo *BaseInfo = getMIMGBaseOpcodeInfo(Info->BaseOpcode);
+
+ if (BaseInfo->BVH)
+ return BVH_CNT;
+
+ // isVSAMPLE is included because some instructions don't have a sampler but
+ // are still classified as sampler instructions for waitcnt purposes.
+ if (BaseInfo->Sampler || BaseInfo->MSAA || SIInstrInfo::isVSAMPLE(MI))
+ return SAMPLE_CNT;
+
+ return LOAD_CNT;
+}
+
+InstCounterType getVmemLoadCounter(const MachineInstr &MI,
+ const GCNSubtarget &ST) {
+ if (!ST.hasExtendedWaitCounts())
+ return LOAD_CNT;
+ // Only image instructions increment SAMPLE_CNT/BVH_CNT; anything else that is
+ // not updateVMCntOnly (e.g. generic FLAT) is LOAD_CNT. This also keeps
+ // getVmemFamily's updateVMCntOnly precondition satisfied.
+ if (!updateVMCntOnly(MI))
+ return LOAD_CNT;
+ return getVmemFamily(MI);
+}
+
+bool isVmemCounterLoad(const MachineInstr &MI, const GCNSubtarget &ST) {
+ if (updateVMCntOnly(MI))
+ return true;
+ // Generic FLAT bumps both vmcnt and lgkmcnt; a partial vmcnt wait only
+ // reliably signals the load is done where the two counters complete in order.
+ return SIInstrInfo::isFLAT(MI) && ST.hasFlatLgkmVMemCountInOrder();
+}
+
+bool isPureVMemLoad(const MachineInstr &MI, const GCNSubtarget &ST) {
+ if (!MI.mayLoad() || MI.mayStore() || MI.hasUnmodeledSideEffects())
+ return false;
+ for (const MachineMemOperand *MMO : MI.memoperands())
+ if (MMO->getPseudoValue())
+ return false;
+ if (MI.getOpcode() != TargetOpcode::BUNDLE)
+ return isVmemCounterLoad(MI, ST);
+ bool SawMember = false;
+ for (auto It = std::next(MI.getIterator()), E = MI.getParent()->instr_end();
+ It != E && It->isBundledWithPred(); ++It) {
+ if (It->isMetaInstruction())
+ continue;
+ if (!It->mayLoad() || It->mayStore() || It->hasUnmodeledSideEffects())
+ return false;
+ if (!isVmemCounterLoad(*It, ST))
+ return false;
+ SawMember = true;
+ }
+ return SawMember;
+}
+
} // namespace llvm::AMDGPU
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
index 827494e264c50..97472f015eb1e 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
@@ -5,6 +5,15 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Shared waitcnt analysis primitives for AMDGPU passes: the InstCounterType
+/// enum and Waitcnt value class, s_waitcnt encode/decode helpers, and VMEM-load
+/// classification predicates. These let a pass reason about VMEM-counter state
+/// without owning a full WaitcntBrackets scoreboard (SIInsertWaitcnts uses them
+/// alongside its own scoreboard).
+//
+//===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUWAITCNTUTILS_H
#define LLVM_LIB_TARGET_AMDGPU_AMDGPUWAITCNTUTILS_H
@@ -17,6 +26,9 @@
namespace llvm {
+class GCNSubtarget;
+class MachineInstr;
+
namespace AMDGPU {
enum InstCounterType {
@@ -203,6 +215,37 @@ unsigned encodeStorecntDscnt(const IsaVersion &Version, const Waitcnt &Decoded);
/// and if so, which counter it is waiting on.
std::optional<AMDGPU::InstCounterType> counterTypeForInstr(unsigned Opcode);
+//===----------------------------------------------------------------------===//
+// VMEM-load classification primitives.
+//===----------------------------------------------------------------------===//
+
+/// \returns true iff \p MI increments only VMEM-class counters
+/// (loadcnt/samplecnt/bvhcnt/storecnt; vmcnt/vscnt on pre-GFX12).
+/// Includes BUF, image, and segment-specific FLAT; excludes generic FLAT.
+bool updateVMCntOnly(const MachineInstr &MI);
+
+/// \returns the VMEM completion family of \p MI: BVH_CNT for BVH images,
+/// SAMPLE_CNT for sampler/MSAA images, LOAD_CNT otherwise.
+/// \pre updateVMCntOnly(MI) must be true.
+InstCounterType getVmemFamily(const MachineInstr &MI);
+
+/// \returns the VMEM hardware counter \p MI increments under \p ST.
+/// Pre-GFX12: always LOAD_CNT. GFX12+: BVH images -> BVH_CNT,
+/// sampler/MSAA images -> SAMPLE_CNT, everything else -> LOAD_CNT.
+InstCounterType getVmemLoadCounter(const MachineInstr &MI,
+ const GCNSubtarget &ST);
+
+/// \returns true iff a VMEM counter alone is sufficient to wait for \p MI's
+/// result. This is updateVMCntOnly() plus generic FLAT loads on subtargets
+/// where \see GCNSubtarget::hasFlatLgkmVMemCountInOrder holds.
+bool isVmemCounterLoad(const MachineInstr &MI, const GCNSubtarget &ST);
+
+/// \returns true iff \p MI is a non-store, side-effect-free VMEM load that
+/// completes on a VMEM counter alone, with no pseudo-source memory operands
+/// (i.e. not a spill reload). For BUNDLE: every member of the bundle must
+/// independently satisfy the same criteria.
+bool isPureVMemLoad(const MachineInstr &MI, const GCNSubtarget &ST);
+
} // namespace AMDGPU
} // namespace llvm
diff --git a/llvm/lib/Target/AMDGPU/CMakeLists.txt b/llvm/lib/Target/AMDGPU/CMakeLists.txt
index b7e679a69a80d..77f8b1b990eb0 100644
--- a/llvm/lib/Target/AMDGPU/CMakeLists.txt
+++ b/llvm/lib/Target/AMDGPU/CMakeLists.txt
@@ -121,6 +121,7 @@ add_llvm_target(AMDGPUCodeGen
AMDGPUTargetMachine.cpp
AMDGPUTargetObjectFile.cpp
AMDGPUTargetTransformInfo.cpp
+ AMDGPUVMemUseOrdering.cpp
AMDGPUWaitcntUtils.cpp
AMDGPUWaitSGPRHazards.cpp
AMDGPUUnifyDivergentExitNodes.cpp
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index 78c98320e81d4..5adf243dd4d2d 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -137,11 +137,6 @@ static bool isNonWaitcntMetaInst(const MachineInstr &MI) {
}
}
-static bool updateVMCntOnly(const MachineInstr &Inst) {
- return (SIInstrInfo::isVMEM(Inst) && !SIInstrInfo::isFLAT(Inst)) ||
- SIInstrInfo::isFLATGlobal(Inst) || SIInstrInfo::isFLATScratch(Inst);
-}
-
#ifndef NDEBUG
static bool isNormalMode(AMDGPU::InstCounterType MaxCounter) {
return MaxCounter == AMDGPU::NUM_NORMAL_INST_CNTS;
@@ -1014,7 +1009,7 @@ void WaitcntBrackets::updateByEvent(HWEvents E, MachineInstr &Inst) {
T == AMDGPU::BVH_CNT) {
if (!TRI.isVectorRegister(MRI, Op.getReg())) // TODO: add wrapper
continue;
- if (updateVMCntOnly(Inst)) {
+ if (AMDGPU::updateVMCntOnly(Inst)) {
// updateVMCntOnly should only leave us with VGPRs
// MUBUF, MTBUF, MIMG, FlatGlobal, and FlatScratch only have VGPR/AGPR
// defs.
@@ -2496,7 +2491,7 @@ bool SIInsertWaitcnts::generateWaitcntInstBefore(
// guaranteed to write their results in order anyway.
// Additionally check instructions where Point Sample Acceleration
// might be applied.
- if (Op.isUse() || !updateVMCntOnly(MI) ||
+ if (Op.isUse() || !AMDGPU::updateVMCntOnly(MI) ||
ScoreBrackets.hasDifferentVGPRPendingEvents(
Reg, AMDGPU::getSimplifiedVMEMEventsFor(MI, TII)) ||
ScoreBrackets.hasPointSamplePendingVmemTypes(MI, Reg) ||
diff --git a/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-gfx9.mir b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-gfx9.mir
new file mode 100644
index 0000000000000..939c79eb30d95
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-gfx9.mir
@@ -0,0 +1,278 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -mtriple=amdgcn -mcpu=gfx906 -run-pass=postmisched,si-insert-waitcnts -amdgpu-vmem-use-ordering=true %s -o - | FileCheck -check-prefixes=GFX9-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx906 -run-pass=postmisched,si-insert-waitcnts -amdgpu-vmem-use-ordering=false %s -o - | FileCheck -check-prefixes=GFX9-OFF %s
+---
+# FLAT_LOAD is not VMEM-pending on GFX9 (hasFlatLgkmVMemCountInOrder() = false),
+# so the mutation adds no edges. ON/OFF produce identical scheduling and waitcnt.
+name: vmem_flat_not_pending_gfx9
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX9-ON-LABEL: name: vmem_flat_not_pending_gfx9
+ ; GFX9-ON: bb.0:
+ ; GFX9-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-ON-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX9-ON-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.1:
+ ; GFX9-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: S_WAITCNT .Vmcnt_0_Lgkmcnt_0
+ ; GFX9-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.2:
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX9-OFF-LABEL: name: vmem_flat_not_pending_gfx9
+ ; GFX9-OFF: bb.0:
+ ; GFX9-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-OFF-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX9-OFF-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.1:
+ ; GFX9-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: S_WAITCNT .Vmcnt_0_Lgkmcnt_0
+ ; GFX9-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.2:
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, $vgpr31, $vcc, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8_sgpr9
+
+ $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+# MUBUF is VMEM-pending on GFX9 and the mutation adds edges, but the GFX9 Wave64
+# scheduler already places VMEM before VALU naturally. ON/OFF are identical: vmcnt(3)
+# accounts for 1 MUBUF + 3 in-region GLOBAL_LOADs in-flight before V_CMP reads the result.
+name: vmem_mubuf_pending_gfx9
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX9-ON-LABEL: name: vmem_mubuf_pending_gfx9
+ ; GFX9-ON: bb.0:
+ ; GFX9-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX9-ON-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.1:
+ ; GFX9-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX9-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.2:
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX9-OFF-LABEL: name: vmem_mubuf_pending_gfx9
+ ; GFX9-OFF: bb.0:
+ ; GFX9-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX9-OFF-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.1:
+ ; GFX9-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX9-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.2:
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, $vgpr31, $vcc, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8_sgpr9
+
+ $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+# Cascaded VMEM load uses the MUBUF-pending result as its address. Without the
+# mutation the scheduler hoists it first, forcing vmcnt(0). With the mutation the
+# two independent loads issue first, allowing vmcnt(2) instead.
+name: vmem_pending_mubuf_vmem_consumer_gfx9
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX9-ON-LABEL: name: vmem_pending_mubuf_vmem_consumer_gfx9
+ ; GFX9-ON: bb.0:
+ ; GFX9-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX9-ON-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.1:
+ ; GFX9-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX9-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: bb.2:
+ ; GFX9-ON-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-ON-NEXT: {{ $}}
+ ; GFX9-ON-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX9-OFF-LABEL: name: vmem_pending_mubuf_vmem_consumer_gfx9
+ ; GFX9-OFF: bb.0:
+ ; GFX9-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX9-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX9-OFF-NEXT: $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX9-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.1:
+ ; GFX9-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX9-OFF-NEXT: $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ ; GFX9-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX9-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: bb.2:
+ ; GFX9-OFF-NEXT: liveins: $sgpr8_sgpr9
+ ; GFX9-OFF-NEXT: {{ $}}
+ ; GFX9-OFF-NEXT: $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ ; GFX9-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $sgpr8_sgpr9, $vcc
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ $sgpr8_sgpr9 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8_sgpr9, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr10_sgpr11 = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+
+ bb.2:
+ liveins: $sgpr8_sgpr9
+
+ $exec = S_OR_B64 $exec, killed $sgpr8_sgpr9, implicit-def $scc
+ S_ENDPGM 0
+...
diff --git a/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-waitcnt.mir b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-waitcnt.mir
new file mode 100644
index 0000000000000..b708d34403515
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering-waitcnt.mir
@@ -0,0 +1,1112 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -amdgpu-vmem-use-ordering=true -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX10-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -amdgpu-vmem-use-ordering=false -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX10-OFF %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-vmem-use-ordering=true -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX11-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-vmem-use-ordering=false -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX11-OFF %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-vmem-use-ordering=true -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX12-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-vmem-use-ordering=false -run-pass=postmisched,si-insert-waitcnts %s -o - | FileCheck -check-prefixes=GFX12-OFF %s
+--- |
+ define void @vmem_pending_mubuf_livein_gfx10() { ret void }
+ define void @vmem_pending_livein_no_bundle_gfx11() { ret void }
+ define void @vmem_pending_livein_bvh64_gfx11() { ret void }
+ define void @vmem_pending_livein_gfx12() { ret void }
+...
+---
+name: vmem_pending_mubuf_livein_gfx10
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX10-ON-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX10-ON: bb.0:
+ ; GFX10-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX10-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.1:
+ ; GFX10-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX10-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.2:
+ ; GFX10-ON-NEXT: liveins: $sgpr8
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX10-OFF-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX10-OFF: bb.0:
+ ; GFX10-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX10-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.1:
+ ; GFX10-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.2:
+ ; GFX10-OFF-NEXT: liveins: $sgpr8
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-ON-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 3
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_mubuf_livein_gfx10
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_no_bundle_gfx11
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX10-ON-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX10-ON: bb.0:
+ ; GFX10-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX10-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.1:
+ ; GFX10-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX10-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.2:
+ ; GFX10-ON-NEXT: liveins: $sgpr8
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX10-OFF-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX10-OFF: bb.0:
+ ; GFX10-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX10-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.1:
+ ; GFX10-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.2:
+ ; GFX10-OFF-NEXT: liveins: $sgpr8
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_no_bundle_gfx11
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_bvh64_gfx11
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX10-ON-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX10-ON: bb.0:
+ ; GFX10-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX10-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.1:
+ ; GFX10-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-ON-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_6
+ ; GFX10-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_5
+ ; GFX10-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_4
+ ; GFX10-ON-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX10-ON-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.2:
+ ; GFX10-ON-NEXT: liveins: $sgpr8
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX10-OFF-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX10-OFF: bb.0:
+ ; GFX10-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX10-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.1:
+ ; GFX10-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-OFF-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_5
+ ; GFX10-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_4
+ ; GFX10-OFF-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX10-OFF-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.2:
+ ; GFX10-OFF-NEXT: liveins: $sgpr8
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_6
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_5
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_4
+ ; GFX11-ON-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX11-ON-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_5
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_4
+ ; GFX11-OFF-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX11-OFF-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 5
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 4
+ ; GFX12-ON-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 3
+ ; GFX12-ON-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_bvh64_gfx11
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr5 = V_LSHLREV_B32_e32 3, killed $vgpr37, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5 = V_AND_B32_e32 4294967232, killed $vgpr5, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr6, killed $vgpr5, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr7, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 5
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 4
+ ; GFX12-OFF-NEXT: $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 3
+ ; GFX12-OFF-NEXT: $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_FMA_F32_e64 0, killed $vgpr32, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr16 = V_MUL_F32_e32 $vgpr35, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr17 = V_MUL_F32_e32 killed $vgpr35, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr37, $vgpr6, $vgpr7, $vgpr32, $vgpr35, $vgpr41, $vgpr42, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8, $vcc_lo
+
+ $vgpr1_vgpr2_vgpr3_vgpr4 = IMAGE_BVH64_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr6, $vgpr7, $vgpr37, $vgpr32, $vgpr35, $vgpr41, $vgpr42
+
+ $vgpr5 = V_LSHLREV_B32_e32 3, $vgpr37, implicit $exec
+ $vgpr5 = V_AND_B32_e32 4294967232, $vgpr5, implicit $exec
+ $vgpr17, $vcc_lo = V_ADD_CO_U32_e64 $vgpr6, $vgpr5, 0, implicit $exec
+ $vgpr18, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr7, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr17_vgpr18, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr22_vgpr23 = GLOBAL_LOAD_DWORDX2 $vgpr17_vgpr18, 56, 0, implicit $exec :: (load (s64), addrspace 1)
+ $vgpr43 = GLOBAL_LOAD_DWORD $vgpr17_vgpr18, 48, 0, implicit $exec :: (load (s32), addrspace 1)
+ $vgpr39 = GLOBAL_LOAD_DWORD killed $vgpr17_vgpr18, 68, 0, implicit $exec :: (load (s32), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr7, 0, $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr11, 0, $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_MUL_F32_e32 $vgpr35, $vgpr15, implicit $mode, implicit $exec
+ $vgpr21 = V_FMA_F32_e64 0, $vgpr32, 0, $vgpr15, 0, $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr16 = V_MUL_F32_e32 $vgpr35, $vgpr7, implicit $mode, implicit $exec
+ $vgpr17 = V_MUL_F32_e32 killed $vgpr35, $vgpr11, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_gfx12
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX10-ON-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX10-ON: bb.0:
+ ; GFX10-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX10-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.1:
+ ; GFX10-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX10-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-ON-NEXT: }
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX10-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: bb.2:
+ ; GFX10-ON-NEXT: liveins: $sgpr8
+ ; GFX10-ON-NEXT: {{ $}}
+ ; GFX10-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX10-OFF-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX10-OFF: bb.0:
+ ; GFX10-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX10-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX10-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX10-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.1:
+ ; GFX10-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX10-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX10-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX10-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX10-OFF-NEXT: }
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX10-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX10-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX10-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: bb.2:
+ ; GFX10-OFF-NEXT: liveins: $sgpr8
+ ; GFX10-OFF-NEXT: {{ $}}
+ ; GFX10-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX10-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_3
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_2
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_1
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_BVHCNT 0
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 2
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 1
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_WAIT_LOADCNT 0
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 $vgpr42, $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
diff --git a/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering.mir b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering.mir
new file mode 100644
index 0000000000000..aaad375c02e7b
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/sched-vmem-use-ordering.mir
@@ -0,0 +1,2151 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -passes=postmisched -amdgpu-vmem-use-ordering=true %s -o - | FileCheck -check-prefixes=GFX11-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -passes=postmisched -amdgpu-vmem-use-ordering=false %s -o - | FileCheck -check-prefixes=GFX11-OFF %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -passes=postmisched -amdgpu-vmem-use-ordering=true %s -o - | FileCheck -check-prefixes=GFX11-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -passes=postmisched -amdgpu-vmem-use-ordering=false %s -o - | FileCheck -check-prefixes=GFX11-OFF %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -passes=postmisched -amdgpu-vmem-use-ordering=true %s -o - | FileCheck -check-prefixes=GFX12-ON %s
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -passes=postmisched -amdgpu-vmem-use-ordering=false %s -o - | FileCheck -check-prefixes=GFX12-OFF %s
+---
+name: vmem_pending_livein_bundle
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_bundle
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_bundle
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_bundle
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_bundle
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr15, 0, $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 $vgpr42, $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_preregion_setprio
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ bb.0:
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3
+
+ ; GFX11-ON-LABEL: name: vmem_pending_preregion_setprio
+ ; GFX11-ON: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: S_SETPRIO 0
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_preregion_setprio
+ ; GFX11-OFF: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: S_SETPRIO 0
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_preregion_setprio
+ ; GFX12-ON: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: S_SETPRIO 0
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_preregion_setprio
+ ; GFX12-OFF: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: S_SETPRIO 0
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ S_SETPRIO 0
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_vmem_consumer_gfx11
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_vmem_consumer_gfx11
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr5, 0, killed $vgpr6, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr9, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr13, 0, killed $vgpr14, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_vmem_consumer_gfx11
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr13, 0, killed $vgpr14, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr5, 0, killed $vgpr6, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr9, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_vmem_consumer_gfx11
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr13, 0, killed $vgpr14, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr5, 0, killed $vgpr6, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr9, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_vmem_consumer_gfx11
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr13, 0, killed $vgpr14, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr5, 0, killed $vgpr6, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr9, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr5, 0, killed $vgpr6, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr9, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr13, 0, killed $vgpr14, 0, 0, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_no_bundle
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_no_bundle
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_no_bundle
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_no_bundle
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_no_bundle
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_flat_livein
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_flat_livein
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_flat_livein
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_flat_livein
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_flat_livein
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = FLAT_LOAD_DWORDX4 killed $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr :: (load (s128))
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_mubuf_livein
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_mubuf_livein
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_mubuf_livein
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_mubuf_livein
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_mubuf_livein
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed $sgpr4, 0, 0, 0, implicit $exec :: (load (s128))
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_gfx12
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_gfx12
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr21 = V_MUL_F32_e32 $vgpr42, killed $vgpr11, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr22 = V_MUL_F32_e32 killed $vgpr42, killed $vgpr15, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $vgpr42, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40, $vgpr41, $vgpr42
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ $vgpr20 = V_MUL_F32_e32 $vgpr42, killed $vgpr7, implicit $mode, implicit $exec
+ $vgpr21 = V_MUL_F32_e32 $vgpr42, $vgpr11, implicit $mode, implicit $exec
+ $vgpr22 = V_MUL_F32_e32 $vgpr42, $vgpr15, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_vmem_consumer_gfx12
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_vmem_consumer_gfx12
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_vmem_consumer_gfx12
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_vmem_consumer_gfx12
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_vmem_consumer_gfx12
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_waited
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_waited
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_waited
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_waited
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_waited
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ S_WAITCNT .Vmcnt_0
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_livein_cascaded_plus_valu
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_cascaded_plus_valu
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_cascaded_plus_valu
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_cascaded_plus_valu
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_cascaded_plus_valu
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 killed $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_sa_gfx11 $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 7)
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr40
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr0_vgpr1, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr2, implicit-def $vcc, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_loop_waited
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_loop_waited
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr30_vgpr31
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.0(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: S_BRANCH %bb.0
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_loop_waited
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr30_vgpr31
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.0(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: S_BRANCH %bb.0
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_loop_waited
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr30_vgpr31
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.0(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: S_BRANCH %bb.0
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_loop_waited
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr30_vgpr31
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.0(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: S_BRANCH %bb.0
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x80000000)
+ liveins: $vgpr30_vgpr31
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ S_WAITCNT .Vmcnt_0
+
+ bb.1:
+ successors: %bb.0(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $sgpr8, $vcc_lo
+
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $sgpr8 = S_AND_SAVEEXEC_B32 $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+ S_BRANCH %bb.0
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+---
+name: vmem_pending_diamond
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_diamond
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr30_vgpr31, $vgpr40, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.3(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-ON-NEXT: S_BRANCH %bb.3
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: successors: %bb.3(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.3:
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_diamond
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr30_vgpr31, $vgpr40, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.3(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX11-OFF-NEXT: S_BRANCH %bb.3
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: successors: %bb.3(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.3:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_diamond
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr30_vgpr31, $vgpr40, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.3(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-ON-NEXT: S_BRANCH %bb.3
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: successors: %bb.3(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.3:
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_diamond
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr30_vgpr31, $vgpr40, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.3(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: S_WAITCNT .Vmcnt_0
+ ; GFX12-OFF-NEXT: S_BRANCH %bb.3
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: successors: %bb.3(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.3:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr1, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr30_vgpr31, $vgpr40, $vcc_lo
+
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.3(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ S_WAITCNT .Vmcnt_0
+ S_BRANCH %bb.3
+
+ bb.2:
+ successors: %bb.3(0x80000000)
+ liveins: $sgpr8, $vgpr30_vgpr31, $vgpr40
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = GLOBAL_LOAD_DWORDX4 $vgpr30_vgpr31, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+
+ bb.3:
+ liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 $vgpr30, $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, $vgpr31, $vcc_lo, 0, implicit $exec
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ V_CMP_EQ_U32_e32 -1, $vgpr1, implicit-def $vcc, implicit $exec
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
+
+---
+name: vmem_pending_livein_gfx12_mixed_class
+tracksRegLiveness: true
+machineFunctionInfo:
+ isEntryFunction: true
+body: |
+ ; GFX11-ON-LABEL: name: vmem_pending_livein_gfx12_mixed_class
+ ; GFX11-ON: bb.0:
+ ; GFX11-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.1:
+ ; GFX11-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-ON-NEXT: }
+ ; GFX11-ON-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: bb.2:
+ ; GFX11-ON-NEXT: liveins: $sgpr8
+ ; GFX11-ON-NEXT: {{ $}}
+ ; GFX11-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX11-OFF-LABEL: name: vmem_pending_livein_gfx12_mixed_class
+ ; GFX11-OFF: bb.0:
+ ; GFX11-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX11-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX11-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.1:
+ ; GFX11-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX11-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX11-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX11-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX11-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX11-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX11-OFF-NEXT: }
+ ; GFX11-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: bb.2:
+ ; GFX11-OFF-NEXT: liveins: $sgpr8
+ ; GFX11-OFF-NEXT: {{ $}}
+ ; GFX11-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX11-OFF-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-ON-LABEL: name: vmem_pending_livein_gfx12_mixed_class
+ ; GFX12-ON: bb.0:
+ ; GFX12-ON-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-ON-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-ON-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.1:
+ ; GFX12-ON-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-ON-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-ON-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-ON-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-ON-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-ON-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-ON-NEXT: }
+ ; GFX12-ON-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: bb.2:
+ ; GFX12-ON-NEXT: liveins: $sgpr8
+ ; GFX12-ON-NEXT: {{ $}}
+ ; GFX12-ON-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-ON-NEXT: S_ENDPGM 0
+ ;
+ ; GFX12-OFF-LABEL: name: vmem_pending_livein_gfx12_mixed_class
+ ; GFX12-OFF: bb.0:
+ ; GFX12-OFF-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; GFX12-OFF-NEXT: liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ ; GFX12-OFF-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.1:
+ ; GFX12-OFF-NEXT: successors: %bb.2(0x80000000)
+ ; GFX12-OFF-NEXT: liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ ; GFX12-OFF-NEXT: $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ ; GFX12-OFF-NEXT: V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc_lo, implicit $exec
+ ; GFX12-OFF-NEXT: BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ ; GFX12-OFF-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ ; GFX12-OFF-NEXT: }
+ ; GFX12-OFF-NEXT: $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: bb.2:
+ ; GFX12-OFF-NEXT: liveins: $sgpr8
+ ; GFX12-OFF-NEXT: {{ $}}
+ ; GFX12-OFF-NEXT: $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ ; GFX12-OFF-NEXT: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $vgpr4, $vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr8, $vcc_lo
+
+ $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr4, killed $vgpr5, killed $vgpr6_vgpr7_vgpr8, killed $vgpr9_vgpr10_vgpr11, killed $vgpr12_vgpr13_vgpr14, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ $sgpr8 = S_AND_SAVEEXEC_B32 killed $vcc_lo, implicit-def $exec, implicit-def $scc, implicit $exec
+ S_CBRANCH_EXECZ %bb.2, implicit $exec
+
+ bb.1:
+ successors: %bb.2(0x80000000)
+ liveins: $sgpr8, $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr30_vgpr31, $vgpr40, $vgpr41, $sgpr4_sgpr5_sgpr6_sgpr7, $vgpr20_vgpr21_vgpr22, $vgpr23_vgpr24_vgpr25, $vgpr26_vgpr27_vgpr28
+
+ $vgpr32 = V_LSHLREV_B32_e32 3, killed $vgpr40, implicit $exec
+ $vgpr32 = V_AND_B32_e32 -64, killed $vgpr32, implicit $exec
+ $vgpr33, $vcc_lo = V_ADD_CO_U32_e64 killed $vgpr30, killed $vgpr32, 0, implicit $exec
+ $vgpr34, dead $sgpr_null = V_ADDC_U32_e64 0, killed $vgpr31, killed $vcc_lo, 0, implicit $exec
+ BUNDLE implicit-def $vgpr5_vgpr6_vgpr7_vgpr8, implicit-def $vgpr9_vgpr10_vgpr11_vgpr12, implicit-def $vgpr13_vgpr14_vgpr15_vgpr16, implicit killed $vgpr33_vgpr34, implicit $exec :: (load (s128), addrspace 1), (load (s128), addrspace 1), (load (s128), addrspace 1) {
+ $vgpr5_vgpr6_vgpr7_vgpr8 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 0, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr9_vgpr10_vgpr11_vgpr12 = GLOBAL_LOAD_DWORDX4 $vgpr33_vgpr34, 16, 0, implicit $exec :: (load (s128), addrspace 1)
+ $vgpr13_vgpr14_vgpr15_vgpr16 = GLOBAL_LOAD_DWORDX4 killed $vgpr33_vgpr34, 32, 0, implicit $exec :: (load (s128), addrspace 1)
+ }
+ $vgpr35_vgpr36_vgpr37_vgpr38 = IMAGE_BVH_INTERSECT_RAY_gfx12 killed $vgpr0, killed $vgpr1, killed $vgpr20_vgpr21_vgpr22, killed $vgpr23_vgpr24_vgpr25, killed $vgpr26_vgpr27_vgpr28, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, implicit $exec :: (dereferenceable load (s128), addrspace 8)
+ V_CMP_EQ_U32_e32 -1, killed $vgpr2, implicit-def $vcc, implicit $exec
+ $vgpr17 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr7, 0, killed $vgpr8, 0, 0, implicit $mode, implicit $exec
+ $vgpr18 = V_FMA_F32_e64 0, $vgpr41, 0, killed $vgpr11, 0, killed $vgpr12, 0, 0, implicit $mode, implicit $exec
+ $vgpr19 = V_FMA_F32_e64 0, killed $vgpr41, 0, killed $vgpr15, 0, killed $vgpr16, 0, 0, implicit $mode, implicit $exec
+
+ bb.2:
+ liveins: $sgpr8
+
+ $exec_lo = S_OR_B32 $exec_lo, killed $sgpr8, implicit-def $scc
+ S_ENDPGM 0
+...
diff --git a/llvm/test/CodeGen/AMDGPU/wqm.ll b/llvm/test/CodeGen/AMDGPU/wqm.ll
index 78d609034e79e..419171876e792 100644
--- a/llvm/test/CodeGen/AMDGPU/wqm.ll
+++ b/llvm/test/CodeGen/AMDGPU/wqm.ll
@@ -3348,9 +3348,9 @@ define amdgpu_ps float @test_wqm_strict_wqm_wqm(i32 inreg %idx0, i32 inreg %idx1
; GFX10-W32-NEXT: s_mov_b32 exec_lo, s0
; GFX10-W32-NEXT: s_waitcnt vmcnt(1)
; GFX10-W32-NEXT: v_add_f32_e32 v0, v0, v0
-; GFX10-W32-NEXT: s_waitcnt vmcnt(0)
-; GFX10-W32-NEXT: v_mov_b32_e32 v3, v2
; GFX10-W32-NEXT: image_sample v0, v0, s[8:15], s[16:19] dmask:0x1 dim:SQ_RSRC_IMG_1D
+; GFX10-W32-NEXT: s_waitcnt vmcnt(1)
+; GFX10-W32-NEXT: v_mov_b32_e32 v3, v2
; GFX10-W32-NEXT: s_waitcnt vmcnt(0)
; GFX10-W32-NEXT: v_add_f32_e32 v0, v0, v0
; GFX10-W32-NEXT: v_add_f32_e32 v0, v0, v3
More information about the llvm-commits
mailing list