94 Commits

Author SHA1 Message Date
Rong Xu
9e52f8ee8b [PGO] Memory intrinsic calls optimization based on profiled size
This patch optimizes two memory intrinsic operations: memset and memcpy based
on the profiled size of the operation. The high level transformation is like:
  mem_op(..., size)
  ==>
  switch (size) {
    case s1:
       mem_op(..., s1);
       goto merge_bb;
    case s2:
       mem_op(..., s2);
       goto merge_bb;
    ...
    default:
       mem_op(..., size);
       goto merge_bb;
    }
  merge_bb:

Differential Revision: http://reviews.llvm.org/D28966


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299446 91177308-0d34-0410-b5e6-96231b3b80d8
2017-04-04 16:42:20 +00:00
Rong Xu
6cfe632b60 [PGO] Change the internal options description. nfc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298120 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-17 20:51:44 +00:00
Rong Xu
5edba1dc35 [PGO] Value profile for size of memory intrinsic calls
This patch annotates the valuesites profile to memory intrinsics.

Differential Revision: http://reviews.llvm.org/D31002


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298110 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-17 18:07:26 +00:00
Rong Xu
6f00c7bc4d Resubmit r297897: [PGO] Value profile for size of memory intrinsic calls
R297897 inadvertently enabled annotation for memop profiling. This new patch
fixed it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297996 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-16 21:15:48 +00:00
Eric Liu
9dd65de00d Revert "[PGO] Value profile for size of memory intrinsic calls"
This commit reverts r297897 and r297909.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297951 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-16 13:16:35 +00:00
Vitaly Buka
6868195f9c Revert "Revert "[PGO] Minor cleanup for count instruction in SelectInstVisitor.""
Previously reverted wrong revision.

This reverts commit r297910.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297911 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-15 23:07:41 +00:00
Vitaly Buka
0356a1463a Revert "[PGO] Minor cleanup for count instruction in SelectInstVisitor."
Fails LLVMFuzzer.LLVMFuzzer.value-profile-strncmp.test

This reverts commit r297892.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297910 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-15 23:06:22 +00:00
Rong Xu
670b4228b0 [PGO] Value profile for size of memory intrinsic calls
This patch adds the value profile support to profile the size parameter of
memory intrinsic calls: memcpy, memcmp, and memmov.

Differential Revision: http://reviews.llvm.org/D28965


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297897 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-15 21:47:27 +00:00
Rong Xu
7e3bcd49fc [PGO] Minor cleanup for count instruction in SelectInstVisitor.
Summary:
NSIs can be double-counted by different operations in
SelectInstVisitor. Sink the the update to VM_counting mode only.
Also reset the value for each counting operation.

Reviewers: davidxl

Reviewed By: davidxl

Subscribers: xur, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297892 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-15 21:05:24 +00:00
Rong Xu
1d95032b0c [PGO] Refactor the code for value profile annotation
This patch refactors the code for value profile annotation to facilitate
of adding other kind of value profiles.

Differential Revision: http://reviews.llvm.org/D30989


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297870 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-15 18:23:39 +00:00
Rong Xu
1bf6ca1df1 Minor format change. nfc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297400 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-09 19:08:55 +00:00
Xinliang David Li
7fdf3d7012 Fix variable name /NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294090 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-04 07:40:43 +00:00
Xinliang David Li
748bc4973c [PGO] Add select instr profile in graph dump
Differential Revision: http://reviews.llvm.org/D29474



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294055 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-03 21:57:51 +00:00
Xinliang David Li
050d2a7ccb [PGO] internal option cleanups
1. Added comments for options
2. Added missing option cl::desc field
3. Uniified function filter option for graph viewing.
   Now PGO count/raw-counts share the same
   filter option: -view-bfi-func-name=.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293938 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-02 21:29:17 +00:00
Xinliang David Li
53438cdcee [PGO] make graph view internal options available for all builds
Differential Revision: https://reviews.llvm.org/D29259


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293921 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-02 19:18:56 +00:00
Xinliang David Li
a12ec4ba0d [PGO] add debug option to view raw count after prof use annotation
Differential Revision: https://reviews.llvm.org/D29045


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293325 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-27 19:06:25 +00:00
Xinliang David Li
83c73f565d [PGO] add debug option to view annotated cfg after prof use annotation
Differential Revision: http://reviews.llvm.org/D28967 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292815 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-23 18:58:24 +00:00
Rong Xu
6d80fe73c6 Resubmit "[PGO] Turn off comdat renaming in IR PGO by default"
This patch resubmits the changes in r291588.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291696 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-11 20:19:41 +00:00
Rong Xu
de4116d55c Revert "[PGO] Turn off comdat renaming in IR PGO by default"
This patch reverts r291588: [PGO] Turn off comdat renaming in IR PGO by default,
as we are seeing some hash mismatches in our internal tests.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291621 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-10 23:54:31 +00:00
Rong Xu
2cf892fefa [PGO] Turn off comdat renaming in IR PGO by default
Summary:
In IR PGO we append the function hash to comdat functions to avoid the
potential hash mismatch. This turns out not legal in some cases: if the comdat
function is address-taken and used in comparison. Renaming changes the semantic.

This patch turns off comdat renaming by default.

To alleviate the hash mismatch issue, we now rename the profile variable
for comdat functions. Profile allows co-existing multiple versions of profiles
with different hash value. The inlined copy will always has the correct profile
counter. The out-of-line copy might not have the correct count. But we will
not have the bogus mismatch warning.

Reviewers: davidxl

Subscribers: llvm-commits, xur

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291588 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-10 19:30:20 +00:00
Rong Xu
8a66c7e485 [PGO] Fix insane counts due to nonreturn calls
Summary:
Since we don't break BBs for function calls. We might get some insane counts 
(wrap of unsigned) in the presence of noreturn calls.

This patch sets these counts to zero instead of the wrapped number.

Reviewers: davidxl

Subscribers: xur, eraman, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289521 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-13 06:41:14 +00:00
Rong Xu
e72670cb54 [PGO] Fix PGO use ICE when there are unreachable BBs
For -O0 there might be unreachable BBs, which breaks the assumption that all the
BBs have an auxiliary data structure.  In this patch, we add another interface
called findBBInfo() so that a nullptr can be returned for the unreachable BBs
(and the callers can ignore those BBs).

This fixes the bug reported
https://llvm.org/bugs/show_bug.cgi?id=31209

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288528 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 19:10:29 +00:00
Rong Xu
0eba98aa7d [PGO] Fix select instruction annotation
Summary:
Select instruction annotation in IR PGO uses the edge count to infer the
branch count. It's currently placed in setInstrumentedCounts() where
no all the BB counts have been computed. This leads to wrong branch weights.
Move the annotation after all BB counts are populated.

Reviewers: davidxl

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285128 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-25 21:47:24 +00:00
Rong Xu
bb6f9b5aff [PGO] Create weak alias for the renamed Comdat function
Add a weak alias to the renamed Comdat function in IR level instrumentation,
using it's original name. This ensures the same behavior w/ and w/o IR
instrumentation, even for non standard conforming code.

Differential Revision: http://reviews.llvm.org/D25339


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283490 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-06 20:38:13 +00:00
Mehdi Amini
67f335d992 Use StringRef in Pass/PassManager APIs (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283004 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-01 02:56:57 +00:00
Xinliang David Li
7732977995 code cleanup -- commoning IR travsersals
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282034 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-20 22:39:47 +00:00
Xinliang David Li
f5969f7e9c [Profile] Do not annotate select insts not covered in profile.
Fixed PR/30466




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282009 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-20 20:20:01 +00:00
Simon Pilgrim
b9ae8b034a Fix covered-switch-default warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281865 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-18 21:08:35 +00:00
Xinliang David Li
760a2d0c51 Fix built bot failure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281859 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-18 18:52:08 +00:00
Xinliang David Li
ab430229ee [Profile] Implement select instruction instrumentation in IR PGO
Differential Revision: http://reviews.llvm.org/D23727


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281858 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-18 18:34:07 +00:00
Xinliang David Li
0842b8d3d6 [Profile] Fix edge count read bug
Use uint64_t to avoid value truncation before scaling.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279213 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-19 06:31:45 +00:00
Xinliang David Li
7146ad0776 [Profile] Simple code refactoring for reuse /NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279209 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-19 05:31:33 +00:00
Xinliang David Li
b894886c6e [Profile] improve warning control option
Change --no-pgo-warn-missing to -pgo-warn-missing-function
and negate the default. /NFC

Add more test to make sure the warning is off by default




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278314 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-11 05:09:30 +00:00
Xinliang David Li
f78dbb951b [Profile] turn off verbose warnings by default
no prof data for func warning is turned off by default
due to its high verbosity and minimal usefulness.

Differential Revision: http://reviews.llvm.org/D23295




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278127 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-09 15:35:28 +00:00
Sean Silva
2fb9a98752 Consistently use ModuleAnalysisManager
Besides a general consistently benefit, the extra layer of indirection
allows the mechanical part of https://reviews.llvm.org/D23256 that
requires touching every transformation and analysis to be factored out
cleanly.

Thanks to David for the suggestion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278078 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-09 00:28:38 +00:00
Xinliang David Li
fa6022726f [Profile] IR profiling minor cleanup /nfc
Differential Revision: http://reviews.llvm.org/D22995



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277379 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-01 20:25:06 +00:00
Rong Xu
568d841225 [PGO] Fix profile mismatch in COMDAT function with pre-inliner
Pre-instrumentation inline (pre-inliner) greatly improves the IR
instrumentation code performance, among other benefits. One issue of the
pre-inliner is it can introduce CFG-mismatch for COMDAT functions. This
is due to the fact that the same COMDAT function may have different early
inline decisions across different modules -- that means different copies
of COMDAT functions will have different CFG checksum.

In this patch, we propose a partially renaming the COMDAT group and its
member function/variable so we have different profile counter for each
version. We will post-fix the COMDAT function and the group name with its
FunctionHash.

Differential Revision: http://reviews.llvm.org/D22600


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276673 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-25 18:45:37 +00:00
Xinliang David Li
9fb35fc1cc Sync up InstrProfData.inc with compiler-rt with fixes to references
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276388 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-22 04:46:56 +00:00
Teresa Johnson
e0c5ceae90 Refactor indirect call promotion profitability analysis (NFC)
Summary:
Refactored the profitability analysis out of the IC promotion pass and
into lib/Analysis so that it can be accessed by the summary index
builder in a follow-on patch to enable IC promotion in ThinLTO (D21932).

Reviewers: davidxl, xur

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22182

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275216 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 21:13:44 +00:00
Easwaran Raman
604d3935d1 Fix PR28219: Use profile summary from reader and not compute it
Differentiaal revision: http://reviews.llvm.org/D21546



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273301 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-21 19:29:49 +00:00
Sean Silva
9214c0d716 Add a comment about why we need to buffer the attribute changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271097 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 04:24:39 +00:00
Sean Silva
28cd01c46e Small cleanup.
Centralize assertion.
Clean up max loop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271094 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 04:19:45 +00:00
Sean Silva
74391ad33a Inline this into its only use. NFC.
The name was out of date at this point and it seems simple enough to
have in-line.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271093 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 04:19:40 +00:00
Sean Silva
21bbb92ca3 Bring back r271090 in a way that doesn't depend on r271089.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271092 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 04:05:36 +00:00
Sean Silva
c44d843ff4 Revert r271089 and r271090.
It was triggering an msan bot.

Revert "[IRPGO] Set the function entry count metadata."

This reverts commit r271090.

Revert "[IRPGO] Centralize the function attribute inliner hint logic. NFC."

This reverts commit r271089.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271091 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 03:56:25 +00:00
Sean Silva
ef7704b344 [IRPGO] Set the function entry count metadata.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271090 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 03:02:54 +00:00
Sean Silva
2abc50b71c [IRPGO] Centralize the function attribute inliner hint logic. NFC.
This keeps the logic in the same function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271089 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-28 03:02:50 +00:00
Xinliang David Li
12ee1c1512 Reapply r270865 -- previous bot failure is unrelated
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271014 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-27 16:22:03 +00:00
Benjamin Kramer
14aae01bc3 Apply clang-tidy's misc-move-constructor-init throughout LLVM.
No functionality change intended, maybe a tiny performance improvement.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270997 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-27 14:27:24 +00:00
Easwaran Raman
639f9cbbb7 Attach profile summary in IR based instrumentation pass.
Differential revision: http://reviews.llvm.org/D20655


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270933 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-26 22:57:11 +00:00