mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-24 20:30:06 +00:00
Upgrade TBAA *before* upgrading intrinsics
Summary: If TBAA is on an intrinsic and it gets upgraded and drops the TBAA we hit an odd assert. We should just upgrade the TBAA first because it doesn't have side-effects. Reviewers: reames, apilipenko, manmanren Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18229 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263673 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
94e3841aa9
commit
f3dfbbff41
@ -5334,6 +5334,11 @@ std::error_code BitcodeReader::materializeModule() {
|
||||
if (!BasicBlockFwdRefs.empty())
|
||||
return error("Never resolved function from blockaddress");
|
||||
|
||||
// Upgrading intrinsic calls before TBAA can cause TBAA metadata to be lost,
|
||||
// to prevent this instructions with TBAA tags should be upgraded first.
|
||||
for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++)
|
||||
UpgradeInstWithTBAATag(InstsWithTBAATag[I]);
|
||||
|
||||
// Upgrade any intrinsic calls that slipped through (should not happen!) and
|
||||
// delete the old functions to clean up. We can't do this unless the entire
|
||||
// module is materialized because there could always be another function body
|
||||
@ -5349,9 +5354,6 @@ std::error_code BitcodeReader::materializeModule() {
|
||||
}
|
||||
UpgradedIntrinsics.clear();
|
||||
|
||||
for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++)
|
||||
UpgradeInstWithTBAATag(InstsWithTBAATag[I]);
|
||||
|
||||
UpgradeDebugInfo(*TheModule);
|
||||
return std::error_code();
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ declare <2 x double> @llvm.masked.load.v2f64(<2 x double>* %ptrs, i32, <2 x i1>
|
||||
define <2 x double> @tests.masked.load(<2 x double>* %ptr, <2 x i1> %mask, <2 x double> %passthru) {
|
||||
; CHECK-LABEL: @tests.masked.load(
|
||||
; CHECK: @llvm.masked.load.v2f64.p0v2f64
|
||||
%res = call <2 x double> @llvm.masked.load.v2f64(<2 x double>* %ptr, i32 1, <2 x i1> %mask, <2 x double> %passthru)
|
||||
%res = call <2 x double> @llvm.masked.load.v2f64(<2 x double>* %ptr, i32 1, <2 x i1> %mask, <2 x double> %passthru), !tbaa !0
|
||||
ret <2 x double> %res
|
||||
}
|
||||
|
||||
@ -72,6 +72,10 @@ declare void @llvm.masked.store.v2f64(<2 x double> %val, <2 x double>* %ptrs, i3
|
||||
define void @tests.masked.store(<2 x double>* %ptr, <2 x i1> %mask, <2 x double> %val) {
|
||||
; CHECK-LABEL: @tests.masked.store(
|
||||
; CHECK: @llvm.masked.store.v2f64.p0v2f64
|
||||
call void @llvm.masked.store.v2f64(<2 x double> %val, <2 x double>* %ptr, i32 3, <2 x i1> %mask)
|
||||
call void @llvm.masked.store.v2f64(<2 x double> %val, <2 x double>* %ptr, i32 3, <2 x i1> %mask), !tbaa !0
|
||||
ret void
|
||||
}
|
||||
}
|
||||
|
||||
!0 = !{!"omnipotent char", !1}
|
||||
!1 = !{!"Simple C/C++ TBAA"}
|
||||
!2 = !{!"double", !0}
|
||||
|
BIN
test/Bitcode/auto_upgrade_intrinsics.bc
Normal file
BIN
test/Bitcode/auto_upgrade_intrinsics.bc
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user