1 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG --check-prefix=FUNC %s 2 ; RUN: llc -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s 3 ; RUN: llc -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s 4 5 declare float @llvm.trunc.f32(float) nounwind readnone 6 declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone 7 declare <3 x float> @llvm.trunc.v3f32(<3 x float>) nounwind readnone 8 declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone 9 declare <8 x float> @llvm.trunc.v8f32(<8 x float>) nounwind readnone 10 declare <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 15 define 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 26 define 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 54 define 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 77 define 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 116 define 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