Compiler projects using llvm
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -slp-vectorizer -S -pass-remarks-missed=slp-vectorizer 2>&1 | FileCheck %s

target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

; This test check that slp vectorizer is not trying to vectorize instructions already vectorized.

define void @vector() {
; CHECK-LABEL: @vector(
; CHECK-NEXT:    [[LOAD0:%.*]] = tail call <16 x i8> @vector.load(<16 x i8>* undef, i32 1)
; CHECK-NEXT:    [[LOAD1:%.*]] = tail call <16 x i8> @vector.load(<16 x i8>* undef, i32 2)
; CHECK-NEXT:    [[ADD:%.*]] = add <16 x i8> [[LOAD1]], [[LOAD0]]
; CHECK-NEXT:    tail call void @vector.store(<16 x i8> [[ADD]], <16 x i8>* undef, i32 1)
; CHECK-NEXT:    ret void
;
  %load0 = tail call <16 x i8> @vector.load(<16 x i8> *undef, i32 1)
  %load1 = tail call <16 x i8> @vector.load(<16 x i8> *undef, i32 2)
  %add = add <16 x i8> %load1, %load0
  tail call void @vector.store(<16 x i8> %add, <16 x i8>* undef, i32 1)
  ret void
}

declare <16 x i8> @vector.load(<16 x i8>*, i32)
declare void @vector.store(<16 x i8>, <16 x i8>*, i32)