1; Make sure that we realign the stack. Mingw32 uses 4 byte stack alignment, we 2; need 16 bytes for SSE and 32 bytes for AVX. 3 4; RUN: llc < %s -mtriple=i386-pc-mingw32 -mcpu=pentium2 | FileCheck %s -check-prefix=NOSSE 5; RUN: llc < %s -mtriple=i386-pc-mingw32 -mcpu=pentium3 | FileCheck %s -check-prefix=SSE1 6; RUN: llc < %s -mtriple=i386-pc-mingw32 -mcpu=yonah | FileCheck %s -check-prefix=SSE2 7; RUN: llc < %s -mtriple=i386-pc-mingw32 -mcpu=corei7-avx | FileCheck %s -check-prefix=AVX1 8; RUN: llc < %s -mtriple=i386-pc-mingw32 -mcpu=core-avx2 | FileCheck %s -check-prefix=AVX2 9 10define void @test1(i32 %t) nounwind { 11 %tmp1210 = alloca i8, i32 32, align 4 12 call void @llvm.memset.p0i8.i64(i8* %tmp1210, i8 0, i64 32, i32 4, i1 false) 13 %x = alloca i8, i32 %t 14 call void @dummy(i8* %x) 15 ret void 16 17; NOSSE-LABEL: test1: 18; NOSSE-NOT: and 19; NOSSE: movl $0 20 21; SSE1-LABEL: test1: 22; SSE1: andl $-16 23; SSE1: movl %esp, %esi 24; SSE1: movaps 25 26; SSE2-LABEL: test1: 27; SSE2: andl $-16 28; SSE2: movl %esp, %esi 29; SSE2: movaps 30 31; AVX1-LABEL: test1: 32; AVX1: andl $-32 33; AVX1: movl %esp, %esi 34; AVX1: vmovaps %ymm 35 36; AVX2-LABEL: test1: 37; AVX2: andl $-32 38; AVX2: movl %esp, %esi 39; AVX2: vmovaps %ymm 40 41} 42 43define void @test2(i32 %t) nounwind { 44 %tmp1210 = alloca i8, i32 16, align 4 45 call void @llvm.memset.p0i8.i64(i8* %tmp1210, i8 0, i64 16, i32 4, i1 false) 46 %x = alloca i8, i32 %t 47 call void @dummy(i8* %x) 48 ret void 49 50; NOSSE-LABEL: test2: 51; NOSSE-NOT: and 52; NOSSE: movl $0 53 54; SSE1-LABEL: test2: 55; SSE1: andl $-16 56; SSE1: movl %esp, %esi 57; SSE1: movaps 58 59; SSE2-LABEL: test2: 60; SSE2: andl $-16 61; SSE2: movl %esp, %esi 62; SSE2: movaps 63 64; AVX1-LABEL: test2: 65; AVX1: andl $-16 66; AVX1: movl %esp, %esi 67; AVX1: vmovaps %xmm 68 69; AVX2-LABEL: test2: 70; AVX2: andl $-16 71; AVX2: movl %esp, %esi 72; AVX2: vmovaps %xmm 73} 74 75declare void @dummy(i8*) 76 77declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind 78