| ; 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 |
| } |