Working on a dependence test, I wrote some code that looked like this:<div><br><div><code style="color:rgb(0,96,0);font-size:13px;line-height:13px;text-align:left">  const SCEV *delta = ...;</code></div><div><code style="color:rgb(0,96,0);font-size:13px;line-height:13px;text-align:left">  bool deltaMaybeZero     = !SE->isKnownNonZero(delta);</code><br style="color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif;font-size:13px;line-height:13px;text-align:left">
<code style="color:rgb(0,96,0);font-size:13px;line-height:13px;text-align:left">  bool deltaMaybePositive = !SE->isKnownNonPositive(delta);</code><br style="color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif;font-size:13px;line-height:13px;text-align:left">
<code style="color:rgb(0,96,0);font-size:13px;line-height:13px;text-align:left">  bool deltaMaybeNegative = !SE->isKnownNonNegative(delta);</code><br style="color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif;font-size:13px;line-height:13px;text-align:left">
</div></div><div><code style="color:rgb(0,96,0);font-size:13px;line-height:13px;text-align:left"><br></code></div><div><code style="font-size:13px;line-height:13px;text-align:left"><font face="arial, helvetica, sans-serif">I'm really happy with the power of the SCEVs, letting me answer these questions, but I'm unhappy with how the code reads, namely the double negatives.</font></code></div>
<div><code style="font-size:13px;line-height:13px;text-align:left"><font face="arial, helvetica, sans-serif"><br></font></code></div><div><code style="font-size:13px;line-height:13px;text-align:left"><font face="arial, helvetica, sans-serif">Perhaps we might introduce a handful of new methods, things like</font></code></div>
<div><code style="font-size:13px;line-height:13px;text-align:left"><font face="arial, helvetica, sans-serif"><br></font></code></div><div><code style="line-height:13px;text-align:left"><div><font face="'courier new', monospace" color="#006600">  </font><font face="'courier new', monospace" color="#006600"><b>bool ScalarEvolution::isPerhapsZero(const SCEV *S) {</b></font></div>
<div><font face="'courier new', monospace" color="#006600"><b>    return !isKnownNonZero(S);</b></font></div><div><font face="'courier new', monospace" color="#006600"><b>  }</b></font></div><div style="font-size:13px;font-family:arial,helvetica,sans-serif">
<br></div><div style="font-size:13px;font-family:arial,helvetica,sans-serif">Seem useful?</div><div style="font-size:13px;font-family:arial,helvetica,sans-serif"><br></div><div style="font-size:13px;font-family:arial,helvetica,sans-serif">
Preston</div><div style="font-size:13px;font-family:arial,helvetica,sans-serif"><br></div></code></div>