[llvm] r263673 - Upgrade TBAA *before* upgrading intrinsics

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 16 16:17:55 PDT 2016


Author: cbieneman
Date: Wed Mar 16 18:17:54 2016
New Revision: 263673

URL: http://llvm.org/viewvc/llvm-project?rev=263673&view=rev
Log:
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

Added:
    llvm/trunk/test/Bitcode/auto_upgrade_intrinsics.bc
Modified:
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/test/Assembler/auto_upgrade_intrinsics.ll

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=263673&r1=263672&r2=263673&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Wed Mar 16 18:17:54 2016
@@ -5334,6 +5334,11 @@ std::error_code BitcodeReader::materiali
   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::materiali
   }
   UpgradedIntrinsics.clear();
 
-  for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++)
-    UpgradeInstWithTBAATag(InstsWithTBAATag[I]);
-
   UpgradeDebugInfo(*TheModule);
   return std::error_code();
 }

Modified: llvm/trunk/test/Assembler/auto_upgrade_intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/auto_upgrade_intrinsics.ll?rev=263673&r1=263672&r2=263673&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/auto_upgrade_intrinsics.ll (original)
+++ llvm/trunk/test/Assembler/auto_upgrade_intrinsics.ll Wed Mar 16 18:17:54 2016
@@ -63,7 +63,7 @@ declare <2 x double> @llvm.masked.load.v
 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
 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
-}
\ No newline at end of file
+}
+
+!0 = !{!"omnipotent char", !1}
+!1 = !{!"Simple C/C++ TBAA"}
+!2 = !{!"double", !0}

Added: llvm/trunk/test/Bitcode/auto_upgrade_intrinsics.bc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/auto_upgrade_intrinsics.bc?rev=263673&view=auto
==============================================================================
Binary files llvm/trunk/test/Bitcode/auto_upgrade_intrinsics.bc (added) and llvm/trunk/test/Bitcode/auto_upgrade_intrinsics.bc Wed Mar 16 18:17:54 2016 differ




More information about the llvm-commits mailing list