67 lines · plain
1; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn < %s | FileCheck --check-prefix=GCN %s2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck --check-prefix=GCN %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck --check-prefix=GCN %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn < %s | FileCheck --check-prefix=GCN %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck --check-prefix=GCN %s6 7declare float @llvm.fabs.f32(float) #08declare float @llvm.floor.f32(float) #09 10; GCN-LABEL: {{^}}fract_f32:11; GCN: v_floor_f32_e32 [[FLR:v[0-9]+]], [[INPUT:v[0-9]+]]12; GCN: v_sub_f32_e32 [[RESULT:v[0-9]+]], [[INPUT]], [[FLR]]13 14; GCN: buffer_store_dword [[RESULT]]15define amdgpu_kernel void @fract_f32(ptr addrspace(1) %out, ptr addrspace(1) %src) #1 {16 %x = load float, ptr addrspace(1) %src17 %floor.x = call float @llvm.floor.f32(float %x)18 %fract = fsub float %x, %floor.x19 store float %fract, ptr addrspace(1) %out20 ret void21}22 23; GCN-LABEL: {{^}}fract_f32_neg:24; GCN: v_floor_f32_e64 [[FLR:v[0-9]+]], -[[INPUT:v[0-9]+]]25; GCN: v_sub_f32_e64 [[RESULT:v[0-9]+]], -[[INPUT]], [[FLR]]26; GCN: buffer_store_dword [[RESULT]]27define amdgpu_kernel void @fract_f32_neg(ptr addrspace(1) %out, ptr addrspace(1) %src) #1 {28 %x = load float, ptr addrspace(1) %src29 %x.neg = fsub float -0.0, %x30 %floor.x.neg = call float @llvm.floor.f32(float %x.neg)31 %fract = fsub float %x.neg, %floor.x.neg32 store float %fract, ptr addrspace(1) %out33 ret void34}35 36; GCN-LABEL: {{^}}fract_f32_neg_abs:37; GCN: v_floor_f32_e64 [[FLR:v[0-9]+]], -|[[INPUT:v[0-9]+]]|38; GCN: v_sub_f32_e64 [[RESULT:v[0-9]+]], -|[[INPUT]]|, [[FLR]]39; GCN: buffer_store_dword [[RESULT]]40define amdgpu_kernel void @fract_f32_neg_abs(ptr addrspace(1) %out, ptr addrspace(1) %src) #1 {41 %x = load float, ptr addrspace(1) %src42 %abs.x = call float @llvm.fabs.f32(float %x)43 %neg.abs.x = fsub float -0.0, %abs.x44 %floor.neg.abs.x = call float @llvm.floor.f32(float %neg.abs.x)45 %fract = fsub float %neg.abs.x, %floor.neg.abs.x46 store float %fract, ptr addrspace(1) %out47 ret void48}49 50; GCN-LABEL: {{^}}multi_use_floor_fract_f32:51; GCN-DAG: v_floor_f32_e32 [[FLOOR:v[0-9]+]], [[INPUT:v[0-9]+]]52; GCN-DAG: v_sub_f32_e32 [[FRACT:v[0-9]+]], [[INPUT:v[0-9]+]]53 54; GCN: buffer_store_dword [[FLOOR]]55; GCN: buffer_store_dword [[FRACT]]56define amdgpu_kernel void @multi_use_floor_fract_f32(ptr addrspace(1) %out, ptr addrspace(1) %src) #1 {57 %x = load float, ptr addrspace(1) %src58 %floor.x = call float @llvm.floor.f32(float %x)59 %fract = fsub float %x, %floor.x60 store volatile float %floor.x, ptr addrspace(1) %out61 store volatile float %fract, ptr addrspace(1) %out62 ret void63}64 65attributes #0 = { nounwind readnone }66attributes #1 = { nounwind }67