[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