1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s | FileCheck %s 3 4target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512" 5target triple = "powerpc64le-unknown-linux-gnu" 6 7%struct_S1 = type { [1 x i8] } 8@gS1 = external global %struct_S1, align 1 9 10define void @call_test_byval_mem1() #0 { 11; CHECK-LABEL: call_test_byval_mem1: 12; CHECK: # %bb.0: # %entry 13; CHECK-NEXT: mflr 0 14; CHECK-NEXT: stdu 1, -32(1) 15; CHECK-NEXT: std 0, 48(1) 16; CHECK-NEXT: .cfi_def_cfa_offset 32 17; CHECK-NEXT: .cfi_offset lr, 16 18; CHECK-NEXT: addis 3, 2, .LC0@toc@ha 19; CHECK-NEXT: ld 3, .LC0@toc@l(3) 20; CHECK-NEXT: lbz 3, 0(3) 21; CHECK-NEXT: bl test_byval_mem1 22; CHECK-NEXT: nop 23; CHECK-NEXT: addi 1, 1, 32 24; CHECK-NEXT: ld 0, 16(1) 25; CHECK-NEXT: mtlr 0 26; CHECK-NEXT: blr 27entry: 28 %call = call zeroext i8 @test_byval_mem1(ptr byval(%struct_S1) align 1 @gS1) 29 ret void 30} 31 32define zeroext i8 @test_byval_mem1(ptr byval(%struct_S1) align 1 %s) { 33; CHECK-LABEL: test_byval_mem1: 34; CHECK: # %bb.0: # %entry 35; CHECK-NEXT: stb 3, -8(1) 36; CHECK-NEXT: clrldi 3, 3, 56 37; CHECK-NEXT: blr 38entry: 39 %0 = load i8, ptr %s, align 1 40 ret i8 %0 41} 42 43define void @call_test_byval_mem1_2() #0 { 44; CHECK-LABEL: call_test_byval_mem1_2: 45; CHECK: # %bb.0: # %entry 46; CHECK-NEXT: mflr 0 47; CHECK-NEXT: stdu 1, -112(1) 48; CHECK-NEXT: std 0, 128(1) 49; CHECK-NEXT: .cfi_def_cfa_offset 112 50; CHECK-NEXT: .cfi_offset lr, 16 51; CHECK-NEXT: addis 3, 2, .LC0@toc@ha 52; CHECK-NEXT: li 4, 1 53; CHECK-NEXT: li 5, 2 54; CHECK-NEXT: li 6, 3 55; CHECK-NEXT: li 7, 4 56; CHECK-NEXT: li 8, 5 57; CHECK-NEXT: li 9, 6 58; CHECK-NEXT: li 10, 7 59; CHECK-NEXT: ld 3, .LC0@toc@l(3) 60; CHECK-NEXT: lbz 3, 0(3) 61; CHECK-NEXT: stb 3, 96(1) 62; CHECK-NEXT: li 3, 0 63; CHECK-NEXT: bl test_byval_mem1_2 64; CHECK-NEXT: nop 65; CHECK-NEXT: addi 1, 1, 112 66; CHECK-NEXT: ld 0, 16(1) 67; CHECK-NEXT: mtlr 0 68; CHECK-NEXT: blr 69entry: 70 %call = call zeroext i8 @test_byval_mem1_2(i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, ptr byval(%struct_S1) align 1 @gS1) 71 ret void 72} 73 74define zeroext i8 @test_byval_mem1_2(i64 %v1, i64 %v2, i64 %v3, i64 %v4, i64 %v5, i64 %v6, i64 %v7, i64 %v8, ptr byval(%struct_S1) align 1 %s) { 75; CHECK-LABEL: test_byval_mem1_2: 76; CHECK: # %bb.0: # %entry 77; CHECK-NEXT: lbz 3, 96(1) 78; CHECK-NEXT: blr 79entry: 80 %0 = load i8, ptr %s, align 1 81 ret i8 %0 82} 83 84define void @call_test_byval_mem1_3() #0 { 85; CHECK-LABEL: call_test_byval_mem1_3: 86; CHECK: # %bb.0: # %entry 87; CHECK-NEXT: mflr 0 88; CHECK-NEXT: stdu 1, -32(1) 89; CHECK-NEXT: std 0, 48(1) 90; CHECK-NEXT: .cfi_def_cfa_offset 32 91; CHECK-NEXT: .cfi_offset lr, 16 92; CHECK-NEXT: addis 3, 2, .LC0@toc@ha 93; CHECK-NEXT: li 4, 1 94; CHECK-NEXT: li 5, 2 95; CHECK-NEXT: li 6, 3 96; CHECK-NEXT: li 7, 4 97; CHECK-NEXT: li 8, 5 98; CHECK-NEXT: li 9, 6 99; CHECK-NEXT: ld 3, .LC0@toc@l(3) 100; CHECK-NEXT: lbz 10, 0(3) 101; CHECK-NEXT: li 3, 0 102; CHECK-NEXT: bl test_byval_mem1_3 103; CHECK-NEXT: nop 104; CHECK-NEXT: addi 1, 1, 32 105; CHECK-NEXT: ld 0, 16(1) 106; CHECK-NEXT: mtlr 0 107; CHECK-NEXT: blr 108entry: 109 %call = call zeroext i8 @test_byval_mem1_3(i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, ptr byval(%struct_S1) align 1 @gS1) 110 ret void 111} 112 113define zeroext i8 @test_byval_mem1_3(i64 %v1, i64 %v2, i64 %v3, i64 %v4, i64 %v5, i64 %v6, i64 %v7, ptr byval(%struct_S1) align 1 %s) { 114; CHECK-LABEL: test_byval_mem1_3: 115; CHECK: # %bb.0: # %entry 116; CHECK-NEXT: clrldi 3, 10, 56 117; CHECK-NEXT: stb 10, -8(1) 118; CHECK-NEXT: blr 119entry: 120 %0 = load i8, ptr %s, align 1 121 ret i8 %0 122} 123 124define void @call_test_byval_mem1_4() #0 { 125; CHECK-LABEL: call_test_byval_mem1_4: 126; CHECK: # %bb.0: # %entry 127; CHECK-NEXT: mflr 0 128; CHECK-NEXT: stdu 1, -112(1) 129; CHECK-NEXT: std 0, 128(1) 130; CHECK-NEXT: .cfi_def_cfa_offset 112 131; CHECK-NEXT: .cfi_offset lr, 16 132; CHECK-NEXT: li 3, 7 133; CHECK-NEXT: li 4, 1 134; CHECK-NEXT: li 5, 2 135; CHECK-NEXT: li 7, 3 136; CHECK-NEXT: li 8, 4 137; CHECK-NEXT: li 9, 5 138; CHECK-NEXT: li 10, 6 139; CHECK-NEXT: std 3, 96(1) 140; CHECK-NEXT: addis 3, 2, .LC0@toc@ha 141; CHECK-NEXT: ld 3, .LC0@toc@l(3) 142; CHECK-NEXT: lbz 6, 0(3) 143; CHECK-NEXT: li 3, 0 144; CHECK-NEXT: bl test_byval_mem1_4 145; CHECK-NEXT: nop 146; CHECK-NEXT: addi 1, 1, 112 147; CHECK-NEXT: ld 0, 16(1) 148; CHECK-NEXT: mtlr 0 149; CHECK-NEXT: blr 150entry: 151 %call = call zeroext i8 @test_byval_mem1_4(i64 0, i64 1, i64 2, ptr byval(%struct_S1) align 1 @gS1, i64 3, i64 4, i64 5, i64 6, i64 7) 152 ret void 153} 154 155define zeroext i8 @test_byval_mem1_4(i64 %v1, i64 %v2, i64 %v3, ptr byval(%struct_S1) align 1 %s, i64 %v4, i64 %v5, i64 %v6, i64 %v7, i64 %v8) { 156; CHECK-LABEL: test_byval_mem1_4: 157; CHECK: # %bb.0: # %entry 158; CHECK-NEXT: clrldi 3, 6, 56 159; CHECK-NEXT: stb 6, 56(1) 160; CHECK-NEXT: blr 161entry: 162 %0 = load i8, ptr %s, align 1 163 ret i8 %0 164} 165 166define void @call_test_byval_mem1_5() #0 { 167; CHECK-LABEL: call_test_byval_mem1_5: 168; CHECK: # %bb.0: # %entry 169; CHECK-NEXT: mflr 0 170; CHECK-NEXT: stdu 1, -32(1) 171; CHECK-NEXT: std 0, 48(1) 172; CHECK-NEXT: .cfi_def_cfa_offset 32 173; CHECK-NEXT: .cfi_offset lr, 16 174; CHECK-NEXT: addis 3, 2, .LC0@toc@ha 175; CHECK-NEXT: li 4, 1 176; CHECK-NEXT: li 5, 2 177; CHECK-NEXT: li 7, 3 178; CHECK-NEXT: li 8, 4 179; CHECK-NEXT: li 9, 5 180; CHECK-NEXT: li 10, 6 181; CHECK-NEXT: ld 3, .LC0@toc@l(3) 182; CHECK-NEXT: lbz 6, 0(3) 183; CHECK-NEXT: li 3, 0 184; CHECK-NEXT: bl test_byval_mem1_5 185; CHECK-NEXT: nop 186; CHECK-NEXT: addi 1, 1, 32 187; CHECK-NEXT: ld 0, 16(1) 188; CHECK-NEXT: mtlr 0 189; CHECK-NEXT: blr 190entry: 191 %call = call zeroext i8 @test_byval_mem1_5(i64 0, i64 1, i64 2, ptr byval(%struct_S1) align 1 @gS1, i64 3, i64 4, i64 5, i64 6) 192 ret void 193} 194 195define zeroext i8 @test_byval_mem1_5(i64 %v1, i64 %v2, i64 %v3, ptr byval(%struct_S1) align 1 %s, i64 %v4, i64 %v5, i64 %v6, i64 %v7) { 196; CHECK-LABEL: test_byval_mem1_5: 197; CHECK: # %bb.0: # %entry 198; CHECK-NEXT: clrldi 3, 6, 56 199; CHECK-NEXT: stb 6, -8(1) 200; CHECK-NEXT: blr 201entry: 202 %0 = load i8, ptr %s, align 1 203 ret i8 %0 204} 205 206%struct_S2 = type { [2 x i8] } 207@gS2 = external global %struct_S2, align 1 208 209define void @call_test_byval_mem2() #0 { 210; CHECK-LABEL: call_test_byval_mem2: 211; CHECK: # %bb.0: # %entry 212; CHECK-NEXT: mflr 0 213; CHECK-NEXT: stdu 1, -32(1) 214; CHECK-NEXT: std 0, 48(1) 215; CHECK-NEXT: .cfi_def_cfa_offset 32 216; CHECK-NEXT: .cfi_offset lr, 16 217; CHECK-NEXT: addis 3, 2, .LC1@toc@ha 218; CHECK-NEXT: ld 3, .LC1@toc@l(3) 219; CHECK-NEXT: lhz 3, 0(3) 220; CHECK-NEXT: bl test_byval_mem2 221; CHECK-NEXT: nop 222; CHECK-NEXT: addi 1, 1, 32 223; CHECK-NEXT: ld 0, 16(1) 224; CHECK-NEXT: mtlr 0 225; CHECK-NEXT: blr 226entry: 227 %call = call zeroext i8 @test_byval_mem2(ptr byval(%struct_S2) align 1 @gS2) 228 ret void 229} 230 231define zeroext i8 @test_byval_mem2(ptr byval(%struct_S2) align 1 %s) { 232; CHECK-LABEL: test_byval_mem2: 233; CHECK: # %bb.0: # %entry 234; CHECK-NEXT: sth 3, -8(1) 235; CHECK-NEXT: lbz 3, -8(1) 236; CHECK-NEXT: blr 237entry: 238 %0 = load i8, ptr %s, align 1 239 ret i8 %0 240} 241 242%struct_S3 = type { [3 x i8] } 243@gS3 = external global %struct_S3, align 1 244 245define void @call_test_byval_mem3() #0 { 246; CHECK-LABEL: call_test_byval_mem3: 247; CHECK: # %bb.0: # %entry 248; CHECK-NEXT: mflr 0 249; CHECK-NEXT: stdu 1, -32(1) 250; CHECK-NEXT: std 0, 48(1) 251; CHECK-NEXT: .cfi_def_cfa_offset 32 252; CHECK-NEXT: .cfi_offset lr, 16 253; CHECK-NEXT: addis 3, 2, .LC2@toc@ha 254; CHECK-NEXT: ld 3, .LC2@toc@l(3) 255; CHECK-NEXT: lbz 4, 2(3) 256; CHECK-NEXT: stb 4, 34(1) 257; CHECK-NEXT: lhz 3, 0(3) 258; CHECK-NEXT: sth 3, 32(1) 259; CHECK-NEXT: ld 3, 32(1) 260; CHECK-NEXT: bl test_byval_mem3 261; CHECK-NEXT: nop 262; CHECK-NEXT: addi 1, 1, 32 263; CHECK-NEXT: ld 0, 16(1) 264; CHECK-NEXT: mtlr 0 265; CHECK-NEXT: blr 266entry: 267 %call = call zeroext i8 @test_byval_mem3(ptr byval(%struct_S3) align 1 @gS3) 268 ret void 269} 270 271define zeroext i8 @test_byval_mem3(ptr byval(%struct_S3) align 1 %s) { 272; CHECK-LABEL: test_byval_mem3: 273; CHECK: # %bb.0: # %entry 274; CHECK-NEXT: sth 3, -8(1) 275; CHECK-NEXT: rldicl 3, 3, 48, 16 276; CHECK-NEXT: stb 3, -6(1) 277; CHECK-NEXT: lbz 3, -8(1) 278; CHECK-NEXT: blr 279entry: 280 %0 = load i8, ptr %s, align 1 281 ret i8 %0 282} 283 284%struct_S4 = type { [4 x i8] } 285@gS4 = external global %struct_S4, align 1 286 287define void @call_test_byval_mem4() #0 { 288; CHECK-LABEL: call_test_byval_mem4: 289; CHECK: # %bb.0: # %entry 290; CHECK-NEXT: mflr 0 291; CHECK-NEXT: stdu 1, -32(1) 292; CHECK-NEXT: std 0, 48(1) 293; CHECK-NEXT: .cfi_def_cfa_offset 32 294; CHECK-NEXT: .cfi_offset lr, 16 295; CHECK-NEXT: addis 3, 2, .LC3@toc@ha 296; CHECK-NEXT: ld 3, .LC3@toc@l(3) 297; CHECK-NEXT: lwz 3, 0(3) 298; CHECK-NEXT: bl test_byval_mem4 299; CHECK-NEXT: nop 300; CHECK-NEXT: addi 1, 1, 32 301; CHECK-NEXT: ld 0, 16(1) 302; CHECK-NEXT: mtlr 0 303; CHECK-NEXT: blr 304entry: 305 %call = call zeroext i8 @test_byval_mem4(ptr byval(%struct_S4) align 1 @gS4) 306 ret void 307} 308 309define zeroext i8 @test_byval_mem4(ptr byval(%struct_S4) align 1 %s) { 310; CHECK-LABEL: test_byval_mem4: 311; CHECK: # %bb.0: # %entry 312; CHECK-NEXT: stw 3, -8(1) 313; CHECK-NEXT: lbz 3, -8(1) 314; CHECK-NEXT: blr 315entry: 316 %0 = load i8, ptr %s, align 1 317 ret i8 %0 318} 319 320%struct_S8 = type { [8 x i8] } 321@gS8 = external global %struct_S8, align 1 322 323define void @call_test_byval_mem8() #0 { 324; CHECK-LABEL: call_test_byval_mem8: 325; CHECK: # %bb.0: # %entry 326; CHECK-NEXT: mflr 0 327; CHECK-NEXT: stdu 1, -32(1) 328; CHECK-NEXT: std 0, 48(1) 329; CHECK-NEXT: .cfi_def_cfa_offset 32 330; CHECK-NEXT: .cfi_offset lr, 16 331; CHECK-NEXT: addis 3, 2, .LC4@toc@ha 332; CHECK-NEXT: ld 3, .LC4@toc@l(3) 333; CHECK-NEXT: ld 3, 0(3) 334; CHECK-NEXT: bl test_byval_mem8 335; CHECK-NEXT: nop 336; CHECK-NEXT: addi 1, 1, 32 337; CHECK-NEXT: ld 0, 16(1) 338; CHECK-NEXT: mtlr 0 339; CHECK-NEXT: blr 340entry: 341 %call = call zeroext i8 @test_byval_mem8(ptr byval(%struct_S8) align 1 @gS8) 342 ret void 343} 344 345define zeroext i8 @test_byval_mem8(ptr byval(%struct_S8) align 1 %s) { 346; CHECK-LABEL: test_byval_mem8: 347; CHECK: # %bb.0: # %entry 348; CHECK-NEXT: std 3, -8(1) 349; CHECK-NEXT: clrldi 3, 3, 56 350; CHECK-NEXT: blr 351entry: 352 %0 = load i8, ptr %s, align 1 353 ret i8 %0 354} 355 356%struct_S32 = type {[32 x i8] } 357@gS32 = external global %struct_S32, align 1 358 359define void @call_test_byval_mem32() #0 { 360; CHECK-LABEL: call_test_byval_mem32: 361; CHECK: # %bb.0: # %entry 362; CHECK-NEXT: mflr 0 363; CHECK-NEXT: stdu 1, -32(1) 364; CHECK-NEXT: std 0, 48(1) 365; CHECK-NEXT: .cfi_def_cfa_offset 32 366; CHECK-NEXT: .cfi_offset lr, 16 367; CHECK-NEXT: addis 3, 2, .LC5@toc@ha 368; CHECK-NEXT: ld 3, .LC5@toc@l(3) 369; CHECK-NEXT: ld 6, 24(3) 370; CHECK-NEXT: ld 5, 16(3) 371; CHECK-NEXT: ld 4, 8(3) 372; CHECK-NEXT: ld 3, 0(3) 373; CHECK-NEXT: bl test_byval_mem32 374; CHECK-NEXT: nop 375; CHECK-NEXT: addi 1, 1, 32 376; CHECK-NEXT: ld 0, 16(1) 377; CHECK-NEXT: mtlr 0 378; CHECK-NEXT: blr 379entry: 380 %call = call zeroext i8 @test_byval_mem32(ptr byval(%struct_S32) align 1 @gS32) 381 ret void 382} 383 384define zeroext i8 @test_byval_mem32(ptr byval(%struct_S32) align 1 %s) { 385; CHECK-LABEL: test_byval_mem32: 386; CHECK: # %bb.0: # %entry 387; CHECK-NEXT: std 3, -32(1) 388; CHECK-NEXT: clrldi 3, 3, 56 389; CHECK-NEXT: std 4, -24(1) 390; CHECK-NEXT: std 5, -16(1) 391; CHECK-NEXT: std 6, -8(1) 392; CHECK-NEXT: blr 393entry: 394 %0 = load i8, ptr %s, align 1 395 ret i8 %0 396} 397 398define void @call_test_byval_mem32_2() #0 { 399; CHECK-LABEL: call_test_byval_mem32_2: 400; CHECK: # %bb.0: # %entry 401; CHECK-NEXT: mflr 0 402; CHECK-NEXT: stdu 1, -32(1) 403; CHECK-NEXT: std 0, 48(1) 404; CHECK-NEXT: .cfi_def_cfa_offset 32 405; CHECK-NEXT: .cfi_offset lr, 16 406; CHECK-NEXT: vspltisw 2, 1 407; CHECK-NEXT: addis 3, 2, .LC5@toc@ha 408; CHECK-NEXT: ld 3, .LC5@toc@l(3) 409; CHECK-NEXT: xvcvsxwdp 1, 34 410; CHECK-NEXT: ld 7, 24(3) 411; CHECK-NEXT: ld 6, 16(3) 412; CHECK-NEXT: ld 5, 8(3) 413; CHECK-NEXT: ld 4, 0(3) 414; CHECK-NEXT: bl test_byval_mem32_2 415; CHECK-NEXT: nop 416; CHECK-NEXT: addi 1, 1, 32 417; CHECK-NEXT: ld 0, 16(1) 418; CHECK-NEXT: mtlr 0 419; CHECK-NEXT: blr 420entry: 421 %call = call zeroext i8 @test_byval_mem32_2(float 1.0, ptr byval(%struct_S32) align 1 @gS32) 422 ret void 423} 424 425define zeroext i8 @test_byval_mem32_2(float %f, ptr byval(%struct_S32) align 1 %s) { 426; CHECK-LABEL: test_byval_mem32_2: 427; CHECK: # %bb.0: # %entry 428; CHECK-NEXT: clrldi 3, 4, 56 429; CHECK-NEXT: std 4, -32(1) 430; CHECK-NEXT: std 5, -24(1) 431; CHECK-NEXT: std 6, -16(1) 432; CHECK-NEXT: std 7, -8(1) 433; CHECK-NEXT: blr 434entry: 435 %0 = load i8, ptr %s, align 1 436 ret i8 %0 437} 438 439define void @call_test_byval_mem32_3() #0 { 440; CHECK-LABEL: call_test_byval_mem32_3: 441; CHECK: # %bb.0: # %entry 442; CHECK-NEXT: mflr 0 443; CHECK-NEXT: stdu 1, -112(1) 444; CHECK-NEXT: std 0, 128(1) 445; CHECK-NEXT: .cfi_def_cfa_offset 112 446; CHECK-NEXT: .cfi_offset lr, 16 447; CHECK-NEXT: addis 3, 2, .LC5@toc@ha 448; CHECK-NEXT: li 4, 16 449; CHECK-NEXT: vspltisw 2, 1 450; CHECK-NEXT: vspltisw 3, 4 451; CHECK-NEXT: li 5, 3 452; CHECK-NEXT: li 7, 2 453; CHECK-NEXT: ld 3, .LC5@toc@l(3) 454; CHECK-NEXT: xvcvsxwdp 1, 34 455; CHECK-NEXT: xvcvsxwdp 2, 35 456; CHECK-NEXT: lxvd2x 0, 3, 4 457; CHECK-NEXT: li 4, 88 458; CHECK-NEXT: stxvd2x 0, 1, 4 459; CHECK-NEXT: li 4, 72 460; CHECK-NEXT: lxvd2x 0, 0, 3 461; CHECK-NEXT: stxvd2x 0, 1, 4 462; CHECK-NEXT: ld 10, 16(3) 463; CHECK-NEXT: ld 9, 8(3) 464; CHECK-NEXT: ld 8, 0(3) 465; CHECK-NEXT: li 3, 1 466; CHECK-NEXT: bl test_byval_mem32_3 467; CHECK-NEXT: nop 468; CHECK-NEXT: addi 1, 1, 112 469; CHECK-NEXT: ld 0, 16(1) 470; CHECK-NEXT: mtlr 0 471; CHECK-NEXT: blr 472entry: 473 %call = call zeroext i8 @test_byval_mem32_3(i64 1, float 1.0, i64 3, double 4.0, i32 2, ptr byval(%struct_S32) align 1 @gS32) 474 ret void 475} 476 477define zeroext i8 @test_byval_mem32_3(i64 %i1, float %f, i64 %i2, double %d, i32 %i3, ptr byval(%struct_S32) align 1 %s) { 478; CHECK-LABEL: test_byval_mem32_3: 479; CHECK: # %bb.0: # %entry 480; CHECK-NEXT: clrldi 3, 8, 56 481; CHECK-NEXT: std 8, 72(1) 482; CHECK-NEXT: std 9, 80(1) 483; CHECK-NEXT: std 10, 88(1) 484; CHECK-NEXT: blr 485entry: 486 %0 = load i8, ptr %s, align 1 487 ret i8 %0 488} 489 490%struct_S64 = type {[64 x i8] } 491@gS64= external global %struct_S64, align 1 492 493define void @call_test_byval_mem64() #0 { 494; CHECK-LABEL: call_test_byval_mem64: 495; CHECK: # %bb.0: # %entry 496; CHECK-NEXT: mflr 0 497; CHECK-NEXT: stdu 1, -32(1) 498; CHECK-NEXT: std 0, 48(1) 499; CHECK-NEXT: .cfi_def_cfa_offset 32 500; CHECK-NEXT: .cfi_offset lr, 16 501; CHECK-NEXT: addis 3, 2, .LC6@toc@ha 502; CHECK-NEXT: ld 3, .LC6@toc@l(3) 503; CHECK-NEXT: ld 10, 56(3) 504; CHECK-NEXT: ld 9, 48(3) 505; CHECK-NEXT: ld 8, 40(3) 506; CHECK-NEXT: ld 7, 32(3) 507; CHECK-NEXT: ld 6, 24(3) 508; CHECK-NEXT: ld 5, 16(3) 509; CHECK-NEXT: ld 4, 8(3) 510; CHECK-NEXT: ld 3, 0(3) 511; CHECK-NEXT: bl test_byval_mem64 512; CHECK-NEXT: nop 513; CHECK-NEXT: addi 1, 1, 32 514; CHECK-NEXT: ld 0, 16(1) 515; CHECK-NEXT: mtlr 0 516; CHECK-NEXT: blr 517entry: 518 %call = call zeroext i8 @test_byval_mem64(ptr byval(%struct_S64) align 1 @gS64) 519 ret void 520} 521 522define zeroext i8 @test_byval_mem64(ptr byval(%struct_S64) align 1 %s) { 523; CHECK-LABEL: test_byval_mem64: 524; CHECK: # %bb.0: # %entry 525; CHECK-NEXT: std 3, -64(1) 526; CHECK-NEXT: clrldi 3, 3, 56 527; CHECK-NEXT: std 4, -56(1) 528; CHECK-NEXT: std 5, -48(1) 529; CHECK-NEXT: std 6, -40(1) 530; CHECK-NEXT: std 7, -32(1) 531; CHECK-NEXT: std 8, -24(1) 532; CHECK-NEXT: std 9, -16(1) 533; CHECK-NEXT: std 10, -8(1) 534; CHECK-NEXT: blr 535entry: 536 %0 = load i8, ptr %s, align 1 537 ret i8 %0 538} 539 540%struct_S65 = type { [65 x i8] } 541@gS65 = external global %struct_S65, align 1 542 543define void @call_test_byval_mem65() #0 { 544; CHECK-LABEL: call_test_byval_mem65: 545; CHECK: # %bb.0: # %entry 546; CHECK-NEXT: mflr 0 547; CHECK-NEXT: stdu 1, -112(1) 548; CHECK-NEXT: std 0, 128(1) 549; CHECK-NEXT: .cfi_def_cfa_offset 112 550; CHECK-NEXT: .cfi_offset lr, 16 551; CHECK-NEXT: addis 3, 2, .LC7@toc@ha 552; CHECK-NEXT: li 4, 48 553; CHECK-NEXT: li 5, 80 554; CHECK-NEXT: li 6, 64 555; CHECK-NEXT: ld 3, .LC7@toc@l(3) 556; CHECK-NEXT: lxvd2x 0, 3, 4 557; CHECK-NEXT: stxvd2x 0, 1, 5 558; CHECK-NEXT: li 5, 32 559; CHECK-NEXT: lxvd2x 0, 3, 5 560; CHECK-NEXT: stxvd2x 0, 1, 6 561; CHECK-NEXT: li 6, 16 562; CHECK-NEXT: lxvd2x 0, 3, 6 563; CHECK-NEXT: stxvd2x 0, 1, 4 564; CHECK-NEXT: lxvd2x 0, 0, 3 565; CHECK-NEXT: stxvd2x 0, 1, 5 566; CHECK-NEXT: lbz 4, 64(3) 567; CHECK-NEXT: stb 4, 96(1) 568; CHECK-NEXT: ld 10, 56(3) 569; CHECK-NEXT: ld 9, 48(3) 570; CHECK-NEXT: ld 8, 40(3) 571; CHECK-NEXT: ld 7, 32(3) 572; CHECK-NEXT: ld 6, 24(3) 573; CHECK-NEXT: ld 5, 16(3) 574; CHECK-NEXT: ld 4, 8(3) 575; CHECK-NEXT: ld 3, 0(3) 576; CHECK-NEXT: bl test_byval_mem65 577; CHECK-NEXT: nop 578; CHECK-NEXT: addi 1, 1, 112 579; CHECK-NEXT: ld 0, 16(1) 580; CHECK-NEXT: mtlr 0 581; CHECK-NEXT: blr 582entry: 583 %call = call zeroext i8 @test_byval_mem65(ptr byval(%struct_S65) align 1 @gS65) 584 ret void 585} 586 587define zeroext i8 @test_byval_mem65(ptr byval(%struct_S65) align 1 %s) { 588; CHECK-LABEL: test_byval_mem65: 589; CHECK: # %bb.0: # %entry 590; CHECK-NEXT: std 3, 32(1) 591; CHECK-NEXT: clrldi 3, 3, 56 592; CHECK-NEXT: std 4, 40(1) 593; CHECK-NEXT: std 5, 48(1) 594; CHECK-NEXT: std 6, 56(1) 595; CHECK-NEXT: std 7, 64(1) 596; CHECK-NEXT: std 8, 72(1) 597; CHECK-NEXT: std 9, 80(1) 598; CHECK-NEXT: std 10, 88(1) 599; CHECK-NEXT: blr 600entry: 601 %0 = load i8, ptr %s, align 1 602 ret i8 %0 603} 604