Skip to content

Don't include NI tags when verifying external module data layouts.#60720

Merged
maleadt merged 1 commit intomasterfrom
tb/extenal_module_dl
Jan 17, 2026
Merged

Don't include NI tags when verifying external module data layouts.#60720
maleadt merged 1 commit intomasterfrom
tb/extenal_module_dl

Conversation

@maleadt
Copy link
Copy Markdown
Member

@maleadt maleadt commented Jan 16, 2026

We're currently excepting callers of addExternalModule to provide modules with a DL that contains NI tags:

ERROR: LoadError: LLVM error: Added modules have incompatible data layouts: e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32 (module) vs e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32-ni:10:11:12:13 (jit)

Doing so is invalid and asserts later during compilation:

Assertion failed: (Target.isCompatibleDataLayout(getDataLayout()) && "Can't create a MachineFunction using a Module with a " "Target-incompatible DataLayout attached\n"), function init, file /workspace/srcdir/llvm-project/llvm/lib/CodeGen/MachineFunction.cpp, line 248.

The NI tags are stripped during optimization, and modules passed to addExternalModule are expected to be optimized as they are passed straight to the JIT (as opposed to addModule), so we should make sure to use the correct data layout.

These are supposed to be stripped by optimization.
@maleadt maleadt added compiler:codegen Generation of LLVM IR and native code backport 1.13 Change should be backported to release-1.13 labels Jan 16, 2026
@maleadt maleadt requested a review from gbaraldi January 16, 2026 15:19
@gbaraldi
Copy link
Copy Markdown
Member

Does this need 1.12 port as well?

@maleadt
Copy link
Copy Markdown
Member Author

maleadt commented Jan 17, 2026

Does this need 1.12 port as well?

No, this doesn't happen on 1.12, neither does the subsequent assertion failure. I think this is related to how DL representation and comparison changed in llvm/llvm-project#105735.

@maleadt maleadt merged commit 3a884a7 into master Jan 17, 2026
11 checks passed
@maleadt maleadt deleted the tb/extenal_module_dl branch January 17, 2026 19:03
KristofferC pushed a commit that referenced this pull request Jan 26, 2026
…60720)

We're currently excepting callers of `addExternalModule` to provide
modules with a DL that contains NI tags:

```
ERROR: LoadError: LLVM error: Added modules have incompatible data layouts: e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32 (module) vs e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32-ni:10:11:12:13 (jit)
```

Doing so is invalid and asserts later during compilation:

```
Assertion failed: (Target.isCompatibleDataLayout(getDataLayout()) && "Can't create a MachineFunction using a Module with a " "Target-incompatible DataLayout attached\n"), function init, file /workspace/srcdir/llvm-project/llvm/lib/CodeGen/MachineFunction.cpp, line 248.
```

The NI tags are stripped during optimization, and modules passed to
`addExternalModule` are expected to be optimized as they are passed
straight to the JIT (as opposed to `addModule`), so we should make sure
to use the correct data layout.

(cherry picked from commit 3a884a7)
@KristofferC KristofferC mentioned this pull request Jan 26, 2026
43 tasks
@KristofferC KristofferC removed the backport 1.13 Change should be backported to release-1.13 label Feb 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

compiler:codegen Generation of LLVM IR and native code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants