Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -march=amdgcn < %s | FileCheck -allow-deprecated-dag-overlap -check-prefix=GCN -check-prefix=SI -check-prefix=FUNC  %s
      2 ; RUN: llc -march=amdgcn -mcpu=tonga < %s | FileCheck -allow-deprecated-dag-overlap -check-prefix=GCN -check-prefix=GFX8 --check-prefix=FUNC %s
      3 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -allow-deprecated-dag-overlap -check-prefix=EG -check-prefix=FUNC %s
      4 ; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -allow-deprecated-dag-overlap -check-prefix=CM -check-prefix=FUNC %s
      5 
      6 ; FUNC-LABEL: {{^}}test:
      7 ; EG: LOG_IEEE
      8 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
      9 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     10 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     11 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     12 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     13 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x3f317218, v{{[0-9]+}}
     14 define void @test(float addrspace(1)* %out, float %in) {
     15 entry:
     16    %res = call float @llvm.log.f32(float %in)
     17    store float %res, float addrspace(1)* %out
     18    ret void
     19 }
     20 
     21 ; FUNC-LABEL: {{^}}testv2:
     22 ; EG: LOG_IEEE
     23 ; EG: LOG_IEEE
     24 ; FIXME: We should be able to merge these packets together on Cayman so we
     25 ; have a maximum of 4 instructions.
     26 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     27 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     28 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     29 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     30 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     31 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     32 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     33 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     34 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     35 ; SI: v_mov_b32_e32 v[[R_F32_LOG_CONST:[0-9]+]], 0x3f317218
     36 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     37 ; GFX8: v_mov_b32_e32 v[[R_F32_LOG_CONST:[0-9]+]], 0x3f317218
     38 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     39 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     40 define void @testv2(<2 x float> addrspace(1)* %out, <2 x float> %in) {
     41 entry:
     42   %res = call <2 x float> @llvm.log.v2f32(<2 x float> %in)
     43   store <2 x float> %res, <2 x float> addrspace(1)* %out
     44   ret void
     45 }
     46 
     47 ; FUNC-LABEL: {{^}}testv4:
     48 ; EG: LOG_IEEE
     49 ; EG: LOG_IEEE
     50 ; EG: LOG_IEEE
     51 ; EG: LOG_IEEE
     52 ; FIXME: We should be able to merge these packets together on Cayman so we
     53 ; have a maximum of 4 instructions.
     54 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     55 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     56 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     57 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     58 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     59 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     60 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     61 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     62 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     63 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     64 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     65 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}} (MASKED)
     66 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     67 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     68 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     69 ; CM-DAG: LOG_IEEE T{{[0-9]+\.[XYZW]}}
     70 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     71 ; SI: v_mov_b32_e32 v[[R_F32_LOG_CONST:[0-9]+]], 0x3f317218
     72 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     73 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     74 ; GCN: v_log_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}
     75 ; GFX8: v_mov_b32_e32 v[[R_F32_LOG_CONST:[0-9]+]], 0x3f317218
     76 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     77 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     78 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     79 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v[[R_F32_LOG_CONST]]
     80 define void @testv4(<4 x float> addrspace(1)* %out, <4 x float> %in) {
     81 entry:
     82   %res = call <4 x float> @llvm.log.v4f32(<4 x float> %in)
     83   store <4 x float> %res, <4 x float> addrspace(1)* %out
     84   ret void
     85 }
     86 
     87 declare float @llvm.log.f32(float) readnone
     88 declare <2 x float> @llvm.log.v2f32(<2 x float>) readnone
     89 declare <4 x float> @llvm.log.v4f32(<4 x float>) readnone
     90