Skip to content

[DirectX] Arrays of vectors remain in alloca and global variables after scalarization #140143

@Icohedron

Description

@Icohedron

Thanks to @pow2clk it came to my attention that there are alloca and global variables of arrays of vectors that remain after data scalarization, array flattening, and scalarization passes when compiling several DML shaders.

These allocas and global variables appear to be used by memcpy intrinsics.

Example:

@outputStrides = external addrspace(2) global [2 x <4 x i32>], align 16
...
define void @CSMain() local_unnamed_addr #2 {
  %1 = alloca [2 x <4 x i32>], align 16
  ...
  call void @llvm.memcpy.p0.p2.i32(ptr noundef nonnull align 16 dereferenceable(32) %1, ptr addrspace(2) noundef align 16 dereferenceable(32) @outputStrides, i32 32, i1 false)

Reproduction (thanks to @farzonl): https://godbolt.org/z/dWY9YbME1

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Active

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions