1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s 3 4define <8 x i32> @foo(<8 x i32> %arg1, i32 %n) #0 { 5; CHECK-LABEL: foo: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 8; CHECK-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp) 9; CHECK-NEXT: andl $7, %edi 10; CHECK-NEXT: movl $42, -40(%rsp,%rdi,4) 11; CHECK-NEXT: vmovups -{{[0-9]+}}(%rsp), %ymm0 12; CHECK-NEXT: retq 13entry: 14 %a = insertelement <8 x i32> %arg1, i32 42, i32 %n 15 ret <8 x i32> %a 16} 17 18define <8 x i32> @foo2(<8 x i32> %arg1, i32 %n) alignstack(8) #0 { 19; CHECK-LABEL: foo2: 20; CHECK: # %bb.0: # %entry 21; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 22; CHECK-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp) 23; CHECK-NEXT: andl $7, %edi 24; CHECK-NEXT: movl $42, -32(%rsp,%rdi,4) 25; CHECK-NEXT: vmovups -{{[0-9]+}}(%rsp), %ymm0 26; CHECK-NEXT: retq 27entry: 28 %a = insertelement <8 x i32> %arg1, i32 42, i32 %n 29 ret <8 x i32> %a 30} 31 32define <8 x i32> @foo3(<8 x i32> %arg1, i32 %n) alignstack(16) #0 { 33; CHECK-LABEL: foo3: 34; CHECK: # %bb.0: # %entry 35; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 36; CHECK-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp) 37; CHECK-NEXT: andl $7, %edi 38; CHECK-NEXT: movl $42, -40(%rsp,%rdi,4) 39; CHECK-NEXT: vmovups -{{[0-9]+}}(%rsp), %ymm0 40; CHECK-NEXT: retq 41entry: 42 %a = insertelement <8 x i32> %arg1, i32 42, i32 %n 43 ret <8 x i32> %a 44} 45 46define <8 x i32> @foo4(<8 x i32> %arg1, i32 %n) alignstack(64) #0 { 47; CHECK-LABEL: foo4: 48; CHECK: # %bb.0: # %entry 49; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 50; CHECK-NEXT: vmovaps %ymm0, -{{[0-9]+}}(%rsp) 51; CHECK-NEXT: andl $7, %edi 52; CHECK-NEXT: movl $42, -56(%rsp,%rdi,4) 53; CHECK-NEXT: vmovaps -{{[0-9]+}}(%rsp), %ymm0 54; CHECK-NEXT: retq 55entry: 56 %a = insertelement <8 x i32> %arg1, i32 42, i32 %n 57 ret <8 x i32> %a 58} 59 60define <8 x i32> @foo5(<8 x i32> %arg1, i32 %n) alignstack(256) #0 { 61; CHECK-LABEL: foo5: 62; CHECK: # %bb.0: # %entry 63; CHECK-NEXT: subq $120, %rsp 64; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 65; CHECK-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) 66; CHECK-NEXT: andl $7, %edi 67; CHECK-NEXT: movl $42, 64(%rsp,%rdi,4) 68; CHECK-NEXT: vmovaps {{[0-9]+}}(%rsp), %ymm0 69; CHECK-NEXT: addq $120, %rsp 70; CHECK-NEXT: retq 71entry: 72 %a = insertelement <8 x i32> %arg1, i32 42, i32 %n 73 ret <8 x i32> %a 74} 75 76define <8 x i16> @foo6(<8 x i16> %arg1, i32 %n) #0 { 77; CHECK-LABEL: foo6: 78; CHECK: # %bb.0: # %entry 79; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 80; CHECK-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 81; CHECK-NEXT: andl $7, %edi 82; CHECK-NEXT: movw $42, -24(%rsp,%rdi,2) 83; CHECK-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0 84; CHECK-NEXT: retq 85entry: 86 %a = insertelement <8 x i16> %arg1, i16 42, i32 %n 87 ret <8 x i16> %a 88} 89 90define <8 x i8> @foo7(<8 x i8> %arg1, i32 %n) #0 { 91; CHECK-LABEL: foo7: 92; CHECK: # %bb.0: # %entry 93; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 94; CHECK-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 95; CHECK-NEXT: andl $15, %edi 96; CHECK-NEXT: movb $42, -24(%rsp,%rdi) 97; CHECK-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0 98; CHECK-NEXT: retq 99entry: 100 %a = insertelement <8 x i8> %arg1, i8 42, i32 %n 101 ret <8 x i8> %a 102} 103 104define <8 x i64> @foo8(<8 x i64> %arg1, i32 %n) #0 { 105; CHECK-LABEL: foo8: 106; CHECK: # %bb.0: # %entry 107; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 108; CHECK-NEXT: vmovups %ymm1, -{{[0-9]+}}(%rsp) 109; CHECK-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp) 110; CHECK-NEXT: andl $7, %edi 111; CHECK-NEXT: movq $42, -72(%rsp,%rdi,8) 112; CHECK-NEXT: vmovups -{{[0-9]+}}(%rsp), %ymm0 113; CHECK-NEXT: vmovups -{{[0-9]+}}(%rsp), %ymm1 114; CHECK-NEXT: retq 115entry: 116 %a = insertelement <8 x i64> %arg1, i64 42, i32 %n 117 ret <8 x i64> %a 118} 119 120attributes #0 = { "no-realign-stack" nounwind } 121