Skip to content
  • Xavier Leroy's avatar
    Improve strength reduction of unsigned comparisons x ==u 0, x !=u 0, etc (#59) · 16608ca8
    Xavier Leroy authored
    When x is known to be either 0 or 1, comparisons such as
    x == 0   x != 0    x == 1    x != 1
    can be optimized away.  This optimization was already performed
    for signed comparisons.  This commit extends the optimization to
    unsigned comparisons as well.
    
    Additionally, for PowerPC only, some unsigned (dis)equality comparisons are
    turned into signed comparisons when we know it makes no difference,
    i.e. when both arguments are guaranteed not to be pointers.  The
    reason is that Asmgen can produce shorter instruction sequences for
    some signed equality comparisons than for the corresponding unsigned
    comparisons.
    
    It's important to optimize unsigned integer comparisons because casts
    to the C99 type _Bool are compiled as x !=u 0 unsigned comparisons.
    In particular, cascades of casts to _Bool are now reduced to a single
    cast much more often than before.
    16608ca8