Now that we have sign/zero extensions, have people given thought to the elimination of these? There's a paper I downloaded a few years ago called "Effective Sign Extension Elimination" by M. Kawahito, H. Komatsu, and T. Nakatani.
I only have a dead tree copy of it, though. But I can share it as much as I can.
Sign extension elimination is most useful in the backend, when targeting processors like PowerPC that have a single register width (e.g. 32-bits). We already do quite a bit of sign extension removal in the dag combiner, but this is limited to a single basic block at a time. In the future, I'd like to extend the selectiondag to work on entire functions at a time, which would increase the scope of this optimization, but this isn't likely to happen in the near future.
C ABI requires function parameters and return value to be promoted to 32-bit. Perhaps we can eliminate these extensions at IPO time if both caller and callee agrees to break the ABI convention? This can have minor performance impact on targets with sub-registers (e.g. x86).
C ABI requires function parameters and return value to be promoted to
32-bit. Perhaps we can eliminate these extensions at IPO time if both
caller and callee agrees to break the ABI convention? This can have
minor performance impact on targets with sub-registers (e.g. x86).
Absolutely. The x86 backend can do this today to fastcc functions if it wanted.
Okay. That sounds like a good idea. Perhaps this paper/idea can be revisited when the SelectionDAG works on a function at a time. (From a cursory reading of it, and from what I remember, it's a global optimization.)