mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[llvm] Address base discriminator overflow in X86DiscriminateMemOps
Summary: Macros are expanded on a single line. In case of large expansions, with sufficiently many instructions with memory operands (and when -fdebug-info-for-profiling is requested), we may be unable to generate new base discriminator values - new values overflow (base discriminators may not be larger than 2^12). This CL warns instead of asserting in such a case. A subsequent CL will add APIs to check for overflow before creating new debug info. See https://bugs.llvm.org/show_bug.cgi?id=39890 Reviewers: davidxl, wmi, gbedwell Reviewed By: davidxl Subscribers: aprantl, llvm-commits Differential Revision: https://reviews.llvm.org/D55643 llvm-svn: 349075
This commit is contained in:
parent
b88c3ef139
commit
8fb4b5dbb4
@ -24,6 +24,8 @@
|
|||||||
#include "llvm/Transforms/IPO/SampleProfile.h"
|
#include "llvm/Transforms/IPO/SampleProfile.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
|
#define DEBUG_TYPE "x86-discriminate-memops"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
using Location = std::pair<StringRef, unsigned>;
|
using Location = std::pair<StringRef, unsigned>;
|
||||||
@ -114,9 +116,18 @@ bool X86DiscriminateMemOps::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
Changed = true;
|
Changed = true;
|
||||||
const std::pair<DenseSet<unsigned>::iterator, bool> MustInsert =
|
const std::pair<DenseSet<unsigned>::iterator, bool> MustInsert =
|
||||||
Set.insert(DI->getBaseDiscriminator());
|
Set.insert(DI->getBaseDiscriminator());
|
||||||
(void)MustInsert; // silence warning.
|
// FIXME (mtrofin): check if the to-be inserted base discriminator can
|
||||||
assert(MustInsert.second &&
|
// be added. This requires a new API on DILocation.
|
||||||
"New discriminator shouldn't be present in set");
|
// The assumption is that this scenario is infrequent/OK not to support.
|
||||||
|
// If evidence points otherwise, we can explore synthesize unique DIs by
|
||||||
|
// adding fake line numbers.
|
||||||
|
if (!MustInsert.second) {
|
||||||
|
LLVM_DEBUG(dbgs()
|
||||||
|
<< "Unable to create a unique discriminator in "
|
||||||
|
<< DI->getFilename() << " Line: " << DI->getLine()
|
||||||
|
<< " Column: " << DI->getColumn()
|
||||||
|
<< ". This is likely due to a large macro expansion.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bump the reference DI to avoid cramming discriminators on line 0.
|
// Bump the reference DI to avoid cramming discriminators on line 0.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user