@@ -35,17 +35,55 @@ define ptr @test2() {
35
35
ret ptr %tmp
36
36
}
37
37
38
+ define void @test3_multiple_fields (ptr nocapture %a , ptr nocapture %b ) {
39
+ ; CHECK-LABEL: @test3_multiple_fields(
40
+ ; CHECK-NEXT: entry:
41
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr [[B:%.*]], align 4
42
+ ; CHECK-NEXT: store i64 [[TMP0]], ptr [[A:%.*]], align 4
43
+ ; CHECK-NEXT: ret void
44
+ ;
45
+ entry:
46
+ tail call void @llvm.memcpy.p0.p0.i64 (ptr align 4 %a , ptr align 4 %b , i64 8 , i1 false ), !tbaa.struct !6
47
+ ret void
48
+ }
49
+
50
+ define void @test4_multiple_copy_first_field (ptr nocapture %a , ptr nocapture %b ) {
51
+ ; CHECK-LABEL: @test4_multiple_copy_first_field(
52
+ ; CHECK-NEXT: entry:
53
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[B:%.*]], align 4
54
+ ; CHECK-NEXT: store i32 [[TMP0]], ptr [[A:%.*]], align 4
55
+ ; CHECK-NEXT: ret void
56
+ ;
57
+ entry:
58
+ tail call void @llvm.memcpy.p0.p0.i64 (ptr align 4 %a , ptr align 4 %b , i64 4 , i1 false ), !tbaa.struct !6
59
+ ret void
60
+ }
61
+
62
+ define void @test5_multiple_copy_more_than_first_field (ptr nocapture %a , ptr nocapture %b ) {
63
+ ; CHECK-LABEL: @test5_multiple_copy_more_than_first_field(
64
+ ; CHECK-NEXT: entry:
65
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[B:%.*]], align 4
66
+ ; CHECK-NEXT: store i32 [[TMP0]], ptr [[A:%.*]], align 4
67
+ ; CHECK-NEXT: ret void
68
+ ;
69
+ entry:
70
+ tail call void @llvm.memcpy.p0.p0.i64 (ptr align 4 %a , ptr align 4 %b , i64 4 , i1 false ), !tbaa.struct !7
71
+ ret void
72
+ }
73
+
38
74
!0 = !{!"Simple C/C++ TBAA" }
39
75
!1 = !{!"omnipotent char" , !0 }
40
76
!2 = !{!5 , !5 , i64 0 }
41
77
!3 = !{i64 0 , i64 4 , !2 }
42
78
!4 = !{i64 0 , i64 8 , null }
43
79
!5 = !{!"float" , !0 }
80
+ !6 = !{i64 0 , i64 4 , !2 , i64 4 , i64 4 , !2 }
81
+ !7 = !{i64 0 , i64 2 , !2 , i64 4 , i64 6 , !2 }
44
82
45
83
;.
46
84
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
47
85
;.
48
- ; CHECK: [[TBAA0]] = !{!1, !1 , i64 0}
49
- ; CHECK: [[META1:![0-9]+]] = !{!"float", !2 }
50
- ; CHECK: [[META2:![0-9]+ ]] = !{!"Simple C/C++ TBAA"}
86
+ ; CHECK: [[TBAA0]] = !{[[META1:![0-9]+]], [[META1]] , i64 0}
87
+ ; CHECK: [[META1]] = !{!"float", [[META2:![0-9]+]] }
88
+ ; CHECK: [[META2]] = !{!"Simple C/C++ TBAA"}
51
89
;.
0 commit comments