blob: a9408d2bfbe4a4df71bc77c124bc1c90ae8a86ff [file] [log] [blame]
; Show that we can translate intrinsic vsqrt into a binary instruction.
; REQUIRES: allow_dump
; Compile using standalone assembler.
; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 -allow-extern \
; RUN: -reg-use s20,d20 | FileCheck %s --check-prefix=ASM
; Show bytes in assembled standalone code.
; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
; RUN: --args -Om1 -allow-extern -reg-use s20,d20 \
; RUN: | FileCheck %s --check-prefix=DIS
; Compile using integrated assembler.
; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 -allow-extern \
; RUN: -reg-use s20,d20 | FileCheck %s --check-prefix=IASM
; Show bytes in assembled integrated code.
; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
; RUN: --args -Om1 -allow-extern -reg-use s20,d20 \
; RUN: | FileCheck %s --check-prefix=DIS
declare float @llvm.sqrt.f32(float)
declare double @llvm.sqrt.f64(double)
define internal float @sqrtFloat() {
; ASM-LABEL: sqrtFloat:
; DIS-LABEL: 00000000 <sqrtFloat>:
; IASM-LABEL: sqrtFloat:
%v = call float @llvm.sqrt.f32(float 0.5);
; ASM: vsqrt.f32 s20, s20
; DIS: c: eeb1aaca
; IASM-NOT: vsqrt.f32
ret float %v
}
define internal double @sqrtDouble() {
; ASM-LABEL: sqrtDouble:
; DIS-LABEL: 00000030 <sqrtDouble>:
; IASM-LABEL: sqrtDouble:
%v = call double @llvm.sqrt.f64(double 0.5);
; ASM: vsqrt.f64 d20, d20
; DIS: 38: eef14be4
; IASM-NOT: vsqrt.f64
ret double %v
}