# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=aarch64-linux-gnu -run-pass=none -o - %s | FileCheck %s
--- |
  ; ModuleID = 'test/CodeGen/AArch64/memcpy-scoped-aa.ll'
  source_filename = "test/CodeGen/AArch64/memcpy-scoped-aa.ll"
  target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
  target triple = "aarch64-unknown-linux-gnu"

  define i32 @test_memcpy(i32* nocapture %p, i32* nocapture readonly %q) {
    %p0 = bitcast i32* %p to i8*
    %add.ptr = getelementptr inbounds i32, i32* %p, i64 4
    %p1 = bitcast i32* %add.ptr to i8*
    tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %p0, i8* noundef nonnull align 4 dereferenceable(16) %p1, i64 16, i1 false), !alias.scope !0, !noalias !3
    %v0 = load i32, i32* %q, align 4, !alias.scope !3, !noalias !0
    %q1 = getelementptr inbounds i32, i32* %q, i64 1
    %v1 = load i32, i32* %q1, align 4, !alias.scope !3, !noalias !0
    %add = add i32 %v0, %v1
    ret i32 %add
  }

  define i32 @test_memcpy_inline(i32* nocapture %p, i32* nocapture readonly %q) {
    %p0 = bitcast i32* %p to i8*
    %add.ptr = getelementptr inbounds i32, i32* %p, i64 4
    %p1 = bitcast i32* %add.ptr to i8*
    tail call void @llvm.memcpy.inline.p0i8.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %p0, i8* noundef nonnull align 4 dereferenceable(16) %p1, i64 16, i1 false), !alias.scope !0, !noalias !3
    %v0 = load i32, i32* %q, align 4, !alias.scope !3, !noalias !0
    %q1 = getelementptr inbounds i32, i32* %q, i64 1
    %v1 = load i32, i32* %q1, align 4, !alias.scope !3, !noalias !0
    %add = add i32 %v0, %v1
    ret i32 %add
  }

  define i32 @test_mempcpy(i32* nocapture %p, i32* nocapture readonly %q) {
    %p0 = bitcast i32* %p to i8*
    %add.ptr = getelementptr inbounds i32, i32* %p, i64 4
    %p1 = bitcast i32* %add.ptr to i8*
    %call = tail call i8* @mempcpy(i8* noundef nonnull align 4 dereferenceable(16) %p0, i8* noundef nonnull align 4 dereferenceable(16) %p1, i64 16), !alias.scope !0, !noalias !3
    %v0 = load i32, i32* %q, align 4, !alias.scope !3, !noalias !0
    %q1 = getelementptr inbounds i32, i32* %q, i64 1
    %v1 = load i32, i32* %q1, align 4, !alias.scope !3, !noalias !0
    %add = add i32 %v0, %v1
    ret i32 %add
  }

  ; Function Attrs: argmemonly nofree nounwind willreturn
  declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0

  ; Function Attrs: argmemonly nofree nounwind willreturn
  declare void @llvm.memcpy.inline.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64 immarg, i1 immarg) #0

  declare i8* @mempcpy(i8*, i8*, i64)

  attributes #0 = { argmemonly nofree nounwind willreturn }

  !0 = !{!1}
  !1 = distinct !{!1, !2, !"bax: %p"}
  !2 = distinct !{!2, !"bax"}
  !3 = !{!4}
  !4 = distinct !{!4, !2, !"bax: %q"}

...
---
name:            test_memcpy
machineMetadataNodes:
  - '!9 = distinct !{!9, !7, !"Dst"}'
  - '!10 = !{!1, !9}'
  - '!6 = distinct !{!6, !7, !"Src"}'
  - '!5 = !{!1, !6}'
  - '!11 = !{!4, !6}'
  - '!8 = !{!4, !9}'
  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'
body:             |
  bb.0 (%ir-block.0):
    liveins: $x0, $x1

    ; CHECK-LABEL: name: test_memcpy
    ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
    ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
    ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
    ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
    ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
    ; CHECK: $w0 = COPY [[ADDWrr]]
    ; CHECK: RET_ReallyLR implicit $w0
    %1:gpr64common = COPY $x1
    %0:gpr64common = COPY $x0
    %2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
    STRQui killed %2, %0, 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
    %3:gpr32 = LDRWui %1, 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    %4:gpr32 = LDRWui %1, 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    %5:gpr32 = ADDWrr killed %3, killed %4
    $w0 = COPY %5
    RET_ReallyLR implicit $w0

...
---
name:            test_memcpy_inline
machineMetadataNodes:
  - '!10 = !{!1, !9}'
  - '!5 = !{!1, !6}'
  - '!8 = !{!4, !9}'
  - '!9 = distinct !{!9, !7, !"Dst"}'
  - '!11 = !{!4, !6}'
  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'
  - '!6 = distinct !{!6, !7, !"Src"}'
body:             |
  bb.0 (%ir-block.0):
    liveins: $x0, $x1

    ; CHECK-LABEL: name: test_memcpy_inline
    ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
    ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
    ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
    ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
    ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
    ; CHECK: $w0 = COPY [[ADDWrr]]
    ; CHECK: RET_ReallyLR implicit $w0
    %1:gpr64common = COPY $x1
    %0:gpr64common = COPY $x0
    %2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
    STRQui killed %2, %0, 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
    %3:gpr32 = LDRWui %1, 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    %4:gpr32 = LDRWui %1, 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    %5:gpr32 = ADDWrr killed %3, killed %4
    $w0 = COPY %5
    RET_ReallyLR implicit $w0

...
---
name:            test_mempcpy
machineMetadataNodes:
  - '!9 = distinct !{!9, !7, !"Dst"}'
  - '!8 = !{!4, !9}'
  - '!5 = !{!1, !6}'
  - '!6 = distinct !{!6, !7, !"Src"}'
  - '!11 = !{!4, !6}'
  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'
  - '!10 = !{!1, !9}'
body:             |
  bb.0 (%ir-block.0):
    liveins: $x0, $x1

    ; CHECK-LABEL: name: test_mempcpy
    ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
    ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
    ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
    ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
    ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
    ; CHECK: $w0 = COPY [[ADDWrr]]
    ; CHECK: RET_ReallyLR implicit $w0
    %1:gpr64common = COPY $x1
    %0:gpr64common = COPY $x0
    %2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
    STRQui killed %2, %0, 0 :: (store (s128) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
    %3:gpr32 = LDRWui %1, 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
    %4:gpr32 = LDRWui %1, 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
    %5:gpr32 = ADDWrr killed %3, killed %4
    $w0 = COPY %5
    RET_ReallyLR implicit $w0

...
