213 lines · plain
1; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn < %s | FileCheck -check-prefixes=FUNC,GCN,FMA_F64 %s2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefixes=FUNC,GCN,FMA_F64 %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx90a -mattr=-flat-for-global < %s | FileCheck -check-prefixes=FUNC,GCN,FMAC_F64 %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=FUNC,GCN,FMA_F64 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1250 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=FUNC,GCN,FMAC_F64 %s6 7declare double @llvm.fma.f64(double, double, double) nounwind readnone8declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) nounwind readnone9declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>) nounwind readnone10declare double @llvm.fabs.f64(double) nounwind readnone11 12; FUNC-LABEL: {{^}}fma_f64:13; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}14; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}15define amdgpu_kernel void @fma_f64(ptr addrspace(1) %out, ptr addrspace(1) %in1,16 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {17 %r0 = load double, ptr addrspace(1) %in118 %r1 = load double, ptr addrspace(1) %in219 %r2 = load double, ptr addrspace(1) %in320 %r3 = tail call double @llvm.fma.f64(double %r0, double %r1, double %r2)21 store double %r3, ptr addrspace(1) %out22 ret void23}24 25; FUNC-LABEL: {{^}}fma_v2f64:26; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}27; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}28; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}29; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}30define amdgpu_kernel void @fma_v2f64(ptr addrspace(1) %out, ptr addrspace(1) %in1,31 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {32 %r0 = load <2 x double>, ptr addrspace(1) %in133 %r1 = load <2 x double>, ptr addrspace(1) %in234 %r2 = load <2 x double>, ptr addrspace(1) %in335 %r3 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %r0, <2 x double> %r1, <2 x double> %r2)36 store <2 x double> %r3, ptr addrspace(1) %out37 ret void38}39 40; FUNC-LABEL: {{^}}fma_v4f64:41; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}42; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}43; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}44; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}45; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}46; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}47; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}48; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}49define amdgpu_kernel void @fma_v4f64(ptr addrspace(1) %out, ptr addrspace(1) %in1,50 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {51 %r0 = load <4 x double>, ptr addrspace(1) %in152 %r1 = load <4 x double>, ptr addrspace(1) %in253 %r2 = load <4 x double>, ptr addrspace(1) %in354 %r3 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %r0, <4 x double> %r1, <4 x double> %r2)55 store <4 x double> %r3, ptr addrspace(1) %out56 ret void57}58 59; FUNC-LABEL: {{^}}fma_f64_abs_src0:60; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], |v\[[0-9]+:[0-9]+\]|, v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}61define amdgpu_kernel void @fma_f64_abs_src0(ptr addrspace(1) %out, ptr addrspace(1) %in1,62 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {63 %r0 = load double, ptr addrspace(1) %in164 %r1 = load double, ptr addrspace(1) %in265 %r2 = load double, ptr addrspace(1) %in366 %fabs = call double @llvm.fabs.f64(double %r0)67 %r3 = tail call double @llvm.fma.f64(double %fabs, double %r1, double %r2)68 store double %r3, ptr addrspace(1) %out69 ret void70}71 72; FUNC-LABEL: {{^}}fma_f64_abs_src1:73; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], \|v\[[0-9]+:[0-9]+\]\|, v\[[0-9]+:[0-9]+\]}}74define amdgpu_kernel void @fma_f64_abs_src1(ptr addrspace(1) %out, ptr addrspace(1) %in1,75 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {76 %r0 = load double, ptr addrspace(1) %in177 %r1 = load double, ptr addrspace(1) %in278 %r2 = load double, ptr addrspace(1) %in379 %fabs = call double @llvm.fabs.f64(double %r1)80 %r3 = tail call double @llvm.fma.f64(double %r0, double %fabs, double %r2)81 store double %r3, ptr addrspace(1) %out82 ret void83}84 85; FUNC-LABEL: {{^}}fma_f64_abs_src2:86; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], \|v\[[0-9]+:[0-9]+\]\|}}87define amdgpu_kernel void @fma_f64_abs_src2(ptr addrspace(1) %out, ptr addrspace(1) %in1,88 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {89 %r0 = load double, ptr addrspace(1) %in190 %r1 = load double, ptr addrspace(1) %in291 %r2 = load double, ptr addrspace(1) %in392 %fabs = call double @llvm.fabs.f64(double %r2)93 %r3 = tail call double @llvm.fma.f64(double %r0, double %r1, double %fabs)94 store double %r3, ptr addrspace(1) %out95 ret void96}97 98; FUNC-LABEL: {{^}}fma_f64_neg_src0:99; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}100define amdgpu_kernel void @fma_f64_neg_src0(ptr addrspace(1) %out, ptr addrspace(1) %in1,101 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {102 %r0 = load double, ptr addrspace(1) %in1103 %r1 = load double, ptr addrspace(1) %in2104 %r2 = load double, ptr addrspace(1) %in3105 %fsub = fsub double -0.000000e+00, %r0106 %r3 = tail call double @llvm.fma.f64(double %fsub, double %r1, double %r2)107 store double %r3, ptr addrspace(1) %out108 ret void109}110 111; FUNC-LABEL: {{^}}fma_f64_neg_src1:112; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}113define amdgpu_kernel void @fma_f64_neg_src1(ptr addrspace(1) %out, ptr addrspace(1) %in1,114 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {115 %r0 = load double, ptr addrspace(1) %in1116 %r1 = load double, ptr addrspace(1) %in2117 %r2 = load double, ptr addrspace(1) %in3118 %fsub = fsub double -0.000000e+00, %r1119 %r3 = tail call double @llvm.fma.f64(double %r0, double %fsub, double %r2)120 store double %r3, ptr addrspace(1) %out121 ret void122}123 124; FUNC-LABEL: {{^}}fma_f64_neg_src2:125; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}}126define amdgpu_kernel void @fma_f64_neg_src2(ptr addrspace(1) %out, ptr addrspace(1) %in1,127 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {128 %r0 = load double, ptr addrspace(1) %in1129 %r1 = load double, ptr addrspace(1) %in2130 %r2 = load double, ptr addrspace(1) %in3131 %fsub = fsub double -0.000000e+00, %r2132 %r3 = tail call double @llvm.fma.f64(double %r0, double %r1, double %fsub)133 store double %r3, ptr addrspace(1) %out134 ret void135}136 137; FUNC-LABEL: {{^}}fma_f64_abs_neg_src0:138; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], -\|v\[[0-9]+:[0-9]+\]\|, v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\]}}139define amdgpu_kernel void @fma_f64_abs_neg_src0(ptr addrspace(1) %out, ptr addrspace(1) %in1,140 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {141 %r0 = load double, ptr addrspace(1) %in1142 %r1 = load double, ptr addrspace(1) %in2143 %r2 = load double, ptr addrspace(1) %in3144 %fabs = call double @llvm.fabs.f64(double %r0)145 %fsub = fsub double -0.000000e+00, %fabs146 %r3 = tail call double @llvm.fma.f64(double %fsub, double %r1, double %r2)147 store double %r3, ptr addrspace(1) %out148 ret void149}150 151; FUNC-LABEL: {{^}}fma_f64_abs_neg_src1:152; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -\|v\[[0-9]+:[0-9]+\]\|, v\[[0-9]+:[0-9]+\]}}153define amdgpu_kernel void @fma_f64_abs_neg_src1(ptr addrspace(1) %out, ptr addrspace(1) %in1,154 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {155 %r0 = load double, ptr addrspace(1) %in1156 %r1 = load double, ptr addrspace(1) %in2157 %r2 = load double, ptr addrspace(1) %in3158 %fabs = call double @llvm.fabs.f64(double %r1)159 %fsub = fsub double -0.000000e+00, %fabs160 %r3 = tail call double @llvm.fma.f64(double %r0, double %fsub, double %r2)161 store double %r3, ptr addrspace(1) %out162 ret void163}164 165; FUNC-LABEL: {{^}}fma_f64_abs_neg_src2:166; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -\|v\[[0-9]+:[0-9]+\]\|}}167define amdgpu_kernel void @fma_f64_abs_neg_src2(ptr addrspace(1) %out, ptr addrspace(1) %in1,168 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {169 %r0 = load double, ptr addrspace(1) %in1170 %r1 = load double, ptr addrspace(1) %in2171 %r2 = load double, ptr addrspace(1) %in3172 %fabs = call double @llvm.fabs.f64(double %r2)173 %fsub = fsub double -0.000000e+00, %fabs174 %r3 = tail call double @llvm.fma.f64(double %r0, double %r1, double %fsub)175 store double %r3, ptr addrspace(1) %out176 ret void177}178 179; FUNC-LABEL: {{^}}fma_f64_lit_src0:180; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], 2.0, v\[[0-9]+:[0-9]+\]}}181; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], 2.0, v\[[0-9]+:[0-9]+\]}}182define amdgpu_kernel void @fma_f64_lit_src0(ptr addrspace(1) %out,183 ptr addrspace(1) %in2, ptr addrspace(1) %in3) {184 %r1 = load double, ptr addrspace(1) %in2185 %r2 = load double, ptr addrspace(1) %in3186 %r3 = tail call double @llvm.fma.f64(double +2.0, double %r1, double %r2)187 store double %r3, ptr addrspace(1) %out188 ret void189}190 191; FUNC-LABEL: {{^}}fma_f64_lit_src1:192; FMA_F64: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], 2.0, v\[[0-9]+:[0-9]+\]}}193; FMAC_F64: v_fmac_f64_e32 {{v\[[0-9]+:[0-9]+\], 2.0, v\[[0-9]+:[0-9]+\]}}194define amdgpu_kernel void @fma_f64_lit_src1(ptr addrspace(1) %out, ptr addrspace(1) %in1,195 ptr addrspace(1) %in3) {196 %r0 = load double, ptr addrspace(1) %in1197 %r2 = load double, ptr addrspace(1) %in3198 %r3 = tail call double @llvm.fma.f64(double %r0, double +2.0, double %r2)199 store double %r3, ptr addrspace(1) %out200 ret void201}202 203; FUNC-LABEL: {{^}}fma_f64_lit_src2:204; GCN: v_fma_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], 2.0}}205define amdgpu_kernel void @fma_f64_lit_src2(ptr addrspace(1) %out, ptr addrspace(1) %in1,206 ptr addrspace(1) %in2) {207 %r0 = load double, ptr addrspace(1) %in1208 %r1 = load double, ptr addrspace(1) %in2209 %r3 = tail call double @llvm.fma.f64(double %r0, double %r1, double +2.0)210 store double %r3, ptr addrspace(1) %out211 ret void212}213