3394 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=+avx512vl | FileCheck %s3 4declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)5declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)6declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)7declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)8declare <8 x double> @llvm.floor.v8f64(<8 x double> %p)9declare <16 x float> @llvm.floor.v16f32(<16 x float> %p)10declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)11declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)12declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)13declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)14declare <8 x double> @llvm.ceil.v8f64(<8 x double> %p)15declare <16 x float> @llvm.ceil.v16f32(<16 x float> %p)16declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)17declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)18declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)19declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)20declare <8 x double> @llvm.trunc.v8f64(<8 x double> %p)21declare <16 x float> @llvm.trunc.v16f32(<16 x float> %p)22declare <2 x double> @llvm.rint.v2f64(<2 x double> %p)23declare <4 x float> @llvm.rint.v4f32(<4 x float> %p)24declare <4 x double> @llvm.rint.v4f64(<4 x double> %p)25declare <8 x float> @llvm.rint.v8f32(<8 x float> %p)26declare <8 x double> @llvm.rint.v8f64(<8 x double> %p)27declare <16 x float> @llvm.rint.v16f32(<16 x float> %p)28declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)29declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)30declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)31declare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)32declare <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)33declare <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)34 35define <2 x double> @floor_v2f64(<2 x double> %p) {36; CHECK-LABEL: floor_v2f64:37; CHECK: ## %bb.0:38; CHECK-NEXT: vroundpd $9, %xmm0, %xmm039; CHECK-NEXT: retq40 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)41 ret <2 x double> %t42}43 44define <4 x float> @floor_v4f32(<4 x float> %p) {45; CHECK-LABEL: floor_v4f32:46; CHECK: ## %bb.0:47; CHECK-NEXT: vroundps $9, %xmm0, %xmm048; CHECK-NEXT: retq49 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)50 ret <4 x float> %t51}52 53define <4 x double> @floor_v4f64(<4 x double> %p){54; CHECK-LABEL: floor_v4f64:55; CHECK: ## %bb.0:56; CHECK-NEXT: vroundpd $9, %ymm0, %ymm057; CHECK-NEXT: retq58 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)59 ret <4 x double> %t60}61 62define <8 x float> @floor_v8f32(<8 x float> %p) {63; CHECK-LABEL: floor_v8f32:64; CHECK: ## %bb.0:65; CHECK-NEXT: vroundps $9, %ymm0, %ymm066; CHECK-NEXT: retq67 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)68 ret <8 x float> %t69}70 71define <8 x double> @floor_v8f64(<8 x double> %p){72; CHECK-LABEL: floor_v8f64:73; CHECK: ## %bb.0:74; CHECK-NEXT: vrndscalepd $9, %zmm0, %zmm075; CHECK-NEXT: retq76 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)77 ret <8 x double> %t78}79 80define <16 x float> @floor_v16f32(<16 x float> %p) {81; CHECK-LABEL: floor_v16f32:82; CHECK: ## %bb.0:83; CHECK-NEXT: vrndscaleps $9, %zmm0, %zmm084; CHECK-NEXT: retq85 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)86 ret <16 x float> %t87}88 89define <2 x double> @floor_v2f64_load(ptr %ptr) {90; CHECK-LABEL: floor_v2f64_load:91; CHECK: ## %bb.0:92; CHECK-NEXT: vroundpd $9, (%rdi), %xmm093; CHECK-NEXT: retq94 %p = load <2 x double>, ptr %ptr95 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)96 ret <2 x double> %t97}98 99define <4 x float> @floor_v4f32_load(ptr %ptr) {100; CHECK-LABEL: floor_v4f32_load:101; CHECK: ## %bb.0:102; CHECK-NEXT: vroundps $9, (%rdi), %xmm0103; CHECK-NEXT: retq104 %p = load <4 x float>, ptr %ptr105 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)106 ret <4 x float> %t107}108 109define <4 x double> @floor_v4f64_load(ptr %ptr){110; CHECK-LABEL: floor_v4f64_load:111; CHECK: ## %bb.0:112; CHECK-NEXT: vroundpd $9, (%rdi), %ymm0113; CHECK-NEXT: retq114 %p = load <4 x double>, ptr %ptr115 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)116 ret <4 x double> %t117}118 119define <8 x float> @floor_v8f32_load(ptr %ptr) {120; CHECK-LABEL: floor_v8f32_load:121; CHECK: ## %bb.0:122; CHECK-NEXT: vroundps $9, (%rdi), %ymm0123; CHECK-NEXT: retq124 %p = load <8 x float>, ptr %ptr125 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)126 ret <8 x float> %t127}128 129define <8 x double> @floor_v8f64_load(ptr %ptr){130; CHECK-LABEL: floor_v8f64_load:131; CHECK: ## %bb.0:132; CHECK-NEXT: vrndscalepd $9, (%rdi), %zmm0133; CHECK-NEXT: retq134 %p = load <8 x double>, ptr %ptr135 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)136 ret <8 x double> %t137}138 139define <16 x float> @floor_v16f32_load(ptr %ptr) {140; CHECK-LABEL: floor_v16f32_load:141; CHECK: ## %bb.0:142; CHECK-NEXT: vrndscaleps $9, (%rdi), %zmm0143; CHECK-NEXT: retq144 %p = load <16 x float>, ptr %ptr145 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)146 ret <16 x float> %t147}148 149define <2 x double> @floor_v2f64_mask(<2 x double> %p, <2 x double> %passthru, <2 x i64> %cmp) {150; CHECK-LABEL: floor_v2f64_mask:151; CHECK: ## %bb.0:152; CHECK-NEXT: vptestnmq %xmm2, %xmm2, %k1153; CHECK-NEXT: vrndscalepd $9, %xmm0, %xmm1 {%k1}154; CHECK-NEXT: vmovapd %xmm1, %xmm0155; CHECK-NEXT: retq156 %c = icmp eq <2 x i64> %cmp, zeroinitializer157 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)158 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru159 ret <2 x double> %s160}161 162define <4 x float> @floor_v4f32_mask(<4 x float> %p, <4 x float> %passthru, <4 x i32> %cmp) {163; CHECK-LABEL: floor_v4f32_mask:164; CHECK: ## %bb.0:165; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k1166; CHECK-NEXT: vrndscaleps $9, %xmm0, %xmm1 {%k1}167; CHECK-NEXT: vmovaps %xmm1, %xmm0168; CHECK-NEXT: retq169 %c = icmp eq <4 x i32> %cmp, zeroinitializer170 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)171 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru172 ret <4 x float> %s173}174 175define <4 x double> @floor_v4f64_mask(<4 x double> %p, <4 x double> %passthru, <4 x i64> %cmp) {176; CHECK-LABEL: floor_v4f64_mask:177; CHECK: ## %bb.0:178; CHECK-NEXT: vptestnmq %ymm2, %ymm2, %k1179; CHECK-NEXT: vrndscalepd $9, %ymm0, %ymm1 {%k1}180; CHECK-NEXT: vmovapd %ymm1, %ymm0181; CHECK-NEXT: retq182 %c = icmp eq <4 x i64> %cmp, zeroinitializer183 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)184 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru185 ret <4 x double> %s186}187 188define <8 x float> @floor_v8f32_mask(<8 x float> %p, <8 x float> %passthru, <8 x i32> %cmp) {189; CHECK-LABEL: floor_v8f32_mask:190; CHECK: ## %bb.0:191; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1192; CHECK-NEXT: vrndscaleps $9, %ymm0, %ymm1 {%k1}193; CHECK-NEXT: vmovaps %ymm1, %ymm0194; CHECK-NEXT: retq195 %c = icmp eq <8 x i32> %cmp, zeroinitializer196 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)197 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru198 ret <8 x float> %s199}200 201define <8 x double> @floor_v8f64_mask(<8 x double> %p, <8 x double> %passthru, <8 x i64> %cmp) {202; CHECK-LABEL: floor_v8f64_mask:203; CHECK: ## %bb.0:204; CHECK-NEXT: vptestnmq %zmm2, %zmm2, %k1205; CHECK-NEXT: vrndscalepd $9, %zmm0, %zmm1 {%k1}206; CHECK-NEXT: vmovapd %zmm1, %zmm0207; CHECK-NEXT: retq208 %c = icmp eq <8 x i64> %cmp, zeroinitializer209 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)210 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru211 ret <8 x double> %s212}213 214define <16 x float> @floor_v16f32_mask(<16 x float> %p, <16 x float> %passthru, <16 x i32> %cmp) {215; CHECK-LABEL: floor_v16f32_mask:216; CHECK: ## %bb.0:217; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1218; CHECK-NEXT: vrndscaleps $9, %zmm0, %zmm1 {%k1}219; CHECK-NEXT: vmovaps %zmm1, %zmm0220; CHECK-NEXT: retq221 %c = icmp eq <16 x i32> %cmp, zeroinitializer222 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)223 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru224 ret <16 x float> %s225}226 227define <2 x double> @floor_v2f64_maskz(<2 x double> %p, <2 x i64> %cmp) {228; CHECK-LABEL: floor_v2f64_maskz:229; CHECK: ## %bb.0:230; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1231; CHECK-NEXT: vrndscalepd $9, %xmm0, %xmm0 {%k1} {z}232; CHECK-NEXT: retq233 %c = icmp eq <2 x i64> %cmp, zeroinitializer234 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)235 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer236 ret <2 x double> %s237}238 239define <4 x float> @floor_v4f32_maskz(<4 x float> %p, <4 x i32> %cmp) {240; CHECK-LABEL: floor_v4f32_maskz:241; CHECK: ## %bb.0:242; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1243; CHECK-NEXT: vrndscaleps $9, %xmm0, %xmm0 {%k1} {z}244; CHECK-NEXT: retq245 %c = icmp eq <4 x i32> %cmp, zeroinitializer246 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)247 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer248 ret <4 x float> %s249}250 251define <4 x double> @floor_v4f64_maskz(<4 x double> %p, <4 x i64> %cmp) {252; CHECK-LABEL: floor_v4f64_maskz:253; CHECK: ## %bb.0:254; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1255; CHECK-NEXT: vrndscalepd $9, %ymm0, %ymm0 {%k1} {z}256; CHECK-NEXT: retq257 %c = icmp eq <4 x i64> %cmp, zeroinitializer258 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)259 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer260 ret <4 x double> %s261}262 263define <8 x float> @floor_v8f32_maskz(<8 x float> %p, <8 x i32> %cmp) {264; CHECK-LABEL: floor_v8f32_maskz:265; CHECK: ## %bb.0:266; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1267; CHECK-NEXT: vrndscaleps $9, %ymm0, %ymm0 {%k1} {z}268; CHECK-NEXT: retq269 %c = icmp eq <8 x i32> %cmp, zeroinitializer270 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)271 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer272 ret <8 x float> %s273}274 275define <8 x double> @floor_v8f64_maskz(<8 x double> %p, <8 x i64> %cmp) {276; CHECK-LABEL: floor_v8f64_maskz:277; CHECK: ## %bb.0:278; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k1279; CHECK-NEXT: vrndscalepd $9, %zmm0, %zmm0 {%k1} {z}280; CHECK-NEXT: retq281 %c = icmp eq <8 x i64> %cmp, zeroinitializer282 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)283 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer284 ret <8 x double> %s285}286 287define <16 x float> @floor_v16f32_maskz(<16 x float> %p, <16 x i32> %cmp) {288; CHECK-LABEL: floor_v16f32_maskz:289; CHECK: ## %bb.0:290; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1291; CHECK-NEXT: vrndscaleps $9, %zmm0, %zmm0 {%k1} {z}292; CHECK-NEXT: retq293 %c = icmp eq <16 x i32> %cmp, zeroinitializer294 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)295 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer296 ret <16 x float> %s297}298 299define <2 x double> @floor_v2f64_mask_load(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {300; CHECK-LABEL: floor_v2f64_mask_load:301; CHECK: ## %bb.0:302; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1303; CHECK-NEXT: vrndscalepd $9, (%rdi), %xmm0 {%k1}304; CHECK-NEXT: retq305 %c = icmp eq <2 x i64> %cmp, zeroinitializer306 %p = load <2 x double>, ptr %ptr307 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)308 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru309 ret <2 x double> %s310}311 312define <4 x float> @floor_v4f32_mask_load(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {313; CHECK-LABEL: floor_v4f32_mask_load:314; CHECK: ## %bb.0:315; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1316; CHECK-NEXT: vrndscaleps $9, (%rdi), %xmm0 {%k1}317; CHECK-NEXT: retq318 %c = icmp eq <4 x i32> %cmp, zeroinitializer319 %p = load <4 x float>, ptr %ptr320 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)321 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru322 ret <4 x float> %s323}324 325define <4 x double> @floor_v4f64_mask_load(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {326; CHECK-LABEL: floor_v4f64_mask_load:327; CHECK: ## %bb.0:328; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1329; CHECK-NEXT: vrndscalepd $9, (%rdi), %ymm0 {%k1}330; CHECK-NEXT: retq331 %c = icmp eq <4 x i64> %cmp, zeroinitializer332 %p = load <4 x double>, ptr %ptr333 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)334 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru335 ret <4 x double> %s336}337 338define <8 x float> @floor_v8f32_mask_load(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {339; CHECK-LABEL: floor_v8f32_mask_load:340; CHECK: ## %bb.0:341; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1342; CHECK-NEXT: vrndscaleps $9, (%rdi), %ymm0 {%k1}343; CHECK-NEXT: retq344 %c = icmp eq <8 x i32> %cmp, zeroinitializer345 %p = load <8 x float>, ptr %ptr346 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)347 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru348 ret <8 x float> %s349}350 351define <8 x double> @floor_v8f64_mask_load(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {352; CHECK-LABEL: floor_v8f64_mask_load:353; CHECK: ## %bb.0:354; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k1355; CHECK-NEXT: vrndscalepd $9, (%rdi), %zmm0 {%k1}356; CHECK-NEXT: retq357 %c = icmp eq <8 x i64> %cmp, zeroinitializer358 %p = load <8 x double>, ptr %ptr359 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)360 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru361 ret <8 x double> %s362}363 364define <16 x float> @floor_v16f32_mask_load(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {365; CHECK-LABEL: floor_v16f32_mask_load:366; CHECK: ## %bb.0:367; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1368; CHECK-NEXT: vrndscaleps $9, (%rdi), %zmm0 {%k1}369; CHECK-NEXT: retq370 %c = icmp eq <16 x i32> %cmp, zeroinitializer371 %p = load <16 x float>, ptr %ptr372 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)373 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru374 ret <16 x float> %s375}376 377define <2 x double> @floor_v2f64_maskz_load(ptr %ptr, <2 x i64> %cmp) {378; CHECK-LABEL: floor_v2f64_maskz_load:379; CHECK: ## %bb.0:380; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k1381; CHECK-NEXT: vrndscalepd $9, (%rdi), %xmm0 {%k1} {z}382; CHECK-NEXT: retq383 %c = icmp eq <2 x i64> %cmp, zeroinitializer384 %p = load <2 x double>, ptr %ptr385 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)386 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer387 ret <2 x double> %s388}389 390define <4 x float> @floor_v4f32_maskz_load(ptr %ptr, <4 x i32> %cmp) {391; CHECK-LABEL: floor_v4f32_maskz_load:392; CHECK: ## %bb.0:393; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1394; CHECK-NEXT: vrndscaleps $9, (%rdi), %xmm0 {%k1} {z}395; CHECK-NEXT: retq396 %c = icmp eq <4 x i32> %cmp, zeroinitializer397 %p = load <4 x float>, ptr %ptr398 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)399 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer400 ret <4 x float> %s401}402 403define <4 x double> @floor_v4f64_maskz_load(ptr %ptr, <4 x i64> %cmp) {404; CHECK-LABEL: floor_v4f64_maskz_load:405; CHECK: ## %bb.0:406; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1407; CHECK-NEXT: vrndscalepd $9, (%rdi), %ymm0 {%k1} {z}408; CHECK-NEXT: retq409 %c = icmp eq <4 x i64> %cmp, zeroinitializer410 %p = load <4 x double>, ptr %ptr411 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)412 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer413 ret <4 x double> %s414}415 416define <8 x float> @floor_v8f32_maskz_load(ptr %ptr, <8 x i32> %cmp) {417; CHECK-LABEL: floor_v8f32_maskz_load:418; CHECK: ## %bb.0:419; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1420; CHECK-NEXT: vrndscaleps $9, (%rdi), %ymm0 {%k1} {z}421; CHECK-NEXT: retq422 %c = icmp eq <8 x i32> %cmp, zeroinitializer423 %p = load <8 x float>, ptr %ptr424 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)425 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer426 ret <8 x float> %s427}428 429define <8 x double> @floor_v8f64_maskz_load(ptr %ptr, <8 x i64> %cmp) {430; CHECK-LABEL: floor_v8f64_maskz_load:431; CHECK: ## %bb.0:432; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k1433; CHECK-NEXT: vrndscalepd $9, (%rdi), %zmm0 {%k1} {z}434; CHECK-NEXT: retq435 %c = icmp eq <8 x i64> %cmp, zeroinitializer436 %p = load <8 x double>, ptr %ptr437 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)438 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer439 ret <8 x double> %s440}441 442define <16 x float> @floor_v16f32_maskz_load(ptr %ptr, <16 x i32> %cmp) {443; CHECK-LABEL: floor_v16f32_maskz_load:444; CHECK: ## %bb.0:445; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1446; CHECK-NEXT: vrndscaleps $9, (%rdi), %zmm0 {%k1} {z}447; CHECK-NEXT: retq448 %c = icmp eq <16 x i32> %cmp, zeroinitializer449 %p = load <16 x float>, ptr %ptr450 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)451 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer452 ret <16 x float> %s453}454 455define <2 x double> @floor_v2f64_broadcast(ptr %ptr) {456; CHECK-LABEL: floor_v2f64_broadcast:457; CHECK: ## %bb.0:458; CHECK-NEXT: vrndscalepd $9, (%rdi){1to2}, %xmm0459; CHECK-NEXT: retq460 %ps = load double, ptr %ptr461 %pins = insertelement <2 x double> undef, double %ps, i32 0462 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer463 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)464 ret <2 x double> %t465}466 467define <4 x float> @floor_v4f32_broadcast(ptr %ptr) {468; CHECK-LABEL: floor_v4f32_broadcast:469; CHECK: ## %bb.0:470; CHECK-NEXT: vrndscaleps $9, (%rdi){1to4}, %xmm0471; CHECK-NEXT: retq472 %ps = load float, ptr %ptr473 %pins = insertelement <4 x float> undef, float %ps, i32 0474 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer475 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)476 ret <4 x float> %t477}478 479define <4 x double> @floor_v4f64_broadcast(ptr %ptr){480; CHECK-LABEL: floor_v4f64_broadcast:481; CHECK: ## %bb.0:482; CHECK-NEXT: vrndscalepd $9, (%rdi){1to4}, %ymm0483; CHECK-NEXT: retq484 %ps = load double, ptr %ptr485 %pins = insertelement <4 x double> undef, double %ps, i32 0486 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer487 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)488 ret <4 x double> %t489}490 491define <8 x float> @floor_v8f32_broadcast(ptr %ptr) {492; CHECK-LABEL: floor_v8f32_broadcast:493; CHECK: ## %bb.0:494; CHECK-NEXT: vrndscaleps $9, (%rdi){1to8}, %ymm0495; CHECK-NEXT: retq496 %ps = load float, ptr %ptr497 %pins = insertelement <8 x float> undef, float %ps, i32 0498 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer499 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)500 ret <8 x float> %t501}502 503define <8 x double> @floor_v8f64_broadcast(ptr %ptr){504; CHECK-LABEL: floor_v8f64_broadcast:505; CHECK: ## %bb.0:506; CHECK-NEXT: vrndscalepd $9, (%rdi){1to8}, %zmm0507; CHECK-NEXT: retq508 %ps = load double, ptr %ptr509 %pins = insertelement <8 x double> undef, double %ps, i32 0510 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer511 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)512 ret <8 x double> %t513}514 515define <16 x float> @floor_v16f32_broadcast(ptr %ptr) {516; CHECK-LABEL: floor_v16f32_broadcast:517; CHECK: ## %bb.0:518; CHECK-NEXT: vrndscaleps $9, (%rdi){1to16}, %zmm0519; CHECK-NEXT: retq520 %ps = load float, ptr %ptr521 %pins = insertelement <16 x float> undef, float %ps, i32 0522 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer523 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)524 ret <16 x float> %t525}526 527define <2 x double> @floor_v2f64_mask_broadcast(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {528; CHECK-LABEL: floor_v2f64_mask_broadcast:529; CHECK: ## %bb.0:530; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1531; CHECK-NEXT: vrndscalepd $9, (%rdi){1to2}, %xmm0 {%k1}532; CHECK-NEXT: retq533 %c = icmp eq <2 x i64> %cmp, zeroinitializer534 %ps = load double, ptr %ptr535 %pins = insertelement <2 x double> undef, double %ps, i32 0536 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer537 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)538 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru539 ret <2 x double> %s540}541 542define <4 x float> @floor_v4f32_mask_broadcast(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {543; CHECK-LABEL: floor_v4f32_mask_broadcast:544; CHECK: ## %bb.0:545; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1546; CHECK-NEXT: vrndscaleps $9, (%rdi){1to4}, %xmm0 {%k1}547; CHECK-NEXT: retq548 %c = icmp eq <4 x i32> %cmp, zeroinitializer549 %ps = load float, ptr %ptr550 %pins = insertelement <4 x float> undef, float %ps, i32 0551 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer552 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)553 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru554 ret <4 x float> %s555}556 557define <4 x double> @floor_v4f64_mask_broadcast(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {558; CHECK-LABEL: floor_v4f64_mask_broadcast:559; CHECK: ## %bb.0:560; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1561; CHECK-NEXT: vrndscalepd $9, (%rdi){1to4}, %ymm0 {%k1}562; CHECK-NEXT: retq563 %c = icmp eq <4 x i64> %cmp, zeroinitializer564 %ps = load double, ptr %ptr565 %pins = insertelement <4 x double> undef, double %ps, i32 0566 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer567 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)568 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru569 ret <4 x double> %s570}571 572define <8 x float> @floor_v8f32_mask_broadcast(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {573; CHECK-LABEL: floor_v8f32_mask_broadcast:574; CHECK: ## %bb.0:575; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1576; CHECK-NEXT: vrndscaleps $9, (%rdi){1to8}, %ymm0 {%k1}577; CHECK-NEXT: retq578 %c = icmp eq <8 x i32> %cmp, zeroinitializer579 %ps = load float, ptr %ptr580 %pins = insertelement <8 x float> undef, float %ps, i32 0581 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer582 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)583 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru584 ret <8 x float> %s585}586 587define <8 x double> @floor_v8f64_mask_broadcast(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {588; CHECK-LABEL: floor_v8f64_mask_broadcast:589; CHECK: ## %bb.0:590; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k1591; CHECK-NEXT: vrndscalepd $9, (%rdi){1to8}, %zmm0 {%k1}592; CHECK-NEXT: retq593 %c = icmp eq <8 x i64> %cmp, zeroinitializer594 %ps = load double, ptr %ptr595 %pins = insertelement <8 x double> undef, double %ps, i32 0596 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer597 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)598 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru599 ret <8 x double> %s600}601 602define <16 x float> @floor_v16f32_mask_broadcast(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {603; CHECK-LABEL: floor_v16f32_mask_broadcast:604; CHECK: ## %bb.0:605; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1606; CHECK-NEXT: vrndscaleps $9, (%rdi){1to16}, %zmm0 {%k1}607; CHECK-NEXT: retq608 %c = icmp eq <16 x i32> %cmp, zeroinitializer609 %ps = load float, ptr %ptr610 %pins = insertelement <16 x float> undef, float %ps, i32 0611 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer612 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)613 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru614 ret <16 x float> %s615}616 617define <2 x double> @floor_v2f64_maskz_broadcast(ptr %ptr, <2 x i64> %cmp) {618; CHECK-LABEL: floor_v2f64_maskz_broadcast:619; CHECK: ## %bb.0:620; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k1621; CHECK-NEXT: vrndscalepd $9, (%rdi){1to2}, %xmm0 {%k1} {z}622; CHECK-NEXT: retq623 %c = icmp eq <2 x i64> %cmp, zeroinitializer624 %ps = load double, ptr %ptr625 %pins = insertelement <2 x double> undef, double %ps, i32 0626 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer627 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)628 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer629 ret <2 x double> %s630}631 632define <4 x float> @floor_v4f32_maskz_broadcast(ptr %ptr, <4 x i32> %cmp) {633; CHECK-LABEL: floor_v4f32_maskz_broadcast:634; CHECK: ## %bb.0:635; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1636; CHECK-NEXT: vrndscaleps $9, (%rdi){1to4}, %xmm0 {%k1} {z}637; CHECK-NEXT: retq638 %c = icmp eq <4 x i32> %cmp, zeroinitializer639 %ps = load float, ptr %ptr640 %pins = insertelement <4 x float> undef, float %ps, i32 0641 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer642 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)643 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer644 ret <4 x float> %s645}646 647define <4 x double> @floor_v4f64_maskz_broadcast(ptr %ptr, <4 x i64> %cmp) {648; CHECK-LABEL: floor_v4f64_maskz_broadcast:649; CHECK: ## %bb.0:650; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1651; CHECK-NEXT: vrndscalepd $9, (%rdi){1to4}, %ymm0 {%k1} {z}652; CHECK-NEXT: retq653 %c = icmp eq <4 x i64> %cmp, zeroinitializer654 %ps = load double, ptr %ptr655 %pins = insertelement <4 x double> undef, double %ps, i32 0656 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer657 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)658 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer659 ret <4 x double> %s660}661 662define <8 x float> @floor_v8f32_maskz_broadcast(ptr %ptr, <8 x i32> %cmp) {663; CHECK-LABEL: floor_v8f32_maskz_broadcast:664; CHECK: ## %bb.0:665; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1666; CHECK-NEXT: vrndscaleps $9, (%rdi){1to8}, %ymm0 {%k1} {z}667; CHECK-NEXT: retq668 %c = icmp eq <8 x i32> %cmp, zeroinitializer669 %ps = load float, ptr %ptr670 %pins = insertelement <8 x float> undef, float %ps, i32 0671 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer672 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)673 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer674 ret <8 x float> %s675}676 677define <8 x double> @floor_v8f64_maskz_broadcast(ptr %ptr, <8 x i64> %cmp) {678; CHECK-LABEL: floor_v8f64_maskz_broadcast:679; CHECK: ## %bb.0:680; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k1681; CHECK-NEXT: vrndscalepd $9, (%rdi){1to8}, %zmm0 {%k1} {z}682; CHECK-NEXT: retq683 %c = icmp eq <8 x i64> %cmp, zeroinitializer684 %ps = load double, ptr %ptr685 %pins = insertelement <8 x double> undef, double %ps, i32 0686 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer687 %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)688 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer689 ret <8 x double> %s690}691 692define <16 x float> @floor_v16f32_maskz_broadcast(ptr %ptr, <16 x i32> %cmp) {693; CHECK-LABEL: floor_v16f32_maskz_broadcast:694; CHECK: ## %bb.0:695; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1696; CHECK-NEXT: vrndscaleps $9, (%rdi){1to16}, %zmm0 {%k1} {z}697; CHECK-NEXT: retq698 %c = icmp eq <16 x i32> %cmp, zeroinitializer699 %ps = load float, ptr %ptr700 %pins = insertelement <16 x float> undef, float %ps, i32 0701 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer702 %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)703 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer704 ret <16 x float> %s705}706 707define <2 x double> @ceil_v2f64(<2 x double> %p) {708; CHECK-LABEL: ceil_v2f64:709; CHECK: ## %bb.0:710; CHECK-NEXT: vroundpd $10, %xmm0, %xmm0711; CHECK-NEXT: retq712 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)713 ret <2 x double> %t714}715 716define <4 x float> @ceil_v4f32(<4 x float> %p) {717; CHECK-LABEL: ceil_v4f32:718; CHECK: ## %bb.0:719; CHECK-NEXT: vroundps $10, %xmm0, %xmm0720; CHECK-NEXT: retq721 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)722 ret <4 x float> %t723}724 725define <4 x double> @ceil_v4f64(<4 x double> %p){726; CHECK-LABEL: ceil_v4f64:727; CHECK: ## %bb.0:728; CHECK-NEXT: vroundpd $10, %ymm0, %ymm0729; CHECK-NEXT: retq730 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)731 ret <4 x double> %t732}733 734define <8 x float> @ceil_v8f32(<8 x float> %p) {735; CHECK-LABEL: ceil_v8f32:736; CHECK: ## %bb.0:737; CHECK-NEXT: vroundps $10, %ymm0, %ymm0738; CHECK-NEXT: retq739 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)740 ret <8 x float> %t741}742 743define <8 x double> @ceil_v8f64(<8 x double> %p){744; CHECK-LABEL: ceil_v8f64:745; CHECK: ## %bb.0:746; CHECK-NEXT: vrndscalepd $10, %zmm0, %zmm0747; CHECK-NEXT: retq748 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)749 ret <8 x double> %t750}751 752define <16 x float> @ceil_v16f32(<16 x float> %p) {753; CHECK-LABEL: ceil_v16f32:754; CHECK: ## %bb.0:755; CHECK-NEXT: vrndscaleps $10, %zmm0, %zmm0756; CHECK-NEXT: retq757 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)758 ret <16 x float> %t759}760 761define <2 x double> @ceil_v2f64_load(ptr %ptr) {762; CHECK-LABEL: ceil_v2f64_load:763; CHECK: ## %bb.0:764; CHECK-NEXT: vroundpd $10, (%rdi), %xmm0765; CHECK-NEXT: retq766 %p = load <2 x double>, ptr %ptr767 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)768 ret <2 x double> %t769}770 771define <4 x float> @ceil_v4f32_load(ptr %ptr) {772; CHECK-LABEL: ceil_v4f32_load:773; CHECK: ## %bb.0:774; CHECK-NEXT: vroundps $10, (%rdi), %xmm0775; CHECK-NEXT: retq776 %p = load <4 x float>, ptr %ptr777 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)778 ret <4 x float> %t779}780 781define <4 x double> @ceil_v4f64_load(ptr %ptr){782; CHECK-LABEL: ceil_v4f64_load:783; CHECK: ## %bb.0:784; CHECK-NEXT: vroundpd $10, (%rdi), %ymm0785; CHECK-NEXT: retq786 %p = load <4 x double>, ptr %ptr787 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)788 ret <4 x double> %t789}790 791define <8 x float> @ceil_v8f32_load(ptr %ptr) {792; CHECK-LABEL: ceil_v8f32_load:793; CHECK: ## %bb.0:794; CHECK-NEXT: vroundps $10, (%rdi), %ymm0795; CHECK-NEXT: retq796 %p = load <8 x float>, ptr %ptr797 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)798 ret <8 x float> %t799}800 801define <8 x double> @ceil_v8f64_load(ptr %ptr){802; CHECK-LABEL: ceil_v8f64_load:803; CHECK: ## %bb.0:804; CHECK-NEXT: vrndscalepd $10, (%rdi), %zmm0805; CHECK-NEXT: retq806 %p = load <8 x double>, ptr %ptr807 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)808 ret <8 x double> %t809}810 811define <16 x float> @ceil_v16f32_load(ptr %ptr) {812; CHECK-LABEL: ceil_v16f32_load:813; CHECK: ## %bb.0:814; CHECK-NEXT: vrndscaleps $10, (%rdi), %zmm0815; CHECK-NEXT: retq816 %p = load <16 x float>, ptr %ptr817 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)818 ret <16 x float> %t819}820 821define <2 x double> @ceil_v2f64_mask(<2 x double> %p, <2 x double> %passthru, <2 x i64> %cmp) {822; CHECK-LABEL: ceil_v2f64_mask:823; CHECK: ## %bb.0:824; CHECK-NEXT: vptestnmq %xmm2, %xmm2, %k1825; CHECK-NEXT: vrndscalepd $10, %xmm0, %xmm1 {%k1}826; CHECK-NEXT: vmovapd %xmm1, %xmm0827; CHECK-NEXT: retq828 %c = icmp eq <2 x i64> %cmp, zeroinitializer829 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)830 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru831 ret <2 x double> %s832}833 834define <4 x float> @ceil_v4f32_mask(<4 x float> %p, <4 x float> %passthru, <4 x i32> %cmp) {835; CHECK-LABEL: ceil_v4f32_mask:836; CHECK: ## %bb.0:837; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k1838; CHECK-NEXT: vrndscaleps $10, %xmm0, %xmm1 {%k1}839; CHECK-NEXT: vmovaps %xmm1, %xmm0840; CHECK-NEXT: retq841 %c = icmp eq <4 x i32> %cmp, zeroinitializer842 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)843 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru844 ret <4 x float> %s845}846 847define <4 x double> @ceil_v4f64_mask(<4 x double> %p, <4 x double> %passthru, <4 x i64> %cmp) {848; CHECK-LABEL: ceil_v4f64_mask:849; CHECK: ## %bb.0:850; CHECK-NEXT: vptestnmq %ymm2, %ymm2, %k1851; CHECK-NEXT: vrndscalepd $10, %ymm0, %ymm1 {%k1}852; CHECK-NEXT: vmovapd %ymm1, %ymm0853; CHECK-NEXT: retq854 %c = icmp eq <4 x i64> %cmp, zeroinitializer855 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)856 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru857 ret <4 x double> %s858}859 860define <8 x float> @ceil_v8f32_mask(<8 x float> %p, <8 x float> %passthru, <8 x i32> %cmp) {861; CHECK-LABEL: ceil_v8f32_mask:862; CHECK: ## %bb.0:863; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1864; CHECK-NEXT: vrndscaleps $10, %ymm0, %ymm1 {%k1}865; CHECK-NEXT: vmovaps %ymm1, %ymm0866; CHECK-NEXT: retq867 %c = icmp eq <8 x i32> %cmp, zeroinitializer868 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)869 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru870 ret <8 x float> %s871}872 873define <8 x double> @ceil_v8f64_mask(<8 x double> %p, <8 x double> %passthru, <8 x i64> %cmp) {874; CHECK-LABEL: ceil_v8f64_mask:875; CHECK: ## %bb.0:876; CHECK-NEXT: vptestnmq %zmm2, %zmm2, %k1877; CHECK-NEXT: vrndscalepd $10, %zmm0, %zmm1 {%k1}878; CHECK-NEXT: vmovapd %zmm1, %zmm0879; CHECK-NEXT: retq880 %c = icmp eq <8 x i64> %cmp, zeroinitializer881 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)882 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru883 ret <8 x double> %s884}885 886define <16 x float> @ceil_v16f32_mask(<16 x float> %p, <16 x float> %passthru, <16 x i32> %cmp) {887; CHECK-LABEL: ceil_v16f32_mask:888; CHECK: ## %bb.0:889; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1890; CHECK-NEXT: vrndscaleps $10, %zmm0, %zmm1 {%k1}891; CHECK-NEXT: vmovaps %zmm1, %zmm0892; CHECK-NEXT: retq893 %c = icmp eq <16 x i32> %cmp, zeroinitializer894 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)895 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru896 ret <16 x float> %s897}898 899define <2 x double> @ceil_v2f64_maskz(<2 x double> %p, <2 x i64> %cmp) {900; CHECK-LABEL: ceil_v2f64_maskz:901; CHECK: ## %bb.0:902; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1903; CHECK-NEXT: vrndscalepd $10, %xmm0, %xmm0 {%k1} {z}904; CHECK-NEXT: retq905 %c = icmp eq <2 x i64> %cmp, zeroinitializer906 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)907 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer908 ret <2 x double> %s909}910 911define <4 x float> @ceil_v4f32_maskz(<4 x float> %p, <4 x i32> %cmp) {912; CHECK-LABEL: ceil_v4f32_maskz:913; CHECK: ## %bb.0:914; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1915; CHECK-NEXT: vrndscaleps $10, %xmm0, %xmm0 {%k1} {z}916; CHECK-NEXT: retq917 %c = icmp eq <4 x i32> %cmp, zeroinitializer918 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)919 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer920 ret <4 x float> %s921}922 923define <4 x double> @ceil_v4f64_maskz(<4 x double> %p, <4 x i64> %cmp) {924; CHECK-LABEL: ceil_v4f64_maskz:925; CHECK: ## %bb.0:926; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1927; CHECK-NEXT: vrndscalepd $10, %ymm0, %ymm0 {%k1} {z}928; CHECK-NEXT: retq929 %c = icmp eq <4 x i64> %cmp, zeroinitializer930 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)931 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer932 ret <4 x double> %s933}934 935define <8 x float> @ceil_v8f32_maskz(<8 x float> %p, <8 x i32> %cmp) {936; CHECK-LABEL: ceil_v8f32_maskz:937; CHECK: ## %bb.0:938; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1939; CHECK-NEXT: vrndscaleps $10, %ymm0, %ymm0 {%k1} {z}940; CHECK-NEXT: retq941 %c = icmp eq <8 x i32> %cmp, zeroinitializer942 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)943 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer944 ret <8 x float> %s945}946 947define <8 x double> @ceil_v8f64_maskz(<8 x double> %p, <8 x i64> %cmp) {948; CHECK-LABEL: ceil_v8f64_maskz:949; CHECK: ## %bb.0:950; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k1951; CHECK-NEXT: vrndscalepd $10, %zmm0, %zmm0 {%k1} {z}952; CHECK-NEXT: retq953 %c = icmp eq <8 x i64> %cmp, zeroinitializer954 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)955 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer956 ret <8 x double> %s957}958 959define <16 x float> @ceil_v16f32_maskz(<16 x float> %p, <16 x i32> %cmp) {960; CHECK-LABEL: ceil_v16f32_maskz:961; CHECK: ## %bb.0:962; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1963; CHECK-NEXT: vrndscaleps $10, %zmm0, %zmm0 {%k1} {z}964; CHECK-NEXT: retq965 %c = icmp eq <16 x i32> %cmp, zeroinitializer966 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)967 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer968 ret <16 x float> %s969}970 971define <2 x double> @ceil_v2f64_mask_load(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {972; CHECK-LABEL: ceil_v2f64_mask_load:973; CHECK: ## %bb.0:974; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1975; CHECK-NEXT: vrndscalepd $10, (%rdi), %xmm0 {%k1}976; CHECK-NEXT: retq977 %c = icmp eq <2 x i64> %cmp, zeroinitializer978 %p = load <2 x double>, ptr %ptr979 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)980 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru981 ret <2 x double> %s982}983 984define <4 x float> @ceil_v4f32_mask_load(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {985; CHECK-LABEL: ceil_v4f32_mask_load:986; CHECK: ## %bb.0:987; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1988; CHECK-NEXT: vrndscaleps $10, (%rdi), %xmm0 {%k1}989; CHECK-NEXT: retq990 %c = icmp eq <4 x i32> %cmp, zeroinitializer991 %p = load <4 x float>, ptr %ptr992 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)993 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru994 ret <4 x float> %s995}996 997define <4 x double> @ceil_v4f64_mask_load(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {998; CHECK-LABEL: ceil_v4f64_mask_load:999; CHECK: ## %bb.0:1000; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11001; CHECK-NEXT: vrndscalepd $10, (%rdi), %ymm0 {%k1}1002; CHECK-NEXT: retq1003 %c = icmp eq <4 x i64> %cmp, zeroinitializer1004 %p = load <4 x double>, ptr %ptr1005 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)1006 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru1007 ret <4 x double> %s1008}1009 1010define <8 x float> @ceil_v8f32_mask_load(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {1011; CHECK-LABEL: ceil_v8f32_mask_load:1012; CHECK: ## %bb.0:1013; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k11014; CHECK-NEXT: vrndscaleps $10, (%rdi), %ymm0 {%k1}1015; CHECK-NEXT: retq1016 %c = icmp eq <8 x i32> %cmp, zeroinitializer1017 %p = load <8 x float>, ptr %ptr1018 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)1019 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru1020 ret <8 x float> %s1021}1022 1023define <8 x double> @ceil_v8f64_mask_load(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {1024; CHECK-LABEL: ceil_v8f64_mask_load:1025; CHECK: ## %bb.0:1026; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11027; CHECK-NEXT: vrndscalepd $10, (%rdi), %zmm0 {%k1}1028; CHECK-NEXT: retq1029 %c = icmp eq <8 x i64> %cmp, zeroinitializer1030 %p = load <8 x double>, ptr %ptr1031 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)1032 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru1033 ret <8 x double> %s1034}1035 1036define <16 x float> @ceil_v16f32_mask_load(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {1037; CHECK-LABEL: ceil_v16f32_mask_load:1038; CHECK: ## %bb.0:1039; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11040; CHECK-NEXT: vrndscaleps $10, (%rdi), %zmm0 {%k1}1041; CHECK-NEXT: retq1042 %c = icmp eq <16 x i32> %cmp, zeroinitializer1043 %p = load <16 x float>, ptr %ptr1044 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)1045 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru1046 ret <16 x float> %s1047}1048 1049define <2 x double> @ceil_v2f64_maskz_load(ptr %ptr, <2 x i64> %cmp) {1050; CHECK-LABEL: ceil_v2f64_maskz_load:1051; CHECK: ## %bb.0:1052; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11053; CHECK-NEXT: vrndscalepd $10, (%rdi), %xmm0 {%k1} {z}1054; CHECK-NEXT: retq1055 %c = icmp eq <2 x i64> %cmp, zeroinitializer1056 %p = load <2 x double>, ptr %ptr1057 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)1058 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer1059 ret <2 x double> %s1060}1061 1062define <4 x float> @ceil_v4f32_maskz_load(ptr %ptr, <4 x i32> %cmp) {1063; CHECK-LABEL: ceil_v4f32_maskz_load:1064; CHECK: ## %bb.0:1065; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k11066; CHECK-NEXT: vrndscaleps $10, (%rdi), %xmm0 {%k1} {z}1067; CHECK-NEXT: retq1068 %c = icmp eq <4 x i32> %cmp, zeroinitializer1069 %p = load <4 x float>, ptr %ptr1070 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)1071 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer1072 ret <4 x float> %s1073}1074 1075define <4 x double> @ceil_v4f64_maskz_load(ptr %ptr, <4 x i64> %cmp) {1076; CHECK-LABEL: ceil_v4f64_maskz_load:1077; CHECK: ## %bb.0:1078; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11079; CHECK-NEXT: vrndscalepd $10, (%rdi), %ymm0 {%k1} {z}1080; CHECK-NEXT: retq1081 %c = icmp eq <4 x i64> %cmp, zeroinitializer1082 %p = load <4 x double>, ptr %ptr1083 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)1084 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer1085 ret <4 x double> %s1086}1087 1088define <8 x float> @ceil_v8f32_maskz_load(ptr %ptr, <8 x i32> %cmp) {1089; CHECK-LABEL: ceil_v8f32_maskz_load:1090; CHECK: ## %bb.0:1091; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k11092; CHECK-NEXT: vrndscaleps $10, (%rdi), %ymm0 {%k1} {z}1093; CHECK-NEXT: retq1094 %c = icmp eq <8 x i32> %cmp, zeroinitializer1095 %p = load <8 x float>, ptr %ptr1096 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)1097 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer1098 ret <8 x float> %s1099}1100 1101define <8 x double> @ceil_v8f64_maskz_load(ptr %ptr, <8 x i64> %cmp) {1102; CHECK-LABEL: ceil_v8f64_maskz_load:1103; CHECK: ## %bb.0:1104; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11105; CHECK-NEXT: vrndscalepd $10, (%rdi), %zmm0 {%k1} {z}1106; CHECK-NEXT: retq1107 %c = icmp eq <8 x i64> %cmp, zeroinitializer1108 %p = load <8 x double>, ptr %ptr1109 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)1110 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer1111 ret <8 x double> %s1112}1113 1114define <16 x float> @ceil_v16f32_maskz_load(ptr %ptr, <16 x i32> %cmp) {1115; CHECK-LABEL: ceil_v16f32_maskz_load:1116; CHECK: ## %bb.0:1117; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11118; CHECK-NEXT: vrndscaleps $10, (%rdi), %zmm0 {%k1} {z}1119; CHECK-NEXT: retq1120 %c = icmp eq <16 x i32> %cmp, zeroinitializer1121 %p = load <16 x float>, ptr %ptr1122 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)1123 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer1124 ret <16 x float> %s1125}1126 1127define <2 x double> @ceil_v2f64_broadcast(ptr %ptr) {1128; CHECK-LABEL: ceil_v2f64_broadcast:1129; CHECK: ## %bb.0:1130; CHECK-NEXT: vrndscalepd $10, (%rdi){1to2}, %xmm01131; CHECK-NEXT: retq1132 %ps = load double, ptr %ptr1133 %pins = insertelement <2 x double> undef, double %ps, i32 01134 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1135 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)1136 ret <2 x double> %t1137}1138 1139define <4 x float> @ceil_v4f32_broadcast(ptr %ptr) {1140; CHECK-LABEL: ceil_v4f32_broadcast:1141; CHECK: ## %bb.0:1142; CHECK-NEXT: vrndscaleps $10, (%rdi){1to4}, %xmm01143; CHECK-NEXT: retq1144 %ps = load float, ptr %ptr1145 %pins = insertelement <4 x float> undef, float %ps, i32 01146 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1147 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)1148 ret <4 x float> %t1149}1150 1151define <4 x double> @ceil_v4f64_broadcast(ptr %ptr){1152; CHECK-LABEL: ceil_v4f64_broadcast:1153; CHECK: ## %bb.0:1154; CHECK-NEXT: vrndscalepd $10, (%rdi){1to4}, %ymm01155; CHECK-NEXT: retq1156 %ps = load double, ptr %ptr1157 %pins = insertelement <4 x double> undef, double %ps, i32 01158 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer1159 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)1160 ret <4 x double> %t1161}1162 1163define <8 x float> @ceil_v8f32_broadcast(ptr %ptr) {1164; CHECK-LABEL: ceil_v8f32_broadcast:1165; CHECK: ## %bb.0:1166; CHECK-NEXT: vrndscaleps $10, (%rdi){1to8}, %ymm01167; CHECK-NEXT: retq1168 %ps = load float, ptr %ptr1169 %pins = insertelement <8 x float> undef, float %ps, i32 01170 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer1171 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)1172 ret <8 x float> %t1173}1174 1175define <8 x double> @ceil_v8f64_broadcast(ptr %ptr){1176; CHECK-LABEL: ceil_v8f64_broadcast:1177; CHECK: ## %bb.0:1178; CHECK-NEXT: vrndscalepd $10, (%rdi){1to8}, %zmm01179; CHECK-NEXT: retq1180 %ps = load double, ptr %ptr1181 %pins = insertelement <8 x double> undef, double %ps, i32 01182 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer1183 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)1184 ret <8 x double> %t1185}1186 1187define <16 x float> @ceil_v16f32_broadcast(ptr %ptr) {1188; CHECK-LABEL: ceil_v16f32_broadcast:1189; CHECK: ## %bb.0:1190; CHECK-NEXT: vrndscaleps $10, (%rdi){1to16}, %zmm01191; CHECK-NEXT: retq1192 %ps = load float, ptr %ptr1193 %pins = insertelement <16 x float> undef, float %ps, i32 01194 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer1195 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)1196 ret <16 x float> %t1197}1198 1199define <2 x double> @ceil_v2f64_mask_broadcast(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {1200; CHECK-LABEL: ceil_v2f64_mask_broadcast:1201; CHECK: ## %bb.0:1202; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k11203; CHECK-NEXT: vrndscalepd $10, (%rdi){1to2}, %xmm0 {%k1}1204; CHECK-NEXT: retq1205 %c = icmp eq <2 x i64> %cmp, zeroinitializer1206 %ps = load double, ptr %ptr1207 %pins = insertelement <2 x double> undef, double %ps, i32 01208 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1209 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)1210 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru1211 ret <2 x double> %s1212}1213 1214define <4 x float> @ceil_v4f32_mask_broadcast(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {1215; CHECK-LABEL: ceil_v4f32_mask_broadcast:1216; CHECK: ## %bb.0:1217; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k11218; CHECK-NEXT: vrndscaleps $10, (%rdi){1to4}, %xmm0 {%k1}1219; CHECK-NEXT: retq1220 %c = icmp eq <4 x i32> %cmp, zeroinitializer1221 %ps = load float, ptr %ptr1222 %pins = insertelement <4 x float> undef, float %ps, i32 01223 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1224 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)1225 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru1226 ret <4 x float> %s1227}1228 1229define <4 x double> @ceil_v4f64_mask_broadcast(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {1230; CHECK-LABEL: ceil_v4f64_mask_broadcast:1231; CHECK: ## %bb.0:1232; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11233; CHECK-NEXT: vrndscalepd $10, (%rdi){1to4}, %ymm0 {%k1}1234; CHECK-NEXT: retq1235 %c = icmp eq <4 x i64> %cmp, zeroinitializer1236 %ps = load double, ptr %ptr1237 %pins = insertelement <4 x double> undef, double %ps, i32 01238 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer1239 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)1240 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru1241 ret <4 x double> %s1242}1243 1244define <8 x float> @ceil_v8f32_mask_broadcast(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {1245; CHECK-LABEL: ceil_v8f32_mask_broadcast:1246; CHECK: ## %bb.0:1247; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k11248; CHECK-NEXT: vrndscaleps $10, (%rdi){1to8}, %ymm0 {%k1}1249; CHECK-NEXT: retq1250 %c = icmp eq <8 x i32> %cmp, zeroinitializer1251 %ps = load float, ptr %ptr1252 %pins = insertelement <8 x float> undef, float %ps, i32 01253 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer1254 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)1255 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru1256 ret <8 x float> %s1257}1258 1259define <8 x double> @ceil_v8f64_mask_broadcast(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {1260; CHECK-LABEL: ceil_v8f64_mask_broadcast:1261; CHECK: ## %bb.0:1262; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11263; CHECK-NEXT: vrndscalepd $10, (%rdi){1to8}, %zmm0 {%k1}1264; CHECK-NEXT: retq1265 %c = icmp eq <8 x i64> %cmp, zeroinitializer1266 %ps = load double, ptr %ptr1267 %pins = insertelement <8 x double> undef, double %ps, i32 01268 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer1269 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)1270 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru1271 ret <8 x double> %s1272}1273 1274define <16 x float> @ceil_v16f32_mask_broadcast(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {1275; CHECK-LABEL: ceil_v16f32_mask_broadcast:1276; CHECK: ## %bb.0:1277; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11278; CHECK-NEXT: vrndscaleps $10, (%rdi){1to16}, %zmm0 {%k1}1279; CHECK-NEXT: retq1280 %c = icmp eq <16 x i32> %cmp, zeroinitializer1281 %ps = load float, ptr %ptr1282 %pins = insertelement <16 x float> undef, float %ps, i32 01283 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer1284 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)1285 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru1286 ret <16 x float> %s1287}1288 1289define <2 x double> @ceil_v2f64_maskz_broadcast(ptr %ptr, <2 x i64> %cmp) {1290; CHECK-LABEL: ceil_v2f64_maskz_broadcast:1291; CHECK: ## %bb.0:1292; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11293; CHECK-NEXT: vrndscalepd $10, (%rdi){1to2}, %xmm0 {%k1} {z}1294; CHECK-NEXT: retq1295 %c = icmp eq <2 x i64> %cmp, zeroinitializer1296 %ps = load double, ptr %ptr1297 %pins = insertelement <2 x double> undef, double %ps, i32 01298 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1299 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)1300 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer1301 ret <2 x double> %s1302}1303 1304define <4 x float> @ceil_v4f32_maskz_broadcast(ptr %ptr, <4 x i32> %cmp) {1305; CHECK-LABEL: ceil_v4f32_maskz_broadcast:1306; CHECK: ## %bb.0:1307; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k11308; CHECK-NEXT: vrndscaleps $10, (%rdi){1to4}, %xmm0 {%k1} {z}1309; CHECK-NEXT: retq1310 %c = icmp eq <4 x i32> %cmp, zeroinitializer1311 %ps = load float, ptr %ptr1312 %pins = insertelement <4 x float> undef, float %ps, i32 01313 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1314 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)1315 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer1316 ret <4 x float> %s1317}1318 1319define <4 x double> @ceil_v4f64_maskz_broadcast(ptr %ptr, <4 x i64> %cmp) {1320; CHECK-LABEL: ceil_v4f64_maskz_broadcast:1321; CHECK: ## %bb.0:1322; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11323; CHECK-NEXT: vrndscalepd $10, (%rdi){1to4}, %ymm0 {%k1} {z}1324; CHECK-NEXT: retq1325 %c = icmp eq <4 x i64> %cmp, zeroinitializer1326 %ps = load double, ptr %ptr1327 %pins = insertelement <4 x double> undef, double %ps, i32 01328 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer1329 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)1330 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer1331 ret <4 x double> %s1332}1333 1334define <8 x float> @ceil_v8f32_maskz_broadcast(ptr %ptr, <8 x i32> %cmp) {1335; CHECK-LABEL: ceil_v8f32_maskz_broadcast:1336; CHECK: ## %bb.0:1337; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k11338; CHECK-NEXT: vrndscaleps $10, (%rdi){1to8}, %ymm0 {%k1} {z}1339; CHECK-NEXT: retq1340 %c = icmp eq <8 x i32> %cmp, zeroinitializer1341 %ps = load float, ptr %ptr1342 %pins = insertelement <8 x float> undef, float %ps, i32 01343 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer1344 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)1345 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer1346 ret <8 x float> %s1347}1348 1349define <8 x double> @ceil_v8f64_maskz_broadcast(ptr %ptr, <8 x i64> %cmp) {1350; CHECK-LABEL: ceil_v8f64_maskz_broadcast:1351; CHECK: ## %bb.0:1352; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11353; CHECK-NEXT: vrndscalepd $10, (%rdi){1to8}, %zmm0 {%k1} {z}1354; CHECK-NEXT: retq1355 %c = icmp eq <8 x i64> %cmp, zeroinitializer1356 %ps = load double, ptr %ptr1357 %pins = insertelement <8 x double> undef, double %ps, i32 01358 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer1359 %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)1360 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer1361 ret <8 x double> %s1362}1363 1364define <16 x float> @ceil_v16f32_maskz_broadcast(ptr %ptr, <16 x i32> %cmp) {1365; CHECK-LABEL: ceil_v16f32_maskz_broadcast:1366; CHECK: ## %bb.0:1367; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11368; CHECK-NEXT: vrndscaleps $10, (%rdi){1to16}, %zmm0 {%k1} {z}1369; CHECK-NEXT: retq1370 %c = icmp eq <16 x i32> %cmp, zeroinitializer1371 %ps = load float, ptr %ptr1372 %pins = insertelement <16 x float> undef, float %ps, i32 01373 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer1374 %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)1375 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer1376 ret <16 x float> %s1377}1378 1379define <2 x double> @trunc_v2f64(<2 x double> %p) {1380; CHECK-LABEL: trunc_v2f64:1381; CHECK: ## %bb.0:1382; CHECK-NEXT: vroundpd $11, %xmm0, %xmm01383; CHECK-NEXT: retq1384 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1385 ret <2 x double> %t1386}1387 1388define <4 x float> @trunc_v4f32(<4 x float> %p) {1389; CHECK-LABEL: trunc_v4f32:1390; CHECK: ## %bb.0:1391; CHECK-NEXT: vroundps $11, %xmm0, %xmm01392; CHECK-NEXT: retq1393 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1394 ret <4 x float> %t1395}1396 1397define <4 x double> @trunc_v4f64(<4 x double> %p){1398; CHECK-LABEL: trunc_v4f64:1399; CHECK: ## %bb.0:1400; CHECK-NEXT: vroundpd $11, %ymm0, %ymm01401; CHECK-NEXT: retq1402 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1403 ret <4 x double> %t1404}1405 1406define <8 x float> @trunc_v8f32(<8 x float> %p) {1407; CHECK-LABEL: trunc_v8f32:1408; CHECK: ## %bb.0:1409; CHECK-NEXT: vroundps $11, %ymm0, %ymm01410; CHECK-NEXT: retq1411 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1412 ret <8 x float> %t1413}1414 1415define <8 x double> @trunc_v8f64(<8 x double> %p){1416; CHECK-LABEL: trunc_v8f64:1417; CHECK: ## %bb.0:1418; CHECK-NEXT: vrndscalepd $11, %zmm0, %zmm01419; CHECK-NEXT: retq1420 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1421 ret <8 x double> %t1422}1423 1424define <16 x float> @trunc_v16f32(<16 x float> %p) {1425; CHECK-LABEL: trunc_v16f32:1426; CHECK: ## %bb.0:1427; CHECK-NEXT: vrndscaleps $11, %zmm0, %zmm01428; CHECK-NEXT: retq1429 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1430 ret <16 x float> %t1431}1432 1433define <2 x double> @trunc_v2f64_load(ptr %ptr) {1434; CHECK-LABEL: trunc_v2f64_load:1435; CHECK: ## %bb.0:1436; CHECK-NEXT: vroundpd $11, (%rdi), %xmm01437; CHECK-NEXT: retq1438 %p = load <2 x double>, ptr %ptr1439 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1440 ret <2 x double> %t1441}1442 1443define <4 x float> @trunc_v4f32_load(ptr %ptr) {1444; CHECK-LABEL: trunc_v4f32_load:1445; CHECK: ## %bb.0:1446; CHECK-NEXT: vroundps $11, (%rdi), %xmm01447; CHECK-NEXT: retq1448 %p = load <4 x float>, ptr %ptr1449 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1450 ret <4 x float> %t1451}1452 1453define <4 x double> @trunc_v4f64_load(ptr %ptr){1454; CHECK-LABEL: trunc_v4f64_load:1455; CHECK: ## %bb.0:1456; CHECK-NEXT: vroundpd $11, (%rdi), %ymm01457; CHECK-NEXT: retq1458 %p = load <4 x double>, ptr %ptr1459 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1460 ret <4 x double> %t1461}1462 1463define <8 x float> @trunc_v8f32_load(ptr %ptr) {1464; CHECK-LABEL: trunc_v8f32_load:1465; CHECK: ## %bb.0:1466; CHECK-NEXT: vroundps $11, (%rdi), %ymm01467; CHECK-NEXT: retq1468 %p = load <8 x float>, ptr %ptr1469 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1470 ret <8 x float> %t1471}1472 1473define <8 x double> @trunc_v8f64_load(ptr %ptr){1474; CHECK-LABEL: trunc_v8f64_load:1475; CHECK: ## %bb.0:1476; CHECK-NEXT: vrndscalepd $11, (%rdi), %zmm01477; CHECK-NEXT: retq1478 %p = load <8 x double>, ptr %ptr1479 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1480 ret <8 x double> %t1481}1482 1483define <16 x float> @trunc_v16f32_load(ptr %ptr) {1484; CHECK-LABEL: trunc_v16f32_load:1485; CHECK: ## %bb.0:1486; CHECK-NEXT: vrndscaleps $11, (%rdi), %zmm01487; CHECK-NEXT: retq1488 %p = load <16 x float>, ptr %ptr1489 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1490 ret <16 x float> %t1491}1492 1493define <2 x double> @trunc_v2f64_mask(<2 x double> %p, <2 x double> %passthru, <2 x i64> %cmp) {1494; CHECK-LABEL: trunc_v2f64_mask:1495; CHECK: ## %bb.0:1496; CHECK-NEXT: vptestnmq %xmm2, %xmm2, %k11497; CHECK-NEXT: vrndscalepd $11, %xmm0, %xmm1 {%k1}1498; CHECK-NEXT: vmovapd %xmm1, %xmm01499; CHECK-NEXT: retq1500 %c = icmp eq <2 x i64> %cmp, zeroinitializer1501 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1502 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru1503 ret <2 x double> %s1504}1505 1506define <4 x float> @trunc_v4f32_mask(<4 x float> %p, <4 x float> %passthru, <4 x i32> %cmp) {1507; CHECK-LABEL: trunc_v4f32_mask:1508; CHECK: ## %bb.0:1509; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k11510; CHECK-NEXT: vrndscaleps $11, %xmm0, %xmm1 {%k1}1511; CHECK-NEXT: vmovaps %xmm1, %xmm01512; CHECK-NEXT: retq1513 %c = icmp eq <4 x i32> %cmp, zeroinitializer1514 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1515 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru1516 ret <4 x float> %s1517}1518 1519define <4 x double> @trunc_v4f64_mask(<4 x double> %p, <4 x double> %passthru, <4 x i64> %cmp) {1520; CHECK-LABEL: trunc_v4f64_mask:1521; CHECK: ## %bb.0:1522; CHECK-NEXT: vptestnmq %ymm2, %ymm2, %k11523; CHECK-NEXT: vrndscalepd $11, %ymm0, %ymm1 {%k1}1524; CHECK-NEXT: vmovapd %ymm1, %ymm01525; CHECK-NEXT: retq1526 %c = icmp eq <4 x i64> %cmp, zeroinitializer1527 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1528 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru1529 ret <4 x double> %s1530}1531 1532define <8 x float> @trunc_v8f32_mask(<8 x float> %p, <8 x float> %passthru, <8 x i32> %cmp) {1533; CHECK-LABEL: trunc_v8f32_mask:1534; CHECK: ## %bb.0:1535; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k11536; CHECK-NEXT: vrndscaleps $11, %ymm0, %ymm1 {%k1}1537; CHECK-NEXT: vmovaps %ymm1, %ymm01538; CHECK-NEXT: retq1539 %c = icmp eq <8 x i32> %cmp, zeroinitializer1540 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1541 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru1542 ret <8 x float> %s1543}1544 1545define <8 x double> @trunc_v8f64_mask(<8 x double> %p, <8 x double> %passthru, <8 x i64> %cmp) {1546; CHECK-LABEL: trunc_v8f64_mask:1547; CHECK: ## %bb.0:1548; CHECK-NEXT: vptestnmq %zmm2, %zmm2, %k11549; CHECK-NEXT: vrndscalepd $11, %zmm0, %zmm1 {%k1}1550; CHECK-NEXT: vmovapd %zmm1, %zmm01551; CHECK-NEXT: retq1552 %c = icmp eq <8 x i64> %cmp, zeroinitializer1553 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1554 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru1555 ret <8 x double> %s1556}1557 1558define <16 x float> @trunc_v16f32_mask(<16 x float> %p, <16 x float> %passthru, <16 x i32> %cmp) {1559; CHECK-LABEL: trunc_v16f32_mask:1560; CHECK: ## %bb.0:1561; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k11562; CHECK-NEXT: vrndscaleps $11, %zmm0, %zmm1 {%k1}1563; CHECK-NEXT: vmovaps %zmm1, %zmm01564; CHECK-NEXT: retq1565 %c = icmp eq <16 x i32> %cmp, zeroinitializer1566 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1567 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru1568 ret <16 x float> %s1569}1570 1571define <2 x double> @trunc_v2f64_maskz(<2 x double> %p, <2 x i64> %cmp) {1572; CHECK-LABEL: trunc_v2f64_maskz:1573; CHECK: ## %bb.0:1574; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k11575; CHECK-NEXT: vrndscalepd $11, %xmm0, %xmm0 {%k1} {z}1576; CHECK-NEXT: retq1577 %c = icmp eq <2 x i64> %cmp, zeroinitializer1578 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1579 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer1580 ret <2 x double> %s1581}1582 1583define <4 x float> @trunc_v4f32_maskz(<4 x float> %p, <4 x i32> %cmp) {1584; CHECK-LABEL: trunc_v4f32_maskz:1585; CHECK: ## %bb.0:1586; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k11587; CHECK-NEXT: vrndscaleps $11, %xmm0, %xmm0 {%k1} {z}1588; CHECK-NEXT: retq1589 %c = icmp eq <4 x i32> %cmp, zeroinitializer1590 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1591 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer1592 ret <4 x float> %s1593}1594 1595define <4 x double> @trunc_v4f64_maskz(<4 x double> %p, <4 x i64> %cmp) {1596; CHECK-LABEL: trunc_v4f64_maskz:1597; CHECK: ## %bb.0:1598; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11599; CHECK-NEXT: vrndscalepd $11, %ymm0, %ymm0 {%k1} {z}1600; CHECK-NEXT: retq1601 %c = icmp eq <4 x i64> %cmp, zeroinitializer1602 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1603 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer1604 ret <4 x double> %s1605}1606 1607define <8 x float> @trunc_v8f32_maskz(<8 x float> %p, <8 x i32> %cmp) {1608; CHECK-LABEL: trunc_v8f32_maskz:1609; CHECK: ## %bb.0:1610; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k11611; CHECK-NEXT: vrndscaleps $11, %ymm0, %ymm0 {%k1} {z}1612; CHECK-NEXT: retq1613 %c = icmp eq <8 x i32> %cmp, zeroinitializer1614 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1615 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer1616 ret <8 x float> %s1617}1618 1619define <8 x double> @trunc_v8f64_maskz(<8 x double> %p, <8 x i64> %cmp) {1620; CHECK-LABEL: trunc_v8f64_maskz:1621; CHECK: ## %bb.0:1622; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11623; CHECK-NEXT: vrndscalepd $11, %zmm0, %zmm0 {%k1} {z}1624; CHECK-NEXT: retq1625 %c = icmp eq <8 x i64> %cmp, zeroinitializer1626 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1627 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer1628 ret <8 x double> %s1629}1630 1631define <16 x float> @trunc_v16f32_maskz(<16 x float> %p, <16 x i32> %cmp) {1632; CHECK-LABEL: trunc_v16f32_maskz:1633; CHECK: ## %bb.0:1634; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11635; CHECK-NEXT: vrndscaleps $11, %zmm0, %zmm0 {%k1} {z}1636; CHECK-NEXT: retq1637 %c = icmp eq <16 x i32> %cmp, zeroinitializer1638 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1639 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer1640 ret <16 x float> %s1641}1642 1643define <2 x double> @trunc_v2f64_mask_load(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {1644; CHECK-LABEL: trunc_v2f64_mask_load:1645; CHECK: ## %bb.0:1646; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k11647; CHECK-NEXT: vrndscalepd $11, (%rdi), %xmm0 {%k1}1648; CHECK-NEXT: retq1649 %c = icmp eq <2 x i64> %cmp, zeroinitializer1650 %p = load <2 x double>, ptr %ptr1651 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1652 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru1653 ret <2 x double> %s1654}1655 1656define <4 x float> @trunc_v4f32_mask_load(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {1657; CHECK-LABEL: trunc_v4f32_mask_load:1658; CHECK: ## %bb.0:1659; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k11660; CHECK-NEXT: vrndscaleps $11, (%rdi), %xmm0 {%k1}1661; CHECK-NEXT: retq1662 %c = icmp eq <4 x i32> %cmp, zeroinitializer1663 %p = load <4 x float>, ptr %ptr1664 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1665 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru1666 ret <4 x float> %s1667}1668 1669define <4 x double> @trunc_v4f64_mask_load(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {1670; CHECK-LABEL: trunc_v4f64_mask_load:1671; CHECK: ## %bb.0:1672; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11673; CHECK-NEXT: vrndscalepd $11, (%rdi), %ymm0 {%k1}1674; CHECK-NEXT: retq1675 %c = icmp eq <4 x i64> %cmp, zeroinitializer1676 %p = load <4 x double>, ptr %ptr1677 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1678 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru1679 ret <4 x double> %s1680}1681 1682define <8 x float> @trunc_v8f32_mask_load(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {1683; CHECK-LABEL: trunc_v8f32_mask_load:1684; CHECK: ## %bb.0:1685; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k11686; CHECK-NEXT: vrndscaleps $11, (%rdi), %ymm0 {%k1}1687; CHECK-NEXT: retq1688 %c = icmp eq <8 x i32> %cmp, zeroinitializer1689 %p = load <8 x float>, ptr %ptr1690 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1691 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru1692 ret <8 x float> %s1693}1694 1695define <8 x double> @trunc_v8f64_mask_load(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {1696; CHECK-LABEL: trunc_v8f64_mask_load:1697; CHECK: ## %bb.0:1698; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11699; CHECK-NEXT: vrndscalepd $11, (%rdi), %zmm0 {%k1}1700; CHECK-NEXT: retq1701 %c = icmp eq <8 x i64> %cmp, zeroinitializer1702 %p = load <8 x double>, ptr %ptr1703 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1704 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru1705 ret <8 x double> %s1706}1707 1708define <16 x float> @trunc_v16f32_mask_load(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {1709; CHECK-LABEL: trunc_v16f32_mask_load:1710; CHECK: ## %bb.0:1711; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11712; CHECK-NEXT: vrndscaleps $11, (%rdi), %zmm0 {%k1}1713; CHECK-NEXT: retq1714 %c = icmp eq <16 x i32> %cmp, zeroinitializer1715 %p = load <16 x float>, ptr %ptr1716 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1717 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru1718 ret <16 x float> %s1719}1720 1721define <2 x double> @trunc_v2f64_maskz_load(ptr %ptr, <2 x i64> %cmp) {1722; CHECK-LABEL: trunc_v2f64_maskz_load:1723; CHECK: ## %bb.0:1724; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11725; CHECK-NEXT: vrndscalepd $11, (%rdi), %xmm0 {%k1} {z}1726; CHECK-NEXT: retq1727 %c = icmp eq <2 x i64> %cmp, zeroinitializer1728 %p = load <2 x double>, ptr %ptr1729 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1730 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer1731 ret <2 x double> %s1732}1733 1734define <4 x float> @trunc_v4f32_maskz_load(ptr %ptr, <4 x i32> %cmp) {1735; CHECK-LABEL: trunc_v4f32_maskz_load:1736; CHECK: ## %bb.0:1737; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k11738; CHECK-NEXT: vrndscaleps $11, (%rdi), %xmm0 {%k1} {z}1739; CHECK-NEXT: retq1740 %c = icmp eq <4 x i32> %cmp, zeroinitializer1741 %p = load <4 x float>, ptr %ptr1742 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1743 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer1744 ret <4 x float> %s1745}1746 1747define <4 x double> @trunc_v4f64_maskz_load(ptr %ptr, <4 x i64> %cmp) {1748; CHECK-LABEL: trunc_v4f64_maskz_load:1749; CHECK: ## %bb.0:1750; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11751; CHECK-NEXT: vrndscalepd $11, (%rdi), %ymm0 {%k1} {z}1752; CHECK-NEXT: retq1753 %c = icmp eq <4 x i64> %cmp, zeroinitializer1754 %p = load <4 x double>, ptr %ptr1755 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1756 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer1757 ret <4 x double> %s1758}1759 1760define <8 x float> @trunc_v8f32_maskz_load(ptr %ptr, <8 x i32> %cmp) {1761; CHECK-LABEL: trunc_v8f32_maskz_load:1762; CHECK: ## %bb.0:1763; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k11764; CHECK-NEXT: vrndscaleps $11, (%rdi), %ymm0 {%k1} {z}1765; CHECK-NEXT: retq1766 %c = icmp eq <8 x i32> %cmp, zeroinitializer1767 %p = load <8 x float>, ptr %ptr1768 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1769 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer1770 ret <8 x float> %s1771}1772 1773define <8 x double> @trunc_v8f64_maskz_load(ptr %ptr, <8 x i64> %cmp) {1774; CHECK-LABEL: trunc_v8f64_maskz_load:1775; CHECK: ## %bb.0:1776; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11777; CHECK-NEXT: vrndscalepd $11, (%rdi), %zmm0 {%k1} {z}1778; CHECK-NEXT: retq1779 %c = icmp eq <8 x i64> %cmp, zeroinitializer1780 %p = load <8 x double>, ptr %ptr1781 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1782 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer1783 ret <8 x double> %s1784}1785 1786define <16 x float> @trunc_v16f32_maskz_load(ptr %ptr, <16 x i32> %cmp) {1787; CHECK-LABEL: trunc_v16f32_maskz_load:1788; CHECK: ## %bb.0:1789; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11790; CHECK-NEXT: vrndscaleps $11, (%rdi), %zmm0 {%k1} {z}1791; CHECK-NEXT: retq1792 %c = icmp eq <16 x i32> %cmp, zeroinitializer1793 %p = load <16 x float>, ptr %ptr1794 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1795 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer1796 ret <16 x float> %s1797}1798 1799define <2 x double> @trunc_v2f64_broadcast(ptr %ptr) {1800; CHECK-LABEL: trunc_v2f64_broadcast:1801; CHECK: ## %bb.0:1802; CHECK-NEXT: vrndscalepd $11, (%rdi){1to2}, %xmm01803; CHECK-NEXT: retq1804 %ps = load double, ptr %ptr1805 %pins = insertelement <2 x double> undef, double %ps, i32 01806 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1807 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1808 ret <2 x double> %t1809}1810 1811define <4 x float> @trunc_v4f32_broadcast(ptr %ptr) {1812; CHECK-LABEL: trunc_v4f32_broadcast:1813; CHECK: ## %bb.0:1814; CHECK-NEXT: vrndscaleps $11, (%rdi){1to4}, %xmm01815; CHECK-NEXT: retq1816 %ps = load float, ptr %ptr1817 %pins = insertelement <4 x float> undef, float %ps, i32 01818 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1819 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1820 ret <4 x float> %t1821}1822 1823define <4 x double> @trunc_v4f64_broadcast(ptr %ptr){1824; CHECK-LABEL: trunc_v4f64_broadcast:1825; CHECK: ## %bb.0:1826; CHECK-NEXT: vrndscalepd $11, (%rdi){1to4}, %ymm01827; CHECK-NEXT: retq1828 %ps = load double, ptr %ptr1829 %pins = insertelement <4 x double> undef, double %ps, i32 01830 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer1831 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1832 ret <4 x double> %t1833}1834 1835define <8 x float> @trunc_v8f32_broadcast(ptr %ptr) {1836; CHECK-LABEL: trunc_v8f32_broadcast:1837; CHECK: ## %bb.0:1838; CHECK-NEXT: vrndscaleps $11, (%rdi){1to8}, %ymm01839; CHECK-NEXT: retq1840 %ps = load float, ptr %ptr1841 %pins = insertelement <8 x float> undef, float %ps, i32 01842 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer1843 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1844 ret <8 x float> %t1845}1846 1847define <8 x double> @trunc_v8f64_broadcast(ptr %ptr){1848; CHECK-LABEL: trunc_v8f64_broadcast:1849; CHECK: ## %bb.0:1850; CHECK-NEXT: vrndscalepd $11, (%rdi){1to8}, %zmm01851; CHECK-NEXT: retq1852 %ps = load double, ptr %ptr1853 %pins = insertelement <8 x double> undef, double %ps, i32 01854 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer1855 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1856 ret <8 x double> %t1857}1858 1859define <16 x float> @trunc_v16f32_broadcast(ptr %ptr) {1860; CHECK-LABEL: trunc_v16f32_broadcast:1861; CHECK: ## %bb.0:1862; CHECK-NEXT: vrndscaleps $11, (%rdi){1to16}, %zmm01863; CHECK-NEXT: retq1864 %ps = load float, ptr %ptr1865 %pins = insertelement <16 x float> undef, float %ps, i32 01866 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer1867 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1868 ret <16 x float> %t1869}1870 1871define <2 x double> @trunc_v2f64_mask_broadcast(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {1872; CHECK-LABEL: trunc_v2f64_mask_broadcast:1873; CHECK: ## %bb.0:1874; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k11875; CHECK-NEXT: vrndscalepd $11, (%rdi){1to2}, %xmm0 {%k1}1876; CHECK-NEXT: retq1877 %c = icmp eq <2 x i64> %cmp, zeroinitializer1878 %ps = load double, ptr %ptr1879 %pins = insertelement <2 x double> undef, double %ps, i32 01880 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1881 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1882 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru1883 ret <2 x double> %s1884}1885 1886define <4 x float> @trunc_v4f32_mask_broadcast(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {1887; CHECK-LABEL: trunc_v4f32_mask_broadcast:1888; CHECK: ## %bb.0:1889; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k11890; CHECK-NEXT: vrndscaleps $11, (%rdi){1to4}, %xmm0 {%k1}1891; CHECK-NEXT: retq1892 %c = icmp eq <4 x i32> %cmp, zeroinitializer1893 %ps = load float, ptr %ptr1894 %pins = insertelement <4 x float> undef, float %ps, i32 01895 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1896 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1897 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru1898 ret <4 x float> %s1899}1900 1901define <4 x double> @trunc_v4f64_mask_broadcast(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {1902; CHECK-LABEL: trunc_v4f64_mask_broadcast:1903; CHECK: ## %bb.0:1904; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11905; CHECK-NEXT: vrndscalepd $11, (%rdi){1to4}, %ymm0 {%k1}1906; CHECK-NEXT: retq1907 %c = icmp eq <4 x i64> %cmp, zeroinitializer1908 %ps = load double, ptr %ptr1909 %pins = insertelement <4 x double> undef, double %ps, i32 01910 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer1911 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)1912 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru1913 ret <4 x double> %s1914}1915 1916define <8 x float> @trunc_v8f32_mask_broadcast(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {1917; CHECK-LABEL: trunc_v8f32_mask_broadcast:1918; CHECK: ## %bb.0:1919; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k11920; CHECK-NEXT: vrndscaleps $11, (%rdi){1to8}, %ymm0 {%k1}1921; CHECK-NEXT: retq1922 %c = icmp eq <8 x i32> %cmp, zeroinitializer1923 %ps = load float, ptr %ptr1924 %pins = insertelement <8 x float> undef, float %ps, i32 01925 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer1926 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)1927 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru1928 ret <8 x float> %s1929}1930 1931define <8 x double> @trunc_v8f64_mask_broadcast(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {1932; CHECK-LABEL: trunc_v8f64_mask_broadcast:1933; CHECK: ## %bb.0:1934; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11935; CHECK-NEXT: vrndscalepd $11, (%rdi){1to8}, %zmm0 {%k1}1936; CHECK-NEXT: retq1937 %c = icmp eq <8 x i64> %cmp, zeroinitializer1938 %ps = load double, ptr %ptr1939 %pins = insertelement <8 x double> undef, double %ps, i32 01940 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer1941 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)1942 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru1943 ret <8 x double> %s1944}1945 1946define <16 x float> @trunc_v16f32_mask_broadcast(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {1947; CHECK-LABEL: trunc_v16f32_mask_broadcast:1948; CHECK: ## %bb.0:1949; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11950; CHECK-NEXT: vrndscaleps $11, (%rdi){1to16}, %zmm0 {%k1}1951; CHECK-NEXT: retq1952 %c = icmp eq <16 x i32> %cmp, zeroinitializer1953 %ps = load float, ptr %ptr1954 %pins = insertelement <16 x float> undef, float %ps, i32 01955 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer1956 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)1957 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru1958 ret <16 x float> %s1959}1960 1961define <2 x double> @trunc_v2f64_maskz_broadcast(ptr %ptr, <2 x i64> %cmp) {1962; CHECK-LABEL: trunc_v2f64_maskz_broadcast:1963; CHECK: ## %bb.0:1964; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11965; CHECK-NEXT: vrndscalepd $11, (%rdi){1to2}, %xmm0 {%k1} {z}1966; CHECK-NEXT: retq1967 %c = icmp eq <2 x i64> %cmp, zeroinitializer1968 %ps = load double, ptr %ptr1969 %pins = insertelement <2 x double> undef, double %ps, i32 01970 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer1971 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)1972 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer1973 ret <2 x double> %s1974}1975 1976define <4 x float> @trunc_v4f32_maskz_broadcast(ptr %ptr, <4 x i32> %cmp) {1977; CHECK-LABEL: trunc_v4f32_maskz_broadcast:1978; CHECK: ## %bb.0:1979; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k11980; CHECK-NEXT: vrndscaleps $11, (%rdi){1to4}, %xmm0 {%k1} {z}1981; CHECK-NEXT: retq1982 %c = icmp eq <4 x i32> %cmp, zeroinitializer1983 %ps = load float, ptr %ptr1984 %pins = insertelement <4 x float> undef, float %ps, i32 01985 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer1986 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)1987 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer1988 ret <4 x float> %s1989}1990 1991define <4 x double> @trunc_v4f64_maskz_broadcast(ptr %ptr, <4 x i64> %cmp) {1992; CHECK-LABEL: trunc_v4f64_maskz_broadcast:1993; CHECK: ## %bb.0:1994; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11995; CHECK-NEXT: vrndscalepd $11, (%rdi){1to4}, %ymm0 {%k1} {z}1996; CHECK-NEXT: retq1997 %c = icmp eq <4 x i64> %cmp, zeroinitializer1998 %ps = load double, ptr %ptr1999 %pins = insertelement <4 x double> undef, double %ps, i32 02000 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer2001 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)2002 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer2003 ret <4 x double> %s2004}2005 2006define <8 x float> @trunc_v8f32_maskz_broadcast(ptr %ptr, <8 x i32> %cmp) {2007; CHECK-LABEL: trunc_v8f32_maskz_broadcast:2008; CHECK: ## %bb.0:2009; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12010; CHECK-NEXT: vrndscaleps $11, (%rdi){1to8}, %ymm0 {%k1} {z}2011; CHECK-NEXT: retq2012 %c = icmp eq <8 x i32> %cmp, zeroinitializer2013 %ps = load float, ptr %ptr2014 %pins = insertelement <8 x float> undef, float %ps, i32 02015 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer2016 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)2017 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer2018 ret <8 x float> %s2019}2020 2021define <8 x double> @trunc_v8f64_maskz_broadcast(ptr %ptr, <8 x i64> %cmp) {2022; CHECK-LABEL: trunc_v8f64_maskz_broadcast:2023; CHECK: ## %bb.0:2024; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12025; CHECK-NEXT: vrndscalepd $11, (%rdi){1to8}, %zmm0 {%k1} {z}2026; CHECK-NEXT: retq2027 %c = icmp eq <8 x i64> %cmp, zeroinitializer2028 %ps = load double, ptr %ptr2029 %pins = insertelement <8 x double> undef, double %ps, i32 02030 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer2031 %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)2032 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer2033 ret <8 x double> %s2034}2035 2036define <16 x float> @trunc_v16f32_maskz_broadcast(ptr %ptr, <16 x i32> %cmp) {2037; CHECK-LABEL: trunc_v16f32_maskz_broadcast:2038; CHECK: ## %bb.0:2039; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12040; CHECK-NEXT: vrndscaleps $11, (%rdi){1to16}, %zmm0 {%k1} {z}2041; CHECK-NEXT: retq2042 %c = icmp eq <16 x i32> %cmp, zeroinitializer2043 %ps = load float, ptr %ptr2044 %pins = insertelement <16 x float> undef, float %ps, i32 02045 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer2046 %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)2047 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer2048 ret <16 x float> %s2049}2050 2051define <2 x double> @rint_v2f64(<2 x double> %p) {2052; CHECK-LABEL: rint_v2f64:2053; CHECK: ## %bb.0:2054; CHECK-NEXT: vroundpd $4, %xmm0, %xmm02055; CHECK-NEXT: retq2056 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2057 ret <2 x double> %t2058}2059 2060define <4 x float> @rint_v4f32(<4 x float> %p) {2061; CHECK-LABEL: rint_v4f32:2062; CHECK: ## %bb.0:2063; CHECK-NEXT: vroundps $4, %xmm0, %xmm02064; CHECK-NEXT: retq2065 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2066 ret <4 x float> %t2067}2068 2069define <4 x double> @rint_v4f64(<4 x double> %p){2070; CHECK-LABEL: rint_v4f64:2071; CHECK: ## %bb.0:2072; CHECK-NEXT: vroundpd $4, %ymm0, %ymm02073; CHECK-NEXT: retq2074 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2075 ret <4 x double> %t2076}2077 2078define <8 x float> @rint_v8f32(<8 x float> %p) {2079; CHECK-LABEL: rint_v8f32:2080; CHECK: ## %bb.0:2081; CHECK-NEXT: vroundps $4, %ymm0, %ymm02082; CHECK-NEXT: retq2083 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2084 ret <8 x float> %t2085}2086 2087define <8 x double> @rint_v8f64(<8 x double> %p){2088; CHECK-LABEL: rint_v8f64:2089; CHECK: ## %bb.0:2090; CHECK-NEXT: vrndscalepd $4, %zmm0, %zmm02091; CHECK-NEXT: retq2092 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2093 ret <8 x double> %t2094}2095 2096define <16 x float> @rint_v16f32(<16 x float> %p) {2097; CHECK-LABEL: rint_v16f32:2098; CHECK: ## %bb.0:2099; CHECK-NEXT: vrndscaleps $4, %zmm0, %zmm02100; CHECK-NEXT: retq2101 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2102 ret <16 x float> %t2103}2104 2105define <2 x double> @rint_v2f64_load(ptr %ptr) {2106; CHECK-LABEL: rint_v2f64_load:2107; CHECK: ## %bb.0:2108; CHECK-NEXT: vroundpd $4, (%rdi), %xmm02109; CHECK-NEXT: retq2110 %p = load <2 x double>, ptr %ptr2111 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2112 ret <2 x double> %t2113}2114 2115define <4 x float> @rint_v4f32_load(ptr %ptr) {2116; CHECK-LABEL: rint_v4f32_load:2117; CHECK: ## %bb.0:2118; CHECK-NEXT: vroundps $4, (%rdi), %xmm02119; CHECK-NEXT: retq2120 %p = load <4 x float>, ptr %ptr2121 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2122 ret <4 x float> %t2123}2124 2125define <4 x double> @rint_v4f64_load(ptr %ptr){2126; CHECK-LABEL: rint_v4f64_load:2127; CHECK: ## %bb.0:2128; CHECK-NEXT: vroundpd $4, (%rdi), %ymm02129; CHECK-NEXT: retq2130 %p = load <4 x double>, ptr %ptr2131 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2132 ret <4 x double> %t2133}2134 2135define <8 x float> @rint_v8f32_load(ptr %ptr) {2136; CHECK-LABEL: rint_v8f32_load:2137; CHECK: ## %bb.0:2138; CHECK-NEXT: vroundps $4, (%rdi), %ymm02139; CHECK-NEXT: retq2140 %p = load <8 x float>, ptr %ptr2141 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2142 ret <8 x float> %t2143}2144 2145define <8 x double> @rint_v8f64_load(ptr %ptr){2146; CHECK-LABEL: rint_v8f64_load:2147; CHECK: ## %bb.0:2148; CHECK-NEXT: vrndscalepd $4, (%rdi), %zmm02149; CHECK-NEXT: retq2150 %p = load <8 x double>, ptr %ptr2151 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2152 ret <8 x double> %t2153}2154 2155define <16 x float> @rint_v16f32_load(ptr %ptr) {2156; CHECK-LABEL: rint_v16f32_load:2157; CHECK: ## %bb.0:2158; CHECK-NEXT: vrndscaleps $4, (%rdi), %zmm02159; CHECK-NEXT: retq2160 %p = load <16 x float>, ptr %ptr2161 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2162 ret <16 x float> %t2163}2164 2165define <2 x double> @rint_v2f64_mask(<2 x double> %p, <2 x double> %passthru, <2 x i64> %cmp) {2166; CHECK-LABEL: rint_v2f64_mask:2167; CHECK: ## %bb.0:2168; CHECK-NEXT: vptestnmq %xmm2, %xmm2, %k12169; CHECK-NEXT: vrndscalepd $4, %xmm0, %xmm1 {%k1}2170; CHECK-NEXT: vmovapd %xmm1, %xmm02171; CHECK-NEXT: retq2172 %c = icmp eq <2 x i64> %cmp, zeroinitializer2173 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2174 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru2175 ret <2 x double> %s2176}2177 2178define <4 x float> @rint_v4f32_mask(<4 x float> %p, <4 x float> %passthru, <4 x i32> %cmp) {2179; CHECK-LABEL: rint_v4f32_mask:2180; CHECK: ## %bb.0:2181; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12182; CHECK-NEXT: vrndscaleps $4, %xmm0, %xmm1 {%k1}2183; CHECK-NEXT: vmovaps %xmm1, %xmm02184; CHECK-NEXT: retq2185 %c = icmp eq <4 x i32> %cmp, zeroinitializer2186 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2187 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru2188 ret <4 x float> %s2189}2190 2191define <4 x double> @rint_v4f64_mask(<4 x double> %p, <4 x double> %passthru, <4 x i64> %cmp) {2192; CHECK-LABEL: rint_v4f64_mask:2193; CHECK: ## %bb.0:2194; CHECK-NEXT: vptestnmq %ymm2, %ymm2, %k12195; CHECK-NEXT: vrndscalepd $4, %ymm0, %ymm1 {%k1}2196; CHECK-NEXT: vmovapd %ymm1, %ymm02197; CHECK-NEXT: retq2198 %c = icmp eq <4 x i64> %cmp, zeroinitializer2199 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2200 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru2201 ret <4 x double> %s2202}2203 2204define <8 x float> @rint_v8f32_mask(<8 x float> %p, <8 x float> %passthru, <8 x i32> %cmp) {2205; CHECK-LABEL: rint_v8f32_mask:2206; CHECK: ## %bb.0:2207; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12208; CHECK-NEXT: vrndscaleps $4, %ymm0, %ymm1 {%k1}2209; CHECK-NEXT: vmovaps %ymm1, %ymm02210; CHECK-NEXT: retq2211 %c = icmp eq <8 x i32> %cmp, zeroinitializer2212 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2213 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru2214 ret <8 x float> %s2215}2216 2217define <8 x double> @rint_v8f64_mask(<8 x double> %p, <8 x double> %passthru, <8 x i64> %cmp) {2218; CHECK-LABEL: rint_v8f64_mask:2219; CHECK: ## %bb.0:2220; CHECK-NEXT: vptestnmq %zmm2, %zmm2, %k12221; CHECK-NEXT: vrndscalepd $4, %zmm0, %zmm1 {%k1}2222; CHECK-NEXT: vmovapd %zmm1, %zmm02223; CHECK-NEXT: retq2224 %c = icmp eq <8 x i64> %cmp, zeroinitializer2225 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2226 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru2227 ret <8 x double> %s2228}2229 2230define <16 x float> @rint_v16f32_mask(<16 x float> %p, <16 x float> %passthru, <16 x i32> %cmp) {2231; CHECK-LABEL: rint_v16f32_mask:2232; CHECK: ## %bb.0:2233; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12234; CHECK-NEXT: vrndscaleps $4, %zmm0, %zmm1 {%k1}2235; CHECK-NEXT: vmovaps %zmm1, %zmm02236; CHECK-NEXT: retq2237 %c = icmp eq <16 x i32> %cmp, zeroinitializer2238 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2239 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru2240 ret <16 x float> %s2241}2242 2243define <2 x double> @rint_v2f64_maskz(<2 x double> %p, <2 x i64> %cmp) {2244; CHECK-LABEL: rint_v2f64_maskz:2245; CHECK: ## %bb.0:2246; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12247; CHECK-NEXT: vrndscalepd $4, %xmm0, %xmm0 {%k1} {z}2248; CHECK-NEXT: retq2249 %c = icmp eq <2 x i64> %cmp, zeroinitializer2250 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2251 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer2252 ret <2 x double> %s2253}2254 2255define <4 x float> @rint_v4f32_maskz(<4 x float> %p, <4 x i32> %cmp) {2256; CHECK-LABEL: rint_v4f32_maskz:2257; CHECK: ## %bb.0:2258; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12259; CHECK-NEXT: vrndscaleps $4, %xmm0, %xmm0 {%k1} {z}2260; CHECK-NEXT: retq2261 %c = icmp eq <4 x i32> %cmp, zeroinitializer2262 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2263 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer2264 ret <4 x float> %s2265}2266 2267define <4 x double> @rint_v4f64_maskz(<4 x double> %p, <4 x i64> %cmp) {2268; CHECK-LABEL: rint_v4f64_maskz:2269; CHECK: ## %bb.0:2270; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12271; CHECK-NEXT: vrndscalepd $4, %ymm0, %ymm0 {%k1} {z}2272; CHECK-NEXT: retq2273 %c = icmp eq <4 x i64> %cmp, zeroinitializer2274 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2275 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer2276 ret <4 x double> %s2277}2278 2279define <8 x float> @rint_v8f32_maskz(<8 x float> %p, <8 x i32> %cmp) {2280; CHECK-LABEL: rint_v8f32_maskz:2281; CHECK: ## %bb.0:2282; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12283; CHECK-NEXT: vrndscaleps $4, %ymm0, %ymm0 {%k1} {z}2284; CHECK-NEXT: retq2285 %c = icmp eq <8 x i32> %cmp, zeroinitializer2286 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2287 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer2288 ret <8 x float> %s2289}2290 2291define <8 x double> @rint_v8f64_maskz(<8 x double> %p, <8 x i64> %cmp) {2292; CHECK-LABEL: rint_v8f64_maskz:2293; CHECK: ## %bb.0:2294; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12295; CHECK-NEXT: vrndscalepd $4, %zmm0, %zmm0 {%k1} {z}2296; CHECK-NEXT: retq2297 %c = icmp eq <8 x i64> %cmp, zeroinitializer2298 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2299 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer2300 ret <8 x double> %s2301}2302 2303define <16 x float> @rint_v16f32_maskz(<16 x float> %p, <16 x i32> %cmp) {2304; CHECK-LABEL: rint_v16f32_maskz:2305; CHECK: ## %bb.0:2306; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12307; CHECK-NEXT: vrndscaleps $4, %zmm0, %zmm0 {%k1} {z}2308; CHECK-NEXT: retq2309 %c = icmp eq <16 x i32> %cmp, zeroinitializer2310 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2311 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer2312 ret <16 x float> %s2313}2314 2315define <2 x double> @rint_v2f64_mask_load(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {2316; CHECK-LABEL: rint_v2f64_mask_load:2317; CHECK: ## %bb.0:2318; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12319; CHECK-NEXT: vrndscalepd $4, (%rdi), %xmm0 {%k1}2320; CHECK-NEXT: retq2321 %c = icmp eq <2 x i64> %cmp, zeroinitializer2322 %p = load <2 x double>, ptr %ptr2323 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2324 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru2325 ret <2 x double> %s2326}2327 2328define <4 x float> @rint_v4f32_mask_load(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {2329; CHECK-LABEL: rint_v4f32_mask_load:2330; CHECK: ## %bb.0:2331; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12332; CHECK-NEXT: vrndscaleps $4, (%rdi), %xmm0 {%k1}2333; CHECK-NEXT: retq2334 %c = icmp eq <4 x i32> %cmp, zeroinitializer2335 %p = load <4 x float>, ptr %ptr2336 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2337 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru2338 ret <4 x float> %s2339}2340 2341define <4 x double> @rint_v4f64_mask_load(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {2342; CHECK-LABEL: rint_v4f64_mask_load:2343; CHECK: ## %bb.0:2344; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12345; CHECK-NEXT: vrndscalepd $4, (%rdi), %ymm0 {%k1}2346; CHECK-NEXT: retq2347 %c = icmp eq <4 x i64> %cmp, zeroinitializer2348 %p = load <4 x double>, ptr %ptr2349 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2350 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru2351 ret <4 x double> %s2352}2353 2354define <8 x float> @rint_v8f32_mask_load(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {2355; CHECK-LABEL: rint_v8f32_mask_load:2356; CHECK: ## %bb.0:2357; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12358; CHECK-NEXT: vrndscaleps $4, (%rdi), %ymm0 {%k1}2359; CHECK-NEXT: retq2360 %c = icmp eq <8 x i32> %cmp, zeroinitializer2361 %p = load <8 x float>, ptr %ptr2362 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2363 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru2364 ret <8 x float> %s2365}2366 2367define <8 x double> @rint_v8f64_mask_load(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {2368; CHECK-LABEL: rint_v8f64_mask_load:2369; CHECK: ## %bb.0:2370; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12371; CHECK-NEXT: vrndscalepd $4, (%rdi), %zmm0 {%k1}2372; CHECK-NEXT: retq2373 %c = icmp eq <8 x i64> %cmp, zeroinitializer2374 %p = load <8 x double>, ptr %ptr2375 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2376 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru2377 ret <8 x double> %s2378}2379 2380define <16 x float> @rint_v16f32_mask_load(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {2381; CHECK-LABEL: rint_v16f32_mask_load:2382; CHECK: ## %bb.0:2383; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12384; CHECK-NEXT: vrndscaleps $4, (%rdi), %zmm0 {%k1}2385; CHECK-NEXT: retq2386 %c = icmp eq <16 x i32> %cmp, zeroinitializer2387 %p = load <16 x float>, ptr %ptr2388 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2389 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru2390 ret <16 x float> %s2391}2392 2393define <2 x double> @rint_v2f64_maskz_load(ptr %ptr, <2 x i64> %cmp) {2394; CHECK-LABEL: rint_v2f64_maskz_load:2395; CHECK: ## %bb.0:2396; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k12397; CHECK-NEXT: vrndscalepd $4, (%rdi), %xmm0 {%k1} {z}2398; CHECK-NEXT: retq2399 %c = icmp eq <2 x i64> %cmp, zeroinitializer2400 %p = load <2 x double>, ptr %ptr2401 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2402 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer2403 ret <2 x double> %s2404}2405 2406define <4 x float> @rint_v4f32_maskz_load(ptr %ptr, <4 x i32> %cmp) {2407; CHECK-LABEL: rint_v4f32_maskz_load:2408; CHECK: ## %bb.0:2409; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12410; CHECK-NEXT: vrndscaleps $4, (%rdi), %xmm0 {%k1} {z}2411; CHECK-NEXT: retq2412 %c = icmp eq <4 x i32> %cmp, zeroinitializer2413 %p = load <4 x float>, ptr %ptr2414 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2415 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer2416 ret <4 x float> %s2417}2418 2419define <4 x double> @rint_v4f64_maskz_load(ptr %ptr, <4 x i64> %cmp) {2420; CHECK-LABEL: rint_v4f64_maskz_load:2421; CHECK: ## %bb.0:2422; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12423; CHECK-NEXT: vrndscalepd $4, (%rdi), %ymm0 {%k1} {z}2424; CHECK-NEXT: retq2425 %c = icmp eq <4 x i64> %cmp, zeroinitializer2426 %p = load <4 x double>, ptr %ptr2427 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2428 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer2429 ret <4 x double> %s2430}2431 2432define <8 x float> @rint_v8f32_maskz_load(ptr %ptr, <8 x i32> %cmp) {2433; CHECK-LABEL: rint_v8f32_maskz_load:2434; CHECK: ## %bb.0:2435; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12436; CHECK-NEXT: vrndscaleps $4, (%rdi), %ymm0 {%k1} {z}2437; CHECK-NEXT: retq2438 %c = icmp eq <8 x i32> %cmp, zeroinitializer2439 %p = load <8 x float>, ptr %ptr2440 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2441 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer2442 ret <8 x float> %s2443}2444 2445define <8 x double> @rint_v8f64_maskz_load(ptr %ptr, <8 x i64> %cmp) {2446; CHECK-LABEL: rint_v8f64_maskz_load:2447; CHECK: ## %bb.0:2448; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12449; CHECK-NEXT: vrndscalepd $4, (%rdi), %zmm0 {%k1} {z}2450; CHECK-NEXT: retq2451 %c = icmp eq <8 x i64> %cmp, zeroinitializer2452 %p = load <8 x double>, ptr %ptr2453 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2454 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer2455 ret <8 x double> %s2456}2457 2458define <16 x float> @rint_v16f32_maskz_load(ptr %ptr, <16 x i32> %cmp) {2459; CHECK-LABEL: rint_v16f32_maskz_load:2460; CHECK: ## %bb.0:2461; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12462; CHECK-NEXT: vrndscaleps $4, (%rdi), %zmm0 {%k1} {z}2463; CHECK-NEXT: retq2464 %c = icmp eq <16 x i32> %cmp, zeroinitializer2465 %p = load <16 x float>, ptr %ptr2466 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2467 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer2468 ret <16 x float> %s2469}2470 2471define <2 x double> @rint_v2f64_broadcast(ptr %ptr) {2472; CHECK-LABEL: rint_v2f64_broadcast:2473; CHECK: ## %bb.0:2474; CHECK-NEXT: vrndscalepd $4, (%rdi){1to2}, %xmm02475; CHECK-NEXT: retq2476 %ps = load double, ptr %ptr2477 %pins = insertelement <2 x double> undef, double %ps, i32 02478 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer2479 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2480 ret <2 x double> %t2481}2482 2483define <4 x float> @rint_v4f32_broadcast(ptr %ptr) {2484; CHECK-LABEL: rint_v4f32_broadcast:2485; CHECK: ## %bb.0:2486; CHECK-NEXT: vrndscaleps $4, (%rdi){1to4}, %xmm02487; CHECK-NEXT: retq2488 %ps = load float, ptr %ptr2489 %pins = insertelement <4 x float> undef, float %ps, i32 02490 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer2491 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2492 ret <4 x float> %t2493}2494 2495define <4 x double> @rint_v4f64_broadcast(ptr %ptr){2496; CHECK-LABEL: rint_v4f64_broadcast:2497; CHECK: ## %bb.0:2498; CHECK-NEXT: vrndscalepd $4, (%rdi){1to4}, %ymm02499; CHECK-NEXT: retq2500 %ps = load double, ptr %ptr2501 %pins = insertelement <4 x double> undef, double %ps, i32 02502 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer2503 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2504 ret <4 x double> %t2505}2506 2507define <8 x float> @rint_v8f32_broadcast(ptr %ptr) {2508; CHECK-LABEL: rint_v8f32_broadcast:2509; CHECK: ## %bb.0:2510; CHECK-NEXT: vrndscaleps $4, (%rdi){1to8}, %ymm02511; CHECK-NEXT: retq2512 %ps = load float, ptr %ptr2513 %pins = insertelement <8 x float> undef, float %ps, i32 02514 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer2515 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2516 ret <8 x float> %t2517}2518 2519define <8 x double> @rint_v8f64_broadcast(ptr %ptr){2520; CHECK-LABEL: rint_v8f64_broadcast:2521; CHECK: ## %bb.0:2522; CHECK-NEXT: vrndscalepd $4, (%rdi){1to8}, %zmm02523; CHECK-NEXT: retq2524 %ps = load double, ptr %ptr2525 %pins = insertelement <8 x double> undef, double %ps, i32 02526 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer2527 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2528 ret <8 x double> %t2529}2530 2531define <16 x float> @rint_v16f32_broadcast(ptr %ptr) {2532; CHECK-LABEL: rint_v16f32_broadcast:2533; CHECK: ## %bb.0:2534; CHECK-NEXT: vrndscaleps $4, (%rdi){1to16}, %zmm02535; CHECK-NEXT: retq2536 %ps = load float, ptr %ptr2537 %pins = insertelement <16 x float> undef, float %ps, i32 02538 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer2539 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2540 ret <16 x float> %t2541}2542 2543define <2 x double> @rint_v2f64_mask_broadcast(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {2544; CHECK-LABEL: rint_v2f64_mask_broadcast:2545; CHECK: ## %bb.0:2546; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12547; CHECK-NEXT: vrndscalepd $4, (%rdi){1to2}, %xmm0 {%k1}2548; CHECK-NEXT: retq2549 %c = icmp eq <2 x i64> %cmp, zeroinitializer2550 %ps = load double, ptr %ptr2551 %pins = insertelement <2 x double> undef, double %ps, i32 02552 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer2553 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2554 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru2555 ret <2 x double> %s2556}2557 2558define <4 x float> @rint_v4f32_mask_broadcast(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {2559; CHECK-LABEL: rint_v4f32_mask_broadcast:2560; CHECK: ## %bb.0:2561; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12562; CHECK-NEXT: vrndscaleps $4, (%rdi){1to4}, %xmm0 {%k1}2563; CHECK-NEXT: retq2564 %c = icmp eq <4 x i32> %cmp, zeroinitializer2565 %ps = load float, ptr %ptr2566 %pins = insertelement <4 x float> undef, float %ps, i32 02567 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer2568 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2569 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru2570 ret <4 x float> %s2571}2572 2573define <4 x double> @rint_v4f64_mask_broadcast(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {2574; CHECK-LABEL: rint_v4f64_mask_broadcast:2575; CHECK: ## %bb.0:2576; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12577; CHECK-NEXT: vrndscalepd $4, (%rdi){1to4}, %ymm0 {%k1}2578; CHECK-NEXT: retq2579 %c = icmp eq <4 x i64> %cmp, zeroinitializer2580 %ps = load double, ptr %ptr2581 %pins = insertelement <4 x double> undef, double %ps, i32 02582 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer2583 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2584 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru2585 ret <4 x double> %s2586}2587 2588define <8 x float> @rint_v8f32_mask_broadcast(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {2589; CHECK-LABEL: rint_v8f32_mask_broadcast:2590; CHECK: ## %bb.0:2591; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12592; CHECK-NEXT: vrndscaleps $4, (%rdi){1to8}, %ymm0 {%k1}2593; CHECK-NEXT: retq2594 %c = icmp eq <8 x i32> %cmp, zeroinitializer2595 %ps = load float, ptr %ptr2596 %pins = insertelement <8 x float> undef, float %ps, i32 02597 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer2598 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2599 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru2600 ret <8 x float> %s2601}2602 2603define <8 x double> @rint_v8f64_mask_broadcast(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {2604; CHECK-LABEL: rint_v8f64_mask_broadcast:2605; CHECK: ## %bb.0:2606; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12607; CHECK-NEXT: vrndscalepd $4, (%rdi){1to8}, %zmm0 {%k1}2608; CHECK-NEXT: retq2609 %c = icmp eq <8 x i64> %cmp, zeroinitializer2610 %ps = load double, ptr %ptr2611 %pins = insertelement <8 x double> undef, double %ps, i32 02612 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer2613 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2614 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru2615 ret <8 x double> %s2616}2617 2618define <16 x float> @rint_v16f32_mask_broadcast(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {2619; CHECK-LABEL: rint_v16f32_mask_broadcast:2620; CHECK: ## %bb.0:2621; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12622; CHECK-NEXT: vrndscaleps $4, (%rdi){1to16}, %zmm0 {%k1}2623; CHECK-NEXT: retq2624 %c = icmp eq <16 x i32> %cmp, zeroinitializer2625 %ps = load float, ptr %ptr2626 %pins = insertelement <16 x float> undef, float %ps, i32 02627 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer2628 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2629 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru2630 ret <16 x float> %s2631}2632 2633define <2 x double> @rint_v2f64_maskz_broadcast(ptr %ptr, <2 x i64> %cmp) {2634; CHECK-LABEL: rint_v2f64_maskz_broadcast:2635; CHECK: ## %bb.0:2636; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k12637; CHECK-NEXT: vrndscalepd $4, (%rdi){1to2}, %xmm0 {%k1} {z}2638; CHECK-NEXT: retq2639 %c = icmp eq <2 x i64> %cmp, zeroinitializer2640 %ps = load double, ptr %ptr2641 %pins = insertelement <2 x double> undef, double %ps, i32 02642 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer2643 %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)2644 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer2645 ret <2 x double> %s2646}2647 2648define <4 x float> @rint_v4f32_maskz_broadcast(ptr %ptr, <4 x i32> %cmp) {2649; CHECK-LABEL: rint_v4f32_maskz_broadcast:2650; CHECK: ## %bb.0:2651; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12652; CHECK-NEXT: vrndscaleps $4, (%rdi){1to4}, %xmm0 {%k1} {z}2653; CHECK-NEXT: retq2654 %c = icmp eq <4 x i32> %cmp, zeroinitializer2655 %ps = load float, ptr %ptr2656 %pins = insertelement <4 x float> undef, float %ps, i32 02657 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer2658 %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)2659 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer2660 ret <4 x float> %s2661}2662 2663define <4 x double> @rint_v4f64_maskz_broadcast(ptr %ptr, <4 x i64> %cmp) {2664; CHECK-LABEL: rint_v4f64_maskz_broadcast:2665; CHECK: ## %bb.0:2666; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12667; CHECK-NEXT: vrndscalepd $4, (%rdi){1to4}, %ymm0 {%k1} {z}2668; CHECK-NEXT: retq2669 %c = icmp eq <4 x i64> %cmp, zeroinitializer2670 %ps = load double, ptr %ptr2671 %pins = insertelement <4 x double> undef, double %ps, i32 02672 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer2673 %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)2674 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer2675 ret <4 x double> %s2676}2677 2678define <8 x float> @rint_v8f32_maskz_broadcast(ptr %ptr, <8 x i32> %cmp) {2679; CHECK-LABEL: rint_v8f32_maskz_broadcast:2680; CHECK: ## %bb.0:2681; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12682; CHECK-NEXT: vrndscaleps $4, (%rdi){1to8}, %ymm0 {%k1} {z}2683; CHECK-NEXT: retq2684 %c = icmp eq <8 x i32> %cmp, zeroinitializer2685 %ps = load float, ptr %ptr2686 %pins = insertelement <8 x float> undef, float %ps, i32 02687 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer2688 %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)2689 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer2690 ret <8 x float> %s2691}2692 2693define <8 x double> @rint_v8f64_maskz_broadcast(ptr %ptr, <8 x i64> %cmp) {2694; CHECK-LABEL: rint_v8f64_maskz_broadcast:2695; CHECK: ## %bb.0:2696; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12697; CHECK-NEXT: vrndscalepd $4, (%rdi){1to8}, %zmm0 {%k1} {z}2698; CHECK-NEXT: retq2699 %c = icmp eq <8 x i64> %cmp, zeroinitializer2700 %ps = load double, ptr %ptr2701 %pins = insertelement <8 x double> undef, double %ps, i32 02702 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer2703 %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)2704 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer2705 ret <8 x double> %s2706}2707 2708define <16 x float> @rint_v16f32_maskz_broadcast(ptr %ptr, <16 x i32> %cmp) {2709; CHECK-LABEL: rint_v16f32_maskz_broadcast:2710; CHECK: ## %bb.0:2711; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12712; CHECK-NEXT: vrndscaleps $4, (%rdi){1to16}, %zmm0 {%k1} {z}2713; CHECK-NEXT: retq2714 %c = icmp eq <16 x i32> %cmp, zeroinitializer2715 %ps = load float, ptr %ptr2716 %pins = insertelement <16 x float> undef, float %ps, i32 02717 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer2718 %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)2719 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer2720 ret <16 x float> %s2721}2722 2723define <2 x double> @nearbyint_v2f64(<2 x double> %p) {2724; CHECK-LABEL: nearbyint_v2f64:2725; CHECK: ## %bb.0:2726; CHECK-NEXT: vroundpd $12, %xmm0, %xmm02727; CHECK-NEXT: retq2728 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)2729 ret <2 x double> %t2730}2731 2732define <4 x float> @nearbyint_v4f32(<4 x float> %p) {2733; CHECK-LABEL: nearbyint_v4f32:2734; CHECK: ## %bb.0:2735; CHECK-NEXT: vroundps $12, %xmm0, %xmm02736; CHECK-NEXT: retq2737 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)2738 ret <4 x float> %t2739}2740 2741define <4 x double> @nearbyint_v4f64(<4 x double> %p){2742; CHECK-LABEL: nearbyint_v4f64:2743; CHECK: ## %bb.0:2744; CHECK-NEXT: vroundpd $12, %ymm0, %ymm02745; CHECK-NEXT: retq2746 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)2747 ret <4 x double> %t2748}2749 2750define <8 x float> @nearbyint_v8f32(<8 x float> %p) {2751; CHECK-LABEL: nearbyint_v8f32:2752; CHECK: ## %bb.0:2753; CHECK-NEXT: vroundps $12, %ymm0, %ymm02754; CHECK-NEXT: retq2755 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)2756 ret <8 x float> %t2757}2758 2759define <8 x double> @nearbyint_v8f64(<8 x double> %p){2760; CHECK-LABEL: nearbyint_v8f64:2761; CHECK: ## %bb.0:2762; CHECK-NEXT: vrndscalepd $12, %zmm0, %zmm02763; CHECK-NEXT: retq2764 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)2765 ret <8 x double> %t2766}2767 2768define <16 x float> @nearbyint_v16f32(<16 x float> %p) {2769; CHECK-LABEL: nearbyint_v16f32:2770; CHECK: ## %bb.0:2771; CHECK-NEXT: vrndscaleps $12, %zmm0, %zmm02772; CHECK-NEXT: retq2773 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)2774 ret <16 x float> %t2775}2776 2777define <2 x double> @nearbyint_v2f64_load(ptr %ptr) {2778; CHECK-LABEL: nearbyint_v2f64_load:2779; CHECK: ## %bb.0:2780; CHECK-NEXT: vroundpd $12, (%rdi), %xmm02781; CHECK-NEXT: retq2782 %p = load <2 x double>, ptr %ptr2783 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)2784 ret <2 x double> %t2785}2786 2787define <4 x float> @nearbyint_v4f32_load(ptr %ptr) {2788; CHECK-LABEL: nearbyint_v4f32_load:2789; CHECK: ## %bb.0:2790; CHECK-NEXT: vroundps $12, (%rdi), %xmm02791; CHECK-NEXT: retq2792 %p = load <4 x float>, ptr %ptr2793 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)2794 ret <4 x float> %t2795}2796 2797define <4 x double> @nearbyint_v4f64_load(ptr %ptr){2798; CHECK-LABEL: nearbyint_v4f64_load:2799; CHECK: ## %bb.0:2800; CHECK-NEXT: vroundpd $12, (%rdi), %ymm02801; CHECK-NEXT: retq2802 %p = load <4 x double>, ptr %ptr2803 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)2804 ret <4 x double> %t2805}2806 2807define <8 x float> @nearbyint_v8f32_load(ptr %ptr) {2808; CHECK-LABEL: nearbyint_v8f32_load:2809; CHECK: ## %bb.0:2810; CHECK-NEXT: vroundps $12, (%rdi), %ymm02811; CHECK-NEXT: retq2812 %p = load <8 x float>, ptr %ptr2813 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)2814 ret <8 x float> %t2815}2816 2817define <8 x double> @nearbyint_v8f64_load(ptr %ptr){2818; CHECK-LABEL: nearbyint_v8f64_load:2819; CHECK: ## %bb.0:2820; CHECK-NEXT: vrndscalepd $12, (%rdi), %zmm02821; CHECK-NEXT: retq2822 %p = load <8 x double>, ptr %ptr2823 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)2824 ret <8 x double> %t2825}2826 2827define <16 x float> @nearbyint_v16f32_load(ptr %ptr) {2828; CHECK-LABEL: nearbyint_v16f32_load:2829; CHECK: ## %bb.0:2830; CHECK-NEXT: vrndscaleps $12, (%rdi), %zmm02831; CHECK-NEXT: retq2832 %p = load <16 x float>, ptr %ptr2833 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)2834 ret <16 x float> %t2835}2836 2837define <2 x double> @nearbyint_v2f64_mask(<2 x double> %p, <2 x double> %passthru, <2 x i64> %cmp) {2838; CHECK-LABEL: nearbyint_v2f64_mask:2839; CHECK: ## %bb.0:2840; CHECK-NEXT: vptestnmq %xmm2, %xmm2, %k12841; CHECK-NEXT: vrndscalepd $12, %xmm0, %xmm1 {%k1}2842; CHECK-NEXT: vmovapd %xmm1, %xmm02843; CHECK-NEXT: retq2844 %c = icmp eq <2 x i64> %cmp, zeroinitializer2845 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)2846 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru2847 ret <2 x double> %s2848}2849 2850define <4 x float> @nearbyint_v4f32_mask(<4 x float> %p, <4 x float> %passthru, <4 x i32> %cmp) {2851; CHECK-LABEL: nearbyint_v4f32_mask:2852; CHECK: ## %bb.0:2853; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12854; CHECK-NEXT: vrndscaleps $12, %xmm0, %xmm1 {%k1}2855; CHECK-NEXT: vmovaps %xmm1, %xmm02856; CHECK-NEXT: retq2857 %c = icmp eq <4 x i32> %cmp, zeroinitializer2858 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)2859 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru2860 ret <4 x float> %s2861}2862 2863define <4 x double> @nearbyint_v4f64_mask(<4 x double> %p, <4 x double> %passthru, <4 x i64> %cmp) {2864; CHECK-LABEL: nearbyint_v4f64_mask:2865; CHECK: ## %bb.0:2866; CHECK-NEXT: vptestnmq %ymm2, %ymm2, %k12867; CHECK-NEXT: vrndscalepd $12, %ymm0, %ymm1 {%k1}2868; CHECK-NEXT: vmovapd %ymm1, %ymm02869; CHECK-NEXT: retq2870 %c = icmp eq <4 x i64> %cmp, zeroinitializer2871 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)2872 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru2873 ret <4 x double> %s2874}2875 2876define <8 x float> @nearbyint_v8f32_mask(<8 x float> %p, <8 x float> %passthru, <8 x i32> %cmp) {2877; CHECK-LABEL: nearbyint_v8f32_mask:2878; CHECK: ## %bb.0:2879; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12880; CHECK-NEXT: vrndscaleps $12, %ymm0, %ymm1 {%k1}2881; CHECK-NEXT: vmovaps %ymm1, %ymm02882; CHECK-NEXT: retq2883 %c = icmp eq <8 x i32> %cmp, zeroinitializer2884 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)2885 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru2886 ret <8 x float> %s2887}2888 2889define <8 x double> @nearbyint_v8f64_mask(<8 x double> %p, <8 x double> %passthru, <8 x i64> %cmp) {2890; CHECK-LABEL: nearbyint_v8f64_mask:2891; CHECK: ## %bb.0:2892; CHECK-NEXT: vptestnmq %zmm2, %zmm2, %k12893; CHECK-NEXT: vrndscalepd $12, %zmm0, %zmm1 {%k1}2894; CHECK-NEXT: vmovapd %zmm1, %zmm02895; CHECK-NEXT: retq2896 %c = icmp eq <8 x i64> %cmp, zeroinitializer2897 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)2898 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru2899 ret <8 x double> %s2900}2901 2902define <16 x float> @nearbyint_v16f32_mask(<16 x float> %p, <16 x float> %passthru, <16 x i32> %cmp) {2903; CHECK-LABEL: nearbyint_v16f32_mask:2904; CHECK: ## %bb.0:2905; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12906; CHECK-NEXT: vrndscaleps $12, %zmm0, %zmm1 {%k1}2907; CHECK-NEXT: vmovaps %zmm1, %zmm02908; CHECK-NEXT: retq2909 %c = icmp eq <16 x i32> %cmp, zeroinitializer2910 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)2911 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru2912 ret <16 x float> %s2913}2914 2915define <2 x double> @nearbyint_v2f64_maskz(<2 x double> %p, <2 x i64> %cmp) {2916; CHECK-LABEL: nearbyint_v2f64_maskz:2917; CHECK: ## %bb.0:2918; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12919; CHECK-NEXT: vrndscalepd $12, %xmm0, %xmm0 {%k1} {z}2920; CHECK-NEXT: retq2921 %c = icmp eq <2 x i64> %cmp, zeroinitializer2922 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)2923 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer2924 ret <2 x double> %s2925}2926 2927define <4 x float> @nearbyint_v4f32_maskz(<4 x float> %p, <4 x i32> %cmp) {2928; CHECK-LABEL: nearbyint_v4f32_maskz:2929; CHECK: ## %bb.0:2930; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12931; CHECK-NEXT: vrndscaleps $12, %xmm0, %xmm0 {%k1} {z}2932; CHECK-NEXT: retq2933 %c = icmp eq <4 x i32> %cmp, zeroinitializer2934 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)2935 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer2936 ret <4 x float> %s2937}2938 2939define <4 x double> @nearbyint_v4f64_maskz(<4 x double> %p, <4 x i64> %cmp) {2940; CHECK-LABEL: nearbyint_v4f64_maskz:2941; CHECK: ## %bb.0:2942; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12943; CHECK-NEXT: vrndscalepd $12, %ymm0, %ymm0 {%k1} {z}2944; CHECK-NEXT: retq2945 %c = icmp eq <4 x i64> %cmp, zeroinitializer2946 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)2947 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer2948 ret <4 x double> %s2949}2950 2951define <8 x float> @nearbyint_v8f32_maskz(<8 x float> %p, <8 x i32> %cmp) {2952; CHECK-LABEL: nearbyint_v8f32_maskz:2953; CHECK: ## %bb.0:2954; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12955; CHECK-NEXT: vrndscaleps $12, %ymm0, %ymm0 {%k1} {z}2956; CHECK-NEXT: retq2957 %c = icmp eq <8 x i32> %cmp, zeroinitializer2958 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)2959 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer2960 ret <8 x float> %s2961}2962 2963define <8 x double> @nearbyint_v8f64_maskz(<8 x double> %p, <8 x i64> %cmp) {2964; CHECK-LABEL: nearbyint_v8f64_maskz:2965; CHECK: ## %bb.0:2966; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12967; CHECK-NEXT: vrndscalepd $12, %zmm0, %zmm0 {%k1} {z}2968; CHECK-NEXT: retq2969 %c = icmp eq <8 x i64> %cmp, zeroinitializer2970 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)2971 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer2972 ret <8 x double> %s2973}2974 2975define <16 x float> @nearbyint_v16f32_maskz(<16 x float> %p, <16 x i32> %cmp) {2976; CHECK-LABEL: nearbyint_v16f32_maskz:2977; CHECK: ## %bb.0:2978; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12979; CHECK-NEXT: vrndscaleps $12, %zmm0, %zmm0 {%k1} {z}2980; CHECK-NEXT: retq2981 %c = icmp eq <16 x i32> %cmp, zeroinitializer2982 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)2983 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer2984 ret <16 x float> %s2985}2986 2987define <2 x double> @nearbyint_v2f64_mask_load(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {2988; CHECK-LABEL: nearbyint_v2f64_mask_load:2989; CHECK: ## %bb.0:2990; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12991; CHECK-NEXT: vrndscalepd $12, (%rdi), %xmm0 {%k1}2992; CHECK-NEXT: retq2993 %c = icmp eq <2 x i64> %cmp, zeroinitializer2994 %p = load <2 x double>, ptr %ptr2995 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)2996 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru2997 ret <2 x double> %s2998}2999 3000define <4 x float> @nearbyint_v4f32_mask_load(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {3001; CHECK-LABEL: nearbyint_v4f32_mask_load:3002; CHECK: ## %bb.0:3003; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k13004; CHECK-NEXT: vrndscaleps $12, (%rdi), %xmm0 {%k1}3005; CHECK-NEXT: retq3006 %c = icmp eq <4 x i32> %cmp, zeroinitializer3007 %p = load <4 x float>, ptr %ptr3008 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)3009 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru3010 ret <4 x float> %s3011}3012 3013define <4 x double> @nearbyint_v4f64_mask_load(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {3014; CHECK-LABEL: nearbyint_v4f64_mask_load:3015; CHECK: ## %bb.0:3016; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k13017; CHECK-NEXT: vrndscalepd $12, (%rdi), %ymm0 {%k1}3018; CHECK-NEXT: retq3019 %c = icmp eq <4 x i64> %cmp, zeroinitializer3020 %p = load <4 x double>, ptr %ptr3021 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)3022 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru3023 ret <4 x double> %s3024}3025 3026define <8 x float> @nearbyint_v8f32_mask_load(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {3027; CHECK-LABEL: nearbyint_v8f32_mask_load:3028; CHECK: ## %bb.0:3029; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k13030; CHECK-NEXT: vrndscaleps $12, (%rdi), %ymm0 {%k1}3031; CHECK-NEXT: retq3032 %c = icmp eq <8 x i32> %cmp, zeroinitializer3033 %p = load <8 x float>, ptr %ptr3034 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)3035 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru3036 ret <8 x float> %s3037}3038 3039define <8 x double> @nearbyint_v8f64_mask_load(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {3040; CHECK-LABEL: nearbyint_v8f64_mask_load:3041; CHECK: ## %bb.0:3042; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k13043; CHECK-NEXT: vrndscalepd $12, (%rdi), %zmm0 {%k1}3044; CHECK-NEXT: retq3045 %c = icmp eq <8 x i64> %cmp, zeroinitializer3046 %p = load <8 x double>, ptr %ptr3047 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)3048 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru3049 ret <8 x double> %s3050}3051 3052define <16 x float> @nearbyint_v16f32_mask_load(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {3053; CHECK-LABEL: nearbyint_v16f32_mask_load:3054; CHECK: ## %bb.0:3055; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k13056; CHECK-NEXT: vrndscaleps $12, (%rdi), %zmm0 {%k1}3057; CHECK-NEXT: retq3058 %c = icmp eq <16 x i32> %cmp, zeroinitializer3059 %p = load <16 x float>, ptr %ptr3060 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)3061 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru3062 ret <16 x float> %s3063}3064 3065define <2 x double> @nearbyint_v2f64_maskz_load(ptr %ptr, <2 x i64> %cmp) {3066; CHECK-LABEL: nearbyint_v2f64_maskz_load:3067; CHECK: ## %bb.0:3068; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k13069; CHECK-NEXT: vrndscalepd $12, (%rdi), %xmm0 {%k1} {z}3070; CHECK-NEXT: retq3071 %c = icmp eq <2 x i64> %cmp, zeroinitializer3072 %p = load <2 x double>, ptr %ptr3073 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)3074 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer3075 ret <2 x double> %s3076}3077 3078define <4 x float> @nearbyint_v4f32_maskz_load(ptr %ptr, <4 x i32> %cmp) {3079; CHECK-LABEL: nearbyint_v4f32_maskz_load:3080; CHECK: ## %bb.0:3081; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k13082; CHECK-NEXT: vrndscaleps $12, (%rdi), %xmm0 {%k1} {z}3083; CHECK-NEXT: retq3084 %c = icmp eq <4 x i32> %cmp, zeroinitializer3085 %p = load <4 x float>, ptr %ptr3086 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)3087 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer3088 ret <4 x float> %s3089}3090 3091define <4 x double> @nearbyint_v4f64_maskz_load(ptr %ptr, <4 x i64> %cmp) {3092; CHECK-LABEL: nearbyint_v4f64_maskz_load:3093; CHECK: ## %bb.0:3094; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k13095; CHECK-NEXT: vrndscalepd $12, (%rdi), %ymm0 {%k1} {z}3096; CHECK-NEXT: retq3097 %c = icmp eq <4 x i64> %cmp, zeroinitializer3098 %p = load <4 x double>, ptr %ptr3099 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)3100 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer3101 ret <4 x double> %s3102}3103 3104define <8 x float> @nearbyint_v8f32_maskz_load(ptr %ptr, <8 x i32> %cmp) {3105; CHECK-LABEL: nearbyint_v8f32_maskz_load:3106; CHECK: ## %bb.0:3107; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k13108; CHECK-NEXT: vrndscaleps $12, (%rdi), %ymm0 {%k1} {z}3109; CHECK-NEXT: retq3110 %c = icmp eq <8 x i32> %cmp, zeroinitializer3111 %p = load <8 x float>, ptr %ptr3112 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)3113 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer3114 ret <8 x float> %s3115}3116 3117define <8 x double> @nearbyint_v8f64_maskz_load(ptr %ptr, <8 x i64> %cmp) {3118; CHECK-LABEL: nearbyint_v8f64_maskz_load:3119; CHECK: ## %bb.0:3120; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k13121; CHECK-NEXT: vrndscalepd $12, (%rdi), %zmm0 {%k1} {z}3122; CHECK-NEXT: retq3123 %c = icmp eq <8 x i64> %cmp, zeroinitializer3124 %p = load <8 x double>, ptr %ptr3125 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)3126 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer3127 ret <8 x double> %s3128}3129 3130define <16 x float> @nearbyint_v16f32_maskz_load(ptr %ptr, <16 x i32> %cmp) {3131; CHECK-LABEL: nearbyint_v16f32_maskz_load:3132; CHECK: ## %bb.0:3133; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k13134; CHECK-NEXT: vrndscaleps $12, (%rdi), %zmm0 {%k1} {z}3135; CHECK-NEXT: retq3136 %c = icmp eq <16 x i32> %cmp, zeroinitializer3137 %p = load <16 x float>, ptr %ptr3138 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)3139 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer3140 ret <16 x float> %s3141}3142 3143define <2 x double> @nearbyint_v2f64_broadcast(ptr %ptr) {3144; CHECK-LABEL: nearbyint_v2f64_broadcast:3145; CHECK: ## %bb.0:3146; CHECK-NEXT: vrndscalepd $12, (%rdi){1to2}, %xmm03147; CHECK-NEXT: retq3148 %ps = load double, ptr %ptr3149 %pins = insertelement <2 x double> undef, double %ps, i32 03150 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer3151 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)3152 ret <2 x double> %t3153}3154 3155define <4 x float> @nearbyint_v4f32_broadcast(ptr %ptr) {3156; CHECK-LABEL: nearbyint_v4f32_broadcast:3157; CHECK: ## %bb.0:3158; CHECK-NEXT: vrndscaleps $12, (%rdi){1to4}, %xmm03159; CHECK-NEXT: retq3160 %ps = load float, ptr %ptr3161 %pins = insertelement <4 x float> undef, float %ps, i32 03162 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer3163 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)3164 ret <4 x float> %t3165}3166 3167define <4 x double> @nearbyint_v4f64_broadcast(ptr %ptr){3168; CHECK-LABEL: nearbyint_v4f64_broadcast:3169; CHECK: ## %bb.0:3170; CHECK-NEXT: vrndscalepd $12, (%rdi){1to4}, %ymm03171; CHECK-NEXT: retq3172 %ps = load double, ptr %ptr3173 %pins = insertelement <4 x double> undef, double %ps, i32 03174 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer3175 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)3176 ret <4 x double> %t3177}3178 3179define <8 x float> @nearbyint_v8f32_broadcast(ptr %ptr) {3180; CHECK-LABEL: nearbyint_v8f32_broadcast:3181; CHECK: ## %bb.0:3182; CHECK-NEXT: vrndscaleps $12, (%rdi){1to8}, %ymm03183; CHECK-NEXT: retq3184 %ps = load float, ptr %ptr3185 %pins = insertelement <8 x float> undef, float %ps, i32 03186 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer3187 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)3188 ret <8 x float> %t3189}3190 3191define <8 x double> @nearbyint_v8f64_broadcast(ptr %ptr){3192; CHECK-LABEL: nearbyint_v8f64_broadcast:3193; CHECK: ## %bb.0:3194; CHECK-NEXT: vrndscalepd $12, (%rdi){1to8}, %zmm03195; CHECK-NEXT: retq3196 %ps = load double, ptr %ptr3197 %pins = insertelement <8 x double> undef, double %ps, i32 03198 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer3199 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)3200 ret <8 x double> %t3201}3202 3203define <16 x float> @nearbyint_v16f32_broadcast(ptr %ptr) {3204; CHECK-LABEL: nearbyint_v16f32_broadcast:3205; CHECK: ## %bb.0:3206; CHECK-NEXT: vrndscaleps $12, (%rdi){1to16}, %zmm03207; CHECK-NEXT: retq3208 %ps = load float, ptr %ptr3209 %pins = insertelement <16 x float> undef, float %ps, i32 03210 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer3211 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)3212 ret <16 x float> %t3213}3214 3215define <2 x double> @nearbyint_v2f64_mask_broadcast(ptr %ptr, <2 x double> %passthru, <2 x i64> %cmp) {3216; CHECK-LABEL: nearbyint_v2f64_mask_broadcast:3217; CHECK: ## %bb.0:3218; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k13219; CHECK-NEXT: vrndscalepd $12, (%rdi){1to2}, %xmm0 {%k1}3220; CHECK-NEXT: retq3221 %c = icmp eq <2 x i64> %cmp, zeroinitializer3222 %ps = load double, ptr %ptr3223 %pins = insertelement <2 x double> undef, double %ps, i32 03224 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer3225 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)3226 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> %passthru3227 ret <2 x double> %s3228}3229 3230define <4 x float> @nearbyint_v4f32_mask_broadcast(ptr %ptr, <4 x float> %passthru, <4 x i32> %cmp) {3231; CHECK-LABEL: nearbyint_v4f32_mask_broadcast:3232; CHECK: ## %bb.0:3233; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k13234; CHECK-NEXT: vrndscaleps $12, (%rdi){1to4}, %xmm0 {%k1}3235; CHECK-NEXT: retq3236 %c = icmp eq <4 x i32> %cmp, zeroinitializer3237 %ps = load float, ptr %ptr3238 %pins = insertelement <4 x float> undef, float %ps, i32 03239 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer3240 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)3241 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> %passthru3242 ret <4 x float> %s3243}3244 3245define <4 x double> @nearbyint_v4f64_mask_broadcast(ptr %ptr, <4 x double> %passthru, <4 x i64> %cmp) {3246; CHECK-LABEL: nearbyint_v4f64_mask_broadcast:3247; CHECK: ## %bb.0:3248; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k13249; CHECK-NEXT: vrndscalepd $12, (%rdi){1to4}, %ymm0 {%k1}3250; CHECK-NEXT: retq3251 %c = icmp eq <4 x i64> %cmp, zeroinitializer3252 %ps = load double, ptr %ptr3253 %pins = insertelement <4 x double> undef, double %ps, i32 03254 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer3255 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)3256 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> %passthru3257 ret <4 x double> %s3258}3259 3260define <8 x float> @nearbyint_v8f32_mask_broadcast(ptr %ptr, <8 x float> %passthru, <8 x i32> %cmp) {3261; CHECK-LABEL: nearbyint_v8f32_mask_broadcast:3262; CHECK: ## %bb.0:3263; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k13264; CHECK-NEXT: vrndscaleps $12, (%rdi){1to8}, %ymm0 {%k1}3265; CHECK-NEXT: retq3266 %c = icmp eq <8 x i32> %cmp, zeroinitializer3267 %ps = load float, ptr %ptr3268 %pins = insertelement <8 x float> undef, float %ps, i32 03269 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer3270 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)3271 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> %passthru3272 ret <8 x float> %s3273}3274 3275define <8 x double> @nearbyint_v8f64_mask_broadcast(ptr %ptr, <8 x double> %passthru, <8 x i64> %cmp) {3276; CHECK-LABEL: nearbyint_v8f64_mask_broadcast:3277; CHECK: ## %bb.0:3278; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k13279; CHECK-NEXT: vrndscalepd $12, (%rdi){1to8}, %zmm0 {%k1}3280; CHECK-NEXT: retq3281 %c = icmp eq <8 x i64> %cmp, zeroinitializer3282 %ps = load double, ptr %ptr3283 %pins = insertelement <8 x double> undef, double %ps, i32 03284 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer3285 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)3286 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> %passthru3287 ret <8 x double> %s3288}3289 3290define <16 x float> @nearbyint_v16f32_mask_broadcast(ptr %ptr, <16 x float> %passthru, <16 x i32> %cmp) {3291; CHECK-LABEL: nearbyint_v16f32_mask_broadcast:3292; CHECK: ## %bb.0:3293; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k13294; CHECK-NEXT: vrndscaleps $12, (%rdi){1to16}, %zmm0 {%k1}3295; CHECK-NEXT: retq3296 %c = icmp eq <16 x i32> %cmp, zeroinitializer3297 %ps = load float, ptr %ptr3298 %pins = insertelement <16 x float> undef, float %ps, i32 03299 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer3300 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)3301 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> %passthru3302 ret <16 x float> %s3303}3304 3305define <2 x double> @nearbyint_v2f64_maskz_broadcast(ptr %ptr, <2 x i64> %cmp) {3306; CHECK-LABEL: nearbyint_v2f64_maskz_broadcast:3307; CHECK: ## %bb.0:3308; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k13309; CHECK-NEXT: vrndscalepd $12, (%rdi){1to2}, %xmm0 {%k1} {z}3310; CHECK-NEXT: retq3311 %c = icmp eq <2 x i64> %cmp, zeroinitializer3312 %ps = load double, ptr %ptr3313 %pins = insertelement <2 x double> undef, double %ps, i32 03314 %p = shufflevector <2 x double> %pins, <2 x double> undef, <2 x i32> zeroinitializer3315 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)3316 %s = select <2 x i1> %c, <2 x double> %t, <2 x double> zeroinitializer3317 ret <2 x double> %s3318}3319 3320define <4 x float> @nearbyint_v4f32_maskz_broadcast(ptr %ptr, <4 x i32> %cmp) {3321; CHECK-LABEL: nearbyint_v4f32_maskz_broadcast:3322; CHECK: ## %bb.0:3323; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k13324; CHECK-NEXT: vrndscaleps $12, (%rdi){1to4}, %xmm0 {%k1} {z}3325; CHECK-NEXT: retq3326 %c = icmp eq <4 x i32> %cmp, zeroinitializer3327 %ps = load float, ptr %ptr3328 %pins = insertelement <4 x float> undef, float %ps, i32 03329 %p = shufflevector <4 x float> %pins, <4 x float> undef, <4 x i32> zeroinitializer3330 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)3331 %s = select <4 x i1> %c, <4 x float> %t, <4 x float> zeroinitializer3332 ret <4 x float> %s3333}3334 3335define <4 x double> @nearbyint_v4f64_maskz_broadcast(ptr %ptr, <4 x i64> %cmp) {3336; CHECK-LABEL: nearbyint_v4f64_maskz_broadcast:3337; CHECK: ## %bb.0:3338; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k13339; CHECK-NEXT: vrndscalepd $12, (%rdi){1to4}, %ymm0 {%k1} {z}3340; CHECK-NEXT: retq3341 %c = icmp eq <4 x i64> %cmp, zeroinitializer3342 %ps = load double, ptr %ptr3343 %pins = insertelement <4 x double> undef, double %ps, i32 03344 %p = shufflevector <4 x double> %pins, <4 x double> undef, <4 x i32> zeroinitializer3345 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)3346 %s = select <4 x i1> %c, <4 x double> %t, <4 x double> zeroinitializer3347 ret <4 x double> %s3348}3349 3350define <8 x float> @nearbyint_v8f32_maskz_broadcast(ptr %ptr, <8 x i32> %cmp) {3351; CHECK-LABEL: nearbyint_v8f32_maskz_broadcast:3352; CHECK: ## %bb.0:3353; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k13354; CHECK-NEXT: vrndscaleps $12, (%rdi){1to8}, %ymm0 {%k1} {z}3355; CHECK-NEXT: retq3356 %c = icmp eq <8 x i32> %cmp, zeroinitializer3357 %ps = load float, ptr %ptr3358 %pins = insertelement <8 x float> undef, float %ps, i32 03359 %p = shufflevector <8 x float> %pins, <8 x float> undef, <8 x i32> zeroinitializer3360 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)3361 %s = select <8 x i1> %c, <8 x float> %t, <8 x float> zeroinitializer3362 ret <8 x float> %s3363}3364 3365define <8 x double> @nearbyint_v8f64_maskz_broadcast(ptr %ptr, <8 x i64> %cmp) {3366; CHECK-LABEL: nearbyint_v8f64_maskz_broadcast:3367; CHECK: ## %bb.0:3368; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k13369; CHECK-NEXT: vrndscalepd $12, (%rdi){1to8}, %zmm0 {%k1} {z}3370; CHECK-NEXT: retq3371 %c = icmp eq <8 x i64> %cmp, zeroinitializer3372 %ps = load double, ptr %ptr3373 %pins = insertelement <8 x double> undef, double %ps, i32 03374 %p = shufflevector <8 x double> %pins, <8 x double> undef, <8 x i32> zeroinitializer3375 %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)3376 %s = select <8 x i1> %c, <8 x double> %t, <8 x double> zeroinitializer3377 ret <8 x double> %s3378}3379 3380define <16 x float> @nearbyint_v16f32_maskz_broadcast(ptr %ptr, <16 x i32> %cmp) {3381; CHECK-LABEL: nearbyint_v16f32_maskz_broadcast:3382; CHECK: ## %bb.0:3383; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k13384; CHECK-NEXT: vrndscaleps $12, (%rdi){1to16}, %zmm0 {%k1} {z}3385; CHECK-NEXT: retq3386 %c = icmp eq <16 x i32> %cmp, zeroinitializer3387 %ps = load float, ptr %ptr3388 %pins = insertelement <16 x float> undef, float %ps, i32 03389 %p = shufflevector <16 x float> %pins, <16 x float> undef, <16 x i32> zeroinitializer3390 %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)3391 %s = select <16 x i1> %c, <16 x float> %t, <16 x float> zeroinitializer3392 ret <16 x float> %s3393}3394