brintos

brintos / llvm-project-archived public Read only

0
0
Text · 91.9 KiB · 7f4ed33 Raw
2800 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE413; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=AVX4; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F5; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL6 7define <2 x double> @floor_v2f64(<2 x double> %p) {8; SSE41-LABEL: floor_v2f64:9; SSE41:       ## %bb.0:10; SSE41-NEXT:    roundpd $9, %xmm0, %xmm011; SSE41-NEXT:    retq12;13; AVX-LABEL: floor_v2f64:14; AVX:       ## %bb.0:15; AVX-NEXT:    vroundpd $9, %xmm0, %xmm016; AVX-NEXT:    retq17;18; AVX512-LABEL: floor_v2f64:19; AVX512:       ## %bb.0:20; AVX512-NEXT:    vroundpd $9, %xmm0, %xmm021; AVX512-NEXT:    retq22  %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)23  ret <2 x double> %t24}25declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)26 27define <4 x float> @floor_v4f32(<4 x float> %p) {28; SSE41-LABEL: floor_v4f32:29; SSE41:       ## %bb.0:30; SSE41-NEXT:    roundps $9, %xmm0, %xmm031; SSE41-NEXT:    retq32;33; AVX-LABEL: floor_v4f32:34; AVX:       ## %bb.0:35; AVX-NEXT:    vroundps $9, %xmm0, %xmm036; AVX-NEXT:    retq37;38; AVX512-LABEL: floor_v4f32:39; AVX512:       ## %bb.0:40; AVX512-NEXT:    vroundps $9, %xmm0, %xmm041; AVX512-NEXT:    retq42  %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)43  ret <4 x float> %t44}45declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)46 47define <4 x double> @floor_v4f64(<4 x double> %p){48; SSE41-LABEL: floor_v4f64:49; SSE41:       ## %bb.0:50; SSE41-NEXT:    roundpd $9, %xmm0, %xmm051; SSE41-NEXT:    roundpd $9, %xmm1, %xmm152; SSE41-NEXT:    retq53;54; AVX-LABEL: floor_v4f64:55; AVX:       ## %bb.0:56; AVX-NEXT:    vroundpd $9, %ymm0, %ymm057; AVX-NEXT:    retq58;59; AVX512-LABEL: floor_v4f64:60; AVX512:       ## %bb.0:61; AVX512-NEXT:    vroundpd $9, %ymm0, %ymm062; AVX512-NEXT:    retq63  %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)64  ret <4 x double> %t65}66declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)67 68define <8 x float> @floor_v8f32(<8 x float> %p) {69; SSE41-LABEL: floor_v8f32:70; SSE41:       ## %bb.0:71; SSE41-NEXT:    roundps $9, %xmm0, %xmm072; SSE41-NEXT:    roundps $9, %xmm1, %xmm173; SSE41-NEXT:    retq74;75; AVX-LABEL: floor_v8f32:76; AVX:       ## %bb.0:77; AVX-NEXT:    vroundps $9, %ymm0, %ymm078; AVX-NEXT:    retq79;80; AVX512-LABEL: floor_v8f32:81; AVX512:       ## %bb.0:82; AVX512-NEXT:    vroundps $9, %ymm0, %ymm083; AVX512-NEXT:    retq84  %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)85  ret <8 x float> %t86}87declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)88 89define <8 x double> @floor_v8f64(<8 x double> %p){90; SSE41-LABEL: floor_v8f64:91; SSE41:       ## %bb.0:92; SSE41-NEXT:    roundpd $9, %xmm0, %xmm093; SSE41-NEXT:    roundpd $9, %xmm1, %xmm194; SSE41-NEXT:    roundpd $9, %xmm2, %xmm295; SSE41-NEXT:    roundpd $9, %xmm3, %xmm396; SSE41-NEXT:    retq97;98; AVX-LABEL: floor_v8f64:99; AVX:       ## %bb.0:100; AVX-NEXT:    vroundpd $9, %ymm0, %ymm0101; AVX-NEXT:    vroundpd $9, %ymm1, %ymm1102; AVX-NEXT:    retq103;104; AVX512-LABEL: floor_v8f64:105; AVX512:       ## %bb.0:106; AVX512-NEXT:    vrndscalepd $9, %zmm0, %zmm0107; AVX512-NEXT:    retq108  %t = call <8 x double> @llvm.floor.v8f64(<8 x double> %p)109  ret <8 x double> %t110}111declare <8 x double> @llvm.floor.v8f64(<8 x double> %p)112 113define <16 x float> @floor_v16f32(<16 x float> %p) {114; SSE41-LABEL: floor_v16f32:115; SSE41:       ## %bb.0:116; SSE41-NEXT:    roundps $9, %xmm0, %xmm0117; SSE41-NEXT:    roundps $9, %xmm1, %xmm1118; SSE41-NEXT:    roundps $9, %xmm2, %xmm2119; SSE41-NEXT:    roundps $9, %xmm3, %xmm3120; SSE41-NEXT:    retq121;122; AVX-LABEL: floor_v16f32:123; AVX:       ## %bb.0:124; AVX-NEXT:    vroundps $9, %ymm0, %ymm0125; AVX-NEXT:    vroundps $9, %ymm1, %ymm1126; AVX-NEXT:    retq127;128; AVX512-LABEL: floor_v16f32:129; AVX512:       ## %bb.0:130; AVX512-NEXT:    vrndscaleps $9, %zmm0, %zmm0131; AVX512-NEXT:    retq132  %t = call <16 x float> @llvm.floor.v16f32(<16 x float> %p)133  ret <16 x float> %t134}135declare <16 x float> @llvm.floor.v16f32(<16 x float> %p)136 137define <2 x double> @ceil_v2f64(<2 x double> %p) {138; SSE41-LABEL: ceil_v2f64:139; SSE41:       ## %bb.0:140; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0141; SSE41-NEXT:    retq142;143; AVX-LABEL: ceil_v2f64:144; AVX:       ## %bb.0:145; AVX-NEXT:    vroundpd $10, %xmm0, %xmm0146; AVX-NEXT:    retq147;148; AVX512-LABEL: ceil_v2f64:149; AVX512:       ## %bb.0:150; AVX512-NEXT:    vroundpd $10, %xmm0, %xmm0151; AVX512-NEXT:    retq152  %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)153  ret <2 x double> %t154}155declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)156 157define <2 x double> @ceil_v2f64_load(ptr %ptr) {158; SSE41-LABEL: ceil_v2f64_load:159; SSE41:       ## %bb.0:160; SSE41-NEXT:    movupd (%rdi), %xmm0161; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0162; SSE41-NEXT:    retq163;164; AVX-LABEL: ceil_v2f64_load:165; AVX:       ## %bb.0:166; AVX-NEXT:    vroundpd $10, (%rdi), %xmm0167; AVX-NEXT:    retq168;169; AVX512-LABEL: ceil_v2f64_load:170; AVX512:       ## %bb.0:171; AVX512-NEXT:    vroundpd $10, (%rdi), %xmm0172; AVX512-NEXT:    retq173  %p = load <2 x double>, ptr %ptr, align 1174  %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)175  ret <2 x double> %t176}177 178define <4 x float> @ceil_v4f32(<4 x float> %p) {179; SSE41-LABEL: ceil_v4f32:180; SSE41:       ## %bb.0:181; SSE41-NEXT:    roundps $10, %xmm0, %xmm0182; SSE41-NEXT:    retq183;184; AVX-LABEL: ceil_v4f32:185; AVX:       ## %bb.0:186; AVX-NEXT:    vroundps $10, %xmm0, %xmm0187; AVX-NEXT:    retq188;189; AVX512-LABEL: ceil_v4f32:190; AVX512:       ## %bb.0:191; AVX512-NEXT:    vroundps $10, %xmm0, %xmm0192; AVX512-NEXT:    retq193  %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)194  ret <4 x float> %t195}196declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)197 198define <4 x float> @ceil_v4f32_load(ptr %ptr) {199; SSE41-LABEL: ceil_v4f32_load:200; SSE41:       ## %bb.0:201; SSE41-NEXT:    movups (%rdi), %xmm0202; SSE41-NEXT:    roundps $10, %xmm0, %xmm0203; SSE41-NEXT:    retq204;205; AVX-LABEL: ceil_v4f32_load:206; AVX:       ## %bb.0:207; AVX-NEXT:    vroundps $10, (%rdi), %xmm0208; AVX-NEXT:    retq209;210; AVX512-LABEL: ceil_v4f32_load:211; AVX512:       ## %bb.0:212; AVX512-NEXT:    vroundps $10, (%rdi), %xmm0213; AVX512-NEXT:    retq214  %p = load <4 x float>, ptr %ptr, align 1215  %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)216  ret <4 x float> %t217}218 219define <4 x double> @ceil_v4f64(<4 x double> %p) {220; SSE41-LABEL: ceil_v4f64:221; SSE41:       ## %bb.0:222; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0223; SSE41-NEXT:    roundpd $10, %xmm1, %xmm1224; SSE41-NEXT:    retq225;226; AVX-LABEL: ceil_v4f64:227; AVX:       ## %bb.0:228; AVX-NEXT:    vroundpd $10, %ymm0, %ymm0229; AVX-NEXT:    retq230;231; AVX512-LABEL: ceil_v4f64:232; AVX512:       ## %bb.0:233; AVX512-NEXT:    vroundpd $10, %ymm0, %ymm0234; AVX512-NEXT:    retq235  %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)236  ret <4 x double> %t237}238declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)239 240define <8 x float> @ceil_v8f32(<8 x float> %p) {241; SSE41-LABEL: ceil_v8f32:242; SSE41:       ## %bb.0:243; SSE41-NEXT:    roundps $10, %xmm0, %xmm0244; SSE41-NEXT:    roundps $10, %xmm1, %xmm1245; SSE41-NEXT:    retq246;247; AVX-LABEL: ceil_v8f32:248; AVX:       ## %bb.0:249; AVX-NEXT:    vroundps $10, %ymm0, %ymm0250; AVX-NEXT:    retq251;252; AVX512-LABEL: ceil_v8f32:253; AVX512:       ## %bb.0:254; AVX512-NEXT:    vroundps $10, %ymm0, %ymm0255; AVX512-NEXT:    retq256  %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)257  ret <8 x float> %t258}259declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)260 261define <8 x double> @ceil_v8f64(<8 x double> %p){262; SSE41-LABEL: ceil_v8f64:263; SSE41:       ## %bb.0:264; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0265; SSE41-NEXT:    roundpd $10, %xmm1, %xmm1266; SSE41-NEXT:    roundpd $10, %xmm2, %xmm2267; SSE41-NEXT:    roundpd $10, %xmm3, %xmm3268; SSE41-NEXT:    retq269;270; AVX-LABEL: ceil_v8f64:271; AVX:       ## %bb.0:272; AVX-NEXT:    vroundpd $10, %ymm0, %ymm0273; AVX-NEXT:    vroundpd $10, %ymm1, %ymm1274; AVX-NEXT:    retq275;276; AVX512-LABEL: ceil_v8f64:277; AVX512:       ## %bb.0:278; AVX512-NEXT:    vrndscalepd $10, %zmm0, %zmm0279; AVX512-NEXT:    retq280  %t = call <8 x double> @llvm.ceil.v8f64(<8 x double> %p)281  ret <8 x double> %t282}283declare <8 x double> @llvm.ceil.v8f64(<8 x double> %p)284 285define <16 x float> @ceil_v16f32(<16 x float> %p) {286; SSE41-LABEL: ceil_v16f32:287; SSE41:       ## %bb.0:288; SSE41-NEXT:    roundps $10, %xmm0, %xmm0289; SSE41-NEXT:    roundps $10, %xmm1, %xmm1290; SSE41-NEXT:    roundps $10, %xmm2, %xmm2291; SSE41-NEXT:    roundps $10, %xmm3, %xmm3292; SSE41-NEXT:    retq293;294; AVX-LABEL: ceil_v16f32:295; AVX:       ## %bb.0:296; AVX-NEXT:    vroundps $10, %ymm0, %ymm0297; AVX-NEXT:    vroundps $10, %ymm1, %ymm1298; AVX-NEXT:    retq299;300; AVX512-LABEL: ceil_v16f32:301; AVX512:       ## %bb.0:302; AVX512-NEXT:    vrndscaleps $10, %zmm0, %zmm0303; AVX512-NEXT:    retq304  %t = call <16 x float> @llvm.ceil.v16f32(<16 x float> %p)305  ret <16 x float> %t306}307declare <16 x float> @llvm.ceil.v16f32(<16 x float> %p)308 309define <2 x double> @trunc_v2f64(<2 x double> %p) {310; SSE41-LABEL: trunc_v2f64:311; SSE41:       ## %bb.0:312; SSE41-NEXT:    roundpd $11, %xmm0, %xmm0313; SSE41-NEXT:    retq314;315; AVX-LABEL: trunc_v2f64:316; AVX:       ## %bb.0:317; AVX-NEXT:    vroundpd $11, %xmm0, %xmm0318; AVX-NEXT:    retq319;320; AVX512-LABEL: trunc_v2f64:321; AVX512:       ## %bb.0:322; AVX512-NEXT:    vroundpd $11, %xmm0, %xmm0323; AVX512-NEXT:    retq324  %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)325  ret <2 x double> %t326}327declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)328 329define <4 x float> @trunc_v4f32(<4 x float> %p) {330; SSE41-LABEL: trunc_v4f32:331; SSE41:       ## %bb.0:332; SSE41-NEXT:    roundps $11, %xmm0, %xmm0333; SSE41-NEXT:    retq334;335; AVX-LABEL: trunc_v4f32:336; AVX:       ## %bb.0:337; AVX-NEXT:    vroundps $11, %xmm0, %xmm0338; AVX-NEXT:    retq339;340; AVX512-LABEL: trunc_v4f32:341; AVX512:       ## %bb.0:342; AVX512-NEXT:    vroundps $11, %xmm0, %xmm0343; AVX512-NEXT:    retq344  %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)345  ret <4 x float> %t346}347declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)348 349define <4 x double> @trunc_v4f64(<4 x double> %p) {350; SSE41-LABEL: trunc_v4f64:351; SSE41:       ## %bb.0:352; SSE41-NEXT:    roundpd $11, %xmm0, %xmm0353; SSE41-NEXT:    roundpd $11, %xmm1, %xmm1354; SSE41-NEXT:    retq355;356; AVX-LABEL: trunc_v4f64:357; AVX:       ## %bb.0:358; AVX-NEXT:    vroundpd $11, %ymm0, %ymm0359; AVX-NEXT:    retq360;361; AVX512-LABEL: trunc_v4f64:362; AVX512:       ## %bb.0:363; AVX512-NEXT:    vroundpd $11, %ymm0, %ymm0364; AVX512-NEXT:    retq365  %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)366  ret <4 x double> %t367}368declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)369 370define <8 x float> @trunc_v8f32(<8 x float> %p) {371; SSE41-LABEL: trunc_v8f32:372; SSE41:       ## %bb.0:373; SSE41-NEXT:    roundps $11, %xmm0, %xmm0374; SSE41-NEXT:    roundps $11, %xmm1, %xmm1375; SSE41-NEXT:    retq376;377; AVX-LABEL: trunc_v8f32:378; AVX:       ## %bb.0:379; AVX-NEXT:    vroundps $11, %ymm0, %ymm0380; AVX-NEXT:    retq381;382; AVX512-LABEL: trunc_v8f32:383; AVX512:       ## %bb.0:384; AVX512-NEXT:    vroundps $11, %ymm0, %ymm0385; AVX512-NEXT:    retq386  %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)387  ret <8 x float> %t388}389declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)390 391define <8 x double> @trunc_v8f64(<8 x double> %p){392; SSE41-LABEL: trunc_v8f64:393; SSE41:       ## %bb.0:394; SSE41-NEXT:    roundpd $11, %xmm0, %xmm0395; SSE41-NEXT:    roundpd $11, %xmm1, %xmm1396; SSE41-NEXT:    roundpd $11, %xmm2, %xmm2397; SSE41-NEXT:    roundpd $11, %xmm3, %xmm3398; SSE41-NEXT:    retq399;400; AVX-LABEL: trunc_v8f64:401; AVX:       ## %bb.0:402; AVX-NEXT:    vroundpd $11, %ymm0, %ymm0403; AVX-NEXT:    vroundpd $11, %ymm1, %ymm1404; AVX-NEXT:    retq405;406; AVX512-LABEL: trunc_v8f64:407; AVX512:       ## %bb.0:408; AVX512-NEXT:    vrndscalepd $11, %zmm0, %zmm0409; AVX512-NEXT:    retq410  %t = call <8 x double> @llvm.trunc.v8f64(<8 x double> %p)411  ret <8 x double> %t412}413declare <8 x double> @llvm.trunc.v8f64(<8 x double> %p)414 415define <16 x float> @trunc_v16f32(<16 x float> %p) {416; SSE41-LABEL: trunc_v16f32:417; SSE41:       ## %bb.0:418; SSE41-NEXT:    roundps $11, %xmm0, %xmm0419; SSE41-NEXT:    roundps $11, %xmm1, %xmm1420; SSE41-NEXT:    roundps $11, %xmm2, %xmm2421; SSE41-NEXT:    roundps $11, %xmm3, %xmm3422; SSE41-NEXT:    retq423;424; AVX-LABEL: trunc_v16f32:425; AVX:       ## %bb.0:426; AVX-NEXT:    vroundps $11, %ymm0, %ymm0427; AVX-NEXT:    vroundps $11, %ymm1, %ymm1428; AVX-NEXT:    retq429;430; AVX512-LABEL: trunc_v16f32:431; AVX512:       ## %bb.0:432; AVX512-NEXT:    vrndscaleps $11, %zmm0, %zmm0433; AVX512-NEXT:    retq434  %t = call <16 x float> @llvm.trunc.v16f32(<16 x float> %p)435  ret <16 x float> %t436}437declare <16 x float> @llvm.trunc.v16f32(<16 x float> %p)438 439define <2 x double> @rint_v2f64(<2 x double> %p) {440; SSE41-LABEL: rint_v2f64:441; SSE41:       ## %bb.0:442; SSE41-NEXT:    roundpd $4, %xmm0, %xmm0443; SSE41-NEXT:    retq444;445; AVX-LABEL: rint_v2f64:446; AVX:       ## %bb.0:447; AVX-NEXT:    vroundpd $4, %xmm0, %xmm0448; AVX-NEXT:    retq449;450; AVX512-LABEL: rint_v2f64:451; AVX512:       ## %bb.0:452; AVX512-NEXT:    vroundpd $4, %xmm0, %xmm0453; AVX512-NEXT:    retq454  %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)455  ret <2 x double> %t456}457declare <2 x double> @llvm.rint.v2f64(<2 x double> %p)458 459define <4 x float> @rint_v4f32(<4 x float> %p) {460; SSE41-LABEL: rint_v4f32:461; SSE41:       ## %bb.0:462; SSE41-NEXT:    roundps $4, %xmm0, %xmm0463; SSE41-NEXT:    retq464;465; AVX-LABEL: rint_v4f32:466; AVX:       ## %bb.0:467; AVX-NEXT:    vroundps $4, %xmm0, %xmm0468; AVX-NEXT:    retq469;470; AVX512-LABEL: rint_v4f32:471; AVX512:       ## %bb.0:472; AVX512-NEXT:    vroundps $4, %xmm0, %xmm0473; AVX512-NEXT:    retq474  %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)475  ret <4 x float> %t476}477declare <4 x float> @llvm.rint.v4f32(<4 x float> %p)478 479define <4 x double> @rint_v4f64(<4 x double> %p) {480; SSE41-LABEL: rint_v4f64:481; SSE41:       ## %bb.0:482; SSE41-NEXT:    roundpd $4, %xmm0, %xmm0483; SSE41-NEXT:    roundpd $4, %xmm1, %xmm1484; SSE41-NEXT:    retq485;486; AVX-LABEL: rint_v4f64:487; AVX:       ## %bb.0:488; AVX-NEXT:    vroundpd $4, %ymm0, %ymm0489; AVX-NEXT:    retq490;491; AVX512-LABEL: rint_v4f64:492; AVX512:       ## %bb.0:493; AVX512-NEXT:    vroundpd $4, %ymm0, %ymm0494; AVX512-NEXT:    retq495  %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)496  ret <4 x double> %t497}498declare <4 x double> @llvm.rint.v4f64(<4 x double> %p)499 500define <8 x float> @rint_v8f32(<8 x float> %p) {501; SSE41-LABEL: rint_v8f32:502; SSE41:       ## %bb.0:503; SSE41-NEXT:    roundps $4, %xmm0, %xmm0504; SSE41-NEXT:    roundps $4, %xmm1, %xmm1505; SSE41-NEXT:    retq506;507; AVX-LABEL: rint_v8f32:508; AVX:       ## %bb.0:509; AVX-NEXT:    vroundps $4, %ymm0, %ymm0510; AVX-NEXT:    retq511;512; AVX512-LABEL: rint_v8f32:513; AVX512:       ## %bb.0:514; AVX512-NEXT:    vroundps $4, %ymm0, %ymm0515; AVX512-NEXT:    retq516  %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)517  ret <8 x float> %t518}519declare <8 x float> @llvm.rint.v8f32(<8 x float> %p)520 521define <8 x double> @rint_v8f64(<8 x double> %p){522; SSE41-LABEL: rint_v8f64:523; SSE41:       ## %bb.0:524; SSE41-NEXT:    roundpd $4, %xmm0, %xmm0525; SSE41-NEXT:    roundpd $4, %xmm1, %xmm1526; SSE41-NEXT:    roundpd $4, %xmm2, %xmm2527; SSE41-NEXT:    roundpd $4, %xmm3, %xmm3528; SSE41-NEXT:    retq529;530; AVX-LABEL: rint_v8f64:531; AVX:       ## %bb.0:532; AVX-NEXT:    vroundpd $4, %ymm0, %ymm0533; AVX-NEXT:    vroundpd $4, %ymm1, %ymm1534; AVX-NEXT:    retq535;536; AVX512-LABEL: rint_v8f64:537; AVX512:       ## %bb.0:538; AVX512-NEXT:    vrndscalepd $4, %zmm0, %zmm0539; AVX512-NEXT:    retq540  %t = call <8 x double> @llvm.rint.v8f64(<8 x double> %p)541  ret <8 x double> %t542}543declare <8 x double> @llvm.rint.v8f64(<8 x double> %p)544 545define <16 x float> @rint_v16f32(<16 x float> %p) {546; SSE41-LABEL: rint_v16f32:547; SSE41:       ## %bb.0:548; SSE41-NEXT:    roundps $4, %xmm0, %xmm0549; SSE41-NEXT:    roundps $4, %xmm1, %xmm1550; SSE41-NEXT:    roundps $4, %xmm2, %xmm2551; SSE41-NEXT:    roundps $4, %xmm3, %xmm3552; SSE41-NEXT:    retq553;554; AVX-LABEL: rint_v16f32:555; AVX:       ## %bb.0:556; AVX-NEXT:    vroundps $4, %ymm0, %ymm0557; AVX-NEXT:    vroundps $4, %ymm1, %ymm1558; AVX-NEXT:    retq559;560; AVX512-LABEL: rint_v16f32:561; AVX512:       ## %bb.0:562; AVX512-NEXT:    vrndscaleps $4, %zmm0, %zmm0563; AVX512-NEXT:    retq564  %t = call <16 x float> @llvm.rint.v16f32(<16 x float> %p)565  ret <16 x float> %t566}567declare <16 x float> @llvm.rint.v16f32(<16 x float> %p)568 569define <2 x double> @nearbyint_v2f64(<2 x double> %p) {570; SSE41-LABEL: nearbyint_v2f64:571; SSE41:       ## %bb.0:572; SSE41-NEXT:    roundpd $12, %xmm0, %xmm0573; SSE41-NEXT:    retq574;575; AVX-LABEL: nearbyint_v2f64:576; AVX:       ## %bb.0:577; AVX-NEXT:    vroundpd $12, %xmm0, %xmm0578; AVX-NEXT:    retq579;580; AVX512-LABEL: nearbyint_v2f64:581; AVX512:       ## %bb.0:582; AVX512-NEXT:    vroundpd $12, %xmm0, %xmm0583; AVX512-NEXT:    retq584  %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)585  ret <2 x double> %t586}587declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)588 589define <4 x float> @nearbyint_v4f32(<4 x float> %p) {590; SSE41-LABEL: nearbyint_v4f32:591; SSE41:       ## %bb.0:592; SSE41-NEXT:    roundps $12, %xmm0, %xmm0593; SSE41-NEXT:    retq594;595; AVX-LABEL: nearbyint_v4f32:596; AVX:       ## %bb.0:597; AVX-NEXT:    vroundps $12, %xmm0, %xmm0598; AVX-NEXT:    retq599;600; AVX512-LABEL: nearbyint_v4f32:601; AVX512:       ## %bb.0:602; AVX512-NEXT:    vroundps $12, %xmm0, %xmm0603; AVX512-NEXT:    retq604  %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)605  ret <4 x float> %t606}607declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)608 609define <4 x double> @nearbyint_v4f64(<4 x double> %p) {610; SSE41-LABEL: nearbyint_v4f64:611; SSE41:       ## %bb.0:612; SSE41-NEXT:    roundpd $12, %xmm0, %xmm0613; SSE41-NEXT:    roundpd $12, %xmm1, %xmm1614; SSE41-NEXT:    retq615;616; AVX-LABEL: nearbyint_v4f64:617; AVX:       ## %bb.0:618; AVX-NEXT:    vroundpd $12, %ymm0, %ymm0619; AVX-NEXT:    retq620;621; AVX512-LABEL: nearbyint_v4f64:622; AVX512:       ## %bb.0:623; AVX512-NEXT:    vroundpd $12, %ymm0, %ymm0624; AVX512-NEXT:    retq625  %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)626  ret <4 x double> %t627}628declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)629 630define <8 x float> @nearbyint_v8f32(<8 x float> %p) {631; SSE41-LABEL: nearbyint_v8f32:632; SSE41:       ## %bb.0:633; SSE41-NEXT:    roundps $12, %xmm0, %xmm0634; SSE41-NEXT:    roundps $12, %xmm1, %xmm1635; SSE41-NEXT:    retq636;637; AVX-LABEL: nearbyint_v8f32:638; AVX:       ## %bb.0:639; AVX-NEXT:    vroundps $12, %ymm0, %ymm0640; AVX-NEXT:    retq641;642; AVX512-LABEL: nearbyint_v8f32:643; AVX512:       ## %bb.0:644; AVX512-NEXT:    vroundps $12, %ymm0, %ymm0645; AVX512-NEXT:    retq646  %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)647  ret <8 x float> %t648}649declare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)650 651define <8 x double> @nearbyint_v8f64(<8 x double> %p){652; SSE41-LABEL: nearbyint_v8f64:653; SSE41:       ## %bb.0:654; SSE41-NEXT:    roundpd $12, %xmm0, %xmm0655; SSE41-NEXT:    roundpd $12, %xmm1, %xmm1656; SSE41-NEXT:    roundpd $12, %xmm2, %xmm2657; SSE41-NEXT:    roundpd $12, %xmm3, %xmm3658; SSE41-NEXT:    retq659;660; AVX-LABEL: nearbyint_v8f64:661; AVX:       ## %bb.0:662; AVX-NEXT:    vroundpd $12, %ymm0, %ymm0663; AVX-NEXT:    vroundpd $12, %ymm1, %ymm1664; AVX-NEXT:    retq665;666; AVX512-LABEL: nearbyint_v8f64:667; AVX512:       ## %bb.0:668; AVX512-NEXT:    vrndscalepd $12, %zmm0, %zmm0669; AVX512-NEXT:    retq670  %t = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)671  ret <8 x double> %t672}673declare <8 x double> @llvm.nearbyint.v8f64(<8 x double> %p)674 675define <16 x float> @nearbyint_v16f32(<16 x float> %p) {676; SSE41-LABEL: nearbyint_v16f32:677; SSE41:       ## %bb.0:678; SSE41-NEXT:    roundps $12, %xmm0, %xmm0679; SSE41-NEXT:    roundps $12, %xmm1, %xmm1680; SSE41-NEXT:    roundps $12, %xmm2, %xmm2681; SSE41-NEXT:    roundps $12, %xmm3, %xmm3682; SSE41-NEXT:    retq683;684; AVX-LABEL: nearbyint_v16f32:685; AVX:       ## %bb.0:686; AVX-NEXT:    vroundps $12, %ymm0, %ymm0687; AVX-NEXT:    vroundps $12, %ymm1, %ymm1688; AVX-NEXT:    retq689;690; AVX512-LABEL: nearbyint_v16f32:691; AVX512:       ## %bb.0:692; AVX512-NEXT:    vrndscaleps $12, %zmm0, %zmm0693; AVX512-NEXT:    retq694  %t = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)695  ret <16 x float> %t696}697declare <16 x float> @llvm.nearbyint.v16f32(<16 x float> %p)698 699;700; Constant Folding701;702 703define <2 x double> @const_floor_v2f64() {704; SSE41-LABEL: const_floor_v2f64:705; SSE41:       ## %bb.0:706; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-2.0E+0,2.0E+0]707; SSE41-NEXT:    retq708;709; AVX-LABEL: const_floor_v2f64:710; AVX:       ## %bb.0:711; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-2.0E+0,2.0E+0]712; AVX-NEXT:    retq713;714; AVX512-LABEL: const_floor_v2f64:715; AVX512:       ## %bb.0:716; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-2.0E+0,2.0E+0]717; AVX512-NEXT:    retq718  %t = call <2 x double> @llvm.floor.v2f64(<2 x double> <double -1.5, double 2.5>)719  ret <2 x double> %t720}721 722define <4 x float> @const_floor_v4f32() {723; SSE41-LABEL: const_floor_v4f32:724; SSE41:       ## %bb.0:725; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-4.0E+0,6.0E+0,-9.0E+0,2.0E+0]726; SSE41-NEXT:    retq727;728; AVX-LABEL: const_floor_v4f32:729; AVX:       ## %bb.0:730; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-4.0E+0,6.0E+0,-9.0E+0,2.0E+0]731; AVX-NEXT:    retq732;733; AVX512-LABEL: const_floor_v4f32:734; AVX512:       ## %bb.0:735; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-4.0E+0,6.0E+0,-9.0E+0,2.0E+0]736; AVX512-NEXT:    retq737  %t = call <4 x float> @llvm.floor.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)738  ret <4 x float> %t739}740 741define <2 x double> @const_ceil_v2f64() {742; SSE41-LABEL: const_ceil_v2f64:743; SSE41:       ## %bb.0:744; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-1.0E+0,3.0E+0]745; SSE41-NEXT:    retq746;747; AVX-LABEL: const_ceil_v2f64:748; AVX:       ## %bb.0:749; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.0E+0,3.0E+0]750; AVX-NEXT:    retq751;752; AVX512-LABEL: const_ceil_v2f64:753; AVX512:       ## %bb.0:754; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.0E+0,3.0E+0]755; AVX512-NEXT:    retq756  %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> <double -1.5, double 2.5>)757  ret <2 x double> %t758}759 760define <4 x float> @const_ceil_v4f32() {761; SSE41-LABEL: const_ceil_v4f32:762; SSE41:       ## %bb.0:763; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,3.0E+0]764; SSE41-NEXT:    retq765;766; AVX-LABEL: const_ceil_v4f32:767; AVX:       ## %bb.0:768; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,3.0E+0]769; AVX-NEXT:    retq770;771; AVX512-LABEL: const_ceil_v4f32:772; AVX512:       ## %bb.0:773; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,3.0E+0]774; AVX512-NEXT:    retq775  %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)776  ret <4 x float> %t777}778 779define <2 x double> @const_trunc_v2f64() {780; SSE41-LABEL: const_trunc_v2f64:781; SSE41:       ## %bb.0:782; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-1.0E+0,2.0E+0]783; SSE41-NEXT:    retq784;785; AVX-LABEL: const_trunc_v2f64:786; AVX:       ## %bb.0:787; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.0E+0,2.0E+0]788; AVX-NEXT:    retq789;790; AVX512-LABEL: const_trunc_v2f64:791; AVX512:       ## %bb.0:792; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.0E+0,2.0E+0]793; AVX512-NEXT:    retq794  %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> <double -1.5, double 2.5>)795  ret <2 x double> %t796}797 798define <4 x float> @const_trunc_v4f32() {799; SSE41-LABEL: const_trunc_v4f32:800; SSE41:       ## %bb.0:801; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,2.0E+0]802; SSE41-NEXT:    retq803;804; AVX-LABEL: const_trunc_v4f32:805; AVX:       ## %bb.0:806; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,2.0E+0]807; AVX-NEXT:    retq808;809; AVX512-LABEL: const_trunc_v4f32:810; AVX512:       ## %bb.0:811; AVX512-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.0E+0,6.0E+0,-9.0E+0,2.0E+0]812; AVX512-NEXT:    retq813  %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)814  ret <4 x float> %t815}816 817;818; Scalar and masked instructions819;820 821define <4 x float> @floor_ss(<4 x float> %x, <4 x float> %y) nounwind {822; SSE41-LABEL: floor_ss:823; SSE41:       ## %bb.0:824; SSE41-NEXT:    roundss $9, %xmm0, %xmm0825; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]826; SSE41-NEXT:    retq827;828; AVX-LABEL: floor_ss:829; AVX:       ## %bb.0:830; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm0831; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]832; AVX-NEXT:    retq833;834; AVX512-LABEL: floor_ss:835; AVX512:       ## %bb.0:836; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm0837; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]838; AVX512-NEXT:    retq839  %s = extractelement <4 x float> %x, i32 0840  %call = call float @llvm.floor.f32(float %s)841  %res = insertelement <4 x float> %y, float %call, i32 0842  ret <4 x float> %res843}844declare float @llvm.floor.f32(float %s)845 846define <2 x double> @floor_sd(<2 x double> %x, <2 x double> %y) nounwind {847; SSE41-LABEL: floor_sd:848; SSE41:       ## %bb.0:849; SSE41-NEXT:    roundsd $9, %xmm0, %xmm0850; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]851; SSE41-NEXT:    retq852;853; AVX-LABEL: floor_sd:854; AVX:       ## %bb.0:855; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm0856; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]857; AVX-NEXT:    retq858;859; AVX512-LABEL: floor_sd:860; AVX512:       ## %bb.0:861; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm0862; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]863; AVX512-NEXT:    retq864  %s = extractelement <2 x double> %x, i32 0865  %call = call double @llvm.floor.f64(double %s)866  %res = insertelement <2 x double> %y, double %call, i32 0867  ret <2 x double> %res868}869declare double @llvm.floor.f64(double %s)870 871define <4 x float> @floor_mask_128_ps(<4 x float> %x, <4 x float> %y) nounwind {872; SSE41-LABEL: floor_mask_128_ps:873; SSE41:       ## %bb.0:874; SSE41-NEXT:    roundps $9, %xmm0, %xmm2875; SSE41-NEXT:    cmpeqps %xmm1, %xmm0876; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm1877; SSE41-NEXT:    movaps %xmm1, %xmm0878; SSE41-NEXT:    retq879;880; AVX-LABEL: floor_mask_128_ps:881; AVX:       ## %bb.0:882; AVX-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm2883; AVX-NEXT:    vroundps $9, %xmm0, %xmm0884; AVX-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0885; AVX-NEXT:    retq886;887; AVX512F-LABEL: floor_mask_128_ps:888; AVX512F:       ## %bb.0:889; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1890; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0891; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k1892; AVX512F-NEXT:    vroundps $9, %xmm0, %xmm0893; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}894; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0895; AVX512F-NEXT:    vzeroupper896; AVX512F-NEXT:    retq897;898; AVX512VL-LABEL: floor_mask_128_ps:899; AVX512VL:       ## %bb.0:900; AVX512VL-NEXT:    vcmpeqps %xmm1, %xmm0, %k1901; AVX512VL-NEXT:    vrndscaleps $9, %xmm0, %xmm1 {%k1}902; AVX512VL-NEXT:    vmovaps %xmm1, %xmm0903; AVX512VL-NEXT:    retq904  %k = fcmp oeq <4 x float> %x, %y905  %call = call <4 x float> @llvm.floor.v4f32(<4 x float> %x)906  %res = select <4 x i1> %k, <4 x float> %call, <4 x float> %y907  ret <4 x float> %res908}909 910define <4 x float> @floor_maskz_128_ps(<4 x float> %x, <4 x float> %y) nounwind {911; SSE41-LABEL: floor_maskz_128_ps:912; SSE41:       ## %bb.0:913; SSE41-NEXT:    cmpeqps %xmm0, %xmm1914; SSE41-NEXT:    roundps $9, %xmm0, %xmm0915; SSE41-NEXT:    andps %xmm1, %xmm0916; SSE41-NEXT:    retq917;918; AVX-LABEL: floor_maskz_128_ps:919; AVX:       ## %bb.0:920; AVX-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm1921; AVX-NEXT:    vroundps $9, %xmm0, %xmm0922; AVX-NEXT:    vandps %xmm0, %xmm1, %xmm0923; AVX-NEXT:    retq924;925; AVX512F-LABEL: floor_maskz_128_ps:926; AVX512F:       ## %bb.0:927; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1928; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0929; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k1930; AVX512F-NEXT:    vroundps $9, %xmm0, %xmm0931; AVX512F-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}932; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0933; AVX512F-NEXT:    vzeroupper934; AVX512F-NEXT:    retq935;936; AVX512VL-LABEL: floor_maskz_128_ps:937; AVX512VL:       ## %bb.0:938; AVX512VL-NEXT:    vcmpeqps %xmm1, %xmm0, %k1939; AVX512VL-NEXT:    vrndscaleps $9, %xmm0, %xmm0 {%k1} {z}940; AVX512VL-NEXT:    retq941  %k = fcmp oeq <4 x float> %x, %y942  %call = call <4 x float> @llvm.floor.v4f32(<4 x float> %x)943  %res = select <4 x i1> %k, <4 x float> %call, <4 x float> zeroinitializer944  ret <4 x float> %res945}946 947define <2 x double> @floor_mask_128_pd(<2 x double> %x, <2 x double> %y) nounwind {948; SSE41-LABEL: floor_mask_128_pd:949; SSE41:       ## %bb.0:950; SSE41-NEXT:    roundpd $9, %xmm0, %xmm2951; SSE41-NEXT:    cmpeqpd %xmm1, %xmm0952; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1953; SSE41-NEXT:    movapd %xmm1, %xmm0954; SSE41-NEXT:    retq955;956; AVX-LABEL: floor_mask_128_pd:957; AVX:       ## %bb.0:958; AVX-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm2959; AVX-NEXT:    vroundpd $9, %xmm0, %xmm0960; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0961; AVX-NEXT:    retq962;963; AVX512F-LABEL: floor_mask_128_pd:964; AVX512F:       ## %bb.0:965; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1966; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0967; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1968; AVX512F-NEXT:    vroundpd $9, %xmm0, %xmm0969; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}970; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0971; AVX512F-NEXT:    vzeroupper972; AVX512F-NEXT:    retq973;974; AVX512VL-LABEL: floor_mask_128_pd:975; AVX512VL:       ## %bb.0:976; AVX512VL-NEXT:    vcmpeqpd %xmm1, %xmm0, %k1977; AVX512VL-NEXT:    vrndscalepd $9, %xmm0, %xmm1 {%k1}978; AVX512VL-NEXT:    vmovapd %xmm1, %xmm0979; AVX512VL-NEXT:    retq980  %k = fcmp oeq <2 x double> %x, %y981  %call = call <2 x double> @llvm.floor.v2f64(<2 x double> %x)982  %res = select <2 x i1> %k, <2 x double> %call, <2 x double> %y983  ret <2 x double> %res984}985 986define <2 x double> @floor_maskz_128_pd(<2 x double> %x, <2 x double> %y) nounwind {987; SSE41-LABEL: floor_maskz_128_pd:988; SSE41:       ## %bb.0:989; SSE41-NEXT:    cmpeqpd %xmm0, %xmm1990; SSE41-NEXT:    roundpd $9, %xmm0, %xmm0991; SSE41-NEXT:    andpd %xmm1, %xmm0992; SSE41-NEXT:    retq993;994; AVX-LABEL: floor_maskz_128_pd:995; AVX:       ## %bb.0:996; AVX-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1997; AVX-NEXT:    vroundpd $9, %xmm0, %xmm0998; AVX-NEXT:    vandpd %xmm0, %xmm1, %xmm0999; AVX-NEXT:    retq1000;1001; AVX512F-LABEL: floor_maskz_128_pd:1002; AVX512F:       ## %bb.0:1003; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm11004; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm01005; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11006; AVX512F-NEXT:    vroundpd $9, %xmm0, %xmm01007; AVX512F-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}1008; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01009; AVX512F-NEXT:    vzeroupper1010; AVX512F-NEXT:    retq1011;1012; AVX512VL-LABEL: floor_maskz_128_pd:1013; AVX512VL:       ## %bb.0:1014; AVX512VL-NEXT:    vcmpeqpd %xmm1, %xmm0, %k11015; AVX512VL-NEXT:    vrndscalepd $9, %xmm0, %xmm0 {%k1} {z}1016; AVX512VL-NEXT:    retq1017  %k = fcmp oeq <2 x double> %x, %y1018  %call = call <2 x double> @llvm.floor.v2f64(<2 x double> %x)1019  %res = select <2 x i1> %k, <2 x double> %call, <2 x double> zeroinitializer1020  ret <2 x double> %res1021}1022 1023define <8 x float> @floor_mask_256_ps(<8 x float> %x, <8 x float> %y) nounwind {1024; SSE41-LABEL: floor_mask_256_ps:1025; SSE41:       ## %bb.0:1026; SSE41-NEXT:    roundps $9, %xmm1, %xmm41027; SSE41-NEXT:    cmpeqps %xmm3, %xmm11028; SSE41-NEXT:    roundps $9, %xmm0, %xmm51029; SSE41-NEXT:    cmpeqps %xmm2, %xmm01030; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm21031; SSE41-NEXT:    movaps %xmm1, %xmm01032; SSE41-NEXT:    blendvps %xmm0, %xmm4, %xmm31033; SSE41-NEXT:    movaps %xmm2, %xmm01034; SSE41-NEXT:    movaps %xmm3, %xmm11035; SSE41-NEXT:    retq1036;1037; AVX-LABEL: floor_mask_256_ps:1038; AVX:       ## %bb.0:1039; AVX-NEXT:    vcmpeqps %ymm1, %ymm0, %ymm21040; AVX-NEXT:    vroundps $9, %ymm0, %ymm01041; AVX-NEXT:    vblendvps %ymm2, %ymm0, %ymm1, %ymm01042; AVX-NEXT:    retq1043;1044; AVX512F-LABEL: floor_mask_256_ps:1045; AVX512F:       ## %bb.0:1046; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm11047; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm01048; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k11049; AVX512F-NEXT:    vroundps $9, %ymm0, %ymm01050; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}1051; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm01052; AVX512F-NEXT:    retq1053;1054; AVX512VL-LABEL: floor_mask_256_ps:1055; AVX512VL:       ## %bb.0:1056; AVX512VL-NEXT:    vcmpeqps %ymm1, %ymm0, %k11057; AVX512VL-NEXT:    vrndscaleps $9, %ymm0, %ymm1 {%k1}1058; AVX512VL-NEXT:    vmovaps %ymm1, %ymm01059; AVX512VL-NEXT:    retq1060  %k = fcmp oeq <8 x float> %x, %y1061  %call = call <8 x float> @llvm.floor.v8f32(<8 x float> %x)1062  %res = select <8 x i1> %k, <8 x float> %call, <8 x float> %y1063  ret <8 x float> %res1064}1065 1066define <8 x float> @floor_maskz_256_ps(<8 x float> %x, <8 x float> %y) nounwind {1067; SSE41-LABEL: floor_maskz_256_ps:1068; SSE41:       ## %bb.0:1069; SSE41-NEXT:    cmpeqps %xmm1, %xmm31070; SSE41-NEXT:    cmpeqps %xmm0, %xmm21071; SSE41-NEXT:    roundps $9, %xmm1, %xmm11072; SSE41-NEXT:    andps %xmm3, %xmm11073; SSE41-NEXT:    roundps $9, %xmm0, %xmm01074; SSE41-NEXT:    andps %xmm2, %xmm01075; SSE41-NEXT:    retq1076;1077; AVX-LABEL: floor_maskz_256_ps:1078; AVX:       ## %bb.0:1079; AVX-NEXT:    vcmpeqps %ymm1, %ymm0, %ymm11080; AVX-NEXT:    vroundps $9, %ymm0, %ymm01081; AVX-NEXT:    vandps %ymm0, %ymm1, %ymm01082; AVX-NEXT:    retq1083;1084; AVX512F-LABEL: floor_maskz_256_ps:1085; AVX512F:       ## %bb.0:1086; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm11087; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm01088; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k11089; AVX512F-NEXT:    vroundps $9, %ymm0, %ymm01090; AVX512F-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}1091; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm01092; AVX512F-NEXT:    retq1093;1094; AVX512VL-LABEL: floor_maskz_256_ps:1095; AVX512VL:       ## %bb.0:1096; AVX512VL-NEXT:    vcmpeqps %ymm1, %ymm0, %k11097; AVX512VL-NEXT:    vrndscaleps $9, %ymm0, %ymm0 {%k1} {z}1098; AVX512VL-NEXT:    retq1099  %k = fcmp oeq <8 x float> %x, %y1100  %call = call <8 x float> @llvm.floor.v8f32(<8 x float> %x)1101  %res = select <8 x i1> %k, <8 x float> %call, <8 x float> zeroinitializer1102  ret <8 x float> %res1103}1104 1105define <4 x double> @floor_mask_256_pd(<4 x double> %x, <4 x double> %y) nounwind {1106; SSE41-LABEL: floor_mask_256_pd:1107; SSE41:       ## %bb.0:1108; SSE41-NEXT:    roundpd $9, %xmm1, %xmm41109; SSE41-NEXT:    cmpeqpd %xmm3, %xmm11110; SSE41-NEXT:    roundpd $9, %xmm0, %xmm51111; SSE41-NEXT:    cmpeqpd %xmm2, %xmm01112; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm21113; SSE41-NEXT:    movapd %xmm1, %xmm01114; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm31115; SSE41-NEXT:    movapd %xmm2, %xmm01116; SSE41-NEXT:    movapd %xmm3, %xmm11117; SSE41-NEXT:    retq1118;1119; AVX-LABEL: floor_mask_256_pd:1120; AVX:       ## %bb.0:1121; AVX-NEXT:    vcmpeqpd %ymm1, %ymm0, %ymm21122; AVX-NEXT:    vroundpd $9, %ymm0, %ymm01123; AVX-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm01124; AVX-NEXT:    retq1125;1126; AVX512F-LABEL: floor_mask_256_pd:1127; AVX512F:       ## %bb.0:1128; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm11129; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm01130; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11131; AVX512F-NEXT:    vroundpd $9, %ymm0, %ymm01132; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}1133; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm01134; AVX512F-NEXT:    retq1135;1136; AVX512VL-LABEL: floor_mask_256_pd:1137; AVX512VL:       ## %bb.0:1138; AVX512VL-NEXT:    vcmpeqpd %ymm1, %ymm0, %k11139; AVX512VL-NEXT:    vrndscalepd $9, %ymm0, %ymm1 {%k1}1140; AVX512VL-NEXT:    vmovapd %ymm1, %ymm01141; AVX512VL-NEXT:    retq1142  %k = fcmp oeq <4 x double> %x, %y1143  %call = call <4 x double> @llvm.floor.v4f64(<4 x double> %x)1144  %res = select <4 x i1> %k, <4 x double> %call, <4 x double> %y1145  ret <4 x double> %res1146}1147 1148define <4 x double> @floor_maskz_256_pd(<4 x double> %x, <4 x double> %y) nounwind {1149; SSE41-LABEL: floor_maskz_256_pd:1150; SSE41:       ## %bb.0:1151; SSE41-NEXT:    cmpeqpd %xmm1, %xmm31152; SSE41-NEXT:    cmpeqpd %xmm0, %xmm21153; SSE41-NEXT:    roundpd $9, %xmm1, %xmm11154; SSE41-NEXT:    andpd %xmm3, %xmm11155; SSE41-NEXT:    roundpd $9, %xmm0, %xmm01156; SSE41-NEXT:    andpd %xmm2, %xmm01157; SSE41-NEXT:    retq1158;1159; AVX-LABEL: floor_maskz_256_pd:1160; AVX:       ## %bb.0:1161; AVX-NEXT:    vcmpeqpd %ymm1, %ymm0, %ymm11162; AVX-NEXT:    vroundpd $9, %ymm0, %ymm01163; AVX-NEXT:    vandpd %ymm0, %ymm1, %ymm01164; AVX-NEXT:    retq1165;1166; AVX512F-LABEL: floor_maskz_256_pd:1167; AVX512F:       ## %bb.0:1168; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm11169; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm01170; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11171; AVX512F-NEXT:    vroundpd $9, %ymm0, %ymm01172; AVX512F-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}1173; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm01174; AVX512F-NEXT:    retq1175;1176; AVX512VL-LABEL: floor_maskz_256_pd:1177; AVX512VL:       ## %bb.0:1178; AVX512VL-NEXT:    vcmpeqpd %ymm1, %ymm0, %k11179; AVX512VL-NEXT:    vrndscalepd $9, %ymm0, %ymm0 {%k1} {z}1180; AVX512VL-NEXT:    retq1181  %k = fcmp oeq <4 x double> %x, %y1182  %call = call <4 x double> @llvm.floor.v4f64(<4 x double> %x)1183  %res = select <4 x i1> %k, <4 x double> %call, <4 x double> zeroinitializer1184  ret <4 x double> %res1185}1186 1187define <16 x float> @floor_mask_512_ps(<16 x float> %x, <16 x float> %y) nounwind {1188; SSE41-LABEL: floor_mask_512_ps:1189; SSE41:       ## %bb.0:1190; SSE41-NEXT:    roundps $9, %xmm3, %xmm81191; SSE41-NEXT:    cmpeqps %xmm7, %xmm31192; SSE41-NEXT:    roundps $9, %xmm2, %xmm91193; SSE41-NEXT:    cmpeqps %xmm6, %xmm21194; SSE41-NEXT:    roundps $9, %xmm1, %xmm101195; SSE41-NEXT:    cmpeqps %xmm5, %xmm11196; SSE41-NEXT:    roundps $9, %xmm0, %xmm111197; SSE41-NEXT:    cmpeqps %xmm4, %xmm01198; SSE41-NEXT:    blendvps %xmm0, %xmm11, %xmm41199; SSE41-NEXT:    movaps %xmm1, %xmm01200; SSE41-NEXT:    blendvps %xmm0, %xmm10, %xmm51201; SSE41-NEXT:    movaps %xmm2, %xmm01202; SSE41-NEXT:    blendvps %xmm0, %xmm9, %xmm61203; SSE41-NEXT:    movaps %xmm3, %xmm01204; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm71205; SSE41-NEXT:    movaps %xmm4, %xmm01206; SSE41-NEXT:    movaps %xmm5, %xmm11207; SSE41-NEXT:    movaps %xmm6, %xmm21208; SSE41-NEXT:    movaps %xmm7, %xmm31209; SSE41-NEXT:    retq1210;1211; AVX-LABEL: floor_mask_512_ps:1212; AVX:       ## %bb.0:1213; AVX-NEXT:    vcmpeqps %ymm3, %ymm1, %ymm41214; AVX-NEXT:    vcmpeqps %ymm2, %ymm0, %ymm51215; AVX-NEXT:    vroundps $9, %ymm1, %ymm11216; AVX-NEXT:    vroundps $9, %ymm0, %ymm01217; AVX-NEXT:    vblendvps %ymm5, %ymm0, %ymm2, %ymm01218; AVX-NEXT:    vblendvps %ymm4, %ymm1, %ymm3, %ymm11219; AVX-NEXT:    retq1220;1221; AVX512-LABEL: floor_mask_512_ps:1222; AVX512:       ## %bb.0:1223; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k11224; AVX512-NEXT:    vrndscaleps $9, %zmm0, %zmm1 {%k1}1225; AVX512-NEXT:    vmovaps %zmm1, %zmm01226; AVX512-NEXT:    retq1227  %k = fcmp oeq <16 x float> %x, %y1228  %call = call <16 x float> @llvm.floor.v16f32(<16 x float> %x)1229  %res = select <16 x i1> %k, <16 x float> %call, <16 x float> %y1230  ret <16 x float> %res1231}1232 1233define <16 x float> @floor_maskz_512_ps(<16 x float> %x, <16 x float> %y) nounwind {1234; SSE41-LABEL: floor_maskz_512_ps:1235; SSE41:       ## %bb.0:1236; SSE41-NEXT:    cmpeqps %xmm3, %xmm71237; SSE41-NEXT:    cmpeqps %xmm2, %xmm61238; SSE41-NEXT:    cmpeqps %xmm1, %xmm51239; SSE41-NEXT:    cmpeqps %xmm0, %xmm41240; SSE41-NEXT:    roundps $9, %xmm3, %xmm31241; SSE41-NEXT:    andps %xmm7, %xmm31242; SSE41-NEXT:    roundps $9, %xmm2, %xmm21243; SSE41-NEXT:    andps %xmm6, %xmm21244; SSE41-NEXT:    roundps $9, %xmm1, %xmm11245; SSE41-NEXT:    andps %xmm5, %xmm11246; SSE41-NEXT:    roundps $9, %xmm0, %xmm01247; SSE41-NEXT:    andps %xmm4, %xmm01248; SSE41-NEXT:    retq1249;1250; AVX-LABEL: floor_maskz_512_ps:1251; AVX:       ## %bb.0:1252; AVX-NEXT:    vcmpeqps %ymm3, %ymm1, %ymm31253; AVX-NEXT:    vcmpeqps %ymm2, %ymm0, %ymm21254; AVX-NEXT:    vroundps $9, %ymm1, %ymm11255; AVX-NEXT:    vandps %ymm1, %ymm3, %ymm11256; AVX-NEXT:    vroundps $9, %ymm0, %ymm01257; AVX-NEXT:    vandps %ymm0, %ymm2, %ymm01258; AVX-NEXT:    retq1259;1260; AVX512-LABEL: floor_maskz_512_ps:1261; AVX512:       ## %bb.0:1262; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k11263; AVX512-NEXT:    vrndscaleps $9, %zmm0, %zmm0 {%k1} {z}1264; AVX512-NEXT:    retq1265  %k = fcmp oeq <16 x float> %x, %y1266  %call = call <16 x float> @llvm.floor.v16f32(<16 x float> %x)1267  %res = select <16 x i1> %k, <16 x float> %call, <16 x float> zeroinitializer1268  ret <16 x float> %res1269}1270 1271define <8 x double> @floor_mask_512_pd(<8 x double> %x, <8 x double> %y) nounwind {1272; SSE41-LABEL: floor_mask_512_pd:1273; SSE41:       ## %bb.0:1274; SSE41-NEXT:    roundpd $9, %xmm3, %xmm81275; SSE41-NEXT:    cmpeqpd %xmm7, %xmm31276; SSE41-NEXT:    roundpd $9, %xmm2, %xmm91277; SSE41-NEXT:    cmpeqpd %xmm6, %xmm21278; SSE41-NEXT:    roundpd $9, %xmm1, %xmm101279; SSE41-NEXT:    cmpeqpd %xmm5, %xmm11280; SSE41-NEXT:    roundpd $9, %xmm0, %xmm111281; SSE41-NEXT:    cmpeqpd %xmm4, %xmm01282; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm41283; SSE41-NEXT:    movapd %xmm1, %xmm01284; SSE41-NEXT:    blendvpd %xmm0, %xmm10, %xmm51285; SSE41-NEXT:    movapd %xmm2, %xmm01286; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm61287; SSE41-NEXT:    movapd %xmm3, %xmm01288; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm71289; SSE41-NEXT:    movapd %xmm4, %xmm01290; SSE41-NEXT:    movapd %xmm5, %xmm11291; SSE41-NEXT:    movapd %xmm6, %xmm21292; SSE41-NEXT:    movapd %xmm7, %xmm31293; SSE41-NEXT:    retq1294;1295; AVX-LABEL: floor_mask_512_pd:1296; AVX:       ## %bb.0:1297; AVX-NEXT:    vcmpeqpd %ymm3, %ymm1, %ymm41298; AVX-NEXT:    vcmpeqpd %ymm2, %ymm0, %ymm51299; AVX-NEXT:    vroundpd $9, %ymm1, %ymm11300; AVX-NEXT:    vroundpd $9, %ymm0, %ymm01301; AVX-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm01302; AVX-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm11303; AVX-NEXT:    retq1304;1305; AVX512-LABEL: floor_mask_512_pd:1306; AVX512:       ## %bb.0:1307; AVX512-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11308; AVX512-NEXT:    vrndscalepd $9, %zmm0, %zmm1 {%k1}1309; AVX512-NEXT:    vmovapd %zmm1, %zmm01310; AVX512-NEXT:    retq1311  %k = fcmp oeq <8 x double> %x, %y1312  %call = call <8 x double> @llvm.floor.v8f64(<8 x double> %x)1313  %res = select <8 x i1> %k, <8 x double> %call, <8 x double> %y1314  ret <8 x double> %res1315}1316 1317define <8 x double> @floor_maskz_512_pd(<8 x double> %x, <8 x double> %y) nounwind {1318; SSE41-LABEL: floor_maskz_512_pd:1319; SSE41:       ## %bb.0:1320; SSE41-NEXT:    cmpeqpd %xmm3, %xmm71321; SSE41-NEXT:    cmpeqpd %xmm2, %xmm61322; SSE41-NEXT:    cmpeqpd %xmm1, %xmm51323; SSE41-NEXT:    cmpeqpd %xmm0, %xmm41324; SSE41-NEXT:    roundpd $9, %xmm3, %xmm31325; SSE41-NEXT:    andpd %xmm7, %xmm31326; SSE41-NEXT:    roundpd $9, %xmm2, %xmm21327; SSE41-NEXT:    andpd %xmm6, %xmm21328; SSE41-NEXT:    roundpd $9, %xmm1, %xmm11329; SSE41-NEXT:    andpd %xmm5, %xmm11330; SSE41-NEXT:    roundpd $9, %xmm0, %xmm01331; SSE41-NEXT:    andpd %xmm4, %xmm01332; SSE41-NEXT:    retq1333;1334; AVX-LABEL: floor_maskz_512_pd:1335; AVX:       ## %bb.0:1336; AVX-NEXT:    vcmpeqpd %ymm3, %ymm1, %ymm31337; AVX-NEXT:    vcmpeqpd %ymm2, %ymm0, %ymm21338; AVX-NEXT:    vroundpd $9, %ymm1, %ymm11339; AVX-NEXT:    vandpd %ymm1, %ymm3, %ymm11340; AVX-NEXT:    vroundpd $9, %ymm0, %ymm01341; AVX-NEXT:    vandpd %ymm0, %ymm2, %ymm01342; AVX-NEXT:    retq1343;1344; AVX512-LABEL: floor_maskz_512_pd:1345; AVX512:       ## %bb.0:1346; AVX512-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11347; AVX512-NEXT:    vrndscalepd $9, %zmm0, %zmm0 {%k1} {z}1348; AVX512-NEXT:    retq1349  %k = fcmp oeq <8 x double> %x, %y1350  %call = call <8 x double> @llvm.floor.v8f64(<8 x double> %x)1351  %res = select <8 x i1> %k, <8 x double> %call, <8 x double> zeroinitializer1352  ret <8 x double> %res1353}1354 1355define <4 x float> @floor_mask_ss(<4 x float> %x, <4 x float> %y, <4 x float> %w, i8 %k) nounwind {1356; SSE41-LABEL: floor_mask_ss:1357; SSE41:       ## %bb.0:1358; SSE41-NEXT:    testb $1, %dil1359; SSE41-NEXT:    je LBB52_21360; SSE41-NEXT:  ## %bb.1:1361; SSE41-NEXT:    xorps %xmm2, %xmm21362; SSE41-NEXT:    roundss $9, %xmm0, %xmm21363; SSE41-NEXT:  LBB52_2:1364; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]1365; SSE41-NEXT:    movaps %xmm1, %xmm01366; SSE41-NEXT:    retq1367;1368; AVX-LABEL: floor_mask_ss:1369; AVX:       ## %bb.0:1370; AVX-NEXT:    testb $1, %dil1371; AVX-NEXT:    je LBB52_21372; AVX-NEXT:  ## %bb.1:1373; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm21374; AVX-NEXT:  LBB52_2:1375; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]1376; AVX-NEXT:    retq1377;1378; AVX512-LABEL: floor_mask_ss:1379; AVX512:       ## %bb.0:1380; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm01381; AVX512-NEXT:    kmovw %edi, %k11382; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm2 {%k1}1383; AVX512-NEXT:    vmovaps %xmm2, %xmm01384; AVX512-NEXT:    retq1385  %mask = and i8 %k, 11386  %nmask = icmp eq i8 %mask, 01387  %s = extractelement <4 x float> %x, i64 01388  %call = tail call float @llvm.floor.f32(float %s)1389  %dst = extractelement <4 x float> %w, i64 01390  %low = select i1 %nmask, float %dst, float %call1391  %res = insertelement <4 x float> %y, float %low, i64 01392  ret <4 x float> %res1393}1394 1395define <4 x float> @floor_maskz_ss(<4 x float> %x, <4 x float> %y, i8 %k) nounwind {1396; SSE41-LABEL: floor_maskz_ss:1397; SSE41:       ## %bb.0:1398; SSE41-NEXT:    testb $1, %dil1399; SSE41-NEXT:    xorps %xmm2, %xmm21400; SSE41-NEXT:    je LBB53_21401; SSE41-NEXT:  ## %bb.1:1402; SSE41-NEXT:    xorps %xmm2, %xmm21403; SSE41-NEXT:    roundss $9, %xmm0, %xmm21404; SSE41-NEXT:  LBB53_2:1405; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]1406; SSE41-NEXT:    movaps %xmm1, %xmm01407; SSE41-NEXT:    retq1408;1409; AVX-LABEL: floor_maskz_ss:1410; AVX:       ## %bb.0:1411; AVX-NEXT:    testb $1, %dil1412; AVX-NEXT:    vxorps %xmm2, %xmm2, %xmm21413; AVX-NEXT:    je LBB53_21414; AVX-NEXT:  ## %bb.1:1415; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm21416; AVX-NEXT:  LBB53_2:1417; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]1418; AVX-NEXT:    retq1419;1420; AVX512-LABEL: floor_maskz_ss:1421; AVX512:       ## %bb.0:1422; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm01423; AVX512-NEXT:    kmovw %edi, %k11424; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm0 {%k1} {z}1425; AVX512-NEXT:    retq1426  %mask = and i8 %k, 11427  %nmask = icmp eq i8 %mask, 01428  %s = extractelement <4 x float> %x, i64 01429  %call = tail call float @llvm.floor.f32(float %s)1430  %low = select i1 %nmask, float zeroinitializer, float %call1431  %res = insertelement <4 x float> %y, float %low, i64 01432  ret <4 x float> %res1433}1434 1435define <2 x double> @floor_mask_sd(<2 x double> %x, <2 x double> %y, <2 x double> %w, i8 %k) nounwind {1436; SSE41-LABEL: floor_mask_sd:1437; SSE41:       ## %bb.0:1438; SSE41-NEXT:    testb $1, %dil1439; SSE41-NEXT:    je LBB54_21440; SSE41-NEXT:  ## %bb.1:1441; SSE41-NEXT:    xorps %xmm2, %xmm21442; SSE41-NEXT:    roundsd $9, %xmm0, %xmm21443; SSE41-NEXT:  LBB54_2:1444; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]1445; SSE41-NEXT:    movapd %xmm1, %xmm01446; SSE41-NEXT:    retq1447;1448; AVX-LABEL: floor_mask_sd:1449; AVX:       ## %bb.0:1450; AVX-NEXT:    testb $1, %dil1451; AVX-NEXT:    je LBB54_21452; AVX-NEXT:  ## %bb.1:1453; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm21454; AVX-NEXT:  LBB54_2:1455; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]1456; AVX-NEXT:    retq1457;1458; AVX512-LABEL: floor_mask_sd:1459; AVX512:       ## %bb.0:1460; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm01461; AVX512-NEXT:    kmovw %edi, %k11462; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm2 {%k1}1463; AVX512-NEXT:    vmovapd %xmm2, %xmm01464; AVX512-NEXT:    retq1465  %mask = and i8 %k, 11466  %nmask = icmp eq i8 %mask, 01467  %s = extractelement <2 x double> %x, i64 01468  %call = tail call double @llvm.floor.f64(double %s)1469  %dst = extractelement <2 x double> %w, i64 01470  %low = select i1 %nmask, double %dst, double %call1471  %res = insertelement <2 x double> %y, double %low, i64 01472  ret <2 x double> %res1473}1474 1475define <2 x double> @floor_maskz_sd(<2 x double> %x, <2 x double> %y, i8 %k) nounwind {1476; SSE41-LABEL: floor_maskz_sd:1477; SSE41:       ## %bb.0:1478; SSE41-NEXT:    testb $1, %dil1479; SSE41-NEXT:    xorpd %xmm2, %xmm21480; SSE41-NEXT:    je LBB55_21481; SSE41-NEXT:  ## %bb.1:1482; SSE41-NEXT:    xorps %xmm2, %xmm21483; SSE41-NEXT:    roundsd $9, %xmm0, %xmm21484; SSE41-NEXT:  LBB55_2:1485; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]1486; SSE41-NEXT:    movapd %xmm1, %xmm01487; SSE41-NEXT:    retq1488;1489; AVX-LABEL: floor_maskz_sd:1490; AVX:       ## %bb.0:1491; AVX-NEXT:    testb $1, %dil1492; AVX-NEXT:    vxorpd %xmm2, %xmm2, %xmm21493; AVX-NEXT:    je LBB55_21494; AVX-NEXT:  ## %bb.1:1495; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm21496; AVX-NEXT:  LBB55_2:1497; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]1498; AVX-NEXT:    retq1499;1500; AVX512-LABEL: floor_maskz_sd:1501; AVX512:       ## %bb.0:1502; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm01503; AVX512-NEXT:    kmovw %edi, %k11504; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm0 {%k1} {z}1505; AVX512-NEXT:    retq1506  %mask = and i8 %k, 11507  %nmask = icmp eq i8 %mask, 01508  %s = extractelement <2 x double> %x, i64 01509  %call = tail call double @llvm.floor.f64(double %s)1510  %low = select i1 %nmask, double zeroinitializer, double %call1511  %res = insertelement <2 x double> %y, double %low, i64 01512  ret <2 x double> %res1513}1514 1515define <4 x float> @floor_mask_ss_trunc(<4 x float> %x, <4 x float> %y, <4 x float> %w, i16 %k) nounwind {1516; SSE41-LABEL: floor_mask_ss_trunc:1517; SSE41:       ## %bb.0:1518; SSE41-NEXT:    testb $1, %dil1519; SSE41-NEXT:    je LBB56_21520; SSE41-NEXT:  ## %bb.1:1521; SSE41-NEXT:    xorps %xmm2, %xmm21522; SSE41-NEXT:    roundss $9, %xmm0, %xmm21523; SSE41-NEXT:  LBB56_2:1524; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]1525; SSE41-NEXT:    movaps %xmm1, %xmm01526; SSE41-NEXT:    retq1527;1528; AVX-LABEL: floor_mask_ss_trunc:1529; AVX:       ## %bb.0:1530; AVX-NEXT:    testb $1, %dil1531; AVX-NEXT:    je LBB56_21532; AVX-NEXT:  ## %bb.1:1533; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm21534; AVX-NEXT:  LBB56_2:1535; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]1536; AVX-NEXT:    retq1537;1538; AVX512-LABEL: floor_mask_ss_trunc:1539; AVX512:       ## %bb.0:1540; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm01541; AVX512-NEXT:    kmovw %edi, %k11542; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm2 {%k1}1543; AVX512-NEXT:    vmovaps %xmm2, %xmm01544; AVX512-NEXT:    retq1545  %mask = trunc i16 %k to i11546  %s = extractelement <4 x float> %x, i64 01547  %call = tail call float @llvm.floor.f32(float %s)1548  %dst = extractelement <4 x float> %w, i64 01549  %low = select i1 %mask, float %call, float %dst1550  %res = insertelement <4 x float> %y, float %low, i64 01551  ret <4 x float> %res1552}1553 1554define <4 x float> @floor_maskz_ss_trunc(<4 x float> %x, <4 x float> %y, i16 %k) nounwind {1555; SSE41-LABEL: floor_maskz_ss_trunc:1556; SSE41:       ## %bb.0:1557; SSE41-NEXT:    testb $1, %dil1558; SSE41-NEXT:    jne LBB57_11559; SSE41-NEXT:  ## %bb.2:1560; SSE41-NEXT:    xorps %xmm0, %xmm01561; SSE41-NEXT:    jmp LBB57_31562; SSE41-NEXT:  LBB57_1:1563; SSE41-NEXT:    roundss $9, %xmm0, %xmm01564; SSE41-NEXT:  LBB57_3:1565; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]1566; SSE41-NEXT:    movaps %xmm1, %xmm01567; SSE41-NEXT:    retq1568;1569; AVX-LABEL: floor_maskz_ss_trunc:1570; AVX:       ## %bb.0:1571; AVX-NEXT:    testb $1, %dil1572; AVX-NEXT:    jne LBB57_11573; AVX-NEXT:  ## %bb.2:1574; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm01575; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1576; AVX-NEXT:    retq1577; AVX-NEXT:  LBB57_1:1578; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm01579; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1580; AVX-NEXT:    retq1581;1582; AVX512-LABEL: floor_maskz_ss_trunc:1583; AVX512:       ## %bb.0:1584; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm01585; AVX512-NEXT:    kmovw %edi, %k11586; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm0 {%k1} {z}1587; AVX512-NEXT:    retq1588  %mask = trunc i16 %k to i11589  %s = extractelement <4 x float> %x, i64 01590  %call = tail call float @llvm.floor.f32(float %s)1591  %low = select i1 %mask, float %call, float zeroinitializer1592  %res = insertelement <4 x float> %y, float %low, i64 01593  ret <4 x float> %res1594}1595 1596define <2 x double> @floor_mask_sd_trunc(<2 x double> %x, <2 x double> %y, <2 x double> %w, i16 %k) nounwind {1597; SSE41-LABEL: floor_mask_sd_trunc:1598; SSE41:       ## %bb.0:1599; SSE41-NEXT:    testb $1, %dil1600; SSE41-NEXT:    je LBB58_21601; SSE41-NEXT:  ## %bb.1:1602; SSE41-NEXT:    xorps %xmm2, %xmm21603; SSE41-NEXT:    roundsd $9, %xmm0, %xmm21604; SSE41-NEXT:  LBB58_2:1605; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]1606; SSE41-NEXT:    movapd %xmm1, %xmm01607; SSE41-NEXT:    retq1608;1609; AVX-LABEL: floor_mask_sd_trunc:1610; AVX:       ## %bb.0:1611; AVX-NEXT:    testb $1, %dil1612; AVX-NEXT:    je LBB58_21613; AVX-NEXT:  ## %bb.1:1614; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm21615; AVX-NEXT:  LBB58_2:1616; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]1617; AVX-NEXT:    retq1618;1619; AVX512-LABEL: floor_mask_sd_trunc:1620; AVX512:       ## %bb.0:1621; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm01622; AVX512-NEXT:    kmovw %edi, %k11623; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm2 {%k1}1624; AVX512-NEXT:    vmovapd %xmm2, %xmm01625; AVX512-NEXT:    retq1626  %mask = trunc i16 %k to i11627  %s = extractelement <2 x double> %x, i64 01628  %call = tail call double @llvm.floor.f64(double %s)1629  %dst = extractelement <2 x double> %w, i64 01630  %low = select i1 %mask, double %call, double %dst1631  %res = insertelement <2 x double> %y, double %low, i64 01632  ret <2 x double> %res1633}1634 1635define <2 x double> @floor_maskz_sd_trunc(<2 x double> %x, <2 x double> %y, i16 %k) nounwind {1636; SSE41-LABEL: floor_maskz_sd_trunc:1637; SSE41:       ## %bb.0:1638; SSE41-NEXT:    testb $1, %dil1639; SSE41-NEXT:    jne LBB59_11640; SSE41-NEXT:  ## %bb.2:1641; SSE41-NEXT:    xorpd %xmm0, %xmm01642; SSE41-NEXT:    jmp LBB59_31643; SSE41-NEXT:  LBB59_1:1644; SSE41-NEXT:    roundsd $9, %xmm0, %xmm01645; SSE41-NEXT:  LBB59_3:1646; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]1647; SSE41-NEXT:    movapd %xmm1, %xmm01648; SSE41-NEXT:    retq1649;1650; AVX-LABEL: floor_maskz_sd_trunc:1651; AVX:       ## %bb.0:1652; AVX-NEXT:    testb $1, %dil1653; AVX-NEXT:    jne LBB59_11654; AVX-NEXT:  ## %bb.2:1655; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm01656; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1657; AVX-NEXT:    retq1658; AVX-NEXT:  LBB59_1:1659; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm01660; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1661; AVX-NEXT:    retq1662;1663; AVX512-LABEL: floor_maskz_sd_trunc:1664; AVX512:       ## %bb.0:1665; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm01666; AVX512-NEXT:    kmovw %edi, %k11667; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm0 {%k1} {z}1668; AVX512-NEXT:    retq1669  %mask = trunc i16 %k to i11670  %s = extractelement <2 x double> %x, i64 01671  %call = tail call double @llvm.floor.f64(double %s)1672  %low = select i1 %mask, double %call, double zeroinitializer1673  %res = insertelement <2 x double> %y, double %low, i64 01674  ret <2 x double> %res1675}1676 1677define <4 x float> @floor_mask_ss_mask8(<4 x float> %x, <4 x float> %y, <4 x float> %w) nounwind {1678; SSE41-LABEL: floor_mask_ss_mask8:1679; SSE41:       ## %bb.0:1680; SSE41-NEXT:    roundss $9, %xmm0, %xmm31681; SSE41-NEXT:    cmpeqss %xmm1, %xmm01682; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm21683; SSE41-NEXT:    blendps {{.*#+}} xmm2 = xmm2[0],xmm1[1,2,3]1684; SSE41-NEXT:    movaps %xmm2, %xmm01685; SSE41-NEXT:    retq1686;1687; AVX-LABEL: floor_mask_ss_mask8:1688; AVX:       ## %bb.0:1689; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm31690; AVX-NEXT:    vcmpeqss %xmm1, %xmm0, %xmm01691; AVX-NEXT:    vblendvps %xmm0, %xmm3, %xmm2, %xmm01692; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1693; AVX-NEXT:    retq1694;1695; AVX512-LABEL: floor_mask_ss_mask8:1696; AVX512:       ## %bb.0:1697; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm31698; AVX512-NEXT:    vcmpeqss %xmm1, %xmm0, %k11699; AVX512-NEXT:    vmovss %xmm3, %xmm1, %xmm2 {%k1}1700; AVX512-NEXT:    vmovaps %xmm2, %xmm01701; AVX512-NEXT:    retq1702  %mask1 = fcmp oeq <4 x float> %x, %y1703  %mask = extractelement <4 x i1> %mask1, i64 01704  %s = extractelement <4 x float> %x, i64 01705  %call = tail call float @llvm.floor.f32(float %s)1706  %dst = extractelement <4 x float> %w, i64 01707  %low = select i1 %mask, float %call, float %dst1708  %res = insertelement <4 x float> %y, float %low, i64 01709  ret <4 x float> %res1710}1711 1712define <4 x float> @floor_maskz_ss_mask8(<4 x float> %x, <4 x float> %y) nounwind {1713; SSE41-LABEL: floor_maskz_ss_mask8:1714; SSE41:       ## %bb.0:1715; SSE41-NEXT:    roundss $9, %xmm0, %xmm21716; SSE41-NEXT:    cmpeqss %xmm1, %xmm01717; SSE41-NEXT:    andps %xmm2, %xmm01718; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1719; SSE41-NEXT:    retq1720;1721; AVX-LABEL: floor_maskz_ss_mask8:1722; AVX:       ## %bb.0:1723; AVX-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm21724; AVX-NEXT:    vcmpeqss %xmm1, %xmm0, %xmm01725; AVX-NEXT:    vandps %xmm2, %xmm0, %xmm01726; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1727; AVX-NEXT:    retq1728;1729; AVX512-LABEL: floor_maskz_ss_mask8:1730; AVX512:       ## %bb.0:1731; AVX512-NEXT:    vroundss $9, %xmm0, %xmm0, %xmm21732; AVX512-NEXT:    vcmpeqss %xmm1, %xmm0, %k11733; AVX512-NEXT:    vmovss %xmm2, %xmm1, %xmm0 {%k1} {z}1734; AVX512-NEXT:    retq1735  %mask1 = fcmp oeq <4 x float> %x, %y1736  %mask = extractelement <4 x i1> %mask1, i64 01737  %s = extractelement <4 x float> %x, i64 01738  %call = tail call float @llvm.floor.f32(float %s)1739  %low = select i1 %mask, float %call, float zeroinitializer1740  %res = insertelement <4 x float> %y, float %low, i64 01741  ret <4 x float> %res1742}1743 1744define <2 x double> @floor_mask_sd_mask8(<2 x double> %x, <2 x double> %y, <2 x double> %w) nounwind {1745; SSE41-LABEL: floor_mask_sd_mask8:1746; SSE41:       ## %bb.0:1747; SSE41-NEXT:    roundsd $9, %xmm0, %xmm31748; SSE41-NEXT:    cmpeqsd %xmm1, %xmm01749; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm21750; SSE41-NEXT:    blendpd {{.*#+}} xmm2 = xmm2[0],xmm1[1]1751; SSE41-NEXT:    movapd %xmm2, %xmm01752; SSE41-NEXT:    retq1753;1754; AVX-LABEL: floor_mask_sd_mask8:1755; AVX:       ## %bb.0:1756; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm31757; AVX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm01758; AVX-NEXT:    vblendvpd %xmm0, %xmm3, %xmm2, %xmm01759; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1760; AVX-NEXT:    retq1761;1762; AVX512-LABEL: floor_mask_sd_mask8:1763; AVX512:       ## %bb.0:1764; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm31765; AVX512-NEXT:    vcmpeqsd %xmm1, %xmm0, %k11766; AVX512-NEXT:    vmovsd %xmm3, %xmm1, %xmm2 {%k1}1767; AVX512-NEXT:    vmovapd %xmm2, %xmm01768; AVX512-NEXT:    retq1769  %mask1 = fcmp oeq <2 x double> %x, %y1770  %mask = extractelement <2 x i1> %mask1, i64 01771  %s = extractelement <2 x double> %x, i64 01772  %call = tail call double @llvm.floor.f64(double %s)1773  %dst = extractelement <2 x double> %w, i64 01774  %low = select i1 %mask, double %call, double %dst1775  %res = insertelement <2 x double> %y, double %low, i64 01776  ret <2 x double> %res1777}1778 1779define <2 x double> @floor_maskz_sd_mask8(<2 x double> %x, <2 x double> %y) nounwind {1780; SSE41-LABEL: floor_maskz_sd_mask8:1781; SSE41:       ## %bb.0:1782; SSE41-NEXT:    roundsd $9, %xmm0, %xmm21783; SSE41-NEXT:    cmpeqsd %xmm1, %xmm01784; SSE41-NEXT:    andpd %xmm2, %xmm01785; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1786; SSE41-NEXT:    retq1787;1788; AVX-LABEL: floor_maskz_sd_mask8:1789; AVX:       ## %bb.0:1790; AVX-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm21791; AVX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm01792; AVX-NEXT:    vandpd %xmm2, %xmm0, %xmm01793; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1794; AVX-NEXT:    retq1795;1796; AVX512-LABEL: floor_maskz_sd_mask8:1797; AVX512:       ## %bb.0:1798; AVX512-NEXT:    vroundsd $9, %xmm0, %xmm0, %xmm21799; AVX512-NEXT:    vcmpeqsd %xmm1, %xmm0, %k11800; AVX512-NEXT:    vmovsd %xmm2, %xmm1, %xmm0 {%k1} {z}1801; AVX512-NEXT:    retq1802  %mask1 = fcmp oeq <2 x double> %x, %y1803  %mask = extractelement <2 x i1> %mask1, i64 01804  %s = extractelement <2 x double> %x, i64 01805  %call = tail call double @llvm.floor.f64(double %s)1806  %low = select i1 %mask, double %call, double zeroinitializer1807  %res = insertelement <2 x double> %y, double %low, i64 01808  ret <2 x double> %res1809}1810 1811define <4 x float> @ceil_ss(<4 x float> %x, <4 x float> %y) nounwind {1812; SSE41-LABEL: ceil_ss:1813; SSE41:       ## %bb.0:1814; SSE41-NEXT:    roundss $10, %xmm0, %xmm01815; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1816; SSE41-NEXT:    retq1817;1818; AVX-LABEL: ceil_ss:1819; AVX:       ## %bb.0:1820; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm01821; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1822; AVX-NEXT:    retq1823;1824; AVX512-LABEL: ceil_ss:1825; AVX512:       ## %bb.0:1826; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm01827; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1828; AVX512-NEXT:    retq1829  %s = extractelement <4 x float> %x, i32 01830  %call = call float @llvm.ceil.f32(float %s)1831  %res = insertelement <4 x float> %y, float %call, i32 01832  ret <4 x float> %res1833}1834declare float @llvm.ceil.f32(float %s)1835 1836define <2 x double> @ceil_sd(<2 x double> %x, <2 x double> %y) nounwind {1837; SSE41-LABEL: ceil_sd:1838; SSE41:       ## %bb.0:1839; SSE41-NEXT:    roundsd $10, %xmm0, %xmm01840; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1841; SSE41-NEXT:    retq1842;1843; AVX-LABEL: ceil_sd:1844; AVX:       ## %bb.0:1845; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm01846; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1847; AVX-NEXT:    retq1848;1849; AVX512-LABEL: ceil_sd:1850; AVX512:       ## %bb.0:1851; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm01852; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]1853; AVX512-NEXT:    retq1854  %s = extractelement <2 x double> %x, i32 01855  %call = call double @llvm.ceil.f64(double %s)1856  %res = insertelement <2 x double> %y, double %call, i32 01857  ret <2 x double> %res1858}1859declare double @llvm.ceil.f64(double %s)1860 1861define <4 x float> @ceil_mask_128_ps(<4 x float> %x, <4 x float> %y) nounwind {1862; SSE41-LABEL: ceil_mask_128_ps:1863; SSE41:       ## %bb.0:1864; SSE41-NEXT:    roundps $10, %xmm0, %xmm21865; SSE41-NEXT:    cmpeqps %xmm1, %xmm01866; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm11867; SSE41-NEXT:    movaps %xmm1, %xmm01868; SSE41-NEXT:    retq1869;1870; AVX-LABEL: ceil_mask_128_ps:1871; AVX:       ## %bb.0:1872; AVX-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm21873; AVX-NEXT:    vroundps $10, %xmm0, %xmm01874; AVX-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01875; AVX-NEXT:    retq1876;1877; AVX512F-LABEL: ceil_mask_128_ps:1878; AVX512F:       ## %bb.0:1879; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm11880; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm01881; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k11882; AVX512F-NEXT:    vroundps $10, %xmm0, %xmm01883; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}1884; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01885; AVX512F-NEXT:    vzeroupper1886; AVX512F-NEXT:    retq1887;1888; AVX512VL-LABEL: ceil_mask_128_ps:1889; AVX512VL:       ## %bb.0:1890; AVX512VL-NEXT:    vcmpeqps %xmm1, %xmm0, %k11891; AVX512VL-NEXT:    vrndscaleps $10, %xmm0, %xmm1 {%k1}1892; AVX512VL-NEXT:    vmovaps %xmm1, %xmm01893; AVX512VL-NEXT:    retq1894  %k = fcmp oeq <4 x float> %x, %y1895  %call = call <4 x float> @llvm.ceil.v4f32(<4 x float> %x)1896  %res = select <4 x i1> %k, <4 x float> %call, <4 x float> %y1897  ret <4 x float> %res1898}1899 1900define <4 x float> @ceil_maskz_128_ps(<4 x float> %x, <4 x float> %y) nounwind {1901; SSE41-LABEL: ceil_maskz_128_ps:1902; SSE41:       ## %bb.0:1903; SSE41-NEXT:    cmpeqps %xmm0, %xmm11904; SSE41-NEXT:    roundps $10, %xmm0, %xmm01905; SSE41-NEXT:    andps %xmm1, %xmm01906; SSE41-NEXT:    retq1907;1908; AVX-LABEL: ceil_maskz_128_ps:1909; AVX:       ## %bb.0:1910; AVX-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm11911; AVX-NEXT:    vroundps $10, %xmm0, %xmm01912; AVX-NEXT:    vandps %xmm0, %xmm1, %xmm01913; AVX-NEXT:    retq1914;1915; AVX512F-LABEL: ceil_maskz_128_ps:1916; AVX512F:       ## %bb.0:1917; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm11918; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm01919; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k11920; AVX512F-NEXT:    vroundps $10, %xmm0, %xmm01921; AVX512F-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}1922; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01923; AVX512F-NEXT:    vzeroupper1924; AVX512F-NEXT:    retq1925;1926; AVX512VL-LABEL: ceil_maskz_128_ps:1927; AVX512VL:       ## %bb.0:1928; AVX512VL-NEXT:    vcmpeqps %xmm1, %xmm0, %k11929; AVX512VL-NEXT:    vrndscaleps $10, %xmm0, %xmm0 {%k1} {z}1930; AVX512VL-NEXT:    retq1931  %k = fcmp oeq <4 x float> %x, %y1932  %call = call <4 x float> @llvm.ceil.v4f32(<4 x float> %x)1933  %res = select <4 x i1> %k, <4 x float> %call, <4 x float> zeroinitializer1934  ret <4 x float> %res1935}1936 1937define <2 x double> @ceil_mask_128_pd(<2 x double> %x, <2 x double> %y) nounwind {1938; SSE41-LABEL: ceil_mask_128_pd:1939; SSE41:       ## %bb.0:1940; SSE41-NEXT:    roundpd $10, %xmm0, %xmm21941; SSE41-NEXT:    cmpeqpd %xmm1, %xmm01942; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm11943; SSE41-NEXT:    movapd %xmm1, %xmm01944; SSE41-NEXT:    retq1945;1946; AVX-LABEL: ceil_mask_128_pd:1947; AVX:       ## %bb.0:1948; AVX-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm21949; AVX-NEXT:    vroundpd $10, %xmm0, %xmm01950; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm01951; AVX-NEXT:    retq1952;1953; AVX512F-LABEL: ceil_mask_128_pd:1954; AVX512F:       ## %bb.0:1955; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm11956; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm01957; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11958; AVX512F-NEXT:    vroundpd $10, %xmm0, %xmm01959; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}1960; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01961; AVX512F-NEXT:    vzeroupper1962; AVX512F-NEXT:    retq1963;1964; AVX512VL-LABEL: ceil_mask_128_pd:1965; AVX512VL:       ## %bb.0:1966; AVX512VL-NEXT:    vcmpeqpd %xmm1, %xmm0, %k11967; AVX512VL-NEXT:    vrndscalepd $10, %xmm0, %xmm1 {%k1}1968; AVX512VL-NEXT:    vmovapd %xmm1, %xmm01969; AVX512VL-NEXT:    retq1970  %k = fcmp oeq <2 x double> %x, %y1971  %call = call <2 x double> @llvm.ceil.v2f64(<2 x double> %x)1972  %res = select <2 x i1> %k, <2 x double> %call, <2 x double> %y1973  ret <2 x double> %res1974}1975 1976define <2 x double> @ceil_maskz_128_pd(<2 x double> %x, <2 x double> %y) nounwind {1977; SSE41-LABEL: ceil_maskz_128_pd:1978; SSE41:       ## %bb.0:1979; SSE41-NEXT:    cmpeqpd %xmm0, %xmm11980; SSE41-NEXT:    roundpd $10, %xmm0, %xmm01981; SSE41-NEXT:    andpd %xmm1, %xmm01982; SSE41-NEXT:    retq1983;1984; AVX-LABEL: ceil_maskz_128_pd:1985; AVX:       ## %bb.0:1986; AVX-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm11987; AVX-NEXT:    vroundpd $10, %xmm0, %xmm01988; AVX-NEXT:    vandpd %xmm0, %xmm1, %xmm01989; AVX-NEXT:    retq1990;1991; AVX512F-LABEL: ceil_maskz_128_pd:1992; AVX512F:       ## %bb.0:1993; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm11994; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm01995; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k11996; AVX512F-NEXT:    vroundpd $10, %xmm0, %xmm01997; AVX512F-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}1998; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01999; AVX512F-NEXT:    vzeroupper2000; AVX512F-NEXT:    retq2001;2002; AVX512VL-LABEL: ceil_maskz_128_pd:2003; AVX512VL:       ## %bb.0:2004; AVX512VL-NEXT:    vcmpeqpd %xmm1, %xmm0, %k12005; AVX512VL-NEXT:    vrndscalepd $10, %xmm0, %xmm0 {%k1} {z}2006; AVX512VL-NEXT:    retq2007  %k = fcmp oeq <2 x double> %x, %y2008  %call = call <2 x double> @llvm.ceil.v2f64(<2 x double> %x)2009  %res = select <2 x i1> %k, <2 x double> %call, <2 x double> zeroinitializer2010  ret <2 x double> %res2011}2012 2013define <8 x float> @ceil_mask_256_ps(<8 x float> %x, <8 x float> %y) nounwind {2014; SSE41-LABEL: ceil_mask_256_ps:2015; SSE41:       ## %bb.0:2016; SSE41-NEXT:    roundps $10, %xmm1, %xmm42017; SSE41-NEXT:    cmpeqps %xmm3, %xmm12018; SSE41-NEXT:    roundps $10, %xmm0, %xmm52019; SSE41-NEXT:    cmpeqps %xmm2, %xmm02020; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm22021; SSE41-NEXT:    movaps %xmm1, %xmm02022; SSE41-NEXT:    blendvps %xmm0, %xmm4, %xmm32023; SSE41-NEXT:    movaps %xmm2, %xmm02024; SSE41-NEXT:    movaps %xmm3, %xmm12025; SSE41-NEXT:    retq2026;2027; AVX-LABEL: ceil_mask_256_ps:2028; AVX:       ## %bb.0:2029; AVX-NEXT:    vcmpeqps %ymm1, %ymm0, %ymm22030; AVX-NEXT:    vroundps $10, %ymm0, %ymm02031; AVX-NEXT:    vblendvps %ymm2, %ymm0, %ymm1, %ymm02032; AVX-NEXT:    retq2033;2034; AVX512F-LABEL: ceil_mask_256_ps:2035; AVX512F:       ## %bb.0:2036; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm12037; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm02038; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k12039; AVX512F-NEXT:    vroundps $10, %ymm0, %ymm02040; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}2041; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm02042; AVX512F-NEXT:    retq2043;2044; AVX512VL-LABEL: ceil_mask_256_ps:2045; AVX512VL:       ## %bb.0:2046; AVX512VL-NEXT:    vcmpeqps %ymm1, %ymm0, %k12047; AVX512VL-NEXT:    vrndscaleps $10, %ymm0, %ymm1 {%k1}2048; AVX512VL-NEXT:    vmovaps %ymm1, %ymm02049; AVX512VL-NEXT:    retq2050  %k = fcmp oeq <8 x float> %x, %y2051  %call = call <8 x float> @llvm.ceil.v8f32(<8 x float> %x)2052  %res = select <8 x i1> %k, <8 x float> %call, <8 x float> %y2053  ret <8 x float> %res2054}2055 2056define <8 x float> @ceil_maskz_256_ps(<8 x float> %x, <8 x float> %y) nounwind {2057; SSE41-LABEL: ceil_maskz_256_ps:2058; SSE41:       ## %bb.0:2059; SSE41-NEXT:    cmpeqps %xmm1, %xmm32060; SSE41-NEXT:    cmpeqps %xmm0, %xmm22061; SSE41-NEXT:    roundps $10, %xmm1, %xmm12062; SSE41-NEXT:    andps %xmm3, %xmm12063; SSE41-NEXT:    roundps $10, %xmm0, %xmm02064; SSE41-NEXT:    andps %xmm2, %xmm02065; SSE41-NEXT:    retq2066;2067; AVX-LABEL: ceil_maskz_256_ps:2068; AVX:       ## %bb.0:2069; AVX-NEXT:    vcmpeqps %ymm1, %ymm0, %ymm12070; AVX-NEXT:    vroundps $10, %ymm0, %ymm02071; AVX-NEXT:    vandps %ymm0, %ymm1, %ymm02072; AVX-NEXT:    retq2073;2074; AVX512F-LABEL: ceil_maskz_256_ps:2075; AVX512F:       ## %bb.0:2076; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm12077; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm02078; AVX512F-NEXT:    vcmpeqps %zmm1, %zmm0, %k12079; AVX512F-NEXT:    vroundps $10, %ymm0, %ymm02080; AVX512F-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}2081; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm02082; AVX512F-NEXT:    retq2083;2084; AVX512VL-LABEL: ceil_maskz_256_ps:2085; AVX512VL:       ## %bb.0:2086; AVX512VL-NEXT:    vcmpeqps %ymm1, %ymm0, %k12087; AVX512VL-NEXT:    vrndscaleps $10, %ymm0, %ymm0 {%k1} {z}2088; AVX512VL-NEXT:    retq2089  %k = fcmp oeq <8 x float> %x, %y2090  %call = call <8 x float> @llvm.ceil.v8f32(<8 x float> %x)2091  %res = select <8 x i1> %k, <8 x float> %call, <8 x float> zeroinitializer2092  ret <8 x float> %res2093}2094 2095define <4 x double> @ceil_mask_256_pd(<4 x double> %x, <4 x double> %y) nounwind {2096; SSE41-LABEL: ceil_mask_256_pd:2097; SSE41:       ## %bb.0:2098; SSE41-NEXT:    roundpd $10, %xmm1, %xmm42099; SSE41-NEXT:    cmpeqpd %xmm3, %xmm12100; SSE41-NEXT:    roundpd $10, %xmm0, %xmm52101; SSE41-NEXT:    cmpeqpd %xmm2, %xmm02102; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm22103; SSE41-NEXT:    movapd %xmm1, %xmm02104; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm32105; SSE41-NEXT:    movapd %xmm2, %xmm02106; SSE41-NEXT:    movapd %xmm3, %xmm12107; SSE41-NEXT:    retq2108;2109; AVX-LABEL: ceil_mask_256_pd:2110; AVX:       ## %bb.0:2111; AVX-NEXT:    vcmpeqpd %ymm1, %ymm0, %ymm22112; AVX-NEXT:    vroundpd $10, %ymm0, %ymm02113; AVX-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm02114; AVX-NEXT:    retq2115;2116; AVX512F-LABEL: ceil_mask_256_pd:2117; AVX512F:       ## %bb.0:2118; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm12119; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm02120; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k12121; AVX512F-NEXT:    vroundpd $10, %ymm0, %ymm02122; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}2123; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm02124; AVX512F-NEXT:    retq2125;2126; AVX512VL-LABEL: ceil_mask_256_pd:2127; AVX512VL:       ## %bb.0:2128; AVX512VL-NEXT:    vcmpeqpd %ymm1, %ymm0, %k12129; AVX512VL-NEXT:    vrndscalepd $10, %ymm0, %ymm1 {%k1}2130; AVX512VL-NEXT:    vmovapd %ymm1, %ymm02131; AVX512VL-NEXT:    retq2132  %k = fcmp oeq <4 x double> %x, %y2133  %call = call <4 x double> @llvm.ceil.v4f64(<4 x double> %x)2134  %res = select <4 x i1> %k, <4 x double> %call, <4 x double> %y2135  ret <4 x double> %res2136}2137 2138define <4 x double> @ceil_maskz_256_pd(<4 x double> %x, <4 x double> %y) nounwind {2139; SSE41-LABEL: ceil_maskz_256_pd:2140; SSE41:       ## %bb.0:2141; SSE41-NEXT:    cmpeqpd %xmm1, %xmm32142; SSE41-NEXT:    cmpeqpd %xmm0, %xmm22143; SSE41-NEXT:    roundpd $10, %xmm1, %xmm12144; SSE41-NEXT:    andpd %xmm3, %xmm12145; SSE41-NEXT:    roundpd $10, %xmm0, %xmm02146; SSE41-NEXT:    andpd %xmm2, %xmm02147; SSE41-NEXT:    retq2148;2149; AVX-LABEL: ceil_maskz_256_pd:2150; AVX:       ## %bb.0:2151; AVX-NEXT:    vcmpeqpd %ymm1, %ymm0, %ymm12152; AVX-NEXT:    vroundpd $10, %ymm0, %ymm02153; AVX-NEXT:    vandpd %ymm0, %ymm1, %ymm02154; AVX-NEXT:    retq2155;2156; AVX512F-LABEL: ceil_maskz_256_pd:2157; AVX512F:       ## %bb.0:2158; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm12159; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm02160; AVX512F-NEXT:    vcmpeqpd %zmm1, %zmm0, %k12161; AVX512F-NEXT:    vroundpd $10, %ymm0, %ymm02162; AVX512F-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}2163; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm02164; AVX512F-NEXT:    retq2165;2166; AVX512VL-LABEL: ceil_maskz_256_pd:2167; AVX512VL:       ## %bb.0:2168; AVX512VL-NEXT:    vcmpeqpd %ymm1, %ymm0, %k12169; AVX512VL-NEXT:    vrndscalepd $10, %ymm0, %ymm0 {%k1} {z}2170; AVX512VL-NEXT:    retq2171  %k = fcmp oeq <4 x double> %x, %y2172  %call = call <4 x double> @llvm.ceil.v4f64(<4 x double> %x)2173  %res = select <4 x i1> %k, <4 x double> %call, <4 x double> zeroinitializer2174  ret <4 x double> %res2175}2176 2177define <16 x float> @ceil_mask_512_ps(<16 x float> %x, <16 x float> %y) nounwind {2178; SSE41-LABEL: ceil_mask_512_ps:2179; SSE41:       ## %bb.0:2180; SSE41-NEXT:    roundps $10, %xmm3, %xmm82181; SSE41-NEXT:    cmpeqps %xmm7, %xmm32182; SSE41-NEXT:    roundps $10, %xmm2, %xmm92183; SSE41-NEXT:    cmpeqps %xmm6, %xmm22184; SSE41-NEXT:    roundps $10, %xmm1, %xmm102185; SSE41-NEXT:    cmpeqps %xmm5, %xmm12186; SSE41-NEXT:    roundps $10, %xmm0, %xmm112187; SSE41-NEXT:    cmpeqps %xmm4, %xmm02188; SSE41-NEXT:    blendvps %xmm0, %xmm11, %xmm42189; SSE41-NEXT:    movaps %xmm1, %xmm02190; SSE41-NEXT:    blendvps %xmm0, %xmm10, %xmm52191; SSE41-NEXT:    movaps %xmm2, %xmm02192; SSE41-NEXT:    blendvps %xmm0, %xmm9, %xmm62193; SSE41-NEXT:    movaps %xmm3, %xmm02194; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm72195; SSE41-NEXT:    movaps %xmm4, %xmm02196; SSE41-NEXT:    movaps %xmm5, %xmm12197; SSE41-NEXT:    movaps %xmm6, %xmm22198; SSE41-NEXT:    movaps %xmm7, %xmm32199; SSE41-NEXT:    retq2200;2201; AVX-LABEL: ceil_mask_512_ps:2202; AVX:       ## %bb.0:2203; AVX-NEXT:    vcmpeqps %ymm3, %ymm1, %ymm42204; AVX-NEXT:    vcmpeqps %ymm2, %ymm0, %ymm52205; AVX-NEXT:    vroundps $10, %ymm1, %ymm12206; AVX-NEXT:    vroundps $10, %ymm0, %ymm02207; AVX-NEXT:    vblendvps %ymm5, %ymm0, %ymm2, %ymm02208; AVX-NEXT:    vblendvps %ymm4, %ymm1, %ymm3, %ymm12209; AVX-NEXT:    retq2210;2211; AVX512-LABEL: ceil_mask_512_ps:2212; AVX512:       ## %bb.0:2213; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k12214; AVX512-NEXT:    vrndscaleps $10, %zmm0, %zmm1 {%k1}2215; AVX512-NEXT:    vmovaps %zmm1, %zmm02216; AVX512-NEXT:    retq2217  %k = fcmp oeq <16 x float> %x, %y2218  %call = call <16 x float> @llvm.ceil.v16f32(<16 x float> %x)2219  %res = select <16 x i1> %k, <16 x float> %call, <16 x float> %y2220  ret <16 x float> %res2221}2222 2223define <16 x float> @ceil_maskz_512_ps(<16 x float> %x, <16 x float> %y) nounwind {2224; SSE41-LABEL: ceil_maskz_512_ps:2225; SSE41:       ## %bb.0:2226; SSE41-NEXT:    cmpeqps %xmm3, %xmm72227; SSE41-NEXT:    cmpeqps %xmm2, %xmm62228; SSE41-NEXT:    cmpeqps %xmm1, %xmm52229; SSE41-NEXT:    cmpeqps %xmm0, %xmm42230; SSE41-NEXT:    roundps $10, %xmm3, %xmm32231; SSE41-NEXT:    andps %xmm7, %xmm32232; SSE41-NEXT:    roundps $10, %xmm2, %xmm22233; SSE41-NEXT:    andps %xmm6, %xmm22234; SSE41-NEXT:    roundps $10, %xmm1, %xmm12235; SSE41-NEXT:    andps %xmm5, %xmm12236; SSE41-NEXT:    roundps $10, %xmm0, %xmm02237; SSE41-NEXT:    andps %xmm4, %xmm02238; SSE41-NEXT:    retq2239;2240; AVX-LABEL: ceil_maskz_512_ps:2241; AVX:       ## %bb.0:2242; AVX-NEXT:    vcmpeqps %ymm3, %ymm1, %ymm32243; AVX-NEXT:    vcmpeqps %ymm2, %ymm0, %ymm22244; AVX-NEXT:    vroundps $10, %ymm1, %ymm12245; AVX-NEXT:    vandps %ymm1, %ymm3, %ymm12246; AVX-NEXT:    vroundps $10, %ymm0, %ymm02247; AVX-NEXT:    vandps %ymm0, %ymm2, %ymm02248; AVX-NEXT:    retq2249;2250; AVX512-LABEL: ceil_maskz_512_ps:2251; AVX512:       ## %bb.0:2252; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k12253; AVX512-NEXT:    vrndscaleps $10, %zmm0, %zmm0 {%k1} {z}2254; AVX512-NEXT:    retq2255  %k = fcmp oeq <16 x float> %x, %y2256  %call = call <16 x float> @llvm.ceil.v16f32(<16 x float> %x)2257  %res = select <16 x i1> %k, <16 x float> %call, <16 x float> zeroinitializer2258  ret <16 x float> %res2259}2260 2261define <8 x double> @ceil_mask_512_pd(<8 x double> %x, <8 x double> %y) nounwind {2262; SSE41-LABEL: ceil_mask_512_pd:2263; SSE41:       ## %bb.0:2264; SSE41-NEXT:    roundpd $10, %xmm3, %xmm82265; SSE41-NEXT:    cmpeqpd %xmm7, %xmm32266; SSE41-NEXT:    roundpd $10, %xmm2, %xmm92267; SSE41-NEXT:    cmpeqpd %xmm6, %xmm22268; SSE41-NEXT:    roundpd $10, %xmm1, %xmm102269; SSE41-NEXT:    cmpeqpd %xmm5, %xmm12270; SSE41-NEXT:    roundpd $10, %xmm0, %xmm112271; SSE41-NEXT:    cmpeqpd %xmm4, %xmm02272; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm42273; SSE41-NEXT:    movapd %xmm1, %xmm02274; SSE41-NEXT:    blendvpd %xmm0, %xmm10, %xmm52275; SSE41-NEXT:    movapd %xmm2, %xmm02276; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm62277; SSE41-NEXT:    movapd %xmm3, %xmm02278; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm72279; SSE41-NEXT:    movapd %xmm4, %xmm02280; SSE41-NEXT:    movapd %xmm5, %xmm12281; SSE41-NEXT:    movapd %xmm6, %xmm22282; SSE41-NEXT:    movapd %xmm7, %xmm32283; SSE41-NEXT:    retq2284;2285; AVX-LABEL: ceil_mask_512_pd:2286; AVX:       ## %bb.0:2287; AVX-NEXT:    vcmpeqpd %ymm3, %ymm1, %ymm42288; AVX-NEXT:    vcmpeqpd %ymm2, %ymm0, %ymm52289; AVX-NEXT:    vroundpd $10, %ymm1, %ymm12290; AVX-NEXT:    vroundpd $10, %ymm0, %ymm02291; AVX-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm02292; AVX-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm12293; AVX-NEXT:    retq2294;2295; AVX512-LABEL: ceil_mask_512_pd:2296; AVX512:       ## %bb.0:2297; AVX512-NEXT:    vcmpeqpd %zmm1, %zmm0, %k12298; AVX512-NEXT:    vrndscalepd $10, %zmm0, %zmm1 {%k1}2299; AVX512-NEXT:    vmovapd %zmm1, %zmm02300; AVX512-NEXT:    retq2301  %k = fcmp oeq <8 x double> %x, %y2302  %call = call <8 x double> @llvm.ceil.v8f64(<8 x double> %x)2303  %res = select <8 x i1> %k, <8 x double> %call, <8 x double> %y2304  ret <8 x double> %res2305}2306 2307define <8 x double> @ceil_maskz_512_pd(<8 x double> %x, <8 x double> %y) nounwind {2308; SSE41-LABEL: ceil_maskz_512_pd:2309; SSE41:       ## %bb.0:2310; SSE41-NEXT:    cmpeqpd %xmm3, %xmm72311; SSE41-NEXT:    cmpeqpd %xmm2, %xmm62312; SSE41-NEXT:    cmpeqpd %xmm1, %xmm52313; SSE41-NEXT:    cmpeqpd %xmm0, %xmm42314; SSE41-NEXT:    roundpd $10, %xmm3, %xmm32315; SSE41-NEXT:    andpd %xmm7, %xmm32316; SSE41-NEXT:    roundpd $10, %xmm2, %xmm22317; SSE41-NEXT:    andpd %xmm6, %xmm22318; SSE41-NEXT:    roundpd $10, %xmm1, %xmm12319; SSE41-NEXT:    andpd %xmm5, %xmm12320; SSE41-NEXT:    roundpd $10, %xmm0, %xmm02321; SSE41-NEXT:    andpd %xmm4, %xmm02322; SSE41-NEXT:    retq2323;2324; AVX-LABEL: ceil_maskz_512_pd:2325; AVX:       ## %bb.0:2326; AVX-NEXT:    vcmpeqpd %ymm3, %ymm1, %ymm32327; AVX-NEXT:    vcmpeqpd %ymm2, %ymm0, %ymm22328; AVX-NEXT:    vroundpd $10, %ymm1, %ymm12329; AVX-NEXT:    vandpd %ymm1, %ymm3, %ymm12330; AVX-NEXT:    vroundpd $10, %ymm0, %ymm02331; AVX-NEXT:    vandpd %ymm0, %ymm2, %ymm02332; AVX-NEXT:    retq2333;2334; AVX512-LABEL: ceil_maskz_512_pd:2335; AVX512:       ## %bb.0:2336; AVX512-NEXT:    vcmpeqpd %zmm1, %zmm0, %k12337; AVX512-NEXT:    vrndscalepd $10, %zmm0, %zmm0 {%k1} {z}2338; AVX512-NEXT:    retq2339  %k = fcmp oeq <8 x double> %x, %y2340  %call = call <8 x double> @llvm.ceil.v8f64(<8 x double> %x)2341  %res = select <8 x i1> %k, <8 x double> %call, <8 x double> zeroinitializer2342  ret <8 x double> %res2343}2344 2345define <4 x float> @ceil_mask_ss(<4 x float> %x, <4 x float> %y, <4 x float> %w, i8 %k) nounwind {2346; SSE41-LABEL: ceil_mask_ss:2347; SSE41:       ## %bb.0:2348; SSE41-NEXT:    testb $1, %dil2349; SSE41-NEXT:    je LBB78_22350; SSE41-NEXT:  ## %bb.1:2351; SSE41-NEXT:    xorps %xmm2, %xmm22352; SSE41-NEXT:    roundss $10, %xmm0, %xmm22353; SSE41-NEXT:  LBB78_2:2354; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]2355; SSE41-NEXT:    movaps %xmm1, %xmm02356; SSE41-NEXT:    retq2357;2358; AVX-LABEL: ceil_mask_ss:2359; AVX:       ## %bb.0:2360; AVX-NEXT:    testb $1, %dil2361; AVX-NEXT:    je LBB78_22362; AVX-NEXT:  ## %bb.1:2363; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm22364; AVX-NEXT:  LBB78_2:2365; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]2366; AVX-NEXT:    retq2367;2368; AVX512-LABEL: ceil_mask_ss:2369; AVX512:       ## %bb.0:2370; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm02371; AVX512-NEXT:    kmovw %edi, %k12372; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm2 {%k1}2373; AVX512-NEXT:    vmovaps %xmm2, %xmm02374; AVX512-NEXT:    retq2375  %mask = and i8 %k, 12376  %nmask = icmp eq i8 %mask, 02377  %s = extractelement <4 x float> %x, i64 02378  %call = tail call float @llvm.ceil.f32(float %s)2379  %dst = extractelement <4 x float> %w, i64 02380  %low = select i1 %nmask, float %dst, float %call2381  %res = insertelement <4 x float> %y, float %low, i64 02382  ret <4 x float> %res2383}2384 2385define <4 x float> @ceil_maskz_ss(<4 x float> %x, <4 x float> %y, i8 %k) nounwind {2386; SSE41-LABEL: ceil_maskz_ss:2387; SSE41:       ## %bb.0:2388; SSE41-NEXT:    testb $1, %dil2389; SSE41-NEXT:    xorps %xmm2, %xmm22390; SSE41-NEXT:    je LBB79_22391; SSE41-NEXT:  ## %bb.1:2392; SSE41-NEXT:    xorps %xmm2, %xmm22393; SSE41-NEXT:    roundss $10, %xmm0, %xmm22394; SSE41-NEXT:  LBB79_2:2395; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]2396; SSE41-NEXT:    movaps %xmm1, %xmm02397; SSE41-NEXT:    retq2398;2399; AVX-LABEL: ceil_maskz_ss:2400; AVX:       ## %bb.0:2401; AVX-NEXT:    testb $1, %dil2402; AVX-NEXT:    vxorps %xmm2, %xmm2, %xmm22403; AVX-NEXT:    je LBB79_22404; AVX-NEXT:  ## %bb.1:2405; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm22406; AVX-NEXT:  LBB79_2:2407; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]2408; AVX-NEXT:    retq2409;2410; AVX512-LABEL: ceil_maskz_ss:2411; AVX512:       ## %bb.0:2412; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm02413; AVX512-NEXT:    kmovw %edi, %k12414; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm0 {%k1} {z}2415; AVX512-NEXT:    retq2416  %mask = and i8 %k, 12417  %nmask = icmp eq i8 %mask, 02418  %s = extractelement <4 x float> %x, i64 02419  %call = tail call float @llvm.ceil.f32(float %s)2420  %low = select i1 %nmask, float zeroinitializer, float %call2421  %res = insertelement <4 x float> %y, float %low, i64 02422  ret <4 x float> %res2423}2424 2425define <2 x double> @ceil_mask_sd(<2 x double> %x, <2 x double> %y, <2 x double> %w, i8 %k) nounwind {2426; SSE41-LABEL: ceil_mask_sd:2427; SSE41:       ## %bb.0:2428; SSE41-NEXT:    testb $1, %dil2429; SSE41-NEXT:    je LBB80_22430; SSE41-NEXT:  ## %bb.1:2431; SSE41-NEXT:    xorps %xmm2, %xmm22432; SSE41-NEXT:    roundsd $10, %xmm0, %xmm22433; SSE41-NEXT:  LBB80_2:2434; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]2435; SSE41-NEXT:    movapd %xmm1, %xmm02436; SSE41-NEXT:    retq2437;2438; AVX-LABEL: ceil_mask_sd:2439; AVX:       ## %bb.0:2440; AVX-NEXT:    testb $1, %dil2441; AVX-NEXT:    je LBB80_22442; AVX-NEXT:  ## %bb.1:2443; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm22444; AVX-NEXT:  LBB80_2:2445; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]2446; AVX-NEXT:    retq2447;2448; AVX512-LABEL: ceil_mask_sd:2449; AVX512:       ## %bb.0:2450; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm02451; AVX512-NEXT:    kmovw %edi, %k12452; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm2 {%k1}2453; AVX512-NEXT:    vmovapd %xmm2, %xmm02454; AVX512-NEXT:    retq2455  %mask = and i8 %k, 12456  %nmask = icmp eq i8 %mask, 02457  %s = extractelement <2 x double> %x, i64 02458  %call = tail call double @llvm.ceil.f64(double %s)2459  %dst = extractelement <2 x double> %w, i64 02460  %low = select i1 %nmask, double %dst, double %call2461  %res = insertelement <2 x double> %y, double %low, i64 02462  ret <2 x double> %res2463}2464 2465define <2 x double> @ceil_maskz_sd(<2 x double> %x, <2 x double> %y, i8 %k) nounwind {2466; SSE41-LABEL: ceil_maskz_sd:2467; SSE41:       ## %bb.0:2468; SSE41-NEXT:    testb $1, %dil2469; SSE41-NEXT:    xorpd %xmm2, %xmm22470; SSE41-NEXT:    je LBB81_22471; SSE41-NEXT:  ## %bb.1:2472; SSE41-NEXT:    xorps %xmm2, %xmm22473; SSE41-NEXT:    roundsd $10, %xmm0, %xmm22474; SSE41-NEXT:  LBB81_2:2475; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]2476; SSE41-NEXT:    movapd %xmm1, %xmm02477; SSE41-NEXT:    retq2478;2479; AVX-LABEL: ceil_maskz_sd:2480; AVX:       ## %bb.0:2481; AVX-NEXT:    testb $1, %dil2482; AVX-NEXT:    vxorpd %xmm2, %xmm2, %xmm22483; AVX-NEXT:    je LBB81_22484; AVX-NEXT:  ## %bb.1:2485; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm22486; AVX-NEXT:  LBB81_2:2487; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]2488; AVX-NEXT:    retq2489;2490; AVX512-LABEL: ceil_maskz_sd:2491; AVX512:       ## %bb.0:2492; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm02493; AVX512-NEXT:    kmovw %edi, %k12494; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm0 {%k1} {z}2495; AVX512-NEXT:    retq2496  %mask = and i8 %k, 12497  %nmask = icmp eq i8 %mask, 02498  %s = extractelement <2 x double> %x, i64 02499  %call = tail call double @llvm.ceil.f64(double %s)2500  %low = select i1 %nmask, double zeroinitializer, double %call2501  %res = insertelement <2 x double> %y, double %low, i64 02502  ret <2 x double> %res2503}2504 2505define <4 x float> @ceil_mask_ss_trunc(<4 x float> %x, <4 x float> %y, <4 x float> %w, i16 %k) nounwind {2506; SSE41-LABEL: ceil_mask_ss_trunc:2507; SSE41:       ## %bb.0:2508; SSE41-NEXT:    testb $1, %dil2509; SSE41-NEXT:    je LBB82_22510; SSE41-NEXT:  ## %bb.1:2511; SSE41-NEXT:    xorps %xmm2, %xmm22512; SSE41-NEXT:    roundss $10, %xmm0, %xmm22513; SSE41-NEXT:  LBB82_2:2514; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]2515; SSE41-NEXT:    movaps %xmm1, %xmm02516; SSE41-NEXT:    retq2517;2518; AVX-LABEL: ceil_mask_ss_trunc:2519; AVX:       ## %bb.0:2520; AVX-NEXT:    testb $1, %dil2521; AVX-NEXT:    je LBB82_22522; AVX-NEXT:  ## %bb.1:2523; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm22524; AVX-NEXT:  LBB82_2:2525; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm2[0],xmm1[1,2,3]2526; AVX-NEXT:    retq2527;2528; AVX512-LABEL: ceil_mask_ss_trunc:2529; AVX512:       ## %bb.0:2530; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm02531; AVX512-NEXT:    kmovw %edi, %k12532; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm2 {%k1}2533; AVX512-NEXT:    vmovaps %xmm2, %xmm02534; AVX512-NEXT:    retq2535  %mask = trunc i16 %k to i12536  %s = extractelement <4 x float> %x, i64 02537  %call = tail call float @llvm.ceil.f32(float %s)2538  %dst = extractelement <4 x float> %w, i64 02539  %low = select i1 %mask, float %call, float %dst2540  %res = insertelement <4 x float> %y, float %low, i64 02541  ret <4 x float> %res2542}2543 2544define <4 x float> @ceil_maskz_ss_trunc(<4 x float> %x, <4 x float> %y, i16 %k) nounwind {2545; SSE41-LABEL: ceil_maskz_ss_trunc:2546; SSE41:       ## %bb.0:2547; SSE41-NEXT:    testb $1, %dil2548; SSE41-NEXT:    jne LBB83_12549; SSE41-NEXT:  ## %bb.2:2550; SSE41-NEXT:    xorps %xmm0, %xmm02551; SSE41-NEXT:    jmp LBB83_32552; SSE41-NEXT:  LBB83_1:2553; SSE41-NEXT:    roundss $10, %xmm0, %xmm02554; SSE41-NEXT:  LBB83_3:2555; SSE41-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]2556; SSE41-NEXT:    movaps %xmm1, %xmm02557; SSE41-NEXT:    retq2558;2559; AVX-LABEL: ceil_maskz_ss_trunc:2560; AVX:       ## %bb.0:2561; AVX-NEXT:    testb $1, %dil2562; AVX-NEXT:    jne LBB83_12563; AVX-NEXT:  ## %bb.2:2564; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm02565; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2566; AVX-NEXT:    retq2567; AVX-NEXT:  LBB83_1:2568; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm02569; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2570; AVX-NEXT:    retq2571;2572; AVX512-LABEL: ceil_maskz_ss_trunc:2573; AVX512:       ## %bb.0:2574; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm02575; AVX512-NEXT:    kmovw %edi, %k12576; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm0 {%k1} {z}2577; AVX512-NEXT:    retq2578  %mask = trunc i16 %k to i12579  %s = extractelement <4 x float> %x, i64 02580  %call = tail call float @llvm.ceil.f32(float %s)2581  %low = select i1 %mask, float %call, float zeroinitializer2582  %res = insertelement <4 x float> %y, float %low, i64 02583  ret <4 x float> %res2584}2585 2586define <2 x double> @ceil_mask_sd_trunc(<2 x double> %x, <2 x double> %y, <2 x double> %w, i16 %k) nounwind {2587; SSE41-LABEL: ceil_mask_sd_trunc:2588; SSE41:       ## %bb.0:2589; SSE41-NEXT:    testb $1, %dil2590; SSE41-NEXT:    je LBB84_22591; SSE41-NEXT:  ## %bb.1:2592; SSE41-NEXT:    xorps %xmm2, %xmm22593; SSE41-NEXT:    roundsd $10, %xmm0, %xmm22594; SSE41-NEXT:  LBB84_2:2595; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]2596; SSE41-NEXT:    movapd %xmm1, %xmm02597; SSE41-NEXT:    retq2598;2599; AVX-LABEL: ceil_mask_sd_trunc:2600; AVX:       ## %bb.0:2601; AVX-NEXT:    testb $1, %dil2602; AVX-NEXT:    je LBB84_22603; AVX-NEXT:  ## %bb.1:2604; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm22605; AVX-NEXT:  LBB84_2:2606; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm2[0],xmm1[1]2607; AVX-NEXT:    retq2608;2609; AVX512-LABEL: ceil_mask_sd_trunc:2610; AVX512:       ## %bb.0:2611; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm02612; AVX512-NEXT:    kmovw %edi, %k12613; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm2 {%k1}2614; AVX512-NEXT:    vmovapd %xmm2, %xmm02615; AVX512-NEXT:    retq2616  %mask = trunc i16 %k to i12617  %s = extractelement <2 x double> %x, i64 02618  %call = tail call double @llvm.ceil.f64(double %s)2619  %dst = extractelement <2 x double> %w, i64 02620  %low = select i1 %mask, double %call, double %dst2621  %res = insertelement <2 x double> %y, double %low, i64 02622  ret <2 x double> %res2623}2624 2625define <2 x double> @ceil_maskz_sd_trunc(<2 x double> %x, <2 x double> %y, i16 %k) nounwind {2626; SSE41-LABEL: ceil_maskz_sd_trunc:2627; SSE41:       ## %bb.0:2628; SSE41-NEXT:    testb $1, %dil2629; SSE41-NEXT:    jne LBB85_12630; SSE41-NEXT:  ## %bb.2:2631; SSE41-NEXT:    xorpd %xmm0, %xmm02632; SSE41-NEXT:    jmp LBB85_32633; SSE41-NEXT:  LBB85_1:2634; SSE41-NEXT:    roundsd $10, %xmm0, %xmm02635; SSE41-NEXT:  LBB85_3:2636; SSE41-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]2637; SSE41-NEXT:    movapd %xmm1, %xmm02638; SSE41-NEXT:    retq2639;2640; AVX-LABEL: ceil_maskz_sd_trunc:2641; AVX:       ## %bb.0:2642; AVX-NEXT:    testb $1, %dil2643; AVX-NEXT:    jne LBB85_12644; AVX-NEXT:  ## %bb.2:2645; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm02646; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]2647; AVX-NEXT:    retq2648; AVX-NEXT:  LBB85_1:2649; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm02650; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]2651; AVX-NEXT:    retq2652;2653; AVX512-LABEL: ceil_maskz_sd_trunc:2654; AVX512:       ## %bb.0:2655; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm02656; AVX512-NEXT:    kmovw %edi, %k12657; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm0 {%k1} {z}2658; AVX512-NEXT:    retq2659  %mask = trunc i16 %k to i12660  %s = extractelement <2 x double> %x, i64 02661  %call = tail call double @llvm.ceil.f64(double %s)2662  %low = select i1 %mask, double %call, double zeroinitializer2663  %res = insertelement <2 x double> %y, double %low, i64 02664  ret <2 x double> %res2665}2666 2667define <4 x float> @ceil_mask_ss_mask8(<4 x float> %x, <4 x float> %y, <4 x float> %w) nounwind {2668; SSE41-LABEL: ceil_mask_ss_mask8:2669; SSE41:       ## %bb.0:2670; SSE41-NEXT:    roundss $10, %xmm0, %xmm32671; SSE41-NEXT:    cmpeqss %xmm1, %xmm02672; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm22673; SSE41-NEXT:    blendps {{.*#+}} xmm2 = xmm2[0],xmm1[1,2,3]2674; SSE41-NEXT:    movaps %xmm2, %xmm02675; SSE41-NEXT:    retq2676;2677; AVX-LABEL: ceil_mask_ss_mask8:2678; AVX:       ## %bb.0:2679; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm32680; AVX-NEXT:    vcmpeqss %xmm1, %xmm0, %xmm02681; AVX-NEXT:    vblendvps %xmm0, %xmm3, %xmm2, %xmm02682; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2683; AVX-NEXT:    retq2684;2685; AVX512-LABEL: ceil_mask_ss_mask8:2686; AVX512:       ## %bb.0:2687; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm32688; AVX512-NEXT:    vcmpeqss %xmm1, %xmm0, %k12689; AVX512-NEXT:    vmovss %xmm3, %xmm1, %xmm2 {%k1}2690; AVX512-NEXT:    vmovaps %xmm2, %xmm02691; AVX512-NEXT:    retq2692  %mask1 = fcmp oeq <4 x float> %x, %y2693  %mask = extractelement <4 x i1> %mask1, i64 02694  %s = extractelement <4 x float> %x, i64 02695  %call = tail call float @llvm.ceil.f32(float %s)2696  %dst = extractelement <4 x float> %w, i64 02697  %low = select i1 %mask, float %call, float %dst2698  %res = insertelement <4 x float> %y, float %low, i64 02699  ret <4 x float> %res2700}2701 2702define <4 x float> @ceil_maskz_ss_mask8(<4 x float> %x, <4 x float> %y) nounwind {2703; SSE41-LABEL: ceil_maskz_ss_mask8:2704; SSE41:       ## %bb.0:2705; SSE41-NEXT:    roundss $10, %xmm0, %xmm22706; SSE41-NEXT:    cmpeqss %xmm1, %xmm02707; SSE41-NEXT:    andps %xmm2, %xmm02708; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2709; SSE41-NEXT:    retq2710;2711; AVX-LABEL: ceil_maskz_ss_mask8:2712; AVX:       ## %bb.0:2713; AVX-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm22714; AVX-NEXT:    vcmpeqss %xmm1, %xmm0, %xmm02715; AVX-NEXT:    vandps %xmm2, %xmm0, %xmm02716; AVX-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2717; AVX-NEXT:    retq2718;2719; AVX512-LABEL: ceil_maskz_ss_mask8:2720; AVX512:       ## %bb.0:2721; AVX512-NEXT:    vroundss $10, %xmm0, %xmm0, %xmm22722; AVX512-NEXT:    vcmpeqss %xmm1, %xmm0, %k12723; AVX512-NEXT:    vmovss %xmm2, %xmm1, %xmm0 {%k1} {z}2724; AVX512-NEXT:    retq2725  %mask1 = fcmp oeq <4 x float> %x, %y2726  %mask = extractelement <4 x i1> %mask1, i64 02727  %s = extractelement <4 x float> %x, i64 02728  %call = tail call float @llvm.ceil.f32(float %s)2729  %low = select i1 %mask, float %call, float zeroinitializer2730  %res = insertelement <4 x float> %y, float %low, i64 02731  ret <4 x float> %res2732}2733 2734define <2 x double> @ceil_mask_sd_mask8(<2 x double> %x, <2 x double> %y, <2 x double> %w) nounwind {2735; SSE41-LABEL: ceil_mask_sd_mask8:2736; SSE41:       ## %bb.0:2737; SSE41-NEXT:    roundsd $10, %xmm0, %xmm32738; SSE41-NEXT:    cmpeqsd %xmm1, %xmm02739; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm22740; SSE41-NEXT:    blendpd {{.*#+}} xmm2 = xmm2[0],xmm1[1]2741; SSE41-NEXT:    movapd %xmm2, %xmm02742; SSE41-NEXT:    retq2743;2744; AVX-LABEL: ceil_mask_sd_mask8:2745; AVX:       ## %bb.0:2746; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm32747; AVX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm02748; AVX-NEXT:    vblendvpd %xmm0, %xmm3, %xmm2, %xmm02749; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]2750; AVX-NEXT:    retq2751;2752; AVX512-LABEL: ceil_mask_sd_mask8:2753; AVX512:       ## %bb.0:2754; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm32755; AVX512-NEXT:    vcmpeqsd %xmm1, %xmm0, %k12756; AVX512-NEXT:    vmovsd %xmm3, %xmm1, %xmm2 {%k1}2757; AVX512-NEXT:    vmovapd %xmm2, %xmm02758; AVX512-NEXT:    retq2759  %mask1 = fcmp oeq <2 x double> %x, %y2760  %mask = extractelement <2 x i1> %mask1, i64 02761  %s = extractelement <2 x double> %x, i64 02762  %call = tail call double @llvm.ceil.f64(double %s)2763  %dst = extractelement <2 x double> %w, i64 02764  %low = select i1 %mask, double %call, double %dst2765  %res = insertelement <2 x double> %y, double %low, i64 02766  ret <2 x double> %res2767}2768 2769define <2 x double> @ceil_maskz_sd_mask8(<2 x double> %x, <2 x double> %y) nounwind {2770; SSE41-LABEL: ceil_maskz_sd_mask8:2771; SSE41:       ## %bb.0:2772; SSE41-NEXT:    roundsd $10, %xmm0, %xmm22773; SSE41-NEXT:    cmpeqsd %xmm1, %xmm02774; SSE41-NEXT:    andpd %xmm2, %xmm02775; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]2776; SSE41-NEXT:    retq2777;2778; AVX-LABEL: ceil_maskz_sd_mask8:2779; AVX:       ## %bb.0:2780; AVX-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm22781; AVX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm02782; AVX-NEXT:    vandpd %xmm2, %xmm0, %xmm02783; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]2784; AVX-NEXT:    retq2785;2786; AVX512-LABEL: ceil_maskz_sd_mask8:2787; AVX512:       ## %bb.0:2788; AVX512-NEXT:    vroundsd $10, %xmm0, %xmm0, %xmm22789; AVX512-NEXT:    vcmpeqsd %xmm1, %xmm0, %k12790; AVX512-NEXT:    vmovsd %xmm2, %xmm1, %xmm0 {%k1} {z}2791; AVX512-NEXT:    retq2792  %mask1 = fcmp oeq <2 x double> %x, %y2793  %mask = extractelement <2 x i1> %mask1, i64 02794  %s = extractelement <2 x double> %x, i64 02795  %call = tail call double @llvm.ceil.f64(double %s)2796  %low = select i1 %mask, double %call, double zeroinitializer2797  %res = insertelement <2 x double> %y, double %low, i64 02798  ret <2 x double> %res2799}2800