[PATCH] D72742: Don't assume promotable integers are zero/sign-extended already in x86-64 ABI.

Emilio Cobos Álvarez via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 15 13:19:27 PST 2020


emilio added a comment.

In D72742#1822554 <https://reviews.llvm.org/D72742#1822554>, @rnk wrote:

> + at chandlerc @rjmccall
>
> Didn't we work this out already when John added the alignment tracking stuff? I remember this bug involving libjpegturbo standalone assembly receiving a 32-bit argument, and then using the full 64-bit RDI register to read it, but clang stopped zero extending it. I thought the ABI doc was ambiguous at the time, and we studied GCC's behavior, and that is how we arrived at clang's current behavior. I am generally skeptical about changing behavior in this area just because the ABI doc says something now. It keeps changing. What did it say in the past? Shouldn't we pay more attention to that?
>
> Found the libjpegturbo thing:
>  https://github.com/libjpeg-turbo/libjpeg-turbo/commit/498d9bc92fcf39124b6f08e57326944dedd2ddd6


That seems somewhat related. This would be a similar change to the one that clang did back then, but for the bytes in the lower 32-bits when the argument is smaller than that.

The ABI document, afaict, has never defined the inputs to be zero-extended. See https://groups.google.com/forum/?hl=en#!topic/x86-64-abi/E8O33onbnGQ for an old thread discussing this, and the two bugs that are referenced in the commit message (one of them fairly old).

GCC does avoid the zero-extension on the caller sometimes, when not required by the language and when its optimizer finds it suitable.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72742/new/

https://reviews.llvm.org/D72742





More information about the llvm-commits mailing list