forked from OSchip/llvm-project
[TableGen][PGO] Disable profile instrumentation for printInstruction function
We are seeing extremely long time in building AMDGPUInstPrinter.cpp when profile instrumentation is enabled: It takes more than 5 minutes (compared to ~8 seconds in non-instrument build). This caused by the huge statements in printInstruction functions. In profile instrumentation build, we need have extra control flow to differentiate each case statement. This in turn adds significant compile time in block placement and branch folding. Function printInstruction is not likely to benefit from PGO build as it's rarely executed in a typical compilation. So here I disable the profile instrumentation for this function. Differential Revision: https://reviews.llvm.org/D111682
This commit is contained in:
parent
cb3aa49ec0
commit
21abe21280
|
@ -556,4 +556,13 @@ void AnnotateIgnoreWritesEnd(const char *file, int line);
|
|||
#define LLVM_ENABLE_EXCEPTIONS 1
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
|
||||
/// Disable the profile instrument for a function.
|
||||
#if __has_attribute(no_profile_instrument_function)
|
||||
#define LLVM_NO_PROFILE_INSTRUMENT_FUNCTION \
|
||||
__attribute__((no_profile_instrument_function))
|
||||
#else
|
||||
#define LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -457,9 +457,14 @@ void AsmWriterEmitter::EmitPrintInstruction(
|
|||
StringRef ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
|
||||
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
|
||||
|
||||
// This function has some huge switch statements that causing excessive
|
||||
// compile time in LLVM profile instrumenation build. This print function
|
||||
// usually is not frequently called in compilation. Here we disable the
|
||||
// profile instrumenation for this function.
|
||||
O << "/// printInstruction - This method is automatically generated by "
|
||||
"tablegen\n"
|
||||
"/// from the instruction set description.\n"
|
||||
"LLVM_NO_PROFILE_INSTRUMENT_FUNCTION\n"
|
||||
"void "
|
||||
<< Target.getName() << ClassName
|
||||
<< "::printInstruction(const MCInst *MI, uint64_t Address, "
|
||||
|
|
Loading…
Reference in New Issue