[PATCH] D23082: [AutoFDO] Fix handling of empty profiles

David Callahan via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 2 12:58:54 PDT 2016


david2050 created this revision.
david2050 added a reviewer: dnovillo.
david2050 added a subscriber: llvm-commits.

If a profile has no samples for a function, then the function "entry count" is set to the value 0. Several places in the code test that if the Function::getEntryCount is defined at all. Here we change to treat a 0 entry count the same as undefined. 

In particular, this fixes a problem in getLayoutSuccessorProbThreshold in MachineBlockPlacement.cpp where we use a different and inferior heuristic for laying out basic blocks.

https://reviews.llvm.org/D23082

Files:
  lib/IR/Function.cpp

Index: lib/IR/Function.cpp
===================================================================
--- lib/IR/Function.cpp
+++ lib/IR/Function.cpp
@@ -1262,7 +1262,10 @@
     if (MDString *MDS = dyn_cast<MDString>(MD->getOperand(0)))
       if (MDS->getString().equals("function_entry_count")) {
         ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(1));
-        return CI->getValue().getZExtValue();
+        uint64_t Count = CI->getValue().getZExtValue();
+        if(Count == 0)
+          return None;
+        return Count;
       }
   return None;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23082.66531.patch
Type: text/x-patch
Size: 572 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160802/0e0e6bc6/attachment.bin>


More information about the llvm-commits mailing list