llvm-project/clang/test/Profile
Paul Kirth bac6cd5bf8 [misexpect] Re-implement MisExpect Diagnostics
Reimplements MisExpect diagnostics from D66324 to reconstruct its
original checking methodology only using MD_prof branch_weights
metadata.

New checks rely on 2 invariants:

1) For frontend instrumentation, MD_prof branch_weights will always be
   populated before llvm.expect intrinsics are lowered.

2) for IR and sample profiling, llvm.expect intrinsics will always be
   lowered before branch_weights are populated from the IR profiles.

These invariants allow the checking to assume how the existing branch
weights are populated depending on the profiling method used, and emit
the correct diagnostics. If these invariants are ever invalidated, the
MisExpect related checks would need to be updated, potentially by
re-introducing MD_misexpect metadata, and ensuring it always will be
transformed the same way as branch_weights in other optimization passes.

Frontend based profiling is now enabled without using LLVM Args, by
introducing a new CodeGen option, and checking if the -Wmisexpect flag
has been passed on the command line.

Reviewed By: tejohnson

Differential Revision: https://reviews.llvm.org/D115907
2022-04-19 21:23:48 +00:00
..
Inputs [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
README
branch-logical-mixed.cpp [InstrProf] Use i32 for GEP index from lowering llvm.instrprof.increment 2021-11-19 15:45:14 -08:00
branch-profdup.cpp [Coverage] Fix test failures from commit rG9f2967bcfe2f 2021-01-05 13:35:52 -06:00
c-avoid-direct-call.c
c-captured.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-collision.c Use functions with prototypes when appropriate; NFC 2022-02-12 07:25:06 -05:00
c-counter-overflows.c Revert "Use uint64_t for branch weights instead of uint32_t" 2020-10-31 00:25:32 -07:00
c-general.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-generate.c Reapply multiple "[clang][cli]" patches 2021-01-06 13:27:19 +01:00
c-indirect-call.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-linkage-available_externally.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-linkage.c Revert test fixups after e9a9c85098 (which reverted a14fc74). 2021-06-04 10:42:25 -04:00
c-outdated-data.c Use functions with prototypes when appropriate; NFC 2022-02-12 07:25:06 -05:00
c-ternary.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-unprofiled-blocks.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
c-unprofiled.c
c-unreachable-after-switch.c [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
coverage-prefix-map.c Use functions with prototypes when appropriate; NFC 2022-02-12 07:25:06 -05:00
cxx-abc-deleting-dtor.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-class.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-hash-v2.cpp
cxx-implicit.cpp
cxx-indirect-call.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-lambda.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-linkage.cpp Revert test fixups after e9a9c85098 (which reverted a14fc74). 2021-06-04 10:42:25 -04:00
cxx-missing-bodies.cpp
cxx-rangefor.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-stmt-initializers.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-structors.cpp
cxx-templates.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-throws.cpp [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
cxx-virtual-destructor-calls.cpp
def-assignop.cpp
def-ctors.cpp
def-dtors.cpp
func-entry.c
gcc-flag-compatibility-aix.c Use functions with prototypes when appropriate; NFC 2022-02-12 07:25:06 -05:00
gcc-flag-compatibility.c Use functions with prototypes when appropriate; NFC 2022-02-12 07:25:06 -05:00
misexpect-branch-cold.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-branch-nonconst-expected-val.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-branch-unpredictable.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-branch.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-switch-default.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-switch-nonconst.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-switch-only-default-case.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
misexpect-switch.c [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
objc-general.m [OpaquePtrs][Clang] Add -no-opaque-pointers to tests (NFC) 2022-04-07 12:09:47 +02:00
profile-does-not-exist.c
profile-summary.c

README

These are tests for instrumentation based profiling.  This specifically means
the -fprofile-instr-generate and -fprofile-instr-use driver flags.

Tests in this directory should usually test both:

  - the generation of instrumentation (-fprofile-instr-generate), and
  - the use of profile data from instrumented runs (-fprofile-instr-use).

In order to test -fprofile-instr-use without actually running an instrumented
program, .profdata files are checked into Inputs/.

The input source files must include a main function such that building with
-fprofile-instr-generate and running the resulting program generates the same
.profdata file that is consumed by the tests for -fprofile-instr-use.  Even
tests that only check -fprofile-instr-use should include such a main function,
so that profile data can be regenerated as the .profdata file format evolves.