Files
clang-p2996/llvm/test/Transforms/RewriteStatepointsForGC/phi-vector-bitcast.ll
Daniil Suchkov 7c3e2b92cf [RewriteStatepointsForGC] Fix an incorrect assertion
The assertion verifying that a newly computed value matches what is
already cached used stripPointerCasts() to strip bitcasts, however the
values can be not only pointers, but also vectors of pointers. That is
problematic because stripPointerCasts() doesn't handle vectors of
pointers. This patch introduces an ad-hoc utility function to strip all
bitcasts regardless of the value type.

Reviewed By: skatkov, reames

Differential Revision: https://reviews.llvm.org/D119994
2022-02-17 18:44:57 +00:00

28 lines
954 B
LLVM

; 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()