104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp --version 22; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s3 4define void @caller() nounwind {5; CHECK-LABEL: caller:6; CHECK: # %bb.0:7; CHECK-NEXT: pushq %rax8; CHECK-NEXT: subq $8, %rsp9; CHECK-NEXT: xorl %edi, %edi10; CHECK-NEXT: xorl %esi, %esi11; CHECK-NEXT: xorl %edx, %edx12; CHECK-NEXT: xorl %ecx, %ecx13; CHECK-NEXT: xorl %r8d, %r8d14; CHECK-NEXT: xorl %r9d, %r9d15; CHECK-NEXT: pushq $4216; CHECK-NEXT: pushq $4217; CHECK-NEXT: pushq $4218; CHECK-NEXT: pushq $4219; CHECK-NEXT: pushq $4220; CHECK-NEXT: pushq $4221; CHECK-NEXT: pushq $4222; CHECK-NEXT: callq callee@PLT23; CHECK-NEXT: addq $64, %rsp24; CHECK-NEXT: popq %rax25; CHECK-NEXT: retq26 call void @callee(ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, <7 x i32> <i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42>)27 ret void28}29 30; Make sure the stack offsets are correct. The distance between them should31; be 8, not 4.32define void @callee(ptr %p0, ptr %p1, ptr %p2, ptr %p3, ptr %p4, ptr %p5, <7 x i32> %arg) nounwind {33; CHECK-LABEL: callee:34; CHECK: # %bb.0: # %start35; CHECK-NEXT: pushq %rbp36; CHECK-NEXT: pushq %r1537; CHECK-NEXT: pushq %r1438; CHECK-NEXT: pushq %r1339; CHECK-NEXT: pushq %r1240; CHECK-NEXT: pushq %rbx41; CHECK-NEXT: subq $40, %rsp42; CHECK-NEXT: movl 120(%rsp), %ebx43; CHECK-NEXT: movd %ebx, %xmm044; CHECK-NEXT: movl 112(%rsp), %ebp45; CHECK-NEXT: movd %ebp, %xmm146; CHECK-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]47; CHECK-NEXT: movl 104(%rsp), %r15d48; CHECK-NEXT: movd %r15d, %xmm049; CHECK-NEXT: movl 96(%rsp), %edi50; CHECK-NEXT: movd %edi, %xmm251; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]52; CHECK-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]53; CHECK-NEXT: movl 136(%rsp), %r14d54; CHECK-NEXT: movd %r14d, %xmm055; CHECK-NEXT: movl 128(%rsp), %r12d56; CHECK-NEXT: movd %r12d, %xmm157; CHECK-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]58; CHECK-NEXT: movl 144(%rsp), %r13d59; CHECK-NEXT: movl %r13d, 36(%rsp)60; CHECK-NEXT: movq %xmm1, 28(%rsp)61; CHECK-NEXT: movdqu %xmm2, 12(%rsp)62; CHECK-NEXT: callq use@PLT63; CHECK-NEXT: movl %r15d, %edi64; CHECK-NEXT: callq use@PLT65; CHECK-NEXT: movl %ebp, %edi66; CHECK-NEXT: callq use@PLT67; CHECK-NEXT: movl %ebx, %edi68; CHECK-NEXT: callq use@PLT69; CHECK-NEXT: movl %r12d, %edi70; CHECK-NEXT: callq use@PLT71; CHECK-NEXT: movl %r14d, %edi72; CHECK-NEXT: callq use@PLT73; CHECK-NEXT: movl %r13d, %edi74; CHECK-NEXT: callq use@PLT75; CHECK-NEXT: addq $40, %rsp76; CHECK-NEXT: popq %rbx77; CHECK-NEXT: popq %r1278; CHECK-NEXT: popq %r1379; CHECK-NEXT: popq %r1480; CHECK-NEXT: popq %r1581; CHECK-NEXT: popq %rbp82; CHECK-NEXT: retq83start:84 %alloca = alloca [7 x i32], align 485 store <7 x i32> %arg, ptr %alloca, align 486 %extract0 = extractelement <7 x i32> %arg, i64 087 call void @use(i32 %extract0)88 %extract1 = extractelement <7 x i32> %arg, i64 189 call void @use(i32 %extract1)90 %extract2 = extractelement <7 x i32> %arg, i64 291 call void @use(i32 %extract2)92 %extract3 = extractelement <7 x i32> %arg, i64 393 call void @use(i32 %extract3)94 %extract4 = extractelement <7 x i32> %arg, i64 495 call void @use(i32 %extract4)96 %extract5 = extractelement <7 x i32> %arg, i64 597 call void @use(i32 %extract5)98 %extract6 = extractelement <7 x i32> %arg, i64 699 call void @use(i32 %extract6)100 ret void101}102 103declare void @use(i32)104