Home | History | Annotate | Download | only in arm32
      1 ; Show that we translate intrinsics for fabs on float, double and float vectors.
      2 
      3 ; REQUIRES: allow_dump
      4 
      5 ; Compile using standalone assembler.
      6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \
      7 ; RUN:   -reg-use s20,d22 \
      8 ; RUN:   | FileCheck %s --check-prefix=ASM
      9 
     10 ; Show bytes in assembled standalone code.
     11 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
     12 ; RUN:   --args -Om1 \
     13 ; RUN:   -reg-use s20,d22 \
     14 ; RUN:   | FileCheck %s --check-prefix=DIS
     15 
     16 ; Compile using integrated assembler.
     17 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \
     18 ; RUN:   -reg-use s20,d22 \
     19 ; RUN:   | FileCheck %s --check-prefix=IASM
     20 
     21 ; Show bytes in assembled integrated code.
     22 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
     23 ; RUN:   --args -Om1 \
     24 ; RUN:   -reg-use s20,d22 \
     25 ; RUN:   | FileCheck %s --check-prefix=DIS
     26 
     27 declare float @llvm.fabs.f32(float)
     28 declare double @llvm.fabs.f64(double)
     29 declare <4 x float> @llvm.fabs.v4f32(<4 x float>)
     30 
     31 define internal float @test_fabs_float(float %x) {
     32 ; ASM-LABEL: test_fabs_float:
     33 ; DIS-LABEL: 00000000 <test_fabs_float>:
     34 ; IASM-LABEL: test_fabs_float:
     35 
     36 entry:
     37   %r = call float @llvm.fabs.f32(float %x)
     38 
     39 ; ASM:  vabs.f32        s20, s20
     40 ; DIS:   10:    eeb0aaca
     41 ; IASM-NOT: vabs.f32
     42 
     43   ret float %r
     44 }
     45 
     46 define internal double @test_fabs_double(double %x) {
     47 ; ASM-LABEL: test_fabs_double:
     48 ; DIS-LABEL: 00000030 <test_fabs_double>:
     49 ; IASM-LABEL: test_fabs_double:
     50 
     51 entry:
     52   %r = call double @llvm.fabs.f64(double %x)
     53 
     54 ; ASM:  vabs.f64        d22, d22
     55 ; DIS:   3c:    eef06be6
     56 ; IASM-NOT: vabs.64
     57 
     58   ret double %r
     59 }
     60 
     61 define internal <4 x float> @test_fabs_4float(<4 x float> %x) {
     62 ; ASM-LABEL: test_fabs_4float:
     63 ; DIS-LABEL: 00000050 <test_fabs_4float>:
     64 ; IASM-LABEL: test_fabs_4float:
     65 
     66 entry:
     67   %r = call <4 x float> @llvm.fabs.v4f32(<4 x float> %x)
     68 
     69 ; ASM:  vabs.f32        q0, q0
     70 ; DIS:   60:    f3b90740
     71 ; IASM-NOT: vabs.f32
     72 
     73   ret <4 x float> %r
     74 }
     75