1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=generic -mtriple=i686-pc-windows-msvc -mattr=+sse < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Check proper alignment of spilled vector 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: spill_ok 6*9880d681SAndroid Build Coastguard Worker; CHECK: subl $32, %esp 7*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm3, (%esp) 8*9880d681SAndroid Build Coastguard Worker; CHECK: movl $0, 16(%esp) 9*9880d681SAndroid Build Coastguard Worker; CHECK: calll _bar 10*9880d681SAndroid Build Coastguard Workerdefine void @spill_ok(i32, <16 x float> *) { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker %2 = alloca i32, i32 %0 13*9880d681SAndroid Build Coastguard Worker %3 = load <16 x float>, <16 x float> * %1, align 64 14*9880d681SAndroid Build Coastguard Worker tail call void @bar(<16 x float> %3, i32 0) nounwind 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdeclare void @bar(<16 x float> %a, i32 %b) 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; Check that proper alignment of spilled vector does not affect vargs 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vargs_not_affected 23*9880d681SAndroid Build Coastguard Worker; CHECK: leal 28(%ebp), %eax 24*9880d681SAndroid Build Coastguard Workerdefine i32 @vargs_not_affected(<4 x float> %v, i8* %f, ...) { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker %ap = alloca i8*, align 4 27*9880d681SAndroid Build Coastguard Worker %0 = bitcast i8** %ap to i8* 28*9880d681SAndroid Build Coastguard Worker call void @llvm.va_start(i8* %0) 29*9880d681SAndroid Build Coastguard Worker %argp.cur = load i8*, i8** %ap, align 4 30*9880d681SAndroid Build Coastguard Worker %argp.next = getelementptr inbounds i8, i8* %argp.cur, i32 4 31*9880d681SAndroid Build Coastguard Worker store i8* %argp.next, i8** %ap, align 4 32*9880d681SAndroid Build Coastguard Worker %1 = bitcast i8* %argp.cur to i32* 33*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %1, align 4 34*9880d681SAndroid Build Coastguard Worker call void @llvm.va_end(i8* %0) 35*9880d681SAndroid Build Coastguard Worker ret i32 %2 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.va_start(i8*) 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.va_end(i8*) 41