[llvm] 1a58be2 - [JumpThreading] Use profile data even with the new pass manager

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 22 08:22:37 PST 2019


Author: Kazu Hirata
Date: 2019-11-22T08:21:48-08:00
New Revision: 1a58be2ac58ca078c91c9d1700220d88091b256f

URL: https://github.com/llvm/llvm-project/commit/1a58be2ac58ca078c91c9d1700220d88091b256f
DIFF: https://github.com/llvm/llvm-project/commit/1a58be2ac58ca078c91c9d1700220d88091b256f.diff

LOG: [JumpThreading] Use profile data even with the new pass manager

Summary:
Without this patch, the jump threading pass ignores profiling data
whenever we invoke the pass with the new pass manager.

Specifically, JumpThreadingPass::run calls runImpl with class variable
HasProfileData always set to false.  In turn, runImpl sets
HasProfileData to false again:

  HasProfileData = HasProfileData_;

In the end, we don't use profiling data at all with the new pass
manager.

This patch fixes the problem by passing F.hasProfileData() to runImpl.

The bug appears to have been introduced at:

  https://reviews.llvm.org/D41461

which removed local variable HasProfileData in JumpThreadingPass::run
even though there was one more use left in the same function.  As a
result, the remaining use ended referring to the class variable
instead.

Note that F.hasProfileData is an extremely lightweight function, so I
don't see the need to cache its result.  Once this patch is approved,
I'm planning to stop caching the result of F.hasProfileData in
runOnFunction.

Reviewers: wmi, eli.friedman

Subscribers: hiraditya, jfb, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70509

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/JumpThreading.cpp
    llvm/test/Transforms/JumpThreading/update-edge-weight.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
index 0cb664907ec8..4250875dd886 100644
--- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp
+++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
@@ -340,7 +340,7 @@ PreservedAnalyses JumpThreadingPass::run(Function &F,
     BFI.reset(new BlockFrequencyInfo(F, *BPI, LI));
   }
 
-  bool Changed = runImpl(F, &TLI, &LVI, &AA, &DTU, HasProfileData,
+  bool Changed = runImpl(F, &TLI, &LVI, &AA, &DTU, F.hasProfileData(),
                          std::move(BFI), std::move(BPI));
 
   if (!Changed)

diff  --git a/llvm/test/Transforms/JumpThreading/update-edge-weight.ll b/llvm/test/Transforms/JumpThreading/update-edge-weight.ll
index 58cd71861d8a..e6a6093279de 100644
--- a/llvm/test/Transforms/JumpThreading/update-edge-weight.ll
+++ b/llvm/test/Transforms/JumpThreading/update-edge-weight.ll
@@ -1,4 +1,5 @@
 ; RUN: opt -S -jump-threading %s | FileCheck %s
+; RUN: opt -S -passes=jump-threading %s | FileCheck %s
 
 ; Test if edge weights are properly updated after jump threading.
 


        


More information about the llvm-commits mailing list