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