but (0:int + x) would not do the same thing? What is special about using SUB instead of ADD? On Oct 17, 2014, at 12:07 PM, Charles Forsyth > wrote: On 17 October 2014 18:48, Yoann Padioleau > wrote: Somehow? Would be nice to have a comment explaining this “somehow" then because it looks tricky. it's building a tree for (0:int-(0:int-x)) which later transformations will simplify to x, but having done "the usual arithmetic conversions" balancing and promoting 0s and x as required, if it's char/int/long/vlong.