[llvm] r312855 - [sanitizer-coverage] call appendToUsed once per module, not once per function (which is too slow)

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 8 22:30:13 PDT 2017


Author: kcc
Date: Fri Sep  8 22:30:13 2017
New Revision: 312855

URL: http://llvm.org/viewvc/llvm-project?rev=312855&view=rev
Log:
[sanitizer-coverage] call appendToUsed once per module, not once per function (which is too slow)

Modified:
    llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=312855&r1=312854&r2=312855&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Fri Sep  8 22:30:13 2017
@@ -242,6 +242,7 @@ private:
   GlobalVariable *FunctionGuardArray;  // for trace-pc-guard.
   GlobalVariable *Function8bitCounterArray;  // for inline-8bit-counters.
   GlobalVariable *FunctionPCsArray;  // for pc-table.
+  SmallVector<GlobalValue *, 20> GlobalsToAppendToUsed;
 
   SanitizerCoverageOptions Options;
 };
@@ -400,6 +401,10 @@ bool SanitizerCoverageModule::runOnModul
                        {IRB.CreatePointerCast(SecStartEnd.first, IntptrPtrTy),
                         IRB.CreatePointerCast(SecStartEnd.second, IntptrPtrTy)});
   }
+  // We don't reference these arrays directly in any of our runtime functions,
+  // so we need to prevent them from being dead stripped.
+  if (TargetTriple.isOSBinFormatMachO())
+    appendToUsed(M, GlobalsToAppendToUsed);
   return true;
 }
 
@@ -579,25 +584,20 @@ SanitizerCoverageModule::CreatePCArray(F
 
 void SanitizerCoverageModule::CreateFunctionLocalArrays(
     Function &F, ArrayRef<BasicBlock *> AllBlocks) {
-  SmallVector<GlobalValue *, 3> LocalArrays;
   if (Options.TracePCGuard) {
     FunctionGuardArray = CreateFunctionLocalArrayInSection(
         AllBlocks.size(), F, Int32Ty, SanCovGuardsSectionName);
-    LocalArrays.push_back(FunctionGuardArray);
+    GlobalsToAppendToUsed.push_back(FunctionGuardArray);
   }
   if (Options.Inline8bitCounters) {
     Function8bitCounterArray = CreateFunctionLocalArrayInSection(
         AllBlocks.size(), F, Int8Ty, SanCovCountersSectionName);
-    LocalArrays.push_back(Function8bitCounterArray);
+    GlobalsToAppendToUsed.push_back(Function8bitCounterArray);
   }
   if (Options.PCTable) {
     FunctionPCsArray = CreatePCArray(F, AllBlocks);
-    LocalArrays.push_back(FunctionPCsArray);
+    GlobalsToAppendToUsed.push_back(FunctionPCsArray);
   }
-
-  // We don't reference these arrays directly in any of our runtime functions,
-  // so we need to prevent them from being dead stripped.
-  appendToUsed(*F.getParent(), LocalArrays);
 }
 
 bool SanitizerCoverageModule::InjectCoverage(Function &F,




More information about the llvm-commits mailing list