1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -verify-machineinstrs < %s | FileCheck %s
; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -global-isel -verify-machineinstrs < %s | FileCheck %s
define amdgpu_vs float @sitofp_i32_to_f32(i32 inreg %val) {
; CHECK-LABEL: sitofp_i32_to_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_f32_i32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = sitofp i32 %val to float
ret float %res
}
define amdgpu_vs float @uitofp_u32_to_f32(i32 inreg %val) {
; CHECK-LABEL: uitofp_u32_to_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_f32_u32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = uitofp i32 %val to float
ret float %res
}
define amdgpu_vs i32 @fptosi_f32_to_i32(float inreg %val) {
; CHECK-LABEL: fptosi_f32_to_i32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_i32_f32 s0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = fptosi float %val to i32
ret i32 %res
}
define amdgpu_vs i32 @fptoui_f32_to_u32(float inreg %val) {
; CHECK-LABEL: fptoui_f32_to_u32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_u32_f32 s0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = fptoui float %val to i32
ret i32 %res
}
define amdgpu_vs float @fpext_f16_to_f32(half inreg %val) {
; CHECK-LABEL: fpext_f16_to_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_f32_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = fpext half %val to float
ret float %res
}
define amdgpu_vs float @fpext_hif16_to_32(<2 x half> inreg %val) {
; CHECK-LABEL: fpext_hif16_to_32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_hi_f32_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%hielt = extractelement <2 x half> %val, i32 1
%res = fpext half %hielt to float
ret float %res
}
define amdgpu_vs half @fptrunc_f32_to_f16(float inreg %val) {
; CHECK-LABEL: fptrunc_f32_to_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_cvt_f16_f32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = fptrunc float %val to half
ret half %res
}
define amdgpu_vs float @fceil_f32(float inreg %val) {
; CHECK-LABEL: fceil_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_ceil_f32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call float @llvm.ceil.f32(float %val)
ret float %res
}
define amdgpu_vs float @ffloor_f32(float inreg %val) {
; CHECK-LABEL: ffloor_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_floor_f32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call float @llvm.floor.f32(float %val)
ret float %res
}
define amdgpu_vs float @ftrunc_f32(float inreg %val) {
; CHECK-LABEL: ftrunc_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_trunc_f32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call float @llvm.trunc.f32(float %val)
ret float %res
}
define amdgpu_vs float @frint_f32(float inreg %val) {
; CHECK-LABEL: frint_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_rndne_f32 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call float @llvm.rint.f32(float %val)
ret float %res
}
define amdgpu_vs half @fceil_f16(half inreg %val) {
; CHECK-LABEL: fceil_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_ceil_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call half @llvm.ceil.f16(half %val)
ret half %res
}
define amdgpu_vs half @ffloor_f16(half inreg %val) {
; CHECK-LABEL: ffloor_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_floor_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call half @llvm.floor.f16(half %val)
ret half %res
}
define amdgpu_vs half @ftrunc_f16(half inreg %val) {
; CHECK-LABEL: ftrunc_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_trunc_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call half @llvm.trunc.f16(half %val)
ret half %res
}
define amdgpu_vs half @frint_f16(half inreg %val) {
; CHECK-LABEL: frint_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_rndne_f16 s0, s0
; CHECK-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
; CHECK-NEXT: v_mov_b32_e32 v0, s0
; CHECK-NEXT: ; return to shader part epilog
%res = call half @llvm.rint.f16(half %val)
ret half %res
}
declare float @llvm.ceil.f32(float)
declare float @llvm.floor.f32(float)
declare float @llvm.trunc.f32(float)
declare float @llvm.rint.f32(float)
declare half @llvm.ceil.f16(half)
declare half @llvm.floor.f16(half)
declare half @llvm.trunc.f16(half)
declare half @llvm.rint.f16(half)
|