Subzero: Add "--verbose=status" option.
This just prints the function being translated, once per function. This is useful if there is a crash or fatal error somewhere, and you want to quickly discover which function to set -verbose-focus on.
Also, fixes some warnings/errors in the MINIMAL build.
BUG= none
R=kschimpf@google.com
Review URL: https://codereview.chromium.org/1439983002 .
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
index 3211c30..9bc1ba5 100644
--- a/src/IceCfg.cpp
+++ b/src/IceCfg.cpp
@@ -181,6 +181,8 @@
FunctionTimer.reset(new TimerMarker(
getContext()->getTimerID(GlobalContext::TSK_Funcs, Name),
getContext(), GlobalContext::TSK_Funcs));
+ if (isVerbose(IceV_Status))
+ getContext()->getStrDump() << ">>>Translating " << Name << "\n";
}
TimerMarker T(TimerStack::TT_translate, this);
diff --git a/src/IceCfg.h b/src/IceCfg.h
index 92a1680..b39673b 100644
--- a/src/IceCfg.h
+++ b/src/IceCfg.h
@@ -50,10 +50,15 @@
GlobalContext *getContext() const { return Ctx; }
uint32_t getSequenceNumber() const { return SequenceNumber; }
+ static constexpr VerboseMask defaultVerboseMask() {
+ return IceV_All & ~IceV_Status;
+ }
/// Returns true if any of the specified options in the verbose mask are set.
/// If the argument is omitted, it checks if any verbose options at all are
/// set.
- bool isVerbose(VerboseMask Mask = IceV_All) const { return VMask & Mask; }
+ bool isVerbose(VerboseMask Mask = defaultVerboseMask()) const {
+ return VMask & Mask;
+ }
void setVerbose(VerboseMask Mask) { VMask = Mask; }
/// \name Manage the name and return type of the function being translated.
diff --git a/src/IceClFlags.cpp b/src/IceClFlags.cpp
index 1e194a1..fedd422 100644
--- a/src/IceClFlags.cpp
+++ b/src/IceClFlags.cpp
@@ -269,6 +269,8 @@
clEnumValN(Ice::IceV_Folding, "fold", "Instruction folding details"),
clEnumValN(Ice::IceV_RMW, "rmw", "ReadModifyWrite optimization"),
clEnumValN(Ice::IceV_Loop, "loop", "Loop nest depth analysis"),
+ clEnumValN(Ice::IceV_Status, "status",
+ "Print the name of the function being translated"),
clEnumValN(Ice::IceV_All, "all", "Use all verbose options"),
clEnumValN(Ice::IceV_Most, "most",
"Use all verbose options except 'regalloc'"),
diff --git a/src/IceDefs.h b/src/IceDefs.h
index d73f9e7..6fd73f5 100644
--- a/src/IceDefs.h
+++ b/src/IceDefs.h
@@ -239,6 +239,7 @@
IceV_Folding = 1 << 11,
IceV_RMW = 1 << 12,
IceV_Loop = 1 << 13,
+ IceV_Status = 1 << 14,
IceV_All = ~IceV_None,
IceV_Most = IceV_All & ~IceV_LinearScan
};
diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
index cac253b..fbdcd1b 100644
--- a/src/IceGlobalContext.cpp
+++ b/src/IceGlobalContext.cpp
@@ -379,8 +379,9 @@
void GlobalContext::lowerGlobals(const IceString &SectionSuffix) {
TimerMarker T(TimerStack::TT_emitGlobalInitializers, this);
- const bool DumpGlobalVariables = BuildDefs::dump() && Flags.getVerbose() &&
- Flags.getVerboseFocusOn().empty();
+ const bool DumpGlobalVariables =
+ BuildDefs::dump() && (Flags.getVerbose() & Cfg::defaultVerboseMask()) &&
+ Flags.getVerboseFocusOn().empty();
if (DumpGlobalVariables) {
OstreamLocker L(this);
Ostream &Stream = getStrDump();
diff --git a/src/IceInstX86BaseImpl.h b/src/IceInstX86BaseImpl.h
index 80a1f6b..2c3bfe2 100644
--- a/src/IceInstX86BaseImpl.h
+++ b/src/IceInstX86BaseImpl.h
@@ -1237,6 +1237,7 @@
if (!BuildDefs::dump())
return;
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1);
@@ -1246,6 +1247,7 @@
template <class Machine>
void InstX86Blendvps<Machine>::emitIAS(const Cfg *Func) const {
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1);
@@ -1260,6 +1262,7 @@
if (!BuildDefs::dump())
return;
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1);
@@ -1269,6 +1272,7 @@
template <class Machine>
void InstX86Pblendvb<Machine>::emitIAS(const Cfg *Func) const {
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1);
@@ -1376,6 +1380,7 @@
void InstX86Insertps<Machine>::emitIAS(const Cfg *Func) const {
assert(this->getSrcSize() == 3);
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1);
@@ -2308,6 +2313,7 @@
// point value between a vector and a scalar (which movss is used for). Clean
// this up.
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(Target->typeWidthInBytesOnStack(DestTy) ==
Target->typeWidthInBytesOnStack(SrcTy));
const Operand *NewSrc = Src;
@@ -2786,6 +2792,7 @@
assert(this->getSrcSize() == 2);
// pextrb and pextrd are SSE4.1 instructions.
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(this->getSrc(0)->getType() == IceType_v8i16 ||
this->getSrc(0)->getType() == IceType_v8i1 ||
static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
@@ -2815,6 +2822,7 @@
Type DispatchTy = InstX86Base<Machine>::Traits::getInVectorElementType(
this->getSrc(0)->getType());
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(DispatchTy == IceType_i16 ||
static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)
@@ -2846,6 +2854,7 @@
assert(this->getSrcSize() == 3);
// pinsrb and pinsrd are SSE4.1 instructions.
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(this->getDest()->getType() == IceType_v8i16 ||
this->getDest()->getType() == IceType_v8i1 ||
static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
@@ -2883,6 +2892,7 @@
const Operand *Src0 = this->getSrc(1);
Type DispatchTy = Src0->getType();
TargetLowering *Target = Func->getTarget();
+ (void)Target;
assert(DispatchTy == IceType_i16 ||
static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>(
Target)