[llvm] 6fa66ac - [AArch64] NFC. Add a test exposing a bug in FixupStatepointCallerSaved pass

Daniil Suchkov via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 18 14:03:16 PDT 2023


Author: Daniil Suchkov
Date: 2023-07-18T13:53:28-07:00
New Revision: 6fa66acfad3b6a31b60ba557824cb93e6fe6b19e

URL: https://github.com/llvm/llvm-project/commit/6fa66acfad3b6a31b60ba557824cb93e6fe6b19e
DIFF: https://github.com/llvm/llvm-project/commit/6fa66acfad3b6a31b60ba557824cb93e6fe6b19e.diff

LOG: [AArch64] NFC. Add a test exposing a bug in FixupStatepointCallerSaved pass

This pass doesn't take register classes into account, so it ends up
trying to spill a non-GP register onto stack which is not correct.

Added: 
    llvm/test/CodeGen/AArch64/aarch64-fixup-statepoint-regs-crash.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AArch64/aarch64-fixup-statepoint-regs-crash.ll b/llvm/test/CodeGen/AArch64/aarch64-fixup-statepoint-regs-crash.ll
new file mode 100644
index 00000000000000..5dd7d40030c19f
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/aarch64-fixup-statepoint-regs-crash.ll
@@ -0,0 +1,19 @@
+; XFAIL: *
+; REQUIRES: asserts
+; RUN: llc -verify-machineinstrs -max-registers-for-gc-values=256 -mtriple=aarch64-none-linux-gnu < %s
+
+define dso_local ptr addrspace(1) @foo(ptr addrspace(1) %arg) gc "statepoint-example" personality ptr null {
+  %load = load <2 x ptr addrspace(1)>, ptr addrspace(1) %arg, align 8
+  %extractelement = extractelement <2 x ptr addrspace(1)> %load, i64 0
+  %call = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr nonnull elementtype(void ()) @baz, i32 0, i32 0, i32 0, i32 0) [ "deopt"(ptr addrspace(1) %extractelement), "gc-live"(<2 x ptr addrspace(1)> %load) ]
+  %relocate = call coldcc <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token %call, i32 0, i32 0)
+  %extractelement2 = extractelement <2 x ptr addrspace(1)> %relocate, i64 0
+  ret ptr addrspace(1) %extractelement2
+}
+
+declare void @baz()
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
+declare <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token, i32, i32) #0
+
+attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }


        


More information about the llvm-commits mailing list