[llvm] [AMDGPU][NFC] Fix crash due to assertion failure (PR #123627)
Chinmay Deshpande via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 20 07:09:08 PST 2025
https://github.com/chinmaydd created https://github.com/llvm/llvm-project/pull/123627
Add check for FLAT instructions that dont use vector registers when computing VALU hazard.
This fixes SWDEV-494413, SWDEV-5088813, SWDEV-499344, SWDEV-499349, SWDEV-504112 which were discovered using the ISEL Fuzzer.
>From 81749b54ee6372c03db155fdc39697b6f7d500b2 Mon Sep 17 00:00:00 2001
From: Chinmay Deshpande <ChinmayDiwakar.Deshpande at amd.com>
Date: Mon, 20 Jan 2025 09:28:13 -0500
Subject: [PATCH] [AMDGPU][NFC] Fix crash due to assertion failure
Add check for FLAT instructions that dont use vector registers when computing VALU hazard.
Change-Id: I558aed17b109047bdc64f8a7e5f419d4d37577cf
---
.../lib/Target/AMDGPU/GCNHazardRecognizer.cpp | 9 ++++--
.../CodeGen/AMDGPU/fix-crash-valu-hazard.ll | 32 +++++++++++++++++++
2 files changed, 38 insertions(+), 3 deletions(-)
create mode 100644 llvm/test/CodeGen/AMDGPU/fix-crash-valu-hazard.ll
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
index 6baef137df5e16..873d18e30a430a 100644
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
@@ -858,9 +858,12 @@ int GCNHazardRecognizer::createsVALUHazard(const MachineInstr &MI) {
}
if (TII->isFLAT(MI)) {
- int DataIdx = AMDGPU::getNamedOperandIdx(Opcode, AMDGPU::OpName::vdata);
- if (AMDGPU::getRegBitWidth(Desc.operands()[DataIdx].RegClass) > 64)
- return DataIdx;
+ // There is no hazard if the instruction does not use vector regs
+ if (VDataIdx == -1)
+ return -1;
+
+ if (AMDGPU::getRegBitWidth(VDataRCID) > 64)
+ return VDataIdx;
}
return -1;
diff --git a/llvm/test/CodeGen/AMDGPU/fix-crash-valu-hazard.ll b/llvm/test/CodeGen/AMDGPU/fix-crash-valu-hazard.ll
new file mode 100644
index 00000000000000..734f87056717d1
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/fix-crash-valu-hazard.ll
@@ -0,0 +1,32 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=amdgcn -mcpu=gfx942 -O2 < %s | FileCheck -check-prefixes=GFX942 %s
+
+ at G = global <2 x i32> splat (i32 5)
+
+define amdgpu_ps void @global_load_lds_dword_saddr(ptr addrspace(1) inreg nocapture %gptr, ptr addrspace(3) nocapture %lptr) {
+; GFX942-LABEL: global_load_lds_dword_saddr:
+; GFX942: ; %bb.0: ; %main_body
+; GFX942-NEXT: s_getpc_b64 s[2:3]
+; GFX942-NEXT: s_add_u32 s2, s2, G at gotpcrel32@lo+4
+; GFX942-NEXT: s_addc_u32 s3, s3, G at gotpcrel32@hi+12
+; GFX942-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0
+; GFX942-NEXT: v_mov_b32_e32 v1, 0
+; GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
+; GFX942-NEXT: flat_load_dwordx2 v[4:5], v[2:3]
+; GFX942-NEXT: v_readfirstlane_b32 s2, v0
+; GFX942-NEXT: s_mov_b32 m0, s2
+; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
+; GFX942-NEXT: v_mul_lo_u32 v0, v4, 10
+; GFX942-NEXT: global_load_lds_dword v1, s[0:1] offset:32 nt
+; GFX942-NEXT: v_mul_lo_u32 v1, v5, 10
+; GFX942-NEXT: s_waitcnt vmcnt(0)
+; GFX942-NEXT: flat_store_dwordx2 v[2:3], v[0:1]
+; GFX942-NEXT: s_endpgm
+main_body:
+ %LGV = load <2 x i32>, ptr @G, align 8
+ %B = mul <2 x i32> %LGV, splat (i32 10)
+ call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 4, i32 32, i32 2)
+ store <2 x i32> %B, ptr @G, align 8
+ ret void
+}
More information about the llvm-commits
mailing list