[clang] [llvm] [mlir] [IR] Replace alignment argument with attribute on masked intrinsics (PR #163802)

Benji Smith via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 21 18:58:30 PDT 2025


Benjins wrote:

I am seeing some downstream failures as of this PR when running with assertions enabled. It seems to be that during upgrade of old bitcode files, invalid alignments now trigger an assertion where they didn't before
We have a test case in [llvm-ir](https://github.com/cdisselkoen/llvm-ir) that has an old bitcode file, with this IR in it:
```llvm
define void @tests.masked.store(ptr %ptr, <2 x i1> %mask, <2 x double> %val) {
  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, ptr %ptr, i32 3, <2 x i1> %mask)
  ret void
}
```
which means the alignment of 3 trips the assertion here:
https://github.com/llvm/llvm-project/blob/90bc75043cef9de0dfb2667508595203208f65b0/llvm/include/llvm/Support/Alignment.h#L122-L124

Now, an alignment of 3 is obviously incorrect. I don't know the exact source of this bitcode file, but the IR was probably hand-built, I'm wondering if the assertion is expected, or it is meant to be otherwise handled in the upgrade path

fwiw, trying this on latest w/ assertions gives a normal diagnostic: `error: alignment is not a power of two`
```llvm
define void @tests.masked.store(ptr %ptr, <2 x i1> %mask, <2 x double> %val) {
  call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr align 3 %ptr, <2 x i1> %mask)
  ret void
}
```

And the specific bitcode file from our test is here. Running `llvm-dis` on it w/ assertions enabled throws the error
https://github.com/cdisselkoen/llvm-ir/blob/main/tests/llvm_bc/auto_upgrade_intrinsics.bc

https://github.com/llvm/llvm-project/pull/163802


More information about the llvm-commits mailing list