[PATCH] D107404: [AMDGPU] Avoid assert for saved FP

Stanislav Mekhanoshin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 25 09:51:21 PDT 2021


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG11b7ee974a69: [AMDGPU] Avoid assert for saved FP (authored by rampitec).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107404/new/

https://reviews.llvm.org/D107404

Files:
  llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
  llvm/test/CodeGen/AMDGPU/save-fp.ll


Index: llvm/test/CodeGen/AMDGPU/save-fp.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AMDGPU/save-fp.ll
@@ -0,0 +1,29 @@
+; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX908 %s
+; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX900 %s
+
+define void @foo() {
+bb:
+  ret void
+}
+
+; FIXME: We spill v40 into AGPR, but still save and restore FP
+; which is not needed in this case.
+
+; GCN-LABEL: {{^}}caller:
+
+; GFX900:     s_mov_b32 [[SAVED_FP:s[0-9]+]], s33
+; GFX900:     s_mov_b32 s33, s32
+; GFX908-NOT: s_mov_b32 s33, s32
+; GFX900:     buffer_store_dword
+; GFX908-DAG: s_mov_b32 [[SAVED_FP:s[0-9]+]], s33
+; GFX908-DAG: v_accvgpr_write_b32
+; GCN:        s_swappc_b64
+; GFX900:     buffer_load_dword
+; GFX908:     v_accvgpr_read_b32
+; GCN:        s_mov_b32 s33, [[SAVED_FP]]
+define i64 @caller() {
+bb:
+  call void asm sideeffect "", "~{v40}" ()
+  tail call void @foo()
+  ret i64 0
+}
Index: llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
+++ llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
@@ -959,8 +959,11 @@
                      FuncInfo->FramePointerSaveIndex)) &&
          "Needed to save FP but didn't save it anywhere");
 
+  // If we allow spilling to AGPRs we may have saved FP but then spill
+  // everything into AGPRs instead of the stack.
   assert((HasFP || (!FuncInfo->SGPRForFPSaveRestoreCopy &&
-                    !FuncInfo->FramePointerSaveIndex)) &&
+                    !FuncInfo->FramePointerSaveIndex) ||
+                   EnableSpillVGPRToAGPR) &&
          "Saved FP but didn't need it");
 
   assert((!HasBP || (FuncInfo->SGPRForBPSaveRestoreCopy ||


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107404.368671.patch
Type: text/x-patch
Size: 1870 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210825/14597459/attachment-0001.bin>


More information about the llvm-commits mailing list