Improve basic block dumping from optimization passes.
Now done via a macro, which is cleaner. It's also now possible to specify a single function to watch, which is useful for debugging.
This commit is contained in:
163
opt.cpp
163
opt.cpp
@@ -100,6 +100,28 @@ static llvm::Pass *CreateMaskedLoadOptPass();
|
|||||||
static llvm::Pass *CreateIsCompileTimeConstantPass(bool isLastTry);
|
static llvm::Pass *CreateIsCompileTimeConstantPass(bool isLastTry);
|
||||||
static llvm::Pass *CreateMakeInternalFuncsStaticPass();
|
static llvm::Pass *CreateMakeInternalFuncsStaticPass();
|
||||||
|
|
||||||
|
#define DEBUG_START_PASS(NAME) \
|
||||||
|
if (g->debugPrint && \
|
||||||
|
(getenv("FUNC") == NULL || \
|
||||||
|
!strcmp(bb.getParent()->getName().str().c_str(), getenv("FUNC")))) { \
|
||||||
|
fprintf(stderr, "Start of " NAME "\n"); \
|
||||||
|
fprintf(stderr, "---------------\n"); \
|
||||||
|
bb.dump(); \
|
||||||
|
fprintf(stderr, "---------------\n\n"); \
|
||||||
|
} else /* eat semicolon */
|
||||||
|
|
||||||
|
#define DEBUG_END_PASS(NAME) \
|
||||||
|
if (g->debugPrint && \
|
||||||
|
(getenv("FUNC") == NULL || \
|
||||||
|
!strcmp(bb.getParent()->getName().str().c_str(), getenv("FUNC")))) { \
|
||||||
|
fprintf(stderr, "End of " NAME " %s\n", modifiedAny ? "** CHANGES **" : ""); \
|
||||||
|
fprintf(stderr, "---------------\n"); \
|
||||||
|
bb.dump(); \
|
||||||
|
fprintf(stderr, "---------------\n\n"); \
|
||||||
|
} else /* eat semicolon */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
@@ -703,12 +725,7 @@ lIsUndef(llvm::Value *value) {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("IntrinsicsOpt");
|
||||||
fprintf(stderr, "Start of IntrinsicsOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Function *avxMaskedLoad32 =
|
llvm::Function *avxMaskedLoad32 =
|
||||||
llvm::Intrinsic::getDeclaration(m->module, llvm::Intrinsic::x86_avx_maskload_ps_256);
|
llvm::Intrinsic::getDeclaration(m->module, llvm::Intrinsic::x86_avx_maskload_ps_256);
|
||||||
@@ -859,12 +876,7 @@ IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("IntrinsicsOpt");
|
||||||
fprintf(stderr, "End of IntrinsicsOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -921,12 +933,7 @@ char VSelMovmskOpt::ID = 0;
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
VSelMovmskOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
VSelMovmskOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("VSelMovmaskOpt");
|
||||||
fprintf(stderr, "Start of VSelMovmskOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool modifiedAny = false;
|
bool modifiedAny = false;
|
||||||
|
|
||||||
@@ -978,12 +985,7 @@ VSelMovmskOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("VSelMovMskOpt");
|
||||||
fprintf(stderr, "End of VSelMovMskOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -1718,12 +1720,7 @@ struct GSInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
DetectGSBaseOffsetsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
DetectGSBaseOffsetsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("DetectGSBaseOffsets");
|
||||||
fprintf(stderr, "Start of DetectGSBaseOffsets\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
GSInfo gsFuncs[] = {
|
GSInfo gsFuncs[] = {
|
||||||
GSInfo("__pseudo_gather32_8", "__pseudo_gather_base_offsets32_8",
|
GSInfo("__pseudo_gather32_8", "__pseudo_gather_base_offsets32_8",
|
||||||
@@ -1864,12 +1861,7 @@ DetectGSBaseOffsetsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("DetectGSBaseOffsets");
|
||||||
fprintf(stderr, "End of DetectGSBaseOffsets\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -1915,12 +1907,7 @@ struct MSInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
MaskedStoreOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
MaskedStoreOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("MaskedStoreOpt");
|
||||||
fprintf(stderr, "Start of MaskedStoreOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
MSInfo msInfo[] = {
|
MSInfo msInfo[] = {
|
||||||
MSInfo("__pseudo_masked_store_8", 1),
|
MSInfo("__pseudo_masked_store_8", 1),
|
||||||
@@ -1996,12 +1983,7 @@ MaskedStoreOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("MaskedStoreOpt");
|
||||||
fprintf(stderr, "End of MaskedStoreOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -2043,12 +2025,7 @@ struct MLInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
MaskedLoadOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
MaskedLoadOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("MaskedLoadOpt");
|
||||||
fprintf(stderr, "Start of MaskedLoadOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
MLInfo mlInfo[] = {
|
MLInfo mlInfo[] = {
|
||||||
MLInfo("__masked_load_8", 1),
|
MLInfo("__masked_load_8", 1),
|
||||||
@@ -2110,12 +2087,7 @@ MaskedLoadOptPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("MaskedLoadOpt");
|
||||||
fprintf(stderr, "End of MaskedLoadOpt\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -2204,12 +2176,7 @@ struct LMSInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
PseudoMaskedStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
PseudoMaskedStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("PseudoMaskedStorePass");
|
||||||
fprintf(stderr, "Start of PseudoMaskedStorePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
LMSInfo msInfo[] = {
|
LMSInfo msInfo[] = {
|
||||||
LMSInfo("__pseudo_masked_store_8", "__masked_store_blend_8",
|
LMSInfo("__pseudo_masked_store_8", "__masked_store_blend_8",
|
||||||
@@ -2263,12 +2230,7 @@ PseudoMaskedStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("PseudoMaskedStorePass");
|
||||||
fprintf(stderr, "End of PseudoMaskedStorePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -2355,12 +2317,7 @@ struct ScatterImpInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
GSToLoadStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
GSToLoadStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("GSToLoadStorePass");
|
||||||
fprintf(stderr, "Start of GSToLoadStorePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
GatherImpInfo gInfo[] = {
|
GatherImpInfo gInfo[] = {
|
||||||
GatherImpInfo("__pseudo_gather_base_offsets32_8", "__load_and_broadcast_8",
|
GatherImpInfo("__pseudo_gather_base_offsets32_8", "__load_and_broadcast_8",
|
||||||
@@ -2544,12 +2501,7 @@ GSToLoadStorePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("GSToLoadStorePass");
|
||||||
fprintf(stderr, "End of GSToLoadStorePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -3483,12 +3435,7 @@ lInstructionMayWriteToMemory(llvm::Instruction *inst) {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("GatherCoalescePass");
|
||||||
fprintf(stderr, "Start of GatherCoalescePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Function *gatherFuncs[] = {
|
llvm::Function *gatherFuncs[] = {
|
||||||
m->module->getFunction("__pseudo_gather_base_offsets32_32"),
|
m->module->getFunction("__pseudo_gather_base_offsets32_32"),
|
||||||
@@ -3624,12 +3571,7 @@ GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("GatherCoalescePass");
|
||||||
fprintf(stderr, "End of GatherCoalescePass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -3676,12 +3618,7 @@ struct LowerGSInfo {
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
PseudoGSToGSPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
PseudoGSToGSPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("PseudoGSToGSPass");
|
||||||
fprintf(stderr, "Start of PseudoGSToGSPass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
LowerGSInfo lgsInfo[] = {
|
LowerGSInfo lgsInfo[] = {
|
||||||
LowerGSInfo("__pseudo_gather_base_offsets32_8", "__gather_base_offsets32_i8", true),
|
LowerGSInfo("__pseudo_gather_base_offsets32_8", "__gather_base_offsets32_i8", true),
|
||||||
@@ -3766,12 +3703,7 @@ PseudoGSToGSPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("PseudoGSToGSPass");
|
||||||
fprintf(stderr, "End of PseudoGSToGSPass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
@@ -3814,14 +3746,10 @@ public:
|
|||||||
|
|
||||||
char IsCompileTimeConstantPass::ID = 0;
|
char IsCompileTimeConstantPass::ID = 0;
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||||
if (g->debugPrint) {
|
DEBUG_START_PASS("IsCompileTimeConstantPass");
|
||||||
fprintf(stderr, "Start of IsCompileTimeConstantPass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Function *funcs[] = {
|
llvm::Function *funcs[] = {
|
||||||
m->module->getFunction("__is_compile_time_constant_mask"),
|
m->module->getFunction("__is_compile_time_constant_mask"),
|
||||||
@@ -3880,12 +3808,7 @@ IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->debugPrint) {
|
DEBUG_END_PASS("IsCompileTimeConstantPass");
|
||||||
fprintf(stderr, "End of IsCompileTimeConstantPass\n");
|
|
||||||
fprintf(stderr, "---------------\n");
|
|
||||||
bb.dump();
|
|
||||||
fprintf(stderr, "---------------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return modifiedAny;
|
return modifiedAny;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user