mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
62ba5df396
If TBAA is on an intrinsic and it gets upgraded, it'll delete the call instruction that we collected in a vector. Even if we were to use WeakVH, it'll drop the TBAA and we'll hit the assert on the upgrade path. r263673 gave a shot to make sure the TBAA upgrade happens before intrinsics upgrade, but failed to account for all cases. Instead of collecting instructions in a vector, this patch makes it just upgrade the TBAA on the fly, because metadata are always already loaded at this point. Differential Revision: https://reviews.llvm.org/D24533 llvm-svn: 281549
24 lines
952 B
LLVM
24 lines
952 B
LLVM
; RUN: llvm-as %s -o %t1.bc
|
|
; RUN: llvm-as %p/Inputs/remangle_intrinsics_tbaa.ll -o %t2.bc
|
|
; RUN: llvm-link -disable-lazy-loading %t2.bc %t1.bc -S | FileCheck %s
|
|
|
|
; Verify that we correctly rename the intrinsic and don't crash
|
|
; CHECK: @llvm.masked.store.v4p0some_named_struct.0.p0v4p0some_named_struct.0
|
|
|
|
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.11.0"
|
|
|
|
%some_named_struct = type { i8 }
|
|
|
|
define void @foo(%some_named_struct*) {
|
|
call void @llvm.masked.store.v4p0some_named_struct.p0v4p0some_named_struct(<4 x %some_named_struct*> undef, <4 x %some_named_struct*>* undef, i32 8, <4 x i1> undef), !tbaa !5
|
|
ret void
|
|
}
|
|
|
|
declare void @llvm.masked.store.v4p0some_named_struct.p0v4p0some_named_struct(<4 x %some_named_struct*>, <4 x %some_named_struct*>*, i32, <4 x i1>) #1
|
|
|
|
!5 = !{!6, !6, i64 0}
|
|
!6 = !{!"any pointer", !7, i64 0}
|
|
!7 = !{!"omnipotent char", !8, i64 0}
|
|
!8 = !{!"Simple C/C++ TBAA"}
|