425 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=dse -S %s | FileCheck %s3 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 void8;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 void12}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 void19;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 void23}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 void30;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 void34}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 void41;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 void45}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 450; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false)51; CHECK-NEXT: ret void52;53 store i64 123, ptr %ptr54 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false)55 ret void56}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 462; CHECK-NEXT: ret void63;64 call void @llvm.memset.p0.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false)65 store i64 123, ptr %ptr66 ret void67}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 void73;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 void77}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 void84;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 void88}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 void95;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 void99}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 void106;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 void110}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 4115; 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 void117;118 store i64 123, ptr %ptr119 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 %len, i1 false)120 ret void121}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 4127; CHECK-NEXT: ret void128;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 %ptr131 ret void132}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 void138;139 store i64 0, ptr %ptr140 call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 %ptr, i8 0, i64 13, i1 false)141 ret void142}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 void148;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 void152}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 void159;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 void163}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 void170;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 void174}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 void181;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 void185}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 void191;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 void195}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 void202;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 void206}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 void213;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 void217}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 void224;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 void228}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 void234;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 void238}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 void245;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 void249}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 void256;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 void260}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 void267;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 void271}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 void277;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 void281}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 void288;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 void292}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 void299;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 void303}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 void310;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 void314}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 void320;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 void324}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 void331;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 void335}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 void342;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 void346}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 void353;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 void357}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 void363;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 void367}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 void374;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 void378}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 void385;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 void389}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 void396;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 void400}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 void406;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 void410}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 void416;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 void420}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