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 10define 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 22define 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 38define 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 69define 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 120define 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 213define 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