brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.2 KiB · 2cafd74 Raw
284 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s4 5declare <8 x double> @llvm.experimental.constrained.fadd.v8f64(<8 x double>, <8 x double>, metadata, metadata)6declare <16 x float> @llvm.experimental.constrained.fadd.v16f32(<16 x float>, <16 x float>, metadata, metadata)7declare <8 x double> @llvm.experimental.constrained.fsub.v8f64(<8 x double>, <8 x double>, metadata, metadata)8declare <16 x float> @llvm.experimental.constrained.fsub.v16f32(<16 x float>, <16 x float>, metadata, metadata)9declare <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double>, <8 x double>, metadata, metadata)10declare <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float>, <16 x float>, metadata, metadata)11declare <8 x double> @llvm.experimental.constrained.fdiv.v8f64(<8 x double>, <8 x double>, metadata, metadata)12declare <16 x float> @llvm.experimental.constrained.fdiv.v16f32(<16 x float>, <16 x float>, metadata, metadata)13declare <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double>, metadata, metadata)14declare <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float>, metadata, metadata)15declare <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f32(<8 x float>, metadata)16declare <8 x float> @llvm.experimental.constrained.fptrunc.v8f32.v8f64(<8 x double>, metadata, metadata)17declare <8 x double> @llvm.experimental.constrained.fma.v8f64(<8 x double>, <8 x double>, <8 x double>, metadata, metadata)18declare <16 x float> @llvm.experimental.constrained.fma.v16f32(<16 x float>, <16 x float>, <16 x float>, metadata, metadata)19declare <16 x float> @llvm.experimental.constrained.ceil.v16f32(<16 x float>, metadata)20declare <8 x double>  @llvm.experimental.constrained.ceil.v8f64(<8 x double>, metadata)21declare <16 x float> @llvm.experimental.constrained.floor.v16f32(<16 x float>, metadata)22declare <8 x double> @llvm.experimental.constrained.floor.v8f64(<8 x double>, metadata)23declare <16 x float> @llvm.experimental.constrained.trunc.v16f32(<16 x float>, metadata)24declare <8 x double> @llvm.experimental.constrained.trunc.v8f64(<8 x double>, metadata)25declare <16 x float> @llvm.experimental.constrained.rint.v16f32(<16 x float>, metadata, metadata)26declare <8 x double> @llvm.experimental.constrained.rint.v8f64(<8 x double>, metadata, metadata)27declare <16 x float> @llvm.experimental.constrained.nearbyint.v16f32(<16 x float>, metadata, metadata)28declare <8 x double> @llvm.experimental.constrained.nearbyint.v8f64(<8 x double>, metadata, metadata)29 30 31define <8 x double> @f1(<8 x double> %a, <8 x double> %b) #0 {32; CHECK-LABEL: f1:33; CHECK:       # %bb.0:34; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm035; CHECK-NEXT:    ret{{[l|q]}}36  %ret = call <8 x double> @llvm.experimental.constrained.fadd.v8f64(<8 x double> %a, <8 x double> %b,37                                                                     metadata !"round.dynamic",38                                                                     metadata !"fpexcept.strict") #039  ret <8 x double> %ret40}41 42define <16 x float> @f2(<16 x float> %a, <16 x float> %b) #0 {43; CHECK-LABEL: f2:44; CHECK:       # %bb.0:45; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm046; CHECK-NEXT:    ret{{[l|q]}}47  %ret = call <16 x float> @llvm.experimental.constrained.fadd.v16f32(<16 x float> %a, <16 x float> %b,48                                                                      metadata !"round.dynamic",49                                                                      metadata !"fpexcept.strict") #050  ret <16 x float> %ret51}52 53define <8 x double> @f3(<8 x double> %a, <8 x double> %b) #0 {54; CHECK-LABEL: f3:55; CHECK:       # %bb.0:56; CHECK-NEXT:    vsubpd %zmm1, %zmm0, %zmm057; CHECK-NEXT:    ret{{[l|q]}}58  %ret = call <8 x double> @llvm.experimental.constrained.fsub.v8f64(<8 x double> %a, <8 x double> %b,59                                                                     metadata !"round.dynamic",60                                                                     metadata !"fpexcept.strict") #061  ret <8 x double> %ret62}63 64define <16 x float> @f4(<16 x float> %a, <16 x float> %b) #0 {65; CHECK-LABEL: f4:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vsubps %zmm1, %zmm0, %zmm068; CHECK-NEXT:    ret{{[l|q]}}69  %ret = call <16 x float> @llvm.experimental.constrained.fsub.v16f32(<16 x float> %a, <16 x float> %b,70                                                                      metadata !"round.dynamic",71                                                                      metadata !"fpexcept.strict") #072  ret <16 x float> %ret73}74 75define <8 x double> @f5(<8 x double> %a, <8 x double> %b) #0 {76; CHECK-LABEL: f5:77; CHECK:       # %bb.0:78; CHECK-NEXT:    vmulpd %zmm1, %zmm0, %zmm079; CHECK-NEXT:    ret{{[l|q]}}80  %ret = call <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double> %a, <8 x double> %b,81                                                                     metadata !"round.dynamic",82                                                                     metadata !"fpexcept.strict") #083  ret <8 x double> %ret84}85 86define <16 x float> @f6(<16 x float> %a, <16 x float> %b) #0 {87; CHECK-LABEL: f6:88; CHECK:       # %bb.0:89; CHECK-NEXT:    vmulps %zmm1, %zmm0, %zmm090; CHECK-NEXT:    ret{{[l|q]}}91  %ret = call <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float> %a, <16 x float> %b,92                                                                      metadata !"round.dynamic",93                                                                      metadata !"fpexcept.strict") #094  ret <16 x float> %ret95}96 97define <8 x double> @f7(<8 x double> %a, <8 x double> %b) #0 {98; CHECK-LABEL: f7:99; CHECK:       # %bb.0:100; CHECK-NEXT:    vdivpd %zmm1, %zmm0, %zmm0101; CHECK-NEXT:    ret{{[l|q]}}102  %ret = call <8 x double> @llvm.experimental.constrained.fdiv.v8f64(<8 x double> %a, <8 x double> %b,103                                                                     metadata !"round.dynamic",104                                                                     metadata !"fpexcept.strict") #0105  ret <8 x double> %ret106}107 108define <16 x float> @f8(<16 x float> %a, <16 x float> %b) #0 {109; CHECK-LABEL: f8:110; CHECK:       # %bb.0:111; CHECK-NEXT:    vdivps %zmm1, %zmm0, %zmm0112; CHECK-NEXT:    ret{{[l|q]}}113  %ret = call <16 x float> @llvm.experimental.constrained.fdiv.v16f32(<16 x float> %a, <16 x float> %b,114                                                                      metadata !"round.dynamic",115                                                                      metadata !"fpexcept.strict") #0116  ret <16 x float> %ret117}118 119define <8 x double> @f9(<8 x double> %a) #0 {120; CHECK-LABEL: f9:121; CHECK:       # %bb.0:122; CHECK-NEXT:    vsqrtpd %zmm0, %zmm0123; CHECK-NEXT:    ret{{[l|q]}}124  %ret = call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(125                              <8 x double> %a,126                              metadata !"round.dynamic",127                              metadata !"fpexcept.strict") #0128  ret <8 x double> %ret129}130 131 132define <16 x float> @f10(<16 x float> %a) #0 {133; CHECK-LABEL: f10:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vsqrtps %zmm0, %zmm0136; CHECK-NEXT:    ret{{[l|q]}}137  %ret = call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(138                              <16 x float> %a,139                              metadata !"round.dynamic",140                              metadata !"fpexcept.strict") #0141  ret <16 x float > %ret142}143 144define <8 x double> @f11(<8 x float> %a) #0 {145; CHECK-LABEL: f11:146; CHECK:       # %bb.0:147; CHECK-NEXT:    vcvtps2pd %ymm0, %zmm0148; CHECK-NEXT:    ret{{[l|q]}}149  %ret = call <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f32(150                                <8 x float> %a,151                                metadata !"fpexcept.strict") #0152  ret <8 x double> %ret153}154 155define <8 x float> @f12(<8 x double> %a) #0 {156; CHECK-LABEL: f12:157; CHECK:       # %bb.0:158; CHECK-NEXT:    vcvtpd2ps %zmm0, %ymm0159; CHECK-NEXT:    ret{{[l|q]}}160  %ret = call <8 x float> @llvm.experimental.constrained.fptrunc.v8f32.v8f64(161                                <8 x double> %a,162                                metadata !"round.dynamic",163                                metadata !"fpexcept.strict") #0164  ret <8 x float> %ret165}166 167define <16 x float> @f13(<16 x float> %a, <16 x float> %b, <16 x float> %c) #0 {168; CHECK-LABEL: f13:169; CHECK:       # %bb.0:170; CHECK-NEXT:    vfmadd213ps {{.*#+}} zmm0 = (zmm1 * zmm0) + zmm2171; CHECK-NEXT:    ret{{[l|q]}}172  %res = call <16 x float> @llvm.experimental.constrained.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c,173                                                                     metadata !"round.dynamic",174                                                                     metadata !"fpexcept.strict") #0175  ret <16 x float> %res176}177 178define <8 x double> @f14(<8 x double> %a, <8 x double> %b, <8 x double> %c) #0 {179; CHECK-LABEL: f14:180; CHECK:       # %bb.0:181; CHECK-NEXT:    vfmadd213pd {{.*#+}} zmm0 = (zmm1 * zmm0) + zmm2182; CHECK-NEXT:    ret{{[l|q]}}183  %res = call <8 x double> @llvm.experimental.constrained.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c,184                                                                    metadata !"round.dynamic",185                                                                    metadata !"fpexcept.strict") #0186  ret <8 x double> %res187}188 189define <16 x float> @strict_vector_fceil_v16f32(<16 x float> %f) #0 {190; CHECK-LABEL: strict_vector_fceil_v16f32:191; CHECK:       # %bb.0:192; CHECK-NEXT:    vrndscaleps $10, %zmm0, %zmm0193; CHECK-NEXT:    ret{{[l|q]}}194  %res = call <16 x float> @llvm.experimental.constrained.ceil.v16f32(<16 x float> %f, metadata !"fpexcept.strict") #0195  ret <16 x float> %res196}197 198define <8 x double> @strict_vector_fceil_v8f64(<8 x double> %f) #0 {199; CHECK-LABEL: strict_vector_fceil_v8f64:200; CHECK:       # %bb.0:201; CHECK-NEXT:    vrndscalepd $10, %zmm0, %zmm0202; CHECK-NEXT:    ret{{[l|q]}}203  %res = call <8 x double> @llvm.experimental.constrained.ceil.v8f64(<8 x double> %f, metadata !"fpexcept.strict") #0204  ret <8 x double> %res205}206 207define <16 x float> @strict_vector_ffloor_v16f32(<16 x float> %f) #0 {208; CHECK-LABEL: strict_vector_ffloor_v16f32:209; CHECK:       # %bb.0:210; CHECK-NEXT:    vrndscaleps $9, %zmm0, %zmm0211; CHECK-NEXT:    ret{{[l|q]}}212  %res = call <16 x float> @llvm.experimental.constrained.floor.v16f32(<16 x float> %f, metadata !"fpexcept.strict") #0213  ret <16 x float> %res214}215 216define <8 x double> @strict_vector_ffloor_v8f64(<8 x double> %f) #0 {217; CHECK-LABEL: strict_vector_ffloor_v8f64:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vrndscalepd $9, %zmm0, %zmm0220; CHECK-NEXT:    ret{{[l|q]}}221  %res = call <8 x double> @llvm.experimental.constrained.floor.v8f64(<8 x double> %f, metadata !"fpexcept.strict") #0222  ret <8 x double> %res223}224 225define <16 x float> @strict_vector_ftrunc_v16f32(<16 x float> %f) #0 {226; CHECK-LABEL: strict_vector_ftrunc_v16f32:227; CHECK:       # %bb.0:228; CHECK-NEXT:    vrndscaleps $11, %zmm0, %zmm0229; CHECK-NEXT:    ret{{[l|q]}}230  %res = call <16 x float> @llvm.experimental.constrained.trunc.v16f32(<16 x float> %f, metadata !"fpexcept.strict") #0231  ret <16 x float> %res232}233 234define <8 x double> @strict_vector_ftrunc_v8f64(<8 x double> %f) #0 {235; CHECK-LABEL: strict_vector_ftrunc_v8f64:236; CHECK:       # %bb.0:237; CHECK-NEXT:    vrndscalepd $11, %zmm0, %zmm0238; CHECK-NEXT:    ret{{[l|q]}}239  %res = call <8 x double> @llvm.experimental.constrained.trunc.v8f64(<8 x double> %f, metadata !"fpexcept.strict") #0240  ret <8 x double> %res241}242 243define <16 x float> @strict_vector_frint_v16f32(<16 x float> %f) #0 {244; CHECK-LABEL: strict_vector_frint_v16f32:245; CHECK:       # %bb.0:246; CHECK-NEXT:    vrndscaleps $4, %zmm0, %zmm0247; CHECK-NEXT:    ret{{[l|q]}}248  %res = call <16 x float> @llvm.experimental.constrained.rint.v16f32(<16 x float> %f,249                             metadata !"round.dynamic", metadata !"fpexcept.strict") #0250  ret <16 x float> %res251}252 253define <8 x double> @strict_vector_frint_v8f64(<8 x double> %f) #0 {254; CHECK-LABEL: strict_vector_frint_v8f64:255; CHECK:       # %bb.0:256; CHECK-NEXT:    vrndscalepd $4, %zmm0, %zmm0257; CHECK-NEXT:    ret{{[l|q]}}258  %res = call <8 x double> @llvm.experimental.constrained.rint.v8f64(<8 x double> %f,259                            metadata !"round.dynamic", metadata !"fpexcept.strict") #0260  ret <8 x double> %res261}262 263define <16 x float> @strict_vector_fnearbyint_v16f32(<16 x float> %f) #0 {264; CHECK-LABEL: strict_vector_fnearbyint_v16f32:265; CHECK:       # %bb.0:266; CHECK-NEXT:    vrndscaleps $12, %zmm0, %zmm0267; CHECK-NEXT:    ret{{[l|q]}}268  %res = call <16 x float> @llvm.experimental.constrained.nearbyint.v16f32(<16 x float> %f,269                             metadata !"round.dynamic", metadata !"fpexcept.strict") #0270  ret <16 x float> %res271}272 273define <8 x double> @strict_vector_fnearbyint_v8f64(<8 x double> %f) #0 {274; CHECK-LABEL: strict_vector_fnearbyint_v8f64:275; CHECK:       # %bb.0:276; CHECK-NEXT:    vrndscalepd $12, %zmm0, %zmm0277; CHECK-NEXT:    ret{{[l|q]}}278  %res = call <8 x double> @llvm.experimental.constrained.nearbyint.v8f64(<8 x double> %f,279                             metadata !"round.dynamic", metadata !"fpexcept.strict") #0280  ret <8 x double> %res281}282 283attributes #0 = { strictfp }284