Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck %s -check-prefix=EG -check-prefix=FUNC
      2 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck %s -check-prefix=SI -check-prefix=FUNC
      3 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s -check-prefix=SI -check-prefix=FUNC
      4 
      5 ; FUNC-LABEL: {{^}}fp_to_uint_f32_to_i32:
      6 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
      7 
      8 ; SI: v_cvt_u32_f32_e32
      9 ; SI: s_endpgm
     10 define void @fp_to_uint_f32_to_i32 (i32 addrspace(1)* %out, float %in) {
     11   %conv = fptoui float %in to i32
     12   store i32 %conv, i32 addrspace(1)* %out
     13   ret void
     14 }
     15 
     16 ; FUNC-LABEL: {{^}}fp_to_uint_v2f32_to_v2i32:
     17 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
     18 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
     19 
     20 ; SI: v_cvt_u32_f32_e32
     21 ; SI: v_cvt_u32_f32_e32
     22 define void @fp_to_uint_v2f32_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x float> %in) {
     23   %result = fptoui <2 x float> %in to <2 x i32>
     24   store <2 x i32> %result, <2 x i32> addrspace(1)* %out
     25   ret void
     26 }
     27 
     28 ; FUNC-LABEL: {{^}}fp_to_uint_v4f32_to_v4i32:
     29 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
     30 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
     31 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
     32 ; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
     33 ; SI: v_cvt_u32_f32_e32
     34 ; SI: v_cvt_u32_f32_e32
     35 ; SI: v_cvt_u32_f32_e32
     36 ; SI: v_cvt_u32_f32_e32
     37 
     38 define void @fp_to_uint_v4f32_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
     39   %value = load <4 x float>, <4 x float> addrspace(1) * %in
     40   %result = fptoui <4 x float> %value to <4 x i32>
     41   store <4 x i32> %result, <4 x i32> addrspace(1)* %out
     42   ret void
     43 }
     44 
     45 ; FUNC: {{^}}fp_to_uint_f32_to_i64:
     46 ; EG-DAG: AND_INT
     47 ; EG-DAG: LSHR
     48 ; EG-DAG: SUB_INT
     49 ; EG-DAG: AND_INT
     50 ; EG-DAG: ASHR
     51 ; EG-DAG: AND_INT
     52 ; EG-DAG: OR_INT
     53 ; EG-DAG: SUB_INT
     54 ; EG-DAG: LSHL
     55 ; EG-DAG: LSHL
     56 ; EG-DAG: SUB_INT
     57 ; EG-DAG: LSHR
     58 ; EG-DAG: LSHR
     59 ; EG-DAG: SETGT_UINT
     60 ; EG-DAG: SETGT_INT
     61 ; EG-DAG: XOR_INT
     62 ; EG-DAG: XOR_INT
     63 ; EG: SUB_INT
     64 ; EG-DAG: SUB_INT
     65 ; EG-DAG: CNDE_INT
     66 ; EG-DAG: CNDE_INT
     67 
     68 ; SI: s_endpgm
     69 define void @fp_to_uint_f32_to_i64(i64 addrspace(1)* %out, float %x) {
     70   %conv = fptoui float %x to i64
     71   store i64 %conv, i64 addrspace(1)* %out
     72   ret void
     73 }
     74 
     75 ; FUNC: {{^}}fp_to_uint_v2f32_to_v2i64:
     76 ; EG-DAG: AND_INT
     77 ; EG-DAG: LSHR
     78 ; EG-DAG: SUB_INT
     79 ; EG-DAG: AND_INT
     80 ; EG-DAG: ASHR
     81 ; EG-DAG: AND_INT
     82 ; EG-DAG: OR_INT
     83 ; EG-DAG: SUB_INT
     84 ; EG-DAG: LSHL
     85 ; EG-DAG: LSHL
     86 ; EG-DAG: SUB_INT
     87 ; EG-DAG: LSHR
     88 ; EG-DAG: LSHR
     89 ; EG-DAG: SETGT_UINT
     90 ; EG-DAG: SETGT_INT
     91 ; EG-DAG: XOR_INT
     92 ; EG-DAG: XOR_INT
     93 ; EG-DAG: SUB_INT
     94 ; EG-DAG: SUB_INT
     95 ; EG-DAG: CNDE_INT
     96 ; EG-DAG: CNDE_INT
     97 ; EG-DAG: AND_INT
     98 ; EG-DAG: LSHR
     99 ; EG-DAG: SUB_INT
    100 ; EG-DAG: AND_INT
    101 ; EG-DAG: ASHR
    102 ; EG-DAG: AND_INT
    103 ; EG-DAG: OR_INT
    104 ; EG-DAG: SUB_INT
    105 ; EG-DAG: LSHL
    106 ; EG-DAG: LSHL
    107 ; EG-DAG: SUB_INT
    108 ; EG-DAG: LSHR
    109 ; EG-DAG: LSHR
    110 ; EG-DAG: SETGT_UINT
    111 ; EG-DAG: SETGT_INT
    112 ; EG-DAG: XOR_INT
    113 ; EG-DAG: XOR_INT
    114 ; EG-DAG: SUB_INT
    115 ; EG-DAG: SUB_INT
    116 ; EG-DAG: CNDE_INT
    117 ; EG-DAG: CNDE_INT
    118 
    119 ; SI: s_endpgm
    120 define void @fp_to_uint_v2f32_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x float> %x) {
    121   %conv = fptoui <2 x float> %x to <2 x i64>
    122   store <2 x i64> %conv, <2 x i64> addrspace(1)* %out
    123   ret void
    124 }
    125 
    126 ; FUNC: {{^}}fp_to_uint_v4f32_to_v4i64:
    127 ; EG-DAG: AND_INT
    128 ; EG-DAG: LSHR
    129 ; EG-DAG: SUB_INT
    130 ; EG-DAG: AND_INT
    131 ; EG-DAG: ASHR
    132 ; EG-DAG: AND_INT
    133 ; EG-DAG: OR_INT
    134 ; EG-DAG: SUB_INT
    135 ; EG-DAG: LSHL
    136 ; EG-DAG: LSHL
    137 ; EG-DAG: SUB_INT
    138 ; EG-DAG: LSHR
    139 ; EG-DAG: LSHR
    140 ; EG-DAG: SETGT_UINT
    141 ; EG-DAG: SETGT_INT
    142 ; EG-DAG: XOR_INT
    143 ; EG-DAG: XOR_INT
    144 ; EG-DAG: SUB_INT
    145 ; EG-DAG: SUB_INT
    146 ; EG-DAG: CNDE_INT
    147 ; EG-DAG: CNDE_INT
    148 ; EG-DAG: AND_INT
    149 ; EG-DAG: LSHR
    150 ; EG-DAG: SUB_INT
    151 ; EG-DAG: AND_INT
    152 ; EG-DAG: ASHR
    153 ; EG-DAG: AND_INT
    154 ; EG-DAG: OR_INT
    155 ; EG-DAG: SUB_INT
    156 ; EG-DAG: LSHL
    157 ; EG-DAG: LSHL
    158 ; EG-DAG: SUB_INT
    159 ; EG-DAG: LSHR
    160 ; EG-DAG: LSHR
    161 ; EG-DAG: SETGT_UINT
    162 ; EG-DAG: SETGT_INT
    163 ; EG-DAG: XOR_INT
    164 ; EG-DAG: XOR_INT
    165 ; EG-DAG: SUB_INT
    166 ; EG-DAG: SUB_INT
    167 ; EG-DAG: CNDE_INT
    168 ; EG-DAG: CNDE_INT
    169 ; EG-DAG: AND_INT
    170 ; EG-DAG: LSHR
    171 ; EG-DAG: SUB_INT
    172 ; EG-DAG: AND_INT
    173 ; EG-DAG: ASHR
    174 ; EG-DAG: AND_INT
    175 ; EG-DAG: OR_INT
    176 ; EG-DAG: SUB_INT
    177 ; EG-DAG: LSHL
    178 ; EG-DAG: LSHL
    179 ; EG-DAG: SUB_INT
    180 ; EG-DAG: LSHR
    181 ; EG-DAG: LSHR
    182 ; EG-DAG: SETGT_UINT
    183 ; EG-DAG: SETGT_INT
    184 ; EG-DAG: XOR_INT
    185 ; EG-DAG: XOR_INT
    186 ; EG-DAG: SUB_INT
    187 ; EG-DAG: SUB_INT
    188 ; EG-DAG: CNDE_INT
    189 ; EG-DAG: CNDE_INT
    190 ; EG-DAG: AND_INT
    191 ; EG-DAG: LSHR
    192 ; EG-DAG: SUB_INT
    193 ; EG-DAG: AND_INT
    194 ; EG-DAG: ASHR
    195 ; EG-DAG: AND_INT
    196 ; EG-DAG: OR_INT
    197 ; EG-DAG: SUB_INT
    198 ; EG-DAG: LSHL
    199 ; EG-DAG: LSHL
    200 ; EG-DAG: SUB_INT
    201 ; EG-DAG: LSHR
    202 ; EG-DAG: LSHR
    203 ; EG-DAG: SETGT_UINT
    204 ; EG-DAG: SETGT_INT
    205 ; EG-DAG: XOR_INT
    206 ; EG-DAG: XOR_INT
    207 ; EG-DAG: SUB_INT
    208 ; EG-DAG: SUB_INT
    209 ; EG-DAG: CNDE_INT
    210 ; EG-DAG: CNDE_INT
    211 
    212 ; SI: s_endpgm
    213 define void @fp_to_uint_v4f32_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x float> %x) {
    214   %conv = fptoui <4 x float> %x to <4 x i64>
    215   store <4 x i64> %conv, <4 x i64> addrspace(1)* %out
    216   ret void
    217 }
    218