================
@@ -1444,15 +1444,16 @@ void clang::emitBackendOutput(CompilerInstance &CI,
CodeGenOptions &CGOpts,
// Verify clang's TargetInfo DataLayout against the LLVM TargetMachine's
// DataLayout.
- if (AsmHelper.TM) {
- std::string DLDesc = M->getDataLayout().getStringRepresentation();
- if (DLDesc != TDesc) {
+ if (AsmHelper.TM)
+ if (!AsmHelper.TM->isCompatibleDataLayout(M->getDataLayout()) ||
+ !AsmHelper.TM->isCompatibleDataLayout(DataLayout(TDesc))) {
+ std::string DLDesc = M->getDataLayout().getStringRepresentation();
----------------
AlexMaclean wrote:
I don't think it is a good idea to create a situation in which the datalayout
does not match the expected/actual AS of alloca instructions. One potential
issue with having an `A0` datalayout and addrspace 5 allocas could be that
various passes (including SDAG Legalization) could insert addrspace 0 allocas
based on the datalayout while our current lowering would expect them to be in
addrspace 5.
One way to avoid this kind of inconsistency is to update the datalayout in the
pass that updates the allocas (as you did originally). @efriedma-quic pointed
out that this is pretty weird and uncommon, but it didn't seem to create any
practical issues. Another option is to completely update everywhere to use A5.
This isn't totally new ground since this seems to be what AMDGPU does but it is
a really big change that I'm not sure what all the implications would be,
especially for out-of-tree uses. It seems like both options had pros/cons but I
would recommend that we choose either over a datalayout which doesn't match the
actual allocas.
https://github.com/llvm/llvm-project/pull/154814
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits