96 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s3 4declare <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32)5declare <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32)6declare <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32)7declare <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32)8 9define <4 x float> @test_int_x86_avx512_mask3_vfmadd_ss_load0(ptr %x0ptr, <4 x float> %x1, <4 x float> %x2) {10; CHECK-LABEL: test_int_x86_avx512_mask3_vfmadd_ss_load0:11; CHECK: ## %bb.0:12; CHECK-NEXT: vfmadd231ss {{.*#+}} xmm1 = (xmm0 * mem) + xmm113; CHECK-NEXT: vmovaps %xmm1, %xmm014; CHECK-NEXT: retq15 %x0 = load <4 x float>, ptr %x0ptr16 %res = call <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)17 ret <4 x float> %res18}19 20define <4 x float> @test_int_x86_avx512_mask3_vfmadd_ss_load1(<4 x float> %x0, ptr %x1ptr, <4 x float> %x2){21; CHECK-LABEL: test_int_x86_avx512_mask3_vfmadd_ss_load1:22; CHECK: ## %bb.0:23; CHECK-NEXT: vfmadd231ss {{.*#+}} xmm1 = (xmm0 * mem) + xmm124; CHECK-NEXT: vmovaps %xmm1, %xmm025; CHECK-NEXT: retq26 %x1 = load <4 x float>, ptr %x1ptr27 %res = call <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)28 ret <4 x float> %res29}30 31define <2 x double> @test_int_x86_avx512_mask3_vfmadd_sd_load0(ptr %x0ptr, <2 x double> %x1, <2 x double> %x2) {32; CHECK-LABEL: test_int_x86_avx512_mask3_vfmadd_sd_load0:33; CHECK: ## %bb.0:34; CHECK-NEXT: vfmadd231sd {{.*#+}} xmm1 = (xmm0 * mem) + xmm135; CHECK-NEXT: vmovapd %xmm1, %xmm036; CHECK-NEXT: retq37 %x0 = load <2 x double>, ptr %x0ptr38 %res = call <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double> %x0, <2 x double> %x1, <2 x double> %x2, i8 -1, i32 4)39 ret <2 x double> %res40}41 42define <2 x double> @test_int_x86_avx512_mask3_vfmadd_sd_load1(<2 x double> %x0, ptr %x1ptr, <2 x double> %x2){43; CHECK-LABEL: test_int_x86_avx512_mask3_vfmadd_sd_load1:44; CHECK: ## %bb.0:45; CHECK-NEXT: vfmadd231sd {{.*#+}} xmm1 = (xmm0 * mem) + xmm146; CHECK-NEXT: vmovapd %xmm1, %xmm047; CHECK-NEXT: retq48 %x1 = load <2 x double>, ptr %x1ptr49 %res = call <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double> %x0, <2 x double> %x1, <2 x double> %x2, i8 -1, i32 4)50 ret <2 x double> %res51}52 53define <4 x float> @test_int_x86_avx512_mask3_vfmsub_ss_load0(ptr %x0ptr, <4 x float> %x1, <4 x float> %x2) {54; CHECK-LABEL: test_int_x86_avx512_mask3_vfmsub_ss_load0:55; CHECK: ## %bb.0:56; CHECK-NEXT: vfmsub231ss {{.*#+}} xmm1 = (xmm0 * mem) - xmm157; CHECK-NEXT: vmovaps %xmm1, %xmm058; CHECK-NEXT: retq59 %x0 = load <4 x float>, ptr %x0ptr60 %res = call <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)61 ret <4 x float> %res62}63 64define <4 x float> @test_int_x86_avx512_mask3_vfmsub_ss_load1(<4 x float> %x0, ptr %x1ptr, <4 x float> %x2){65; CHECK-LABEL: test_int_x86_avx512_mask3_vfmsub_ss_load1:66; CHECK: ## %bb.0:67; CHECK-NEXT: vfmsub231ss {{.*#+}} xmm1 = (xmm0 * mem) - xmm168; CHECK-NEXT: vmovaps %xmm1, %xmm069; CHECK-NEXT: retq70 %x1 = load <4 x float>, ptr %x1ptr71 %res = call <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)72 ret <4 x float> %res73}74 75define <2 x double> @test_int_x86_avx512_mask3_vfmsub_sd_load0(ptr %x0ptr, <2 x double> %x1, <2 x double> %x2) {76; CHECK-LABEL: test_int_x86_avx512_mask3_vfmsub_sd_load0:77; CHECK: ## %bb.0:78; CHECK-NEXT: vfmsub231sd {{.*#+}} xmm1 = (xmm0 * mem) - xmm179; CHECK-NEXT: vmovapd %xmm1, %xmm080; CHECK-NEXT: retq81 %x0 = load <2 x double>, ptr %x0ptr82 %res = call <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double> %x0, <2 x double> %x1, <2 x double> %x2, i8 -1, i32 4)83 ret <2 x double> %res84}85 86define <2 x double> @test_int_x86_avx512_mask3_vfmsub_sd_load1(<2 x double> %x0, ptr %x1ptr, <2 x double> %x2){87; CHECK-LABEL: test_int_x86_avx512_mask3_vfmsub_sd_load1:88; CHECK: ## %bb.0:89; CHECK-NEXT: vfmsub231sd {{.*#+}} xmm1 = (xmm0 * mem) - xmm190; CHECK-NEXT: vmovapd %xmm1, %xmm091; CHECK-NEXT: retq92 %x1 = load <2 x double>, ptr %x1ptr93 %res = call <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double> %x0, <2 x double> %x1, <2 x double> %x2, i8 -1, i32 4)94 ret <2 x double> %res95}96