[PATCH] D86310: [X86] Align i128 to 16 bytes in x86-64 datalayout

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 13 02:45:18 PDT 2023


nikic added a comment.

In D86310#4495825 <https://reviews.llvm.org/D86310#4495825>, @hvdijk wrote:

> A thought occurs: in older versions of LLVM, the data layout mechanism worked differently and permitted targets to declare that they supported multiple different data layout strings, by overriding `isCompatibleDataLayout`. This mechanism was removed in D67631 <https://reviews.llvm.org/D67631>. If we reinstate that, we can have the X86 target declare that it "supports" data layout strings with and without the `-i128:128`, where by "supports", I mean the code continues to not generally work in the same way it does not generally work now, but the specific limited cases that do work continue to work exactly the same ABI-incompatible way. This would have the same result of bug-for-bug compatibility with existing modules, but in what I suspect would be a significantly simpler way than by going through the module and adding explicit alignments everywhere. While I would still prefer to give up on that compatibility, if it is a hard requirement, and if this would be an alternative way of achieving it, I might possibly be able to update this patch to do just that. Would this be acceptable?

The main problem with that is that we can't have multiple data layouts for one module, so linking old and new bitcode together would fail. But maybe that's exactly what we want -- after all, it is incompatible. Even if we "correctly" upgraded to preserve behavior of the old bitcode, it would still be incompatible with the new bitcode if i128 crosses the ABI boundary (explicitly or implicitly).


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

https://reviews.llvm.org/D86310



More information about the llvm-commits mailing list