@@ -89,5 +89,93 @@ define void @memcpy_different_size_values_3(i8* noalias %src, i8* noalias %dst,
89
89
ret void
90
90
}
91
91
92
+ define void @memset_and_memcpy_equal_size_values (i8* noalias %src , i8* noalias %dst , i64 %len ) {
93
+ ; CHECK-LABEL: @memset_and_memcpy_equal_size_values(
94
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 [[LEN:%.*]], i1 false)
95
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC:%.*]], i64 [[LEN]], i1 false)
96
+ ; CHECK-NEXT: ret void
97
+ ;
98
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len , i1 false )
99
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len , i1 false )
100
+ ret void
101
+ }
102
+
103
+ define void @memset_and_memcpy_different_size_values_1 (i8* noalias %src , i8* noalias %dst , i64 %len.1 , i64 %len.2 ) {
104
+ ; CHECK-LABEL: @memset_and_memcpy_different_size_values_1(
105
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false)
106
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC:%.*]], i64 [[LEN_2:%.*]], i1 false)
107
+ ; CHECK-NEXT: ret void
108
+ ;
109
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len.1 , i1 false )
110
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len.2 , i1 false )
111
+ ret void
112
+ }
113
+
114
+ define void @memset_and_memcpy_different_size_values_2 (i8* noalias %src , i8* noalias %dst , i64 %len.1 ) {
115
+ ; CHECK-LABEL: @memset_and_memcpy_different_size_values_2(
116
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false)
117
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC:%.*]], i64 100, i1 false)
118
+ ; CHECK-NEXT: ret void
119
+ ;
120
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len.1 , i1 false )
121
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 100 , i1 false )
122
+ ret void
123
+ }
124
+
125
+ define void @memset_and_memcpy_different_size_values_3 (i8* noalias %src , i8* noalias %dst , i64 %len.1 ) {
126
+ ; CHECK-LABEL: @memset_and_memcpy_different_size_values_3(
127
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 100, i1 false)
128
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false)
129
+ ; CHECK-NEXT: ret void
130
+ ;
131
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 100 , i1 false )
132
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len.1 , i1 false )
133
+ ret void
134
+ }
135
+
136
+ define void @memcpy_and_memset_equal_size_values (i8* noalias %src , i8* noalias %dst , i64 %len ) {
137
+ ; CHECK-LABEL: @memcpy_and_memset_equal_size_values(
138
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN:%.*]], i1 false)
139
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST]], i8 0, i64 [[LEN]], i1 false)
140
+ ; CHECK-NEXT: ret void
141
+ ;
142
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len , i1 false )
143
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len , i1 false )
144
+ ret void
145
+ }
146
+
147
+ define void @memcpy_and_memset_different_size_values_1 (i8* noalias %src , i8* noalias %dst , i64 %len.1 , i64 %len.2 ) {
148
+ ; CHECK-LABEL: @memcpy_and_memset_different_size_values_1(
149
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false)
150
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST]], i8 0, i64 [[LEN_2:%.*]], i1 false)
151
+ ; CHECK-NEXT: ret void
152
+ ;
153
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len.1 , i1 false )
154
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len.2 , i1 false )
155
+ ret void
156
+ }
157
+
158
+ define void @memcpy_and_memset_different_size_values_2 (i8* noalias %src , i8* noalias %dst , i64 %len.1 ) {
159
+ ; CHECK-LABEL: @memcpy_and_memset_different_size_values_2(
160
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false)
161
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST]], i8 0, i64 100, i1 false)
162
+ ; CHECK-NEXT: ret void
163
+ ;
164
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 %len.1 , i1 false )
165
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 100 , i1 false )
166
+ ret void
167
+ }
168
+
169
+ define void @memcpy_and_memset_different_size_values_3 (i8* noalias %src , i8* noalias %dst , i64 %len.1 ) {
170
+ ; CHECK-LABEL: @memcpy_and_memset_different_size_values_3(
171
+ ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 100, i1 false)
172
+ ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST]], i8 0, i64 [[LEN_1:%.*]], i1 false)
173
+ ; CHECK-NEXT: ret void
174
+ ;
175
+ call void @llvm.memcpy.p0i8.p0i8.i64 (i8* %dst , i8* %src , i64 100 , i1 false )
176
+ call void @llvm.memset.p0i8.i64 (i8* align 1 %dst , i8 0 , i64 %len.1 , i1 false )
177
+ ret void
178
+ }
179
+
92
180
declare void @llvm.memset.p0i8.i64 (i8* nocapture writeonly , i8 , i64 , i1 immarg)
93
181
declare void @llvm.memcpy.p0i8.p0i8.i64 (i8* nocapture , i8* nocapture , i64 , i1 )
0 commit comments