From a99989529eac2a96fec4b3b59cee6d2f7ab22a92 Mon Sep 17 00:00:00 2001 From: Daniil Suchkov Date: Tue, 15 Feb 2022 23:46:21 +0000 Subject: [PATCH] [RewriteStatepointsForGC] Add a test exposing an incorrect assertion --- .../RewriteStatepointsForGC/phi-vector-bitcast.ll | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 llvm/test/Transforms/RewriteStatepointsForGC/phi-vector-bitcast.ll diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/phi-vector-bitcast.ll b/llvm/test/Transforms/RewriteStatepointsForGC/phi-vector-bitcast.ll new file mode 100644 index 0000000..6f69234 --- /dev/null +++ b/llvm/test/Transforms/RewriteStatepointsForGC/phi-vector-bitcast.ll @@ -0,0 +1,28 @@ +; XFAIL: * +; REQUIRES: asserts +; RUN: opt < %s -disable-output -passes=rewrite-statepoints-for-gc + +; We shouldn't crash when we encounter a vector phi with more than one input +; from the same predecessor. +define void @foo(<2 x i8 addrspace(1)*> %arg1, i32 %arg2, i1 %arg3, <2 x i64 addrspace(1)*> %arg4) gc "statepoint-example" personality i32* null { +bb: + %tmp = bitcast <2 x i8 addrspace(1)*> %arg1 to <2 x i64 addrspace(1)*> + switch i32 %arg2, label %bb2 [ + i32 1, label %bb4 + i32 2, label %bb4 + ] + +bb2: ; preds = %bb + br i1 %arg3, label %bb8, label %bb4 + +bb4: ; preds = %bb2, %bb, %bb + %tmp5 = phi <2 x i64 addrspace(1)*> [ %tmp, %bb ], [ %tmp, %bb ], [ %arg4, %bb2 ] + call void @bar() + %tmp6 = extractelement <2 x i64 addrspace(1)*> %tmp5, i32 1 + ret void + +bb8: ; preds = %bb2 + ret void +} + +declare void @bar() -- 2.7.4