Skip to content

EarlyCSE leaves around unused insertvalues when handling @llvm.aarch64.neon.st4.v8i8 #145183

@aeubanks

Description

@aeubanks
$ cat /tmp/a.ll
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "arm64-apple-macosx12.0.0"

define i32 @f() {
entry:
  br label %for.cond1

for.cond1:
  %vld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr null)
  %vld4.fca.1.extract = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %vld4, 1
  call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> zeroinitializer, <8 x i8> %vld4.fca.1.extract, <8 x i8> zeroinitializer, <8 x i8> zeroinitializer, ptr null)
  br label %for.cond1
}

declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr)

declare void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr captures(none))

$ opt -p early-cse /tmp/a.ll -S
...
define i32 @f() {
entry:
  br label %for.cond1

for.cond1:                                        ; preds = %for.cond1, %entry
  %vld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr null)
  %vld4.fca.1.extract = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %vld4, 1
  %0 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> zeroinitializer, <8 x i8> poison, <8 x i8> poison, <8 x i8> poison }, <8 x i8> %vld4.fca.1.extract, 1
  %1 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %0, <8 x i8> zeroinitializer, 2
  %2 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %1, <8 x i8> zeroinitializer, 3
  call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> zeroinitializer, <8 x i8> %vld4.fca.1.extract, <8 x i8> zeroinitializer, <8 x i8> zeroinitializer, ptr null)
  br label %for.cond1
}
...

$ opt -p early-cse /tmp/a.ll -S -verify-analysis-invalidation
LLVM ERROR: Function @f changed by EarlyCSEPass without invalidating analyses
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.

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