1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=dse -S %s | FileCheck %s 3 4define void @memset_equal_size_values(ptr %ptr, i64 %len) { 5; CHECK-LABEL: @memset_equal_size_values( 6; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 7; CHECK-NEXT: ret void 8; 9 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 10 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 11 ret void 12} 13 14define void @memset_different_size_values_1(ptr %ptr, i64 %len.1, i64 %len.2) { 15; CHECK-LABEL: @memset_different_size_values_1( 16; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 17; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN_2:%.*]], i1 false) 18; CHECK-NEXT: ret void 19; 20 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len.1, i1 false) 21 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len.2, i1 false) 22 ret void 23} 24 25define void @memset_different_size_values_2(ptr %ptr, i64 %len) { 26; CHECK-LABEL: @memset_different_size_values_2( 27; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 28; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR]], i8 0, i64 100, i1 false) 29; CHECK-NEXT: ret void 30; 31 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 32 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 100, i1 false) 33 ret void 34} 35 36define void @memset_different_size_values_3(ptr %ptr, i64 %len) { 37; CHECK-LABEL: @memset_different_size_values_3( 38; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 100, i1 false) 39; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) 40; CHECK-NEXT: ret void 41; 42 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 100, i1 false) 43 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 44 ret void 45} 46 47define void @memset_and_store_1(ptr %ptr, i64 %len) { 48; CHECK-LABEL: @memset_and_store_1( 49; CHECK-NEXT: store i64 123, ptr [[PTR:%.*]], align 4 50; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) 51; CHECK-NEXT: ret void 52; 53 store i64 123, ptr %ptr 54 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 55 ret void 56} 57 58define void @memset_and_store_2(ptr %ptr, i64 %len) { 59; CHECK-LABEL: @memset_and_store_2( 60; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 61; CHECK-NEXT: store i64 123, ptr [[PTR]], align 4 62; CHECK-NEXT: ret void 63; 64 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 65 store i64 123, ptr %ptr 66 ret void 67} 68 69define void @memset_pattern_equal_size_values(ptr %ptr, i64 %len) { 70; CHECK-LABEL: @memset_pattern_equal_size_values( 71; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 72; CHECK-NEXT: ret void 73; 74 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 75 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 76 ret void 77} 78 79define void @memset_pattern_different_size_values_1(ptr %ptr, i64 %len.1, i64 %len.2) { 80; CHECK-LABEL: @memset_pattern_different_size_values_1( 81; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 82; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN_2:%.*]], i1 false) 83; CHECK-NEXT: ret void 84; 85 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len.1, i1 false) 86 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len.2, i1 false) 87 ret void 88} 89 90define void @memset_pattern_different_size_values_2(ptr %ptr, i64 %len) { 91; CHECK-LABEL: @memset_pattern_different_size_values_2( 92; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 93; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 100, i1 false) 94; CHECK-NEXT: ret void 95; 96 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 97 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 100, i1 false) 98 ret void 99} 100 101define void @memset_pattern_different_size_values_3(ptr %ptr, i64 %len) { 102; CHECK-LABEL: @memset_pattern_different_size_values_3( 103; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 100, i1 false) 104; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) 105; CHECK-NEXT: ret void 106; 107 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 100, i1 false) 108 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 109 ret void 110} 111 112define void @memset_pattern_and_store_1(ptr %ptr, i64 %len) { 113; CHECK-LABEL: @memset_pattern_and_store_1( 114; CHECK-NEXT: store i64 123, ptr [[PTR:%.*]], align 4 115; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) 116; CHECK-NEXT: ret void 117; 118 store i64 123, ptr %ptr 119 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 120 ret void 121} 122 123define void @memset_pattern_and_store_2(ptr %ptr, i64 %len) { 124; CHECK-LABEL: @memset_pattern_and_store_2( 125; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 126; CHECK-NEXT: store i64 123, ptr [[PTR]], align 4 127; CHECK-NEXT: ret void 128; 129 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false) 130 store i64 123, ptr %ptr 131 ret void 132} 133 134define void @memset_pattern_and_store_3(ptr %ptr) { 135; CHECK-LABEL: @memset_pattern_and_store_3( 136; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 13, i1 false) 137; CHECK-NEXT: ret void 138; 139 store i64 0, ptr %ptr 140 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 13, i1 false) 141 ret void 142} 143 144define void @memcpy_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 145; CHECK-LABEL: @memcpy_equal_size_values( 146; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 147; CHECK-NEXT: ret void 148; 149 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 150 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 151 ret void 152} 153 154define void @memcpy_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 155; CHECK-LABEL: @memcpy_different_size_values_1( 156; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 157; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 [[LEN_2:%.*]], i1 false) 158; CHECK-NEXT: ret void 159; 160 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 161 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.2, i1 false) 162 ret void 163} 164 165define void @memcpy_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len) { 166; CHECK-LABEL: @memcpy_different_size_values_2( 167; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 168; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 100, i1 false) 169; CHECK-NEXT: ret void 170; 171 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 172 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 173 ret void 174} 175 176define void @memcpy_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len) { 177; CHECK-LABEL: @memcpy_different_size_values_3( 178; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 100, i1 false) 179; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 [[LEN:%.*]], i1 false) 180; CHECK-NEXT: ret void 181; 182 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 183 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 184 ret void 185} 186 187define void @memset_and_memcpy_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 188; CHECK-LABEL: @memset_and_memcpy_equal_size_values( 189; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 190; CHECK-NEXT: ret void 191; 192 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len, i1 false) 193 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 194 ret void 195} 196 197define void @memset_and_memcpy_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 198; CHECK-LABEL: @memset_and_memcpy_different_size_values_1( 199; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 200; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 [[LEN_2:%.*]], i1 false) 201; CHECK-NEXT: ret void 202; 203 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 204 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.2, i1 false) 205 ret void 206} 207 208define void @memset_and_memcpy_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 209; CHECK-LABEL: @memset_and_memcpy_different_size_values_2( 210; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 211; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 100, i1 false) 212; CHECK-NEXT: ret void 213; 214 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 215 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 216 ret void 217} 218 219define void @memset_and_memcpy_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 220; CHECK-LABEL: @memset_and_memcpy_different_size_values_3( 221; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 100, i1 false) 222; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 223; CHECK-NEXT: ret void 224; 225 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 100, i1 false) 226 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 227 ret void 228} 229 230define void @memcpy_and_memset_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 231; CHECK-LABEL: @memcpy_and_memset_equal_size_values( 232; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 233; CHECK-NEXT: ret void 234; 235 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 236 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len, i1 false) 237 ret void 238} 239 240define void @memcpy_and_memset_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 241; CHECK-LABEL: @memcpy_and_memset_different_size_values_1( 242; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 243; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 [[LEN_2:%.*]], i1 false) 244; CHECK-NEXT: ret void 245; 246 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 247 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.2, i1 false) 248 ret void 249} 250 251define void @memcpy_and_memset_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 252; CHECK-LABEL: @memcpy_and_memset_different_size_values_2( 253; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 254; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 100, i1 false) 255; CHECK-NEXT: ret void 256; 257 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 258 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 100, i1 false) 259 ret void 260} 261 262define void @memcpy_and_memset_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 263; CHECK-LABEL: @memcpy_and_memset_different_size_values_3( 264; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 100, i1 false) 265; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 [[LEN_1:%.*]], i1 false) 266; CHECK-NEXT: ret void 267; 268 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 269 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 270 ret void 271} 272 273define void @memmove_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 274; CHECK-LABEL: @memmove_equal_size_values( 275; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 276; CHECK-NEXT: ret void 277; 278 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 279 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 280 ret void 281} 282 283define void @memmove_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 284; CHECK-LABEL: @memmove_different_size_values_1( 285; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 286; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 [[LEN_2:%.*]], i1 false) 287; CHECK-NEXT: ret void 288; 289 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 290 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.2, i1 false) 291 ret void 292} 293 294define void @memmove_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len) { 295; CHECK-LABEL: @memmove_different_size_values_2( 296; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 297; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 100, i1 false) 298; CHECK-NEXT: ret void 299; 300 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 301 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 302 ret void 303} 304 305define void @memmove_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len) { 306; CHECK-LABEL: @memmove_different_size_values_3( 307; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 100, i1 false) 308; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 [[LEN:%.*]], i1 false) 309; CHECK-NEXT: ret void 310; 311 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 312 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 313 ret void 314} 315 316define void @memset_and_memmove_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 317; CHECK-LABEL: @memset_and_memmove_equal_size_values( 318; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 319; CHECK-NEXT: ret void 320; 321 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len, i1 false) 322 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 323 ret void 324} 325 326define void @memset_and_memmove_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 327; CHECK-LABEL: @memset_and_memmove_different_size_values_1( 328; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 329; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 [[LEN_2:%.*]], i1 false) 330; CHECK-NEXT: ret void 331; 332 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 333 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.2, i1 false) 334 ret void 335} 336 337define void @memset_and_memmove_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 338; CHECK-LABEL: @memset_and_memmove_different_size_values_2( 339; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false) 340; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 100, i1 false) 341; CHECK-NEXT: ret void 342; 343 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 344 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 345 ret void 346} 347 348define void @memset_and_memmove_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 349; CHECK-LABEL: @memset_and_memmove_different_size_values_3( 350; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 100, i1 false) 351; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 352; CHECK-NEXT: ret void 353; 354 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 100, i1 false) 355 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 356 ret void 357} 358 359define void @memmove_and_memset_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 360; CHECK-LABEL: @memmove_and_memset_equal_size_values( 361; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) 362; CHECK-NEXT: ret void 363; 364 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 365 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len, i1 false) 366 ret void 367} 368 369define void @memmove_and_memset_different_size_values_1(ptr noalias %src, ptr noalias %dst, i64 %len.1, i64 %len.2) { 370; CHECK-LABEL: @memmove_and_memset_different_size_values_1( 371; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 372; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 [[LEN_2:%.*]], i1 false) 373; CHECK-NEXT: ret void 374; 375 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 376 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.2, i1 false) 377 ret void 378} 379 380define void @memmove_and_memset_different_size_values_2(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 381; CHECK-LABEL: @memmove_and_memset_different_size_values_2( 382; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN_1:%.*]], i1 false) 383; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 100, i1 false) 384; CHECK-NEXT: ret void 385; 386 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len.1, i1 false) 387 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 100, i1 false) 388 ret void 389} 390 391define void @memmove_and_memset_different_size_values_3(ptr noalias %src, ptr noalias %dst, i64 %len.1) { 392; CHECK-LABEL: @memmove_and_memset_different_size_values_3( 393; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 100, i1 false) 394; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[DST]], i8 0, i64 [[LEN_1:%.*]], i1 false) 395; CHECK-NEXT: ret void 396; 397 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 100, i1 false) 398 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %len.1, i1 false) 399 ret void 400} 401 402define void @memmove_and_memcpy_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 403; CHECK-LABEL: @memmove_and_memcpy_equal_size_values( 404; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 405; CHECK-NEXT: ret void 406; 407 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 408 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 409 ret void 410} 411 412define void @memcpy_and_memmove_equal_size_values(ptr noalias %src, ptr noalias %dst, i64 %len) { 413; CHECK-LABEL: @memcpy_and_memmove_equal_size_values( 414; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) 415; CHECK-NEXT: ret void 416; 417 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 418 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 false) 419 ret void 420} 421 422declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) 423declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) 424declare void @llvm.memmove.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) 425