129 lines · plain
1; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s2; RUN: llc -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefix=CI -check-prefix=FUNC %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=CI -check-prefix=FUNC %s4 5declare double @llvm.fabs.f64(double %Val)6declare double @llvm.floor.f64(double) nounwind readnone7declare <2 x double> @llvm.floor.v2f64(<2 x double>) nounwind readnone8declare <3 x double> @llvm.floor.v3f64(<3 x double>) nounwind readnone9declare <4 x double> @llvm.floor.v4f64(<4 x double>) nounwind readnone10declare <8 x double> @llvm.floor.v8f64(<8 x double>) nounwind readnone11declare <16 x double> @llvm.floor.v16f64(<16 x double>) nounwind readnone12 13; FUNC-LABEL: {{^}}ffloor_f64:14; CI: v_floor_f64_e3215; SI: v_fract_f64_e3216; SI-DAG: v_min_f6417; SI-DAG: v_cmp_class_f64_e64 vcc18; SI: v_cndmask_b32_e3219; SI: v_cndmask_b32_e3220; SI: v_add_f6421; SI: s_endpgm22define amdgpu_kernel void @ffloor_f64(ptr addrspace(1) %out, double %x) {23 %y = call fast double @llvm.floor.f64(double %x) nounwind readnone24 store double %y, ptr addrspace(1) %out25 ret void26}27 28; FUNC-LABEL: {{^}}ffloor_f64_neg:29; CI: v_floor_f64_e6430; SI: v_fract_f64_e64 {{v\[[0-9]+:[0-9]+\]}}, -[[INPUT:s\[[0-9]+:[0-9]+\]]]31; SI-DAG: v_min_f6432; SI-DAG: v_cmp_class_f64_e64 vcc33; SI: v_cndmask_b32_e3234; SI: v_cndmask_b32_e3235; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\]}}, -[[INPUT]]36; SI: s_endpgm37define amdgpu_kernel void @ffloor_f64_neg(ptr addrspace(1) %out, double %x) {38 %neg = fsub nsz double 0.0, %x39 %y = call fast double @llvm.floor.f64(double %neg) nounwind readnone40 store double %y, ptr addrspace(1) %out41 ret void42}43 44; FUNC-LABEL: {{^}}ffloor_f64_neg_abs:45; CI: v_floor_f64_e6446; SI: v_fract_f64_e64 {{v\[[0-9]+:[0-9]+\]}}, -|[[INPUT:s\[[0-9]+:[0-9]+\]]]|47; SI-DAG: v_min_f6448; SI-DAG: v_cmp_class_f64_e64 vcc49; SI: v_cndmask_b32_e3250; SI: v_cndmask_b32_e3251; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\]}}, -|[[INPUT]]|52; SI: s_endpgm53define amdgpu_kernel void @ffloor_f64_neg_abs(ptr addrspace(1) %out, double %x) {54 %abs = call fast double @llvm.fabs.f64(double %x)55 %neg = fsub nsz double 0.0, %abs56 %y = call fast double @llvm.floor.f64(double %neg) nounwind readnone57 store double %y, ptr addrspace(1) %out58 ret void59}60 61; FUNC-LABEL: {{^}}ffloor_v2f64:62; CI: v_floor_f64_e3263; CI: v_floor_f64_e3264define amdgpu_kernel void @ffloor_v2f64(ptr addrspace(1) %out, <2 x double> %x) {65 %y = call fast <2 x double> @llvm.floor.v2f64(<2 x double> %x) nounwind readnone66 store <2 x double> %y, ptr addrspace(1) %out67 ret void68}69 70; FUNC-LABEL: {{^}}ffloor_v3f64:71; CI: v_floor_f64_e3272; CI: v_floor_f64_e3273; CI: v_floor_f64_e3274; CI-NOT: v_floor_f64_e3275define amdgpu_kernel void @ffloor_v3f64(ptr addrspace(1) %out, <3 x double> %x) {76 %y = call fast <3 x double> @llvm.floor.v3f64(<3 x double> %x) nounwind readnone77 store <3 x double> %y, ptr addrspace(1) %out78 ret void79}80 81; FUNC-LABEL: {{^}}ffloor_v4f64:82; CI: v_floor_f64_e3283; CI: v_floor_f64_e3284; CI: v_floor_f64_e3285; CI: v_floor_f64_e3286define amdgpu_kernel void @ffloor_v4f64(ptr addrspace(1) %out, <4 x double> %x) {87 %y = call fast <4 x double> @llvm.floor.v4f64(<4 x double> %x) nounwind readnone88 store <4 x double> %y, ptr addrspace(1) %out89 ret void90}91 92; FUNC-LABEL: {{^}}ffloor_v8f64:93; CI: v_floor_f64_e3294; CI: v_floor_f64_e3295; CI: v_floor_f64_e3296; CI: v_floor_f64_e3297; CI: v_floor_f64_e3298; CI: v_floor_f64_e3299; CI: v_floor_f64_e32100; CI: v_floor_f64_e32101define amdgpu_kernel void @ffloor_v8f64(ptr addrspace(1) %out, <8 x double> %x) {102 %y = call fast <8 x double> @llvm.floor.v8f64(<8 x double> %x) nounwind readnone103 store <8 x double> %y, ptr addrspace(1) %out104 ret void105}106 107; FUNC-LABEL: {{^}}ffloor_v16f64:108; CI: v_floor_f64_e32109; CI: v_floor_f64_e32110; CI: v_floor_f64_e32111; CI: v_floor_f64_e32112; CI: v_floor_f64_e32113; CI: v_floor_f64_e32114; CI: v_floor_f64_e32115; CI: v_floor_f64_e32116; CI: v_floor_f64_e32117; CI: v_floor_f64_e32118; CI: v_floor_f64_e32119; CI: v_floor_f64_e32120; CI: v_floor_f64_e32121; CI: v_floor_f64_e32122; CI: v_floor_f64_e32123; CI: v_floor_f64_e32124define amdgpu_kernel void @ffloor_v16f64(ptr addrspace(1) %out, <16 x double> %x) {125 %y = call fast <16 x double> @llvm.floor.v16f64(<16 x double> %x) nounwind readnone126 store <16 x double> %y, ptr addrspace(1) %out127 ret void128}129