1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @sitofp00(<8 x i32> %a) nounwind { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp00: 6*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtdq2ps %ymm0, %ymm0 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 9*9880d681SAndroid Build Coastguard Worker %b = sitofp <8 x i32> %a to <8 x float> 10*9880d681SAndroid Build Coastguard Worker ret <8 x float> %b 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @fptosi00(<8 x float> %a) nounwind { 14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi00: 15*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvttps2dq %ymm0, %ymm0 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 18*9880d681SAndroid Build Coastguard Worker %b = fptosi <8 x float> %a to <8 x i32> 19*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %b 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @sitofp01(<4 x i32> %a) { 23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp01: 24*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtdq2pd %xmm0, %ymm0 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 27*9880d681SAndroid Build Coastguard Worker %b = sitofp <4 x i32> %a to <4 x double> 28*9880d681SAndroid Build Coastguard Worker ret <4 x double> %b 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @sitofp02(<8 x i16> %a) { 32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sitofp02: 33*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovsxwd %xmm0, %xmm1 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovsxwd %xmm0, %xmm0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtdq2ps %ymm0, %ymm0 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 40*9880d681SAndroid Build Coastguard Worker %b = sitofp <8 x i16> %a to <8 x float> 41*9880d681SAndroid Build Coastguard Worker ret <8 x float> %b 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @fptosi01(<4 x double> %a) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi01: 46*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvttpd2dqy %ymm0, %xmm0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vzeroupper 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 50*9880d681SAndroid Build Coastguard Worker %b = fptosi <4 x double> %a to <4 x i32> 51*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %b 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @fptrunc00(<8 x double> %b) nounwind { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptrunc00: 56*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtpd2psy %ymm0, %xmm0 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtpd2psy %ymm1, %xmm1 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker %a = fptrunc <8 x double> %b to <8 x float> 62*9880d681SAndroid Build Coastguard Worker ret <8 x float> %a 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @fpext00(<4 x float> %b) nounwind { 66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fpext00: 67*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtps2pd %xmm0, %ymm0 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 70*9880d681SAndroid Build Coastguard Worker %a = fpext <4 x float> %b to <4 x double> 71*9880d681SAndroid Build Coastguard Worker ret <4 x double> %a 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine double @funcA(i64* nocapture %e) nounwind uwtable readonly ssp { 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: funcA: 76*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtsi2sdq (%rdi), %xmm0, %xmm0 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 79*9880d681SAndroid Build Coastguard Worker %tmp1 = load i64, i64* %e, align 8 80*9880d681SAndroid Build Coastguard Worker %conv = sitofp i64 %tmp1 to double 81*9880d681SAndroid Build Coastguard Worker ret double %conv 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine double @funcB(i32* nocapture %e) nounwind uwtable readonly ssp { 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: funcB: 86*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtsi2sdl (%rdi), %xmm0, %xmm0 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 89*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %e, align 4 90*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %tmp1 to double 91*9880d681SAndroid Build Coastguard Worker ret double %conv 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine float @funcC(i32* nocapture %e) nounwind uwtable readonly ssp { 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: funcC: 96*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtsi2ssl (%rdi), %xmm0, %xmm0 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 99*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %e, align 4 100*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %tmp1 to float 101*9880d681SAndroid Build Coastguard Worker ret float %conv 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine float @funcD(i64* nocapture %e) nounwind uwtable readonly ssp { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: funcD: 106*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtsi2ssq (%rdi), %xmm0, %xmm0 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 109*9880d681SAndroid Build Coastguard Worker %tmp1 = load i64, i64* %e, align 8 110*9880d681SAndroid Build Coastguard Worker %conv = sitofp i64 %tmp1 to float 111*9880d681SAndroid Build Coastguard Worker ret float %conv 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine void @fpext() nounwind uwtable { 115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fpext: 116*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vcvtss2sd -{{[0-9]+}}(%rsp), %xmm0, %xmm0 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp) 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker %f = alloca float, align 4 121*9880d681SAndroid Build Coastguard Worker %d = alloca double, align 8 122*9880d681SAndroid Build Coastguard Worker %tmp = load float, float* %f, align 4 123*9880d681SAndroid Build Coastguard Worker %conv = fpext float %tmp to double 124*9880d681SAndroid Build Coastguard Worker store double %conv, double* %d, align 8 125*9880d681SAndroid Build Coastguard Worker ret void 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerdefine double @nearbyint_f64(double %a) { 129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_f64: 130*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vroundsd $12, %xmm0, %xmm0, %xmm0 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 133*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.nearbyint.f64(double %a) 134*9880d681SAndroid Build Coastguard Worker ret double %res 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.nearbyint.f64(double %p) 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine float @floor_f32(float %a) { 139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_f32: 140*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vroundss $9, %xmm0, %xmm0, %xmm0 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 143*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.floor.f32(float %a) 144*9880d681SAndroid Build Coastguard Worker ret float %res 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.floor.f32(float %p) 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Worker 149