Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
      2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
      3 ; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
      4 
      5 declare float @llvm.ceil.f32(float) nounwind readnone
      6 declare <2 x float> @llvm.ceil.v2f32(<2 x float>) nounwind readnone
      7 declare <3 x float> @llvm.ceil.v3f32(<3 x float>) nounwind readnone
      8 declare <4 x float> @llvm.ceil.v4f32(<4 x float>) nounwind readnone
      9 declare <8 x float> @llvm.ceil.v8f32(<8 x float>) nounwind readnone
     10 declare <16 x float> @llvm.ceil.v16f32(<16 x float>) nounwind readnone
     11 
     12 ; FUNC-LABEL: {{^}}fceil_f32:
     13 ; SI: v_ceil_f32_e32
     14 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT:T[0-9]+\.[XYZW]]]
     15 ; EG: CEIL {{\*? *}}[[RESULT]]
     16 define void @fceil_f32(float addrspace(1)* %out, float %x) {
     17   %y = call float @llvm.ceil.f32(float %x) nounwind readnone
     18   store float %y, float addrspace(1)* %out
     19   ret void
     20 }
     21 
     22 ; FUNC-LABEL: {{^}}fceil_v2f32:
     23 ; SI: v_ceil_f32_e32
     24 ; SI: v_ceil_f32_e32
     25 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT:T[0-9]+]]{{\.[XYZW]}}
     26 ; EG: CEIL {{\*? *}}[[RESULT]]
     27 ; EG: CEIL {{\*? *}}[[RESULT]]
     28 define void @fceil_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %x) {
     29   %y = call <2 x float> @llvm.ceil.v2f32(<2 x float> %x) nounwind readnone
     30   store <2 x float> %y, <2 x float> addrspace(1)* %out
     31   ret void
     32 }
     33 
     34 ; FUNC-LABEL: {{^}}fceil_v3f32:
     35 ; FIXME-SI: v_ceil_f32_e32
     36 ; FIXME-SI: v_ceil_f32_e32
     37 ; FIXME-SI: v_ceil_f32_e32
     38 ; FIXME-EG: v3 is treated as v2 and v1, hence 2 stores
     39 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT1:T[0-9]+]]{{\.[XYZW]}}
     40 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT2:T[0-9]+]]{{\.[XYZW]}}
     41 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
     42 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     43 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     44 define void @fceil_v3f32(<3 x float> addrspace(1)* %out, <3 x float> %x) {
     45   %y = call <3 x float> @llvm.ceil.v3f32(<3 x float> %x) nounwind readnone
     46   store <3 x float> %y, <3 x float> addrspace(1)* %out
     47   ret void
     48 }
     49 
     50 ; FUNC-LABEL: {{^}}fceil_v4f32:
     51 ; SI: v_ceil_f32_e32
     52 ; SI: v_ceil_f32_e32
     53 ; SI: v_ceil_f32_e32
     54 ; SI: v_ceil_f32_e32
     55 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT:T[0-9]+]]{{\.[XYZW]}}
     56 ; EG: CEIL {{\*? *}}[[RESULT]]
     57 ; EG: CEIL {{\*? *}}[[RESULT]]
     58 ; EG: CEIL {{\*? *}}[[RESULT]]
     59 ; EG: CEIL {{\*? *}}[[RESULT]]
     60 define void @fceil_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %x) {
     61   %y = call <4 x float> @llvm.ceil.v4f32(<4 x float> %x) nounwind readnone
     62   store <4 x float> %y, <4 x float> addrspace(1)* %out
     63   ret void
     64 }
     65 
     66 ; FUNC-LABEL: {{^}}fceil_v8f32:
     67 ; SI: v_ceil_f32_e32
     68 ; SI: v_ceil_f32_e32
     69 ; SI: v_ceil_f32_e32
     70 ; SI: v_ceil_f32_e32
     71 ; SI: v_ceil_f32_e32
     72 ; SI: v_ceil_f32_e32
     73 ; SI: v_ceil_f32_e32
     74 ; SI: v_ceil_f32_e32
     75 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT1:T[0-9]+]]{{\.[XYZW]}}
     76 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT2:T[0-9]+]]{{\.[XYZW]}}
     77 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
     78 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
     79 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
     80 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
     81 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     82 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     83 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     84 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
     85 define void @fceil_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %x) {
     86   %y = call <8 x float> @llvm.ceil.v8f32(<8 x float> %x) nounwind readnone
     87   store <8 x float> %y, <8 x float> addrspace(1)* %out
     88   ret void
     89 }
     90 
     91 ; FUNC-LABEL: {{^}}fceil_v16f32:
     92 ; SI: v_ceil_f32_e32
     93 ; SI: v_ceil_f32_e32
     94 ; SI: v_ceil_f32_e32
     95 ; SI: v_ceil_f32_e32
     96 ; SI: v_ceil_f32_e32
     97 ; SI: v_ceil_f32_e32
     98 ; SI: v_ceil_f32_e32
     99 ; SI: v_ceil_f32_e32
    100 ; SI: v_ceil_f32_e32
    101 ; SI: v_ceil_f32_e32
    102 ; SI: v_ceil_f32_e32
    103 ; SI: v_ceil_f32_e32
    104 ; SI: v_ceil_f32_e32
    105 ; SI: v_ceil_f32_e32
    106 ; SI: v_ceil_f32_e32
    107 ; SI: v_ceil_f32_e32
    108 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT1:T[0-9]+]]{{\.[XYZW]}}
    109 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT2:T[0-9]+]]{{\.[XYZW]}}
    110 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT3:T[0-9]+]]{{\.[XYZW]}}
    111 ; EG: MEM_RAT_CACHELESS STORE_RAW [[RESULT4:T[0-9]+]]{{\.[XYZW]}}
    112 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
    113 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
    114 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
    115 ; EG-DAG: CEIL {{\*? *}}[[RESULT1]]
    116 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
    117 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
    118 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
    119 ; EG-DAG: CEIL {{\*? *}}[[RESULT2]]
    120 ; EG-DAG: CEIL {{\*? *}}[[RESULT3]]
    121 ; EG-DAG: CEIL {{\*? *}}[[RESULT3]]
    122 ; EG-DAG: CEIL {{\*? *}}[[RESULT3]]
    123 ; EG-DAG: CEIL {{\*? *}}[[RESULT3]]
    124 ; EG-DAG: CEIL {{\*? *}}[[RESULT4]]
    125 ; EG-DAG: CEIL {{\*? *}}[[RESULT4]]
    126 ; EG-DAG: CEIL {{\*? *}}[[RESULT4]]
    127 ; EG-DAG: CEIL {{\*? *}}[[RESULT4]]
    128 define void @fceil_v16f32(<16 x float> addrspace(1)* %out, <16 x float> %x) {
    129   %y = call <16 x float> @llvm.ceil.v16f32(<16 x float> %x) nounwind readnone
    130   store <16 x float> %y, <16 x float> addrspace(1)* %out
    131   ret void
    132 }
    133