1; RUN: llc -march=amdgcn < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s 2; RUN: llc -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s 3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG --check-prefix=FUNC %s 4 5declare float @llvm.trunc.f32(float) nounwind readnone 6declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone 7declare <3 x float> @llvm.trunc.v3f32(<3 x float>) nounwind readnone 8declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone 9declare <8 x float> @llvm.trunc.v8f32(<8 x float>) nounwind readnone 10declare <16 x float> @llvm.trunc.v16f32(<16 x float>) nounwind readnone 11 12; FUNC-LABEL: {{^}}ftrunc_f32: 13; EG: TRUNC 14; SI: v_trunc_f32_e32 15define void @ftrunc_f32(float addrspace(1)* %out, float %x) { 16 %y = call float @llvm.trunc.f32(float %x) nounwind readnone 17 store float %y, float addrspace(1)* %out 18 ret void 19} 20 21; FUNC-LABEL: {{^}}ftrunc_v2f32: 22; EG: TRUNC 23; EG: TRUNC 24; SI: v_trunc_f32_e32 25; SI: v_trunc_f32_e32 26define void @ftrunc_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %x) { 27 %y = call <2 x float> @llvm.trunc.v2f32(<2 x float> %x) nounwind readnone 28 store <2 x float> %y, <2 x float> addrspace(1)* %out 29 ret void 30} 31 32; FIXME-FUNC-LABEL: {{^}}ftrunc_v3f32: 33; FIXME-EG: TRUNC 34; FIXME-EG: TRUNC 35; FIXME-EG: TRUNC 36; FIXME-SI: v_trunc_f32_e32 37; FIXME-SI: v_trunc_f32_e32 38; FIXME-SI: v_trunc_f32_e32 39; define void @ftrunc_v3f32(<3 x float> addrspace(1)* %out, <3 x float> %x) { 40; %y = call <3 x float> @llvm.trunc.v3f32(<3 x float> %x) nounwind readnone 41; store <3 x float> %y, <3 x float> addrspace(1)* %out 42; ret void 43; } 44 45; FUNC-LABEL: {{^}}ftrunc_v4f32: 46; EG: TRUNC 47; EG: TRUNC 48; EG: TRUNC 49; EG: TRUNC 50; SI: v_trunc_f32_e32 51; SI: v_trunc_f32_e32 52; SI: v_trunc_f32_e32 53; SI: v_trunc_f32_e32 54define void @ftrunc_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %x) { 55 %y = call <4 x float> @llvm.trunc.v4f32(<4 x float> %x) nounwind readnone 56 store <4 x float> %y, <4 x float> addrspace(1)* %out 57 ret void 58} 59 60; FUNC-LABEL: {{^}}ftrunc_v8f32: 61; EG: TRUNC 62; EG: TRUNC 63; EG: TRUNC 64; EG: TRUNC 65; EG: TRUNC 66; EG: TRUNC 67; EG: TRUNC 68; EG: TRUNC 69; SI: v_trunc_f32_e32 70; SI: v_trunc_f32_e32 71; SI: v_trunc_f32_e32 72; SI: v_trunc_f32_e32 73; SI: v_trunc_f32_e32 74; SI: v_trunc_f32_e32 75; SI: v_trunc_f32_e32 76; SI: v_trunc_f32_e32 77define void @ftrunc_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %x) { 78 %y = call <8 x float> @llvm.trunc.v8f32(<8 x float> %x) nounwind readnone 79 store <8 x float> %y, <8 x float> addrspace(1)* %out 80 ret void 81} 82 83; FUNC-LABEL: {{^}}ftrunc_v16f32: 84; EG: TRUNC 85; EG: TRUNC 86; EG: TRUNC 87; EG: TRUNC 88; EG: TRUNC 89; EG: TRUNC 90; EG: TRUNC 91; EG: TRUNC 92; EG: TRUNC 93; EG: TRUNC 94; EG: TRUNC 95; EG: TRUNC 96; EG: TRUNC 97; EG: TRUNC 98; EG: TRUNC 99; EG: TRUNC 100; SI: v_trunc_f32_e32 101; SI: v_trunc_f32_e32 102; SI: v_trunc_f32_e32 103; SI: v_trunc_f32_e32 104; SI: v_trunc_f32_e32 105; SI: v_trunc_f32_e32 106; SI: v_trunc_f32_e32 107; SI: v_trunc_f32_e32 108; SI: v_trunc_f32_e32 109; SI: v_trunc_f32_e32 110; SI: v_trunc_f32_e32 111; SI: v_trunc_f32_e32 112; SI: v_trunc_f32_e32 113; SI: v_trunc_f32_e32 114; SI: v_trunc_f32_e32 115; SI: v_trunc_f32_e32 116define void @ftrunc_v16f32(<16 x float> addrspace(1)* %out, <16 x float> %x) { 117 %y = call <16 x float> @llvm.trunc.v16f32(<16 x float> %x) nounwind readnone 118 store <16 x float> %y, <16 x float> addrspace(1)* %out 119 ret void 120} 121