xref: /llvm-project/llvm/test/Transforms/MemCpyOpt/aggregate-type-crash.ll (revision a11faeed446882a81e79d780125d93e7199df645)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=memcpyopt -S -o - < %s -verify-memoryssa | FileCheck %s
3
4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
5target triple = "x86_64-apple-macosx10.14.0"
6
7%my_struct = type { i8, i32 }
8
9; Function Attrs: inaccessiblemem_or_argmemonly
10declare noalias ptr @my_malloc(ptr) #0
11
12define void @my_func(ptr %0) {
13; CHECK-LABEL: @my_func(
14; CHECK-NEXT:  entry:
15; CHECK-NEXT:    [[TMP1:%.*]] = load [[MY_STRUCT:%.*]], ptr [[TMP0:%.*]], align 4
16; CHECK-NEXT:    [[TMP2:%.*]] = call ptr @my_malloc(ptr [[TMP0]])
17; CHECK-NEXT:    store [[MY_STRUCT]] [[TMP1]], ptr [[TMP2]], align 4
18; CHECK-NEXT:    ret void
19;
20entry:
21  %1 = load %my_struct, ptr %0
22  %2 = call ptr @my_malloc(ptr %0)
23  store %my_struct %1, ptr %2
24  ret void
25}
26
27attributes #0 = { inaccessiblemem_or_argmemonly }
28
29!llvm.module.flags = !{!0, !1, !2}
30!llvm.ident = !{!3}
31
32!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 10, i32 14]}
33!1 = !{i32 1, !"wchar_size", i32 4}
34!2 = !{i32 7, !"PIC Level", i32 2}
35!3 = !{!"Apple LLVM version 10.0.1 (clang-1001.0.46.4)"}
36