Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -mattr=+avx,+f16c | FileCheck %s
      2 ; RUN: llc < %s -march=x86-64 -mattr=+avx,+f16c | FileCheck %s
      3 
      4 define <4 x float> @test_x86_vcvtph2ps_128(<8 x i16> %a0) {
      5   ; CHECK-LABEL: test_x86_vcvtph2ps_128
      6   ; CHECK-NOT: vmov
      7   ; CHECK: vcvtph2ps
      8   %res = call <4 x float> @llvm.x86.vcvtph2ps.128(<8 x i16> %a0) ; <<4 x float>> [#uses=1]
      9   ret <4 x float> %res
     10 }
     11 declare <4 x float> @llvm.x86.vcvtph2ps.128(<8 x i16>) nounwind readonly
     12 
     13 
     14 define <8 x float> @test_x86_vcvtph2ps_256(<8 x i16> %a0) {
     15   ; CHECK-LABEL: test_x86_vcvtph2ps_256
     16   ; CHECK-NOT: vmov
     17   ; CHECK: vcvtph2ps
     18   %res = call <8 x float> @llvm.x86.vcvtph2ps.256(<8 x i16> %a0) ; <<8 x float>> [#uses=1]
     19   ret <8 x float> %res
     20 }
     21 declare <8 x float> @llvm.x86.vcvtph2ps.256(<8 x i16>) nounwind readonly
     22 
     23 define <8 x float> @test_x86_vcvtph2ps_256_m(<8 x i16>* nocapture %a) nounwind {
     24 entry:
     25   ; CHECK-LABEL: test_x86_vcvtph2ps_256_m:
     26   ; CHECK-NOT: vmov
     27   ; CHECK: vcvtph2ps  (%
     28   %tmp1 = load <8 x i16>, <8 x i16>* %a, align 16
     29   %0 = tail call <8 x float> @llvm.x86.vcvtph2ps.256(<8 x i16> %tmp1)
     30   ret <8 x float> %0
     31 }
     32 
     33 define <8 x i16> @test_x86_vcvtps2ph_128(<4 x float> %a0) {
     34   ; CHECK-LABEL: test_x86_vcvtps2ph_128
     35   ; CHECK-NOT: vmov
     36   ; CHECK: vcvtps2ph
     37   %res = call <8 x i16> @llvm.x86.vcvtps2ph.128(<4 x float> %a0, i32 0) ; <<8 x i16>> [#uses=1]
     38   ret <8 x i16> %res
     39 }
     40 declare <8 x i16> @llvm.x86.vcvtps2ph.128(<4 x float>, i32) nounwind readonly
     41 
     42 
     43 define <8 x i16> @test_x86_vcvtps2ph_256(<8 x float> %a0) {
     44   ; CHECK-LABEL: test_x86_vcvtps2ph_256
     45   ; CHECK-NOT: vmov
     46   ; CHECK: vcvtps2ph
     47   %res = call <8 x i16> @llvm.x86.vcvtps2ph.256(<8 x float> %a0, i32 0) ; <<8 x i16>> [#uses=1]
     48   ret <8 x i16> %res
     49 }
     50 declare <8 x i16> @llvm.x86.vcvtps2ph.256(<8 x float>, i32) nounwind readonly
     51 
     52 define <4 x float> @test_x86_vcvtps2ph_128_scalar(i64* %ptr) {
     53 ; CHECK-LABEL: test_x86_vcvtps2ph_128_scalar
     54 ; CHECK-NOT: vmov
     55 ; CHECK: vcvtph2ps (%
     56 
     57   %load = load i64, i64* %ptr
     58   %ins1 = insertelement <2 x i64> undef, i64 %load, i32 0
     59   %ins2 = insertelement <2 x i64> %ins1, i64 0, i32 1
     60   %bc = bitcast <2 x i64> %ins2 to <8 x i16>
     61   %res = tail call <4 x float> @llvm.x86.vcvtph2ps.128(<8 x i16> %bc) #2
     62   ret <4 x float> %res
     63 }
     64