Skip to content

[MemCpyOpt] Call slot optimization doesn't respect writeonly #95152

Closed
@aeubanks

Description

@aeubanks
$ cat /tmp/a.ll
declare void @g(ptr)

define void @f(ptr dead_on_unwind noalias writable writeonly sret(i64) align 8 %0) {
  %a = alloca i64
  call void @g(ptr %a)
  call void @llvm.memcpy(ptr align 8 %0, ptr align 8 %a, i64 8, i1 false)
  ret void
}
$ opt -p memcpyopt -S /tmp/a.ll
declare void @g(ptr)

define void @f(ptr dead_on_unwind noalias writable writeonly sret(i64) align 8 %0) {
  %a = alloca i64, align 8
  call void @g(ptr %0)
  ret void
}

If @g is not writeonly in regards to the ptr param, we may end up reading from %0 in @g which is marked writeonly.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions