mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-04-01 07:11:45 +00:00
[llvm] Opt-in flag for X86DiscriminateMemOps
Summary: Currently, if an instruction with a memory operand has no debug information, X86DiscriminateMemOps will generate one based on the first line of the enclosing function, or the last seen debug info. This may cause confusion in certain debugging scenarios. The long term approach would be to use the line number '0' in such cases, however, that brings in challenges: the base discriminator value range is limited (4096 values). For the short term, adding an opt-in flag for this feature. See bug 40319 (https://bugs.llvm.org/show_bug.cgi?id=40319) Reviewers: dblaikie, jmorse, gbedwell Reviewed By: dblaikie Subscribers: aprantl, eraman, hiraditya Differential Revision: https://reviews.llvm.org/D57257 llvm-svn: 352246
This commit is contained in:
parent
00aa216e32
commit
6673639046
@ -26,6 +26,14 @@ using namespace llvm;
|
||||
|
||||
#define DEBUG_TYPE "x86-discriminate-memops"
|
||||
|
||||
static cl::opt<bool> EnableDiscriminateMemops(
|
||||
DEBUG_TYPE, cl::init(false),
|
||||
cl::desc("Generate unique debug info for each instruction with a memory "
|
||||
"operand. Should be enabled for profile-drived cache prefetching, "
|
||||
"both in the build of the binary being profiled, as well as in "
|
||||
"the build of the binary consuming the profile."),
|
||||
cl::Hidden);
|
||||
|
||||
namespace {
|
||||
|
||||
using Location = std::pair<StringRef, unsigned>;
|
||||
@ -66,6 +74,9 @@ char X86DiscriminateMemOps::ID = 0;
|
||||
X86DiscriminateMemOps::X86DiscriminateMemOps() : MachineFunctionPass(ID) {}
|
||||
|
||||
bool X86DiscriminateMemOps::runOnMachineFunction(MachineFunction &MF) {
|
||||
if (!EnableDiscriminateMemops)
|
||||
return false;
|
||||
|
||||
DISubprogram *FDI = MF.getFunction().getSubprogram();
|
||||
if (!FDI || !FDI->getUnit()->getDebugInfoForProfiling())
|
||||
return false;
|
||||
|
@ -33,7 +33,8 @@ using namespace sampleprof;
|
||||
|
||||
static cl::opt<std::string>
|
||||
PrefetchHintsFile("prefetch-hints-file",
|
||||
cl::desc("Path to the prefetch hints profile."),
|
||||
cl::desc("Path to the prefetch hints profile. See also "
|
||||
"-x86-discriminate-memops"),
|
||||
cl::Hidden);
|
||||
namespace {
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s | FileCheck %s
|
||||
; RUN: llc -x86-discriminate-memops < %s | FileCheck %s
|
||||
;
|
||||
; original source, compiled with -O3 -gmlt -fdebug-info-for-profiling:
|
||||
; int sum(int* arr, int pos1, int pos2) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s -prefetch-hints-file=%S/insert-prefetch-inline.afdo | FileCheck %s
|
||||
; RUN: llc < %s -x86-discriminate-memops -prefetch-hints-file=%S/insert-prefetch-inline.afdo | FileCheck %s
|
||||
;
|
||||
; Verify we can insert prefetch instructions in code belonging to inlined
|
||||
; functions.
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s -prefetch-hints-file=%S/insert-prefetch-invalid-instr.afdo | FileCheck %s
|
||||
; RUN: llc < %s -x86-discriminate-memops -prefetch-hints-file=%S/insert-prefetch-invalid-instr.afdo | FileCheck %s
|
||||
; ModuleID = 'prefetch.cc'
|
||||
source_filename = "prefetch.cc"
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc < %s -prefetch-hints-file=%S/insert-prefetch.afdo | FileCheck %s
|
||||
; RUN: llc < %s -prefetch-hints-file=%S/insert-prefetch-other.afdo | FileCheck %s -check-prefix=OTHERS
|
||||
; RUN: llc < %s -x86-discriminate-memops -prefetch-hints-file=%S/insert-prefetch.afdo | FileCheck %s
|
||||
; RUN: llc < %s -x86-discriminate-memops -prefetch-hints-file=%S/insert-prefetch-other.afdo | FileCheck %s -check-prefix=OTHERS
|
||||
;
|
||||
; original source, compiled with -O3 -gmlt -fdebug-info-for-profiling:
|
||||
; int sum(int* arr, int pos1, int pos2) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user