Subzero: Improve usability of liveness-related tools.
1. Rename all identifiers containing "nonkillable" to use the more understandable "redefined".
2. Change inferTwoAddress() to be called inferRedefinition(), and to check *all* instruction source variables (instead of just the first source operand) against the Dest variable. This eliminates the need for several instances of _set_dest_redefined(). The performance impact on translation time is something like 0.1%, which is dwarfed by the usability gain.
3. Change a cryptic assert in (O2) live range construction to print detailed information on the liveness errors.
4. Change a cryptic assert in (Om1) live range construction to do the same.
BUG= none
R=jpp@chromium.org
Review URL: https://codereview.chromium.org/1368993004 .
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h
index 7f3eaa7..0095a39 100644
--- a/src/IceTargetLowering.h
+++ b/src/IceTargetLowering.h
@@ -287,9 +287,10 @@
/// before returning.
virtual void postLower() {}
- /// Find two-address non-SSA instructions and set the DestNonKillable flag to
- /// keep liveness analysis consistent.
- void inferTwoAddress();
+ /// Find (non-SSA) instructions where the Dest variable appears in some source
+ /// operand, and set the IsDestRedefined flag. This keeps liveness analysis
+ /// consistent.
+ void markRedefinitions();
/// Make a pass over the Cfg to determine which variables need stack slots and
/// place them in a sorted list (SortedSpilledVariables). Among those, vars,
@@ -348,9 +349,7 @@
Context.insert(InstBundleLock::create(Func, BundleOption));
}
void _bundle_unlock() { Context.insert(InstBundleUnlock::create(Func)); }
- void _set_dest_nonkillable() {
- Context.getLastInserted()->setDestNonKillable();
- }
+ void _set_dest_redefined() { Context.getLastInserted()->setDestRedefined(); }
bool shouldOptimizeMemIntrins();