1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 3; RUN: llc %s -o - -mtriple=aarch64 -O0 -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISel-WITHOUT-MOPS,GISel-WITHOUT-MOPS-O0 4; RUN: llc %s -o - -mtriple=aarch64 -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISel-WITHOUT-MOPS,GISel-WITHOUT-MOPS-O3 5; RUN: llc %s -o - -mtriple=aarch64 -O0 -global-isel=1 -global-isel-abort=1 -mattr=+mops | FileCheck %s --check-prefixes=GISel-MOPS,GISel-MOPS-O0 6; RUN: llc %s -o - -mtriple=aarch64 -global-isel=1 -global-isel-abort=1 -mattr=+mops | FileCheck %s --check-prefixes=GISel-MOPS,GISel-MOPS-O3 7; RUN: llc %s -o - -mtriple=aarch64 -O2 | FileCheck %s --check-prefix=SDAG-WITHOUT-MOPS-O2 8; RUN: llc %s -o - -mtriple=aarch64 -O2 -mattr=+mops | FileCheck %s --check-prefix=SDAG-MOPS-O2 9 10declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) 11 12declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) 13 14declare void @llvm.memcpy.inline.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) 15 16declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) 17 18define void @memset_0_zeroval(ptr %dst) { 19; GISel-WITHOUT-MOPS-LABEL: memset_0_zeroval: 20; GISel-WITHOUT-MOPS: // %bb.0: // %entry 21; GISel-WITHOUT-MOPS-NEXT: ret 22; 23; GISel-MOPS-LABEL: memset_0_zeroval: 24; GISel-MOPS: // %bb.0: // %entry 25; GISel-MOPS-NEXT: ret 26; 27; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_zeroval: 28; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 29; SDAG-WITHOUT-MOPS-O2-NEXT: ret 30; 31; SDAG-MOPS-O2-LABEL: memset_0_zeroval: 32; SDAG-MOPS-O2: // %bb.0: // %entry 33; SDAG-MOPS-O2-NEXT: ret 34entry: 35 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 false) 36 ret void 37} 38 39define void @memset_0_zeroval_volatile(ptr %dst) { 40; GISel-WITHOUT-MOPS-LABEL: memset_0_zeroval_volatile: 41; GISel-WITHOUT-MOPS: // %bb.0: // %entry 42; GISel-WITHOUT-MOPS-NEXT: ret 43; 44; GISel-MOPS-LABEL: memset_0_zeroval_volatile: 45; GISel-MOPS: // %bb.0: // %entry 46; GISel-MOPS-NEXT: ret 47; 48; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_zeroval_volatile: 49; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 50; SDAG-WITHOUT-MOPS-O2-NEXT: ret 51; 52; SDAG-MOPS-O2-LABEL: memset_0_zeroval_volatile: 53; SDAG-MOPS-O2: // %bb.0: // %entry 54; SDAG-MOPS-O2-NEXT: ret 55entry: 56 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 true) 57 ret void 58} 59 60define void @memset_10_zeroval(ptr %dst) { 61; GISel-WITHOUT-MOPS-LABEL: memset_10_zeroval: 62; GISel-WITHOUT-MOPS: // %bb.0: // %entry 63; GISel-WITHOUT-MOPS-NEXT: str xzr, [x0] 64; GISel-WITHOUT-MOPS-NEXT: strh wzr, [x0, #8] 65; GISel-WITHOUT-MOPS-NEXT: ret 66; 67; GISel-MOPS-LABEL: memset_10_zeroval: 68; GISel-MOPS: // %bb.0: // %entry 69; GISel-MOPS-NEXT: str xzr, [x0] 70; GISel-MOPS-NEXT: strh wzr, [x0, #8] 71; GISel-MOPS-NEXT: ret 72; 73; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_zeroval: 74; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 75; SDAG-WITHOUT-MOPS-O2-NEXT: strh wzr, [x0, #8] 76; SDAG-WITHOUT-MOPS-O2-NEXT: str xzr, [x0] 77; SDAG-WITHOUT-MOPS-O2-NEXT: ret 78; 79; SDAG-MOPS-O2-LABEL: memset_10_zeroval: 80; SDAG-MOPS-O2: // %bb.0: // %entry 81; SDAG-MOPS-O2-NEXT: strh wzr, [x0, #8] 82; SDAG-MOPS-O2-NEXT: str xzr, [x0] 83; SDAG-MOPS-O2-NEXT: ret 84entry: 85 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 false) 86 ret void 87} 88 89define void @memset_10_zeroval_volatile(ptr %dst) { 90; GISel-WITHOUT-MOPS-O0-LABEL: memset_10_zeroval_volatile: 91; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 92; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 93; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 94; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 95; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa 96; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 97; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr 98; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 99; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 100; GISel-WITHOUT-MOPS-O0-NEXT: ret 101; 102; GISel-WITHOUT-MOPS-O3-LABEL: memset_10_zeroval_volatile: 103; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 104; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 105; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 106; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 107; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr 108; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa 109; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 110; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 111; GISel-WITHOUT-MOPS-O3-NEXT: ret 112; 113; GISel-MOPS-O0-LABEL: memset_10_zeroval_volatile: 114; GISel-MOPS-O0: // %bb.0: // %entry 115; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa 116; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 117; GISel-MOPS-O0-NEXT: mov x9, xzr 118; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 119; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 120; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 121; GISel-MOPS-O0-NEXT: ret 122; 123; GISel-MOPS-O3-LABEL: memset_10_zeroval_volatile: 124; GISel-MOPS-O3: // %bb.0: // %entry 125; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa 126; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr 127; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr 128; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr 129; GISel-MOPS-O3-NEXT: ret 130; 131; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_zeroval_volatile: 132; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 133; SDAG-WITHOUT-MOPS-O2-NEXT: strh wzr, [x0, #8] 134; SDAG-WITHOUT-MOPS-O2-NEXT: str xzr, [x0] 135; SDAG-WITHOUT-MOPS-O2-NEXT: ret 136; 137; SDAG-MOPS-O2-LABEL: memset_10_zeroval_volatile: 138; SDAG-MOPS-O2: // %bb.0: // %entry 139; SDAG-MOPS-O2-NEXT: strh wzr, [x0, #8] 140; SDAG-MOPS-O2-NEXT: str xzr, [x0] 141; SDAG-MOPS-O2-NEXT: ret 142entry: 143 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 true) 144 ret void 145} 146 147define void @memset_10000_zeroval(ptr %dst) { 148; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_zeroval: 149; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 150; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 151; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 152; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 153; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 154; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 155; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr 156; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 157; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 158; GISel-WITHOUT-MOPS-O0-NEXT: ret 159; 160; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_zeroval: 161; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 162; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 163; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 164; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 165; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr 166; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710 167; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 168; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 169; GISel-WITHOUT-MOPS-O3-NEXT: ret 170; 171; GISel-MOPS-O0-LABEL: memset_10000_zeroval: 172; GISel-MOPS-O0: // %bb.0: // %entry 173; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 174; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 175; GISel-MOPS-O0-NEXT: mov x9, xzr 176; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 177; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 178; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 179; GISel-MOPS-O0-NEXT: ret 180; 181; GISel-MOPS-O3-LABEL: memset_10000_zeroval: 182; GISel-MOPS-O3: // %bb.0: // %entry 183; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710 184; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr 185; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr 186; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr 187; GISel-MOPS-O3-NEXT: ret 188; 189; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_zeroval: 190; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 191; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 192; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 193; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 194; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr 195; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710 196; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 197; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 198; SDAG-WITHOUT-MOPS-O2-NEXT: ret 199; 200; SDAG-MOPS-O2-LABEL: memset_10000_zeroval: 201; SDAG-MOPS-O2: // %bb.0: // %entry 202; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710 203; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, xzr 204; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, xzr 205; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, xzr 206; SDAG-MOPS-O2-NEXT: ret 207entry: 208 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 false) 209 ret void 210} 211 212define void @memset_10000_zeroval_volatile(ptr %dst) { 213; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_zeroval_volatile: 214; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 215; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 216; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 217; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 218; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 219; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 220; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr 221; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 222; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 223; GISel-WITHOUT-MOPS-O0-NEXT: ret 224; 225; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_zeroval_volatile: 226; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 227; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 228; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 229; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 230; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr 231; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710 232; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 233; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 234; GISel-WITHOUT-MOPS-O3-NEXT: ret 235; 236; GISel-MOPS-O0-LABEL: memset_10000_zeroval_volatile: 237; GISel-MOPS-O0: // %bb.0: // %entry 238; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 239; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 240; GISel-MOPS-O0-NEXT: mov x9, xzr 241; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 242; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 243; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 244; GISel-MOPS-O0-NEXT: ret 245; 246; GISel-MOPS-O3-LABEL: memset_10000_zeroval_volatile: 247; GISel-MOPS-O3: // %bb.0: // %entry 248; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710 249; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr 250; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr 251; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr 252; GISel-MOPS-O3-NEXT: ret 253; 254; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_zeroval_volatile: 255; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 256; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 257; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 258; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 259; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr 260; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710 261; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 262; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 263; SDAG-WITHOUT-MOPS-O2-NEXT: ret 264; 265; SDAG-MOPS-O2-LABEL: memset_10000_zeroval_volatile: 266; SDAG-MOPS-O2: // %bb.0: // %entry 267; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710 268; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, xzr 269; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, xzr 270; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, xzr 271; SDAG-MOPS-O2-NEXT: ret 272entry: 273 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 true) 274 ret void 275} 276 277define void @memset_size_zeroval(ptr %dst, i64 %size) { 278; GISel-WITHOUT-MOPS-LABEL: memset_size_zeroval: 279; GISel-WITHOUT-MOPS: // %bb.0: // %entry 280; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 281; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 282; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 283; GISel-WITHOUT-MOPS-NEXT: mov x2, x1 284; GISel-WITHOUT-MOPS-NEXT: mov w1, wzr 285; GISel-WITHOUT-MOPS-NEXT: bl memset 286; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 287; GISel-WITHOUT-MOPS-NEXT: ret 288; 289; GISel-MOPS-O0-LABEL: memset_size_zeroval: 290; GISel-MOPS-O0: // %bb.0: // %entry 291; GISel-MOPS-O0-NEXT: mov x8, xzr 292; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8 293; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8 294; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8 295; GISel-MOPS-O0-NEXT: ret 296; 297; GISel-MOPS-O3-LABEL: memset_size_zeroval: 298; GISel-MOPS-O3: // %bb.0: // %entry 299; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, xzr 300; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, xzr 301; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, xzr 302; GISel-MOPS-O3-NEXT: ret 303; 304; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_zeroval: 305; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 306; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 307; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 308; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 309; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x1 310; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr 311; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 312; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 313; SDAG-WITHOUT-MOPS-O2-NEXT: ret 314; 315; SDAG-MOPS-O2-LABEL: memset_size_zeroval: 316; SDAG-MOPS-O2: // %bb.0: // %entry 317; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, xzr 318; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, xzr 319; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, xzr 320; SDAG-MOPS-O2-NEXT: ret 321entry: 322 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 false) 323 ret void 324} 325 326define void @memset_size_zeroval_volatile(ptr %dst, i64 %size) { 327; GISel-WITHOUT-MOPS-LABEL: memset_size_zeroval_volatile: 328; GISel-WITHOUT-MOPS: // %bb.0: // %entry 329; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 330; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 331; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 332; GISel-WITHOUT-MOPS-NEXT: mov x2, x1 333; GISel-WITHOUT-MOPS-NEXT: mov w1, wzr 334; GISel-WITHOUT-MOPS-NEXT: bl memset 335; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 336; GISel-WITHOUT-MOPS-NEXT: ret 337; 338; GISel-MOPS-O0-LABEL: memset_size_zeroval_volatile: 339; GISel-MOPS-O0: // %bb.0: // %entry 340; GISel-MOPS-O0-NEXT: mov x8, xzr 341; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8 342; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8 343; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8 344; GISel-MOPS-O0-NEXT: ret 345; 346; GISel-MOPS-O3-LABEL: memset_size_zeroval_volatile: 347; GISel-MOPS-O3: // %bb.0: // %entry 348; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, xzr 349; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, xzr 350; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, xzr 351; GISel-MOPS-O3-NEXT: ret 352; 353; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_zeroval_volatile: 354; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 355; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 356; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 357; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 358; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x1 359; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr 360; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 361; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 362; SDAG-WITHOUT-MOPS-O2-NEXT: ret 363; 364; SDAG-MOPS-O2-LABEL: memset_size_zeroval_volatile: 365; SDAG-MOPS-O2: // %bb.0: // %entry 366; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, xzr 367; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, xzr 368; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, xzr 369; SDAG-MOPS-O2-NEXT: ret 370entry: 371 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 true) 372 ret void 373} 374 375 376define void @memset_0(ptr %dst, i32 %value) { 377; GISel-WITHOUT-MOPS-LABEL: memset_0: 378; GISel-WITHOUT-MOPS: // %bb.0: // %entry 379; GISel-WITHOUT-MOPS-NEXT: ret 380; 381; GISel-MOPS-LABEL: memset_0: 382; GISel-MOPS: // %bb.0: // %entry 383; GISel-MOPS-NEXT: ret 384; 385; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0: 386; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 387; SDAG-WITHOUT-MOPS-O2-NEXT: ret 388; 389; SDAG-MOPS-O2-LABEL: memset_0: 390; SDAG-MOPS-O2: // %bb.0: // %entry 391; SDAG-MOPS-O2-NEXT: ret 392entry: 393 %value_trunc = trunc i32 %value to i8 394 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 false) 395 ret void 396} 397 398define void @memset_0_volatile(ptr %dst, i32 %value) { 399; GISel-WITHOUT-MOPS-LABEL: memset_0_volatile: 400; GISel-WITHOUT-MOPS: // %bb.0: // %entry 401; GISel-WITHOUT-MOPS-NEXT: ret 402; 403; GISel-MOPS-LABEL: memset_0_volatile: 404; GISel-MOPS: // %bb.0: // %entry 405; GISel-MOPS-NEXT: ret 406; 407; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_volatile: 408; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 409; SDAG-WITHOUT-MOPS-O2-NEXT: ret 410; 411; SDAG-MOPS-O2-LABEL: memset_0_volatile: 412; SDAG-MOPS-O2: // %bb.0: // %entry 413; SDAG-MOPS-O2-NEXT: ret 414entry: 415 %value_trunc = trunc i32 %value to i8 416 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 true) 417 ret void 418} 419 420define void @memset_10(ptr %dst, i32 %value) { 421; GISel-WITHOUT-MOPS-O0-LABEL: memset_10: 422; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 423; GISel-WITHOUT-MOPS-O0-NEXT: // implicit-def: $x8 424; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, w1 425; GISel-WITHOUT-MOPS-O0-NEXT: and x8, x8, #0xff 426; GISel-WITHOUT-MOPS-O0-NEXT: mov x9, #72340172838076673 // =0x101010101010101 427; GISel-WITHOUT-MOPS-O0-NEXT: mul x8, x8, x9 428; GISel-WITHOUT-MOPS-O0-NEXT: str x8, [x0] 429; GISel-WITHOUT-MOPS-O0-NEXT: // kill: def $w8 killed $w8 killed $x8 430; GISel-WITHOUT-MOPS-O0-NEXT: strh w8, [x0, #8] 431; GISel-WITHOUT-MOPS-O0-NEXT: ret 432; 433; GISel-WITHOUT-MOPS-O3-LABEL: memset_10: 434; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 435; GISel-WITHOUT-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1 436; GISel-WITHOUT-MOPS-O3-NEXT: mov x8, #72340172838076673 // =0x101010101010101 437; GISel-WITHOUT-MOPS-O3-NEXT: and x9, x1, #0xff 438; GISel-WITHOUT-MOPS-O3-NEXT: mul x8, x9, x8 439; GISel-WITHOUT-MOPS-O3-NEXT: str x8, [x0] 440; GISel-WITHOUT-MOPS-O3-NEXT: strh w8, [x0, #8] 441; GISel-WITHOUT-MOPS-O3-NEXT: ret 442; 443; GISel-MOPS-O0-LABEL: memset_10: 444; GISel-MOPS-O0: // %bb.0: // %entry 445; GISel-MOPS-O0-NEXT: // implicit-def: $x8 446; GISel-MOPS-O0-NEXT: mov w8, w1 447; GISel-MOPS-O0-NEXT: and x8, x8, #0xff 448; GISel-MOPS-O0-NEXT: mov x9, #72340172838076673 // =0x101010101010101 449; GISel-MOPS-O0-NEXT: mul x8, x8, x9 450; GISel-MOPS-O0-NEXT: str x8, [x0] 451; GISel-MOPS-O0-NEXT: // kill: def $w8 killed $w8 killed $x8 452; GISel-MOPS-O0-NEXT: strh w8, [x0, #8] 453; GISel-MOPS-O0-NEXT: ret 454; 455; GISel-MOPS-O3-LABEL: memset_10: 456; GISel-MOPS-O3: // %bb.0: // %entry 457; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1 458; GISel-MOPS-O3-NEXT: mov x8, #72340172838076673 // =0x101010101010101 459; GISel-MOPS-O3-NEXT: and x9, x1, #0xff 460; GISel-MOPS-O3-NEXT: mul x8, x9, x8 461; GISel-MOPS-O3-NEXT: str x8, [x0] 462; GISel-MOPS-O3-NEXT: strh w8, [x0, #8] 463; GISel-MOPS-O3-NEXT: ret 464; 465; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10: 466; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 467; SDAG-WITHOUT-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 468; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101 469; SDAG-WITHOUT-MOPS-O2-NEXT: and x9, x1, #0xff 470; SDAG-WITHOUT-MOPS-O2-NEXT: mul x8, x9, x8 471; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0] 472; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8] 473; SDAG-WITHOUT-MOPS-O2-NEXT: ret 474; 475; SDAG-MOPS-O2-LABEL: memset_10: 476; SDAG-MOPS-O2: // %bb.0: // %entry 477; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 478; SDAG-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101 479; SDAG-MOPS-O2-NEXT: and x9, x1, #0xff 480; SDAG-MOPS-O2-NEXT: mul x8, x9, x8 481; SDAG-MOPS-O2-NEXT: str x8, [x0] 482; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8] 483; SDAG-MOPS-O2-NEXT: ret 484entry: 485 %value_trunc = trunc i32 %value to i8 486 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10, i1 false) 487 ret void 488} 489 490define void @memset_10_volatile(ptr %dst, i32 %value) { 491; GISel-WITHOUT-MOPS-O0-LABEL: memset_10_volatile: 492; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 493; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 494; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 495; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 496; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa 497; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 498; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 499; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 500; GISel-WITHOUT-MOPS-O0-NEXT: ret 501; 502; GISel-WITHOUT-MOPS-O3-LABEL: memset_10_volatile: 503; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 504; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 505; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 506; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 507; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa 508; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 509; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 510; GISel-WITHOUT-MOPS-O3-NEXT: ret 511; 512; GISel-MOPS-O0-LABEL: memset_10_volatile: 513; GISel-MOPS-O0: // %bb.0: // %entry 514; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa 515; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 516; GISel-MOPS-O0-NEXT: // implicit-def: $x9 517; GISel-MOPS-O0-NEXT: mov w9, w1 518; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 519; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 520; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 521; GISel-MOPS-O0-NEXT: ret 522; 523; GISel-MOPS-O3-LABEL: memset_10_volatile: 524; GISel-MOPS-O3: // %bb.0: // %entry 525; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa 526; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1 527; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1 528; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1 529; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1 530; GISel-MOPS-O3-NEXT: ret 531; 532; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_volatile: 533; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 534; SDAG-WITHOUT-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 535; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101 536; SDAG-WITHOUT-MOPS-O2-NEXT: and x9, x1, #0xff 537; SDAG-WITHOUT-MOPS-O2-NEXT: mul x8, x9, x8 538; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0] 539; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8] 540; SDAG-WITHOUT-MOPS-O2-NEXT: ret 541; 542; SDAG-MOPS-O2-LABEL: memset_10_volatile: 543; SDAG-MOPS-O2: // %bb.0: // %entry 544; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 545; SDAG-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101 546; SDAG-MOPS-O2-NEXT: and x9, x1, #0xff 547; SDAG-MOPS-O2-NEXT: mul x8, x9, x8 548; SDAG-MOPS-O2-NEXT: str x8, [x0] 549; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8] 550; SDAG-MOPS-O2-NEXT: ret 551entry: 552 %value_trunc = trunc i32 %value to i8 553 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10, i1 true) 554 ret void 555} 556 557define void @memset_10000(ptr %dst, i32 %value) { 558; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000: 559; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 560; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 561; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 562; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 563; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 564; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 565; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 566; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 567; GISel-WITHOUT-MOPS-O0-NEXT: ret 568; 569; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000: 570; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 571; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 572; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 573; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 574; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710 575; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 576; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 577; GISel-WITHOUT-MOPS-O3-NEXT: ret 578; 579; GISel-MOPS-O0-LABEL: memset_10000: 580; GISel-MOPS-O0: // %bb.0: // %entry 581; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 582; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 583; GISel-MOPS-O0-NEXT: // implicit-def: $x9 584; GISel-MOPS-O0-NEXT: mov w9, w1 585; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 586; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 587; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 588; GISel-MOPS-O0-NEXT: ret 589; 590; GISel-MOPS-O3-LABEL: memset_10000: 591; GISel-MOPS-O3: // %bb.0: // %entry 592; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710 593; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1 594; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1 595; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1 596; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1 597; GISel-MOPS-O3-NEXT: ret 598; 599; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000: 600; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 601; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 602; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 603; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 604; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710 605; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 606; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 607; SDAG-WITHOUT-MOPS-O2-NEXT: ret 608; 609; SDAG-MOPS-O2-LABEL: memset_10000: 610; SDAG-MOPS-O2: // %bb.0: // %entry 611; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710 612; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 613; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, x1 614; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, x1 615; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, x1 616; SDAG-MOPS-O2-NEXT: ret 617entry: 618 %value_trunc = trunc i32 %value to i8 619 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10000, i1 false) 620 ret void 621} 622 623define void @memset_10000_volatile(ptr %dst, i32 %value) { 624; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_volatile: 625; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 626; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 627; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 628; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 629; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 630; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 631; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 632; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 633; GISel-WITHOUT-MOPS-O0-NEXT: ret 634; 635; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_volatile: 636; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 637; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 638; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 639; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 640; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710 641; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 642; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 643; GISel-WITHOUT-MOPS-O3-NEXT: ret 644; 645; GISel-MOPS-O0-LABEL: memset_10000_volatile: 646; GISel-MOPS-O0: // %bb.0: // %entry 647; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710 648; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 649; GISel-MOPS-O0-NEXT: // implicit-def: $x9 650; GISel-MOPS-O0-NEXT: mov w9, w1 651; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9 652; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9 653; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9 654; GISel-MOPS-O0-NEXT: ret 655; 656; GISel-MOPS-O3-LABEL: memset_10000_volatile: 657; GISel-MOPS-O3: // %bb.0: // %entry 658; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710 659; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1 660; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1 661; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1 662; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1 663; GISel-MOPS-O3-NEXT: ret 664; 665; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_volatile: 666; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 667; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 668; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 669; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 670; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710 671; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 672; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 673; SDAG-WITHOUT-MOPS-O2-NEXT: ret 674; 675; SDAG-MOPS-O2-LABEL: memset_10000_volatile: 676; SDAG-MOPS-O2: // %bb.0: // %entry 677; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710 678; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1 679; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, x1 680; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, x1 681; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, x1 682; SDAG-MOPS-O2-NEXT: ret 683entry: 684 %value_trunc = trunc i32 %value to i8 685 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10000, i1 true) 686 ret void 687} 688 689define void @memset_size(ptr %dst, i64 %size, i32 %value) { 690; GISel-WITHOUT-MOPS-O0-LABEL: memset_size: 691; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 692; GISel-WITHOUT-MOPS-O0-NEXT: sub sp, sp, #32 693; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill 694; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 32 695; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 696; GISel-WITHOUT-MOPS-O0-NEXT: str x1, [sp, #8] // 8-byte Folded Spill 697; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, w2 698; GISel-WITHOUT-MOPS-O0-NEXT: ldr x2, [sp, #8] // 8-byte Folded Reload 699; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 700; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 701; GISel-WITHOUT-MOPS-O0-NEXT: add sp, sp, #32 702; GISel-WITHOUT-MOPS-O0-NEXT: ret 703; 704; GISel-WITHOUT-MOPS-O3-LABEL: memset_size: 705; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 706; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 707; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 708; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 709; GISel-WITHOUT-MOPS-O3-NEXT: mov x3, x1 710; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, w2 711; GISel-WITHOUT-MOPS-O3-NEXT: mov x2, x3 712; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 713; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 714; GISel-WITHOUT-MOPS-O3-NEXT: ret 715; 716; GISel-MOPS-O0-LABEL: memset_size: 717; GISel-MOPS-O0: // %bb.0: // %entry 718; GISel-MOPS-O0-NEXT: // implicit-def: $x8 719; GISel-MOPS-O0-NEXT: mov w8, w2 720; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8 721; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8 722; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8 723; GISel-MOPS-O0-NEXT: ret 724; 725; GISel-MOPS-O3-LABEL: memset_size: 726; GISel-MOPS-O3: // %bb.0: // %entry 727; GISel-MOPS-O3-NEXT: // kill: def $w2 killed $w2 def $x2 728; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, x2 729; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, x2 730; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, x2 731; GISel-MOPS-O3-NEXT: ret 732; 733; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size: 734; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 735; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 736; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 737; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 738; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, x1 739; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, w2 740; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x8 741; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 742; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 743; SDAG-WITHOUT-MOPS-O2-NEXT: ret 744; 745; SDAG-MOPS-O2-LABEL: memset_size: 746; SDAG-MOPS-O2: // %bb.0: // %entry 747; SDAG-MOPS-O2-NEXT: // kill: def $w2 killed $w2 def $x2 748; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, x2 749; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, x2 750; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, x2 751; SDAG-MOPS-O2-NEXT: ret 752entry: 753 %value_trunc = trunc i32 %value to i8 754 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 %size, i1 false) 755 ret void 756} 757 758define void @memset_size_volatile(ptr %dst, i64 %size, i32 %value) { 759; GISel-WITHOUT-MOPS-O0-LABEL: memset_size_volatile: 760; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 761; GISel-WITHOUT-MOPS-O0-NEXT: sub sp, sp, #32 762; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill 763; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 32 764; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 765; GISel-WITHOUT-MOPS-O0-NEXT: str x1, [sp, #8] // 8-byte Folded Spill 766; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, w2 767; GISel-WITHOUT-MOPS-O0-NEXT: ldr x2, [sp, #8] // 8-byte Folded Reload 768; GISel-WITHOUT-MOPS-O0-NEXT: bl memset 769; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 770; GISel-WITHOUT-MOPS-O0-NEXT: add sp, sp, #32 771; GISel-WITHOUT-MOPS-O0-NEXT: ret 772; 773; GISel-WITHOUT-MOPS-O3-LABEL: memset_size_volatile: 774; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 775; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 776; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 777; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 778; GISel-WITHOUT-MOPS-O3-NEXT: mov x3, x1 779; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, w2 780; GISel-WITHOUT-MOPS-O3-NEXT: mov x2, x3 781; GISel-WITHOUT-MOPS-O3-NEXT: bl memset 782; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 783; GISel-WITHOUT-MOPS-O3-NEXT: ret 784; 785; GISel-MOPS-O0-LABEL: memset_size_volatile: 786; GISel-MOPS-O0: // %bb.0: // %entry 787; GISel-MOPS-O0-NEXT: // implicit-def: $x8 788; GISel-MOPS-O0-NEXT: mov w8, w2 789; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8 790; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8 791; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8 792; GISel-MOPS-O0-NEXT: ret 793; 794; GISel-MOPS-O3-LABEL: memset_size_volatile: 795; GISel-MOPS-O3: // %bb.0: // %entry 796; GISel-MOPS-O3-NEXT: // kill: def $w2 killed $w2 def $x2 797; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, x2 798; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, x2 799; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, x2 800; GISel-MOPS-O3-NEXT: ret 801; 802; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_volatile: 803; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 804; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 805; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 806; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 807; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, x1 808; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, w2 809; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x8 810; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset 811; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 812; SDAG-WITHOUT-MOPS-O2-NEXT: ret 813; 814; SDAG-MOPS-O2-LABEL: memset_size_volatile: 815; SDAG-MOPS-O2: // %bb.0: // %entry 816; SDAG-MOPS-O2-NEXT: // kill: def $w2 killed $w2 def $x2 817; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, x2 818; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, x2 819; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, x2 820; SDAG-MOPS-O2-NEXT: ret 821entry: 822 %value_trunc = trunc i32 %value to i8 823 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 %size, i1 true) 824 ret void 825} 826 827 828define void @memcpy_0(ptr %dst, ptr %src, i32 %value) { 829; GISel-WITHOUT-MOPS-LABEL: memcpy_0: 830; GISel-WITHOUT-MOPS: // %bb.0: // %entry 831; GISel-WITHOUT-MOPS-NEXT: ret 832; 833; GISel-MOPS-LABEL: memcpy_0: 834; GISel-MOPS: // %bb.0: // %entry 835; GISel-MOPS-NEXT: ret 836; 837; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0: 838; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 839; SDAG-WITHOUT-MOPS-O2-NEXT: ret 840; 841; SDAG-MOPS-O2-LABEL: memcpy_0: 842; SDAG-MOPS-O2: // %bb.0: // %entry 843; SDAG-MOPS-O2-NEXT: ret 844entry: 845 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false) 846 ret void 847} 848 849define void @memcpy_0_volatile(ptr %dst, ptr %src, i32 %value) { 850; GISel-WITHOUT-MOPS-LABEL: memcpy_0_volatile: 851; GISel-WITHOUT-MOPS: // %bb.0: // %entry 852; GISel-WITHOUT-MOPS-NEXT: ret 853; 854; GISel-MOPS-LABEL: memcpy_0_volatile: 855; GISel-MOPS: // %bb.0: // %entry 856; GISel-MOPS-NEXT: ret 857; 858; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0_volatile: 859; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 860; SDAG-WITHOUT-MOPS-O2-NEXT: ret 861; 862; SDAG-MOPS-O2-LABEL: memcpy_0_volatile: 863; SDAG-MOPS-O2: // %bb.0: // %entry 864; SDAG-MOPS-O2-NEXT: ret 865entry: 866 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true) 867 ret void 868} 869 870define void @memcpy_10(ptr %dst, ptr %src, i32 %value) { 871; GISel-WITHOUT-MOPS-LABEL: memcpy_10: 872; GISel-WITHOUT-MOPS: // %bb.0: // %entry 873; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1] 874; GISel-WITHOUT-MOPS-NEXT: str x8, [x0] 875; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8] 876; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8] 877; GISel-WITHOUT-MOPS-NEXT: ret 878; 879; GISel-MOPS-LABEL: memcpy_10: 880; GISel-MOPS: // %bb.0: // %entry 881; GISel-MOPS-NEXT: ldr x8, [x1] 882; GISel-MOPS-NEXT: str x8, [x0] 883; GISel-MOPS-NEXT: ldrh w8, [x1, #8] 884; GISel-MOPS-NEXT: strh w8, [x0, #8] 885; GISel-MOPS-NEXT: ret 886; 887; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_10: 888; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 889; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8] 890; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1] 891; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8] 892; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0] 893; SDAG-WITHOUT-MOPS-O2-NEXT: ret 894; 895; SDAG-MOPS-O2-LABEL: memcpy_10: 896; SDAG-MOPS-O2: // %bb.0: // %entry 897; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8] 898; SDAG-MOPS-O2-NEXT: ldr x9, [x1] 899; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8] 900; SDAG-MOPS-O2-NEXT: str x9, [x0] 901; SDAG-MOPS-O2-NEXT: ret 902entry: 903 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false) 904 ret void 905} 906 907define void @memcpy_10_volatile(ptr %dst, ptr %src, i32 %value) { 908; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_10_volatile: 909; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 910; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 911; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 912; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 913; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa 914; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 915; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy 916; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 917; GISel-WITHOUT-MOPS-O0-NEXT: ret 918; 919; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_10_volatile: 920; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 921; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 922; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 923; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 924; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa 925; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy 926; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 927; GISel-WITHOUT-MOPS-O3-NEXT: ret 928; 929; GISel-MOPS-O0-LABEL: memcpy_10_volatile: 930; GISel-MOPS-O0: // %bb.0: // %entry 931; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa 932; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 933; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8! 934; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8! 935; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8! 936; GISel-MOPS-O0-NEXT: ret 937; 938; GISel-MOPS-O3-LABEL: memcpy_10_volatile: 939; GISel-MOPS-O3: // %bb.0: // %entry 940; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa 941; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8! 942; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8! 943; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8! 944; GISel-MOPS-O3-NEXT: ret 945; 946; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_10_volatile: 947; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 948; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1] 949; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8] 950; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8] 951; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0] 952; SDAG-WITHOUT-MOPS-O2-NEXT: ret 953; 954; SDAG-MOPS-O2-LABEL: memcpy_10_volatile: 955; SDAG-MOPS-O2: // %bb.0: // %entry 956; SDAG-MOPS-O2-NEXT: ldr x8, [x1] 957; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8] 958; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8] 959; SDAG-MOPS-O2-NEXT: str x8, [x0] 960; SDAG-MOPS-O2-NEXT: ret 961entry: 962 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true) 963 ret void 964} 965 966define void @memcpy_1000(ptr %dst, ptr %src, i32 %value) { 967; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_1000: 968; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 969; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 970; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 971; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 972; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 973; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 974; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy 975; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 976; GISel-WITHOUT-MOPS-O0-NEXT: ret 977; 978; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_1000: 979; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 980; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 981; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 982; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 983; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8 984; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy 985; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 986; GISel-WITHOUT-MOPS-O3-NEXT: ret 987; 988; GISel-MOPS-O0-LABEL: memcpy_1000: 989; GISel-MOPS-O0: // %bb.0: // %entry 990; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 991; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 992; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8! 993; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8! 994; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8! 995; GISel-MOPS-O0-NEXT: ret 996; 997; GISel-MOPS-O3-LABEL: memcpy_1000: 998; GISel-MOPS-O3: // %bb.0: // %entry 999; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8 1000; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8! 1001; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8! 1002; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8! 1003; GISel-MOPS-O3-NEXT: ret 1004; 1005; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_1000: 1006; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1007; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1008; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1009; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1010; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8 1011; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy 1012; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1013; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1014; 1015; SDAG-MOPS-O2-LABEL: memcpy_1000: 1016; SDAG-MOPS-O2: // %bb.0: // %entry 1017; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8 1018; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8! 1019; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8! 1020; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8! 1021; SDAG-MOPS-O2-NEXT: ret 1022entry: 1023 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false) 1024 ret void 1025} 1026 1027define void @memcpy_1000_volatile(ptr %dst, ptr %src, i32 %value) { 1028; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_1000_volatile: 1029; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1030; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1031; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 1032; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 1033; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1034; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 1035; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy 1036; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1037; GISel-WITHOUT-MOPS-O0-NEXT: ret 1038; 1039; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_1000_volatile: 1040; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1041; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1042; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 1043; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 1044; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8 1045; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy 1046; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1047; GISel-WITHOUT-MOPS-O3-NEXT: ret 1048; 1049; GISel-MOPS-O0-LABEL: memcpy_1000_volatile: 1050; GISel-MOPS-O0: // %bb.0: // %entry 1051; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1052; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 1053; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8! 1054; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8! 1055; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8! 1056; GISel-MOPS-O0-NEXT: ret 1057; 1058; GISel-MOPS-O3-LABEL: memcpy_1000_volatile: 1059; GISel-MOPS-O3: // %bb.0: // %entry 1060; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8 1061; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8! 1062; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8! 1063; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8! 1064; GISel-MOPS-O3-NEXT: ret 1065; 1066; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_1000_volatile: 1067; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1068; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1069; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1070; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1071; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8 1072; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy 1073; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1074; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1075; 1076; SDAG-MOPS-O2-LABEL: memcpy_1000_volatile: 1077; SDAG-MOPS-O2: // %bb.0: // %entry 1078; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8 1079; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8! 1080; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8! 1081; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8! 1082; SDAG-MOPS-O2-NEXT: ret 1083entry: 1084 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true) 1085 ret void 1086} 1087 1088define void @memcpy_n(ptr %dst, ptr %src, i64 %size, i32 %value) { 1089; GISel-WITHOUT-MOPS-LABEL: memcpy_n: 1090; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1091; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1092; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 1093; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 1094; GISel-WITHOUT-MOPS-NEXT: bl memcpy 1095; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1096; GISel-WITHOUT-MOPS-NEXT: ret 1097; 1098; GISel-MOPS-LABEL: memcpy_n: 1099; GISel-MOPS: // %bb.0: // %entry 1100; GISel-MOPS-NEXT: cpyfp [x0]!, [x1]!, x2! 1101; GISel-MOPS-NEXT: cpyfm [x0]!, [x1]!, x2! 1102; GISel-MOPS-NEXT: cpyfe [x0]!, [x1]!, x2! 1103; GISel-MOPS-NEXT: ret 1104; 1105; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_n: 1106; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1107; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1108; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1109; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1110; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy 1111; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1112; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1113; 1114; SDAG-MOPS-O2-LABEL: memcpy_n: 1115; SDAG-MOPS-O2: // %bb.0: // %entry 1116; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x2! 1117; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x2! 1118; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x2! 1119; SDAG-MOPS-O2-NEXT: ret 1120entry: 1121 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false) 1122 ret void 1123} 1124 1125define void @memcpy_n_volatile(ptr %dst, ptr %src, i64 %size, i32 %value) { 1126; GISel-WITHOUT-MOPS-LABEL: memcpy_n_volatile: 1127; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1128; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1129; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 1130; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 1131; GISel-WITHOUT-MOPS-NEXT: bl memcpy 1132; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1133; GISel-WITHOUT-MOPS-NEXT: ret 1134; 1135; GISel-MOPS-LABEL: memcpy_n_volatile: 1136; GISel-MOPS: // %bb.0: // %entry 1137; GISel-MOPS-NEXT: cpyfp [x0]!, [x1]!, x2! 1138; GISel-MOPS-NEXT: cpyfm [x0]!, [x1]!, x2! 1139; GISel-MOPS-NEXT: cpyfe [x0]!, [x1]!, x2! 1140; GISel-MOPS-NEXT: ret 1141; 1142; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_n_volatile: 1143; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1144; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1145; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1146; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1147; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy 1148; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1149; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1150; 1151; SDAG-MOPS-O2-LABEL: memcpy_n_volatile: 1152; SDAG-MOPS-O2: // %bb.0: // %entry 1153; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x2! 1154; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x2! 1155; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x2! 1156; SDAG-MOPS-O2-NEXT: ret 1157entry: 1158 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true) 1159 ret void 1160} 1161 1162 1163define void @memcpy_inline_0(ptr %dst, ptr %src, i32 %value) { 1164; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_0: 1165; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1166; GISel-WITHOUT-MOPS-NEXT: ret 1167; 1168; GISel-MOPS-LABEL: memcpy_inline_0: 1169; GISel-MOPS: // %bb.0: // %entry 1170; GISel-MOPS-NEXT: ret 1171; 1172; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_0: 1173; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1174; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1175; 1176; SDAG-MOPS-O2-LABEL: memcpy_inline_0: 1177; SDAG-MOPS-O2: // %bb.0: // %entry 1178; SDAG-MOPS-O2-NEXT: ret 1179entry: 1180 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false) 1181 ret void 1182} 1183 1184define void @memcpy_inline_0_volatile(ptr %dst, ptr %src, i32 %value) { 1185; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_0_volatile: 1186; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1187; GISel-WITHOUT-MOPS-NEXT: ret 1188; 1189; GISel-MOPS-LABEL: memcpy_inline_0_volatile: 1190; GISel-MOPS: // %bb.0: // %entry 1191; GISel-MOPS-NEXT: ret 1192; 1193; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_0_volatile: 1194; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1195; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1196; 1197; SDAG-MOPS-O2-LABEL: memcpy_inline_0_volatile: 1198; SDAG-MOPS-O2: // %bb.0: // %entry 1199; SDAG-MOPS-O2-NEXT: ret 1200entry: 1201 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true) 1202 ret void 1203} 1204 1205define void @memcpy_inline_10(ptr %dst, ptr %src, i32 %value) { 1206; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_10: 1207; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1208; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1] 1209; GISel-WITHOUT-MOPS-NEXT: str x8, [x0] 1210; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8] 1211; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8] 1212; GISel-WITHOUT-MOPS-NEXT: ret 1213; 1214; GISel-MOPS-LABEL: memcpy_inline_10: 1215; GISel-MOPS: // %bb.0: // %entry 1216; GISel-MOPS-NEXT: ldr x8, [x1] 1217; GISel-MOPS-NEXT: str x8, [x0] 1218; GISel-MOPS-NEXT: ldrh w8, [x1, #8] 1219; GISel-MOPS-NEXT: strh w8, [x0, #8] 1220; GISel-MOPS-NEXT: ret 1221; 1222; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_10: 1223; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1224; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8] 1225; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1] 1226; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8] 1227; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0] 1228; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1229; 1230; SDAG-MOPS-O2-LABEL: memcpy_inline_10: 1231; SDAG-MOPS-O2: // %bb.0: // %entry 1232; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8] 1233; SDAG-MOPS-O2-NEXT: ldr x9, [x1] 1234; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8] 1235; SDAG-MOPS-O2-NEXT: str x9, [x0] 1236; SDAG-MOPS-O2-NEXT: ret 1237entry: 1238 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false) 1239 ret void 1240} 1241 1242define void @memcpy_inline_10_volatile(ptr %dst, ptr %src, i32 %value) { 1243; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_10_volatile: 1244; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1245; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1] 1246; GISel-WITHOUT-MOPS-NEXT: str x8, [x0] 1247; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8] 1248; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8] 1249; GISel-WITHOUT-MOPS-NEXT: ret 1250; 1251; GISel-MOPS-LABEL: memcpy_inline_10_volatile: 1252; GISel-MOPS: // %bb.0: // %entry 1253; GISel-MOPS-NEXT: ldr x8, [x1] 1254; GISel-MOPS-NEXT: str x8, [x0] 1255; GISel-MOPS-NEXT: ldrh w8, [x1, #8] 1256; GISel-MOPS-NEXT: strh w8, [x0, #8] 1257; GISel-MOPS-NEXT: ret 1258; 1259; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_10_volatile: 1260; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1261; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1] 1262; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8] 1263; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8] 1264; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0] 1265; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1266; 1267; SDAG-MOPS-O2-LABEL: memcpy_inline_10_volatile: 1268; SDAG-MOPS-O2: // %bb.0: // %entry 1269; SDAG-MOPS-O2-NEXT: ldr x8, [x1] 1270; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8] 1271; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8] 1272; SDAG-MOPS-O2-NEXT: str x8, [x0] 1273; SDAG-MOPS-O2-NEXT: ret 1274entry: 1275 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true) 1276 ret void 1277} 1278 1279define void @memcpy_inline_300(ptr %dst, ptr %src, i32 %value) { 1280; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_inline_300: 1281; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1282; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1] 1283; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0] 1284; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #16] 1285; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #16] 1286; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #32] 1287; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #32] 1288; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #48] 1289; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #48] 1290; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #64] 1291; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #64] 1292; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #80] 1293; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #80] 1294; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #96] 1295; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #96] 1296; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #112] 1297; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #112] 1298; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #128] 1299; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #128] 1300; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #144] 1301; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #144] 1302; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #160] 1303; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #160] 1304; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #176] 1305; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #176] 1306; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #192] 1307; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #192] 1308; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #208] 1309; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #208] 1310; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #224] 1311; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #224] 1312; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #240] 1313; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #240] 1314; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #256] 1315; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #256] 1316; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #272] 1317; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #272] 1318; GISel-WITHOUT-MOPS-O0-NEXT: add x8, x1, #284 1319; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x8] 1320; GISel-WITHOUT-MOPS-O0-NEXT: add x8, x0, #284 1321; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x8] 1322; GISel-WITHOUT-MOPS-O0-NEXT: ret 1323; 1324; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_inline_300: 1325; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1326; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1] 1327; GISel-WITHOUT-MOPS-O3-NEXT: add x8, x1, #284 1328; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0] 1329; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #16] 1330; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #16] 1331; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #32] 1332; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #32] 1333; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #48] 1334; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #48] 1335; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #64] 1336; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #64] 1337; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #80] 1338; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #80] 1339; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #96] 1340; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #96] 1341; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #112] 1342; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #112] 1343; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #128] 1344; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #128] 1345; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #144] 1346; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #144] 1347; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #160] 1348; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #160] 1349; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #176] 1350; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #176] 1351; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #192] 1352; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #192] 1353; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #208] 1354; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #208] 1355; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #224] 1356; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #224] 1357; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #240] 1358; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #240] 1359; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #256] 1360; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #256] 1361; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #272] 1362; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #272] 1363; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x8] 1364; GISel-WITHOUT-MOPS-O3-NEXT: add x8, x0, #284 1365; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x8] 1366; GISel-WITHOUT-MOPS-O3-NEXT: ret 1367; 1368; GISel-MOPS-O0-LABEL: memcpy_inline_300: 1369; GISel-MOPS-O0: // %bb.0: // %entry 1370; GISel-MOPS-O0-NEXT: ldr q0, [x1] 1371; GISel-MOPS-O0-NEXT: str q0, [x0] 1372; GISel-MOPS-O0-NEXT: ldr q0, [x1, #16] 1373; GISel-MOPS-O0-NEXT: str q0, [x0, #16] 1374; GISel-MOPS-O0-NEXT: ldr q0, [x1, #32] 1375; GISel-MOPS-O0-NEXT: str q0, [x0, #32] 1376; GISel-MOPS-O0-NEXT: ldr q0, [x1, #48] 1377; GISel-MOPS-O0-NEXT: str q0, [x0, #48] 1378; GISel-MOPS-O0-NEXT: ldr q0, [x1, #64] 1379; GISel-MOPS-O0-NEXT: str q0, [x0, #64] 1380; GISel-MOPS-O0-NEXT: ldr q0, [x1, #80] 1381; GISel-MOPS-O0-NEXT: str q0, [x0, #80] 1382; GISel-MOPS-O0-NEXT: ldr q0, [x1, #96] 1383; GISel-MOPS-O0-NEXT: str q0, [x0, #96] 1384; GISel-MOPS-O0-NEXT: ldr q0, [x1, #112] 1385; GISel-MOPS-O0-NEXT: str q0, [x0, #112] 1386; GISel-MOPS-O0-NEXT: ldr q0, [x1, #128] 1387; GISel-MOPS-O0-NEXT: str q0, [x0, #128] 1388; GISel-MOPS-O0-NEXT: ldr q0, [x1, #144] 1389; GISel-MOPS-O0-NEXT: str q0, [x0, #144] 1390; GISel-MOPS-O0-NEXT: ldr q0, [x1, #160] 1391; GISel-MOPS-O0-NEXT: str q0, [x0, #160] 1392; GISel-MOPS-O0-NEXT: ldr q0, [x1, #176] 1393; GISel-MOPS-O0-NEXT: str q0, [x0, #176] 1394; GISel-MOPS-O0-NEXT: ldr q0, [x1, #192] 1395; GISel-MOPS-O0-NEXT: str q0, [x0, #192] 1396; GISel-MOPS-O0-NEXT: ldr q0, [x1, #208] 1397; GISel-MOPS-O0-NEXT: str q0, [x0, #208] 1398; GISel-MOPS-O0-NEXT: ldr q0, [x1, #224] 1399; GISel-MOPS-O0-NEXT: str q0, [x0, #224] 1400; GISel-MOPS-O0-NEXT: ldr q0, [x1, #240] 1401; GISel-MOPS-O0-NEXT: str q0, [x0, #240] 1402; GISel-MOPS-O0-NEXT: ldr q0, [x1, #256] 1403; GISel-MOPS-O0-NEXT: str q0, [x0, #256] 1404; GISel-MOPS-O0-NEXT: ldr q0, [x1, #272] 1405; GISel-MOPS-O0-NEXT: str q0, [x0, #272] 1406; GISel-MOPS-O0-NEXT: add x8, x1, #284 1407; GISel-MOPS-O0-NEXT: ldr q0, [x8] 1408; GISel-MOPS-O0-NEXT: add x8, x0, #284 1409; GISel-MOPS-O0-NEXT: str q0, [x8] 1410; GISel-MOPS-O0-NEXT: ret 1411; 1412; GISel-MOPS-O3-LABEL: memcpy_inline_300: 1413; GISel-MOPS-O3: // %bb.0: // %entry 1414; GISel-MOPS-O3-NEXT: ldr q0, [x1] 1415; GISel-MOPS-O3-NEXT: add x8, x1, #284 1416; GISel-MOPS-O3-NEXT: str q0, [x0] 1417; GISel-MOPS-O3-NEXT: ldr q0, [x1, #16] 1418; GISel-MOPS-O3-NEXT: str q0, [x0, #16] 1419; GISel-MOPS-O3-NEXT: ldr q0, [x1, #32] 1420; GISel-MOPS-O3-NEXT: str q0, [x0, #32] 1421; GISel-MOPS-O3-NEXT: ldr q0, [x1, #48] 1422; GISel-MOPS-O3-NEXT: str q0, [x0, #48] 1423; GISel-MOPS-O3-NEXT: ldr q0, [x1, #64] 1424; GISel-MOPS-O3-NEXT: str q0, [x0, #64] 1425; GISel-MOPS-O3-NEXT: ldr q0, [x1, #80] 1426; GISel-MOPS-O3-NEXT: str q0, [x0, #80] 1427; GISel-MOPS-O3-NEXT: ldr q0, [x1, #96] 1428; GISel-MOPS-O3-NEXT: str q0, [x0, #96] 1429; GISel-MOPS-O3-NEXT: ldr q0, [x1, #112] 1430; GISel-MOPS-O3-NEXT: str q0, [x0, #112] 1431; GISel-MOPS-O3-NEXT: ldr q0, [x1, #128] 1432; GISel-MOPS-O3-NEXT: str q0, [x0, #128] 1433; GISel-MOPS-O3-NEXT: ldr q0, [x1, #144] 1434; GISel-MOPS-O3-NEXT: str q0, [x0, #144] 1435; GISel-MOPS-O3-NEXT: ldr q0, [x1, #160] 1436; GISel-MOPS-O3-NEXT: str q0, [x0, #160] 1437; GISel-MOPS-O3-NEXT: ldr q0, [x1, #176] 1438; GISel-MOPS-O3-NEXT: str q0, [x0, #176] 1439; GISel-MOPS-O3-NEXT: ldr q0, [x1, #192] 1440; GISel-MOPS-O3-NEXT: str q0, [x0, #192] 1441; GISel-MOPS-O3-NEXT: ldr q0, [x1, #208] 1442; GISel-MOPS-O3-NEXT: str q0, [x0, #208] 1443; GISel-MOPS-O3-NEXT: ldr q0, [x1, #224] 1444; GISel-MOPS-O3-NEXT: str q0, [x0, #224] 1445; GISel-MOPS-O3-NEXT: ldr q0, [x1, #240] 1446; GISel-MOPS-O3-NEXT: str q0, [x0, #240] 1447; GISel-MOPS-O3-NEXT: ldr q0, [x1, #256] 1448; GISel-MOPS-O3-NEXT: str q0, [x0, #256] 1449; GISel-MOPS-O3-NEXT: ldr q0, [x1, #272] 1450; GISel-MOPS-O3-NEXT: str q0, [x0, #272] 1451; GISel-MOPS-O3-NEXT: ldr q0, [x8] 1452; GISel-MOPS-O3-NEXT: add x8, x0, #284 1453; GISel-MOPS-O3-NEXT: str q0, [x8] 1454; GISel-MOPS-O3-NEXT: ret 1455; 1456; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_300: 1457; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1458; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #16] 1459; SDAG-WITHOUT-MOPS-O2-NEXT: add x8, x1, #284 1460; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1] 1461; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #16] 1462; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0] 1463; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #80] 1464; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #48] 1465; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #80] 1466; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #48] 1467; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #144] 1468; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #112] 1469; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #144] 1470; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #112] 1471; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #208] 1472; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #176] 1473; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #208] 1474; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #176] 1475; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q3, q1, [x1, #256] 1476; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x8] 1477; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #240] 1478; SDAG-WITHOUT-MOPS-O2-NEXT: add x8, x0, #284 1479; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x8] 1480; SDAG-WITHOUT-MOPS-O2-NEXT: stp q3, q1, [x0, #256] 1481; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #240] 1482; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1483; 1484; SDAG-MOPS-O2-LABEL: memcpy_inline_300: 1485; SDAG-MOPS-O2: // %bb.0: // %entry 1486; SDAG-MOPS-O2-NEXT: mov w8, #300 // =0x12c 1487; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8! 1488; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8! 1489; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8! 1490; SDAG-MOPS-O2-NEXT: ret 1491entry: 1492 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 false) 1493 ret void 1494} 1495 1496define void @memcpy_inline_300_volatile(ptr %dst, ptr %src, i32 %value) { 1497; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_300_volatile: 1498; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1499; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1] 1500; GISel-WITHOUT-MOPS-NEXT: str q0, [x0] 1501; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #16] 1502; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #16] 1503; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #32] 1504; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #32] 1505; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #48] 1506; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #48] 1507; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #64] 1508; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #64] 1509; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #80] 1510; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #80] 1511; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #96] 1512; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #96] 1513; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #112] 1514; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #112] 1515; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #128] 1516; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #128] 1517; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #144] 1518; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #144] 1519; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #160] 1520; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #160] 1521; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #176] 1522; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #176] 1523; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #192] 1524; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #192] 1525; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #208] 1526; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #208] 1527; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #224] 1528; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #224] 1529; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #240] 1530; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #240] 1531; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #256] 1532; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #256] 1533; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #272] 1534; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #272] 1535; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1, #288] 1536; GISel-WITHOUT-MOPS-NEXT: str x8, [x0, #288] 1537; GISel-WITHOUT-MOPS-NEXT: ldr w8, [x1, #296] 1538; GISel-WITHOUT-MOPS-NEXT: str w8, [x0, #296] 1539; GISel-WITHOUT-MOPS-NEXT: ret 1540; 1541; GISel-MOPS-LABEL: memcpy_inline_300_volatile: 1542; GISel-MOPS: // %bb.0: // %entry 1543; GISel-MOPS-NEXT: ldr q0, [x1] 1544; GISel-MOPS-NEXT: str q0, [x0] 1545; GISel-MOPS-NEXT: ldr q0, [x1, #16] 1546; GISel-MOPS-NEXT: str q0, [x0, #16] 1547; GISel-MOPS-NEXT: ldr q0, [x1, #32] 1548; GISel-MOPS-NEXT: str q0, [x0, #32] 1549; GISel-MOPS-NEXT: ldr q0, [x1, #48] 1550; GISel-MOPS-NEXT: str q0, [x0, #48] 1551; GISel-MOPS-NEXT: ldr q0, [x1, #64] 1552; GISel-MOPS-NEXT: str q0, [x0, #64] 1553; GISel-MOPS-NEXT: ldr q0, [x1, #80] 1554; GISel-MOPS-NEXT: str q0, [x0, #80] 1555; GISel-MOPS-NEXT: ldr q0, [x1, #96] 1556; GISel-MOPS-NEXT: str q0, [x0, #96] 1557; GISel-MOPS-NEXT: ldr q0, [x1, #112] 1558; GISel-MOPS-NEXT: str q0, [x0, #112] 1559; GISel-MOPS-NEXT: ldr q0, [x1, #128] 1560; GISel-MOPS-NEXT: str q0, [x0, #128] 1561; GISel-MOPS-NEXT: ldr q0, [x1, #144] 1562; GISel-MOPS-NEXT: str q0, [x0, #144] 1563; GISel-MOPS-NEXT: ldr q0, [x1, #160] 1564; GISel-MOPS-NEXT: str q0, [x0, #160] 1565; GISel-MOPS-NEXT: ldr q0, [x1, #176] 1566; GISel-MOPS-NEXT: str q0, [x0, #176] 1567; GISel-MOPS-NEXT: ldr q0, [x1, #192] 1568; GISel-MOPS-NEXT: str q0, [x0, #192] 1569; GISel-MOPS-NEXT: ldr q0, [x1, #208] 1570; GISel-MOPS-NEXT: str q0, [x0, #208] 1571; GISel-MOPS-NEXT: ldr q0, [x1, #224] 1572; GISel-MOPS-NEXT: str q0, [x0, #224] 1573; GISel-MOPS-NEXT: ldr q0, [x1, #240] 1574; GISel-MOPS-NEXT: str q0, [x0, #240] 1575; GISel-MOPS-NEXT: ldr q0, [x1, #256] 1576; GISel-MOPS-NEXT: str q0, [x0, #256] 1577; GISel-MOPS-NEXT: ldr q0, [x1, #272] 1578; GISel-MOPS-NEXT: str q0, [x0, #272] 1579; GISel-MOPS-NEXT: ldr x8, [x1, #288] 1580; GISel-MOPS-NEXT: str x8, [x0, #288] 1581; GISel-MOPS-NEXT: ldr w8, [x1, #296] 1582; GISel-MOPS-NEXT: str w8, [x0, #296] 1583; GISel-MOPS-NEXT: ret 1584; 1585; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_300_volatile: 1586; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1587; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1] 1588; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #16] 1589; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #32] 1590; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #48] 1591; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #48] 1592; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #32] 1593; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #16] 1594; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0] 1595; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #64] 1596; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #80] 1597; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #96] 1598; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #112] 1599; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #112] 1600; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #96] 1601; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #80] 1602; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #64] 1603; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #128] 1604; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #144] 1605; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #160] 1606; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #176] 1607; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #176] 1608; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #160] 1609; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #144] 1610; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #128] 1611; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #192] 1612; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #208] 1613; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #224] 1614; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #240] 1615; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #240] 1616; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #224] 1617; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #208] 1618; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #192] 1619; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #256] 1620; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #272] 1621; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1, #288] 1622; SDAG-WITHOUT-MOPS-O2-NEXT: ldr w9, [x1, #296] 1623; SDAG-WITHOUT-MOPS-O2-NEXT: str w9, [x0, #296] 1624; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0, #288] 1625; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #272] 1626; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #256] 1627; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1628; 1629; SDAG-MOPS-O2-LABEL: memcpy_inline_300_volatile: 1630; SDAG-MOPS-O2: // %bb.0: // %entry 1631; SDAG-MOPS-O2-NEXT: mov w8, #300 // =0x12c 1632; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8! 1633; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8! 1634; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8! 1635; SDAG-MOPS-O2-NEXT: ret 1636entry: 1637 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 true) 1638 ret void 1639} 1640 1641define void @memmove_0(ptr %dst, ptr %src, i32 %value) { 1642; GISel-WITHOUT-MOPS-LABEL: memmove_0: 1643; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1644; GISel-WITHOUT-MOPS-NEXT: ret 1645; 1646; GISel-MOPS-LABEL: memmove_0: 1647; GISel-MOPS: // %bb.0: // %entry 1648; GISel-MOPS-NEXT: ret 1649; 1650; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0: 1651; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1652; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1653; 1654; SDAG-MOPS-O2-LABEL: memmove_0: 1655; SDAG-MOPS-O2: // %bb.0: // %entry 1656; SDAG-MOPS-O2-NEXT: ret 1657entry: 1658 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false) 1659 ret void 1660} 1661 1662define void @memmove_0_volatile(ptr %dst, ptr %src, i32 %value) { 1663; GISel-WITHOUT-MOPS-LABEL: memmove_0_volatile: 1664; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1665; GISel-WITHOUT-MOPS-NEXT: ret 1666; 1667; GISel-MOPS-LABEL: memmove_0_volatile: 1668; GISel-MOPS: // %bb.0: // %entry 1669; GISel-MOPS-NEXT: ret 1670; 1671; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0_volatile: 1672; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1673; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1674; 1675; SDAG-MOPS-O2-LABEL: memmove_0_volatile: 1676; SDAG-MOPS-O2: // %bb.0: // %entry 1677; SDAG-MOPS-O2-NEXT: ret 1678entry: 1679 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true) 1680 ret void 1681} 1682 1683define void @memmove_10(ptr %dst, ptr %src, i32 %value) { 1684; GISel-WITHOUT-MOPS-O0-LABEL: memmove_10: 1685; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1686; GISel-WITHOUT-MOPS-O0-NEXT: ldr x9, [x1] 1687; GISel-WITHOUT-MOPS-O0-NEXT: ldrh w8, [x1, #8] 1688; GISel-WITHOUT-MOPS-O0-NEXT: str x9, [x0] 1689; GISel-WITHOUT-MOPS-O0-NEXT: strh w8, [x0, #8] 1690; GISel-WITHOUT-MOPS-O0-NEXT: ret 1691; 1692; GISel-WITHOUT-MOPS-O3-LABEL: memmove_10: 1693; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1694; GISel-WITHOUT-MOPS-O3-NEXT: ldr x8, [x1] 1695; GISel-WITHOUT-MOPS-O3-NEXT: ldrh w9, [x1, #8] 1696; GISel-WITHOUT-MOPS-O3-NEXT: str x8, [x0] 1697; GISel-WITHOUT-MOPS-O3-NEXT: strh w9, [x0, #8] 1698; GISel-WITHOUT-MOPS-O3-NEXT: ret 1699; 1700; GISel-MOPS-O0-LABEL: memmove_10: 1701; GISel-MOPS-O0: // %bb.0: // %entry 1702; GISel-MOPS-O0-NEXT: ldr x9, [x1] 1703; GISel-MOPS-O0-NEXT: ldrh w8, [x1, #8] 1704; GISel-MOPS-O0-NEXT: str x9, [x0] 1705; GISel-MOPS-O0-NEXT: strh w8, [x0, #8] 1706; GISel-MOPS-O0-NEXT: ret 1707; 1708; GISel-MOPS-O3-LABEL: memmove_10: 1709; GISel-MOPS-O3: // %bb.0: // %entry 1710; GISel-MOPS-O3-NEXT: ldr x8, [x1] 1711; GISel-MOPS-O3-NEXT: ldrh w9, [x1, #8] 1712; GISel-MOPS-O3-NEXT: str x8, [x0] 1713; GISel-MOPS-O3-NEXT: strh w9, [x0, #8] 1714; GISel-MOPS-O3-NEXT: ret 1715; 1716; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_10: 1717; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1718; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8] 1719; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1] 1720; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8] 1721; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0] 1722; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1723; 1724; SDAG-MOPS-O2-LABEL: memmove_10: 1725; SDAG-MOPS-O2: // %bb.0: // %entry 1726; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8] 1727; SDAG-MOPS-O2-NEXT: ldr x9, [x1] 1728; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8] 1729; SDAG-MOPS-O2-NEXT: str x9, [x0] 1730; SDAG-MOPS-O2-NEXT: ret 1731entry: 1732 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false) 1733 ret void 1734} 1735 1736define void @memmove_10_volatile(ptr %dst, ptr %src, i32 %value) { 1737; GISel-WITHOUT-MOPS-O0-LABEL: memmove_10_volatile: 1738; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1739; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1740; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 1741; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 1742; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa 1743; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 1744; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove 1745; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1746; GISel-WITHOUT-MOPS-O0-NEXT: ret 1747; 1748; GISel-WITHOUT-MOPS-O3-LABEL: memmove_10_volatile: 1749; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1750; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1751; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 1752; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 1753; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa 1754; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove 1755; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1756; GISel-WITHOUT-MOPS-O3-NEXT: ret 1757; 1758; GISel-MOPS-O0-LABEL: memmove_10_volatile: 1759; GISel-MOPS-O0: // %bb.0: // %entry 1760; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa 1761; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 1762; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8! 1763; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8! 1764; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8! 1765; GISel-MOPS-O0-NEXT: ret 1766; 1767; GISel-MOPS-O3-LABEL: memmove_10_volatile: 1768; GISel-MOPS-O3: // %bb.0: // %entry 1769; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa 1770; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8! 1771; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8! 1772; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8! 1773; GISel-MOPS-O3-NEXT: ret 1774; 1775; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_10_volatile: 1776; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1777; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1] 1778; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8] 1779; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8] 1780; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0] 1781; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1782; 1783; SDAG-MOPS-O2-LABEL: memmove_10_volatile: 1784; SDAG-MOPS-O2: // %bb.0: // %entry 1785; SDAG-MOPS-O2-NEXT: ldr x8, [x1] 1786; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8] 1787; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8] 1788; SDAG-MOPS-O2-NEXT: str x8, [x0] 1789; SDAG-MOPS-O2-NEXT: ret 1790entry: 1791 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true) 1792 ret void 1793} 1794 1795define void @memmove_1000(ptr %dst, ptr %src, i32 %value) { 1796; GISel-WITHOUT-MOPS-O0-LABEL: memmove_1000: 1797; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1798; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1799; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 1800; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 1801; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1802; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 1803; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove 1804; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1805; GISel-WITHOUT-MOPS-O0-NEXT: ret 1806; 1807; GISel-WITHOUT-MOPS-O3-LABEL: memmove_1000: 1808; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1809; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1810; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 1811; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 1812; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8 1813; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove 1814; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1815; GISel-WITHOUT-MOPS-O3-NEXT: ret 1816; 1817; GISel-MOPS-O0-LABEL: memmove_1000: 1818; GISel-MOPS-O0: // %bb.0: // %entry 1819; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1820; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 1821; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8! 1822; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8! 1823; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8! 1824; GISel-MOPS-O0-NEXT: ret 1825; 1826; GISel-MOPS-O3-LABEL: memmove_1000: 1827; GISel-MOPS-O3: // %bb.0: // %entry 1828; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8 1829; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8! 1830; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8! 1831; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8! 1832; GISel-MOPS-O3-NEXT: ret 1833; 1834; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_1000: 1835; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1836; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1837; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1838; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1839; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8 1840; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove 1841; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1842; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1843; 1844; SDAG-MOPS-O2-LABEL: memmove_1000: 1845; SDAG-MOPS-O2: // %bb.0: // %entry 1846; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8 1847; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x8! 1848; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x8! 1849; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x8! 1850; SDAG-MOPS-O2-NEXT: ret 1851entry: 1852 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false) 1853 ret void 1854} 1855 1856define void @memmove_1000_volatile(ptr %dst, ptr %src, i32 %value) { 1857; GISel-WITHOUT-MOPS-O0-LABEL: memmove_1000_volatile: 1858; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry 1859; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1860; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16 1861; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16 1862; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1863; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8 1864; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove 1865; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1866; GISel-WITHOUT-MOPS-O0-NEXT: ret 1867; 1868; GISel-WITHOUT-MOPS-O3-LABEL: memmove_1000_volatile: 1869; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry 1870; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1871; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16 1872; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16 1873; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8 1874; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove 1875; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1876; GISel-WITHOUT-MOPS-O3-NEXT: ret 1877; 1878; GISel-MOPS-O0-LABEL: memmove_1000_volatile: 1879; GISel-MOPS-O0: // %bb.0: // %entry 1880; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8 1881; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8 1882; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8! 1883; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8! 1884; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8! 1885; GISel-MOPS-O0-NEXT: ret 1886; 1887; GISel-MOPS-O3-LABEL: memmove_1000_volatile: 1888; GISel-MOPS-O3: // %bb.0: // %entry 1889; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8 1890; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8! 1891; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8! 1892; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8! 1893; GISel-MOPS-O3-NEXT: ret 1894; 1895; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_1000_volatile: 1896; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1897; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1898; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1899; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1900; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8 1901; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove 1902; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1903; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1904; 1905; SDAG-MOPS-O2-LABEL: memmove_1000_volatile: 1906; SDAG-MOPS-O2: // %bb.0: // %entry 1907; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8 1908; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x8! 1909; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x8! 1910; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x8! 1911; SDAG-MOPS-O2-NEXT: ret 1912entry: 1913 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true) 1914 ret void 1915} 1916 1917define void @memmove_n(ptr %dst, ptr %src, i64 %size, i32 %value) { 1918; GISel-WITHOUT-MOPS-LABEL: memmove_n: 1919; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1920; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1921; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 1922; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 1923; GISel-WITHOUT-MOPS-NEXT: bl memmove 1924; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1925; GISel-WITHOUT-MOPS-NEXT: ret 1926; 1927; GISel-MOPS-LABEL: memmove_n: 1928; GISel-MOPS: // %bb.0: // %entry 1929; GISel-MOPS-NEXT: cpyp [x0]!, [x1]!, x2! 1930; GISel-MOPS-NEXT: cpym [x0]!, [x1]!, x2! 1931; GISel-MOPS-NEXT: cpye [x0]!, [x1]!, x2! 1932; GISel-MOPS-NEXT: ret 1933; 1934; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_n: 1935; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1936; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1937; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1938; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1939; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove 1940; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1941; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1942; 1943; SDAG-MOPS-O2-LABEL: memmove_n: 1944; SDAG-MOPS-O2: // %bb.0: // %entry 1945; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x2! 1946; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x2! 1947; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x2! 1948; SDAG-MOPS-O2-NEXT: ret 1949entry: 1950 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false) 1951 ret void 1952} 1953 1954define void @memmove_n_volatile(ptr %dst, ptr %src, i64 %size, i32 %value) { 1955; GISel-WITHOUT-MOPS-LABEL: memmove_n_volatile: 1956; GISel-WITHOUT-MOPS: // %bb.0: // %entry 1957; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1958; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16 1959; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16 1960; GISel-WITHOUT-MOPS-NEXT: bl memmove 1961; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1962; GISel-WITHOUT-MOPS-NEXT: ret 1963; 1964; GISel-MOPS-LABEL: memmove_n_volatile: 1965; GISel-MOPS: // %bb.0: // %entry 1966; GISel-MOPS-NEXT: cpyp [x0]!, [x1]!, x2! 1967; GISel-MOPS-NEXT: cpym [x0]!, [x1]!, x2! 1968; GISel-MOPS-NEXT: cpye [x0]!, [x1]!, x2! 1969; GISel-MOPS-NEXT: ret 1970; 1971; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_n_volatile: 1972; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry 1973; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 1974; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16 1975; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16 1976; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove 1977; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 1978; SDAG-WITHOUT-MOPS-O2-NEXT: ret 1979; 1980; SDAG-MOPS-O2-LABEL: memmove_n_volatile: 1981; SDAG-MOPS-O2: // %bb.0: // %entry 1982; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x2! 1983; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x2! 1984; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x2! 1985; SDAG-MOPS-O2-NEXT: ret 1986entry: 1987 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true) 1988 ret void 1989} 1990