; RUN: llc < %s -mtriple=arm-apple-ios -mattr=+vfp2 -disable-post-ra | FileCheck %s
; RUN: llc < %s -mtriple=arm-apple-ios -mattr=+vfp2 -disable-post-ra -regalloc=basic | FileCheck %s

define void @test(float* %P, double* %D) {
	%A = load float* %P		; <float> [#uses=1]
	%B = load double* %D		; <double> [#uses=1]
	store float %A, float* %P
	store double %B, double* %D
	ret void
}

declare float @fabsf(float)

declare double @fabs(double)

define void @test_abs(float* %P, double* %D) {
;CHECK: test_abs:
	%a = load float* %P		; <float> [#uses=1]
;CHECK: vabs.f32
	%b = call float @fabsf( float %a ) readnone	; <float> [#uses=1]
	store float %b, float* %P
	%A = load double* %D		; <double> [#uses=1]
;CHECK: vabs.f64
	%B = call double @fabs( double %A ) readnone	; <double> [#uses=1]
	store double %B, double* %D
	ret void
}

define void @test_add(float* %P, double* %D) {
;CHECK: test_add:
	%a = load float* %P		; <float> [#uses=2]
	%b = fadd float %a, %a		; <float> [#uses=1]
	store float %b, float* %P
	%A = load double* %D		; <double> [#uses=2]
	%B = fadd double %A, %A		; <double> [#uses=1]
	store double %B, double* %D
	ret void
}

define void @test_ext_round(float* %P, double* %D) {
;CHECK: test_ext_round:
	%a = load float* %P		; <float> [#uses=1]
;CHECK: vcvt.f64.f32
;CHECK: vcvt.f32.f64
	%b = fpext float %a to double		; <double> [#uses=1]
	%A = load double* %D		; <double> [#uses=1]
	%B = fptrunc double %A to float		; <float> [#uses=1]
	store double %b, double* %D
	store float %B, float* %P
	ret void
}

define void @test_fma(float* %P1, float* %P2, float* %P3) {
;CHECK: test_fma:
	%a1 = load float* %P1		; <float> [#uses=1]
	%a2 = load float* %P2		; <float> [#uses=1]
	%a3 = load float* %P3		; <float> [#uses=1]
;CHECK: vnmls.f32
	%X = fmul float %a1, %a2		; <float> [#uses=1]
	%Y = fsub float %X, %a3		; <float> [#uses=1]
	store float %Y, float* %P1
	ret void
}

define i32 @test_ftoi(float* %P1) {
;CHECK: test_ftoi:
	%a1 = load float* %P1		; <float> [#uses=1]
;CHECK: vcvt.s32.f32
	%b1 = fptosi float %a1 to i32		; <i32> [#uses=1]
	ret i32 %b1
}

define i32 @test_ftou(float* %P1) {
;CHECK: test_ftou:
	%a1 = load float* %P1		; <float> [#uses=1]
;CHECK: vcvt.u32.f32
	%b1 = fptoui float %a1 to i32		; <i32> [#uses=1]
	ret i32 %b1
}

define i32 @test_dtoi(double* %P1) {
;CHECK: test_dtoi:
	%a1 = load double* %P1		; <double> [#uses=1]
;CHECK: vcvt.s32.f64
	%b1 = fptosi double %a1 to i32		; <i32> [#uses=1]
	ret i32 %b1
}

define i32 @test_dtou(double* %P1) {
;CHECK: test_dtou:
	%a1 = load double* %P1		; <double> [#uses=1]
;CHECK: vcvt.u32.f64
	%b1 = fptoui double %a1 to i32		; <i32> [#uses=1]
	ret i32 %b1
}

define void @test_utod(double* %P1, i32 %X) {
;CHECK: test_utod:
;CHECK: vcvt.f64.u32
	%b1 = uitofp i32 %X to double		; <double> [#uses=1]
	store double %b1, double* %P1
	ret void
}

define void @test_utod2(double* %P1, i8 %X) {
;CHECK: test_utod2:
;CHECK: vcvt.f64.u32
	%b1 = uitofp i8 %X to double		; <double> [#uses=1]
	store double %b1, double* %P1
	ret void
}

define void @test_cmp(float* %glob, i32 %X) {
;CHECK: test_cmp:
entry:
	%tmp = load float* %glob		; <float> [#uses=2]
	%tmp3 = getelementptr float* %glob, i32 2		; <float*> [#uses=1]
	%tmp4 = load float* %tmp3		; <float> [#uses=2]
	%tmp.upgrd.1 = fcmp oeq float %tmp, %tmp4		; <i1> [#uses=1]
	%tmp5 = fcmp uno float %tmp, %tmp4		; <i1> [#uses=1]
	%tmp6 = or i1 %tmp.upgrd.1, %tmp5		; <i1> [#uses=1]
;CHECK: bmi
;CHECK-NEXT: bgt
	br i1 %tmp6, label %cond_true, label %cond_false

cond_true:		; preds = %entry
	%tmp.upgrd.2 = tail call i32 (...)* @bar( )		; <i32> [#uses=0]
	ret void

cond_false:		; preds = %entry
	%tmp7 = tail call i32 (...)* @baz( )		; <i32> [#uses=0]
	ret void
}

declare i1 @llvm.isunordered.f32(float, float)

declare i32 @bar(...)

declare i32 @baz(...)

define void @test_cmpfp0(float* %glob, i32 %X) {
;CHECK: test_cmpfp0:
entry:
	%tmp = load float* %glob		; <float> [#uses=1]
;CHECK: vcmpe.f32
	%tmp.upgrd.3 = fcmp ogt float %tmp, 0.000000e+00		; <i1> [#uses=1]
	br i1 %tmp.upgrd.3, label %cond_true, label %cond_false

cond_true:		; preds = %entry
	%tmp.upgrd.4 = tail call i32 (...)* @bar( )		; <i32> [#uses=0]
	ret void

cond_false:		; preds = %entry
	%tmp1 = tail call i32 (...)* @baz( )		; <i32> [#uses=0]
	ret void
}
