[llvm] 44af592 - [Statepoint] Return undef value for the statepoint of the none token (#72552)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 17 06:32:57 PST 2023
Author: Danila Malyutin
Date: 2023-11-17T18:32:52+04:00
New Revision: 44af5924b1cbbb395e7e71250a5445053c4ec4a3
URL: https://github.com/llvm/llvm-project/commit/44af5924b1cbbb395e7e71250a5445053c4ec4a3
DIFF: https://github.com/llvm/llvm-project/commit/44af5924b1cbbb395e7e71250a5445053c4ec4a3.diff
LOG: [Statepoint] Return undef value for the statepoint of the none token (#72552)
Helps avoid the crash in verifier when it tries to print the error.
`none` token might be produced by llvm-reduce, since it's a default
value, so by extension this also fixes llvm-reduce crash, allowing it to
just discard invalid IR.
---------
Co-authored-by: arpilipe <apilipenko at azul.com>
Added:
llvm/test/Verifier/gc_none_token.ll
Modified:
llvm/lib/IR/IntrinsicInst.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp
index a24ca8d100527d5..7a3b708e7400677 100644
--- a/llvm/lib/IR/IntrinsicInst.cpp
+++ b/llvm/lib/IR/IntrinsicInst.cpp
@@ -870,6 +870,10 @@ const Value *GCProjectionInst::getStatepoint() const {
if (isa<UndefValue>(Token))
return Token;
+ // Treat none token as if it was undef here
+ if (isa<ConstantTokenNone>(Token))
+ return UndefValue::get(Token->getType());
+
// This takes care both of relocates for call statepoints and relocates
// on normal path of invoke statepoint.
if (!isa<LandingPadInst>(Token))
diff --git a/llvm/test/Verifier/gc_none_token.ll b/llvm/test/Verifier/gc_none_token.ll
new file mode 100644
index 000000000000000..3847f625c4869f8
--- /dev/null
+++ b/llvm/test/Verifier/gc_none_token.ll
@@ -0,0 +1,18 @@
+; RUN: not opt -passes=verify -S %s 2>&1 | FileCheck %s
+; Check that verifier doesn't crash on relocate with none token
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @check_verify_none_token() gc "statepoint-example" {
+
+entry:
+ ret i32 0
+
+unreach:
+ ; CHECK: gc relocate is incorrectly tied to the statepoint
+ ; CHECK: (undef, undef)
+ %token_call = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token none, i32 0, i32 0)
+ ret i32 1
+}
+
+declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32)
More information about the llvm-commits
mailing list