1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mattr=+mmx,+sse,+soft-float \ 2*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck %s --check-prefix=SOFT1 --check-prefix=CHECK 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+mmx,+sse2,+soft-float \ 4*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck %s --check-prefix=SOFT2 --check-prefix=CHECK 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+mmx,+sse \ 6*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck %s --check-prefix=SSE1 --check-prefix=CHECK 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+mmx,+sse2 \ 8*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck %s --check-prefix=SSE2 --check-prefix=CHECK 9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-gnux32 -mattr=+mmx,+sse2,+soft-float | FileCheck %s 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: xmm{{[0-9]+}} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker%struct.__va_list_tag = type { i32, i32, i8*, i8* } 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine i32 @t1(i32 %a, ...) nounwind { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %va = alloca [1 x %struct.__va_list_tag], align 8 ; <[1 x %struct.__va_list_tag]*> [#uses=2] 18*9880d681SAndroid Build Coastguard Worker %va12 = bitcast [1 x %struct.__va_list_tag]* %va to i8* ; <i8*> [#uses=2] 19*9880d681SAndroid Build Coastguard Worker call void @llvm.va_start(i8* %va12) 20*9880d681SAndroid Build Coastguard Worker %va3 = getelementptr [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %va, i64 0, i64 0 ; <%struct.__va_list_tag*> [#uses=1] 21*9880d681SAndroid Build Coastguard Worker call void @bar(%struct.__va_list_tag* %va3) nounwind 22*9880d681SAndroid Build Coastguard Worker call void @llvm.va_end(i8* %va12) 23*9880d681SAndroid Build Coastguard Worker ret i32 undef 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t1: 25*9880d681SAndroid Build Coastguard Worker; CHECK: ret{{[lq]}} 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.va_start(i8*) nounwind 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdeclare void @bar(%struct.__va_list_tag*) 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.va_end(i8*) nounwind 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine float @t2(float %a, float %b) nounwind readnone { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker %0 = fadd float %a, %b ; <float> [#uses=1] 37*9880d681SAndroid Build Coastguard Worker ret float %0 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2: 39*9880d681SAndroid Build Coastguard Worker; SOFT1-NOT: xmm{{[0-9]+}} 40*9880d681SAndroid Build Coastguard Worker; SOFT2-NOT: xmm{{[0-9]+}} 41*9880d681SAndroid Build Coastguard Worker; SSE1: xmm{{[0-9]+}} 42*9880d681SAndroid Build Coastguard Worker; SSE2: xmm{{[0-9]+}} 43*9880d681SAndroid Build Coastguard Worker; CHECK: ret{{[lq]}} 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; soft-float means no SSE instruction and passing fp128 as pair of i64. 47*9880d681SAndroid Build Coastguard Workerdefine fp128 @t3(fp128 %a, fp128 %b) nounwind readnone { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %0 = fadd fp128 %b, %a 50*9880d681SAndroid Build Coastguard Worker ret fp128 %0 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t3: 52*9880d681SAndroid Build Coastguard Worker; SOFT1-NOT: xmm{{[0-9]+}} 53*9880d681SAndroid Build Coastguard Worker; SOFT2-NOT: xmm{{[0-9]+}} 54*9880d681SAndroid Build Coastguard Worker; SSE1: xmm{{[0-9]+}} 55*9880d681SAndroid Build Coastguard Worker; SSE2: xmm{{[0-9]+}} 56*9880d681SAndroid Build Coastguard Worker; CHECK: ret{{[lq]}} 57*9880d681SAndroid Build Coastguard Worker} 58