1394 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv7 -mattr=+neon %s -o - | FileCheck %s --check-prefix=ARMV73; RUN: llc -mtriple=armv7 -mattr=+fp-armv8 %s -o - | FileCheck %s --check-prefix=ARMV84; RUN: llc -mtriple=armv8.2a -mattr=+fp-armv8 %s -o - | FileCheck %s --check-prefix=ARMV85; RUN: llc -mtriple=armv8.1m-none-none-eabi -mattr=+mve.fp,+fp64 %s -o - | FileCheck %s --check-prefix=ARMV8M6 7declare float @llvm.minnum.f32(float, float)8declare float @llvm.maxnum.f32(float, float)9declare double @llvm.minnum.f64(double, double)10declare double @llvm.maxnum.f64(double, double)11declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)12declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)13declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)14declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)15 16define float @fminnum32_intrinsic(float %x, float %y) {17; ARMV7-LABEL: fminnum32_intrinsic:18; ARMV7: @ %bb.0:19; ARMV7-NEXT: vmov s0, r120; ARMV7-NEXT: vmov s2, r021; ARMV7-NEXT: vcmp.f32 s2, s022; ARMV7-NEXT: vmrs APSR_nzcv, fpscr23; ARMV7-NEXT: vmovlt.f32 s0, s224; ARMV7-NEXT: vmov r0, s025; ARMV7-NEXT: bx lr26;27; ARMV8-LABEL: fminnum32_intrinsic:28; ARMV8: @ %bb.0:29; ARMV8-NEXT: vmov s0, r130; ARMV8-NEXT: vmov s2, r031; ARMV8-NEXT: vminnm.f32 s0, s2, s032; ARMV8-NEXT: vmov r0, s033; ARMV8-NEXT: bx lr34;35; ARMV8M-LABEL: fminnum32_intrinsic:36; ARMV8M: @ %bb.0:37; ARMV8M-NEXT: vmov s0, r138; ARMV8M-NEXT: vmov s2, r039; ARMV8M-NEXT: vminnm.f32 s0, s2, s040; ARMV8M-NEXT: vmov r0, s041; ARMV8M-NEXT: bx lr42 %a = call nnan float @llvm.minnum.f32(float %x, float %y)43 ret float %a44}45 46define float @fminnum32_nsz_intrinsic(float %x, float %y) {47; ARMV7-LABEL: fminnum32_nsz_intrinsic:48; ARMV7: @ %bb.0:49; ARMV7-NEXT: vmov s0, r150; ARMV7-NEXT: vmov s2, r051; ARMV7-NEXT: vmin.f32 d0, d1, d052; ARMV7-NEXT: vmov r0, s053; ARMV7-NEXT: bx lr54;55; ARMV8-LABEL: fminnum32_nsz_intrinsic:56; ARMV8: @ %bb.0:57; ARMV8-NEXT: vmov s0, r158; ARMV8-NEXT: vmov s2, r059; ARMV8-NEXT: vminnm.f32 s0, s2, s060; ARMV8-NEXT: vmov r0, s061; ARMV8-NEXT: bx lr62;63; ARMV8M-LABEL: fminnum32_nsz_intrinsic:64; ARMV8M: @ %bb.0:65; ARMV8M-NEXT: vmov s0, r166; ARMV8M-NEXT: vmov s2, r067; ARMV8M-NEXT: vminnm.f32 s0, s2, s068; ARMV8M-NEXT: vmov r0, s069; ARMV8M-NEXT: bx lr70 %a = call nnan nsz float @llvm.minnum.f32(float %x, float %y)71 ret float %a72}73 74define float @fminnum32_non_zero_intrinsic(float %x) {75; ARMV7-LABEL: fminnum32_non_zero_intrinsic:76; ARMV7: @ %bb.0:77; ARMV7-NEXT: vmov.f32 s0, #-1.000000e+0078; ARMV7-NEXT: vmov s2, r079; ARMV7-NEXT: vmin.f32 d0, d1, d080; ARMV7-NEXT: vmov r0, s081; ARMV7-NEXT: bx lr82;83; ARMV8-LABEL: fminnum32_non_zero_intrinsic:84; ARMV8: @ %bb.0:85; ARMV8-NEXT: vmov.f32 s0, #-1.000000e+0086; ARMV8-NEXT: vmov s2, r087; ARMV8-NEXT: vminnm.f32 s0, s2, s088; ARMV8-NEXT: vmov r0, s089; ARMV8-NEXT: bx lr90;91; ARMV8M-LABEL: fminnum32_non_zero_intrinsic:92; ARMV8M: @ %bb.0:93; ARMV8M-NEXT: vmov.f32 s0, #-1.000000e+0094; ARMV8M-NEXT: vmov s2, r095; ARMV8M-NEXT: vminnm.f32 s0, s2, s096; ARMV8M-NEXT: vmov r0, s097; ARMV8M-NEXT: bx lr98 %a = call nnan float @llvm.minnum.f32(float %x, float -1.0)99 ret float %a100}101 102define float @fmaxnum32_intrinsic(float %x, float %y) {103; ARMV7-LABEL: fmaxnum32_intrinsic:104; ARMV7: @ %bb.0:105; ARMV7-NEXT: vmov s0, r1106; ARMV7-NEXT: vmov s2, r0107; ARMV7-NEXT: vcmp.f32 s2, s0108; ARMV7-NEXT: vmrs APSR_nzcv, fpscr109; ARMV7-NEXT: vmovgt.f32 s0, s2110; ARMV7-NEXT: vmov r0, s0111; ARMV7-NEXT: bx lr112;113; ARMV8-LABEL: fmaxnum32_intrinsic:114; ARMV8: @ %bb.0:115; ARMV8-NEXT: vmov s0, r1116; ARMV8-NEXT: vmov s2, r0117; ARMV8-NEXT: vmaxnm.f32 s0, s2, s0118; ARMV8-NEXT: vmov r0, s0119; ARMV8-NEXT: bx lr120;121; ARMV8M-LABEL: fmaxnum32_intrinsic:122; ARMV8M: @ %bb.0:123; ARMV8M-NEXT: vmov s0, r1124; ARMV8M-NEXT: vmov s2, r0125; ARMV8M-NEXT: vmaxnm.f32 s0, s2, s0126; ARMV8M-NEXT: vmov r0, s0127; ARMV8M-NEXT: bx lr128 %a = call nnan float @llvm.maxnum.f32(float %x, float %y)129 ret float %a130}131 132define float @fmaxnum32_nsz_intrinsic(float %x, float %y) {133; ARMV7-LABEL: fmaxnum32_nsz_intrinsic:134; ARMV7: @ %bb.0:135; ARMV7-NEXT: vmov s0, r1136; ARMV7-NEXT: vmov s2, r0137; ARMV7-NEXT: vmax.f32 d0, d1, d0138; ARMV7-NEXT: vmov r0, s0139; ARMV7-NEXT: bx lr140;141; ARMV8-LABEL: fmaxnum32_nsz_intrinsic:142; ARMV8: @ %bb.0:143; ARMV8-NEXT: vmov s0, r1144; ARMV8-NEXT: vmov s2, r0145; ARMV8-NEXT: vmaxnm.f32 s0, s2, s0146; ARMV8-NEXT: vmov r0, s0147; ARMV8-NEXT: bx lr148;149; ARMV8M-LABEL: fmaxnum32_nsz_intrinsic:150; ARMV8M: @ %bb.0:151; ARMV8M-NEXT: vmov s0, r1152; ARMV8M-NEXT: vmov s2, r0153; ARMV8M-NEXT: vmaxnm.f32 s0, s2, s0154; ARMV8M-NEXT: vmov r0, s0155; ARMV8M-NEXT: bx lr156 %a = call nnan nsz float @llvm.maxnum.f32(float %x, float %y)157 ret float %a158}159 160define float @fmaxnum32_zero_intrinsic(float %x) {161; ARMV7-LABEL: fmaxnum32_zero_intrinsic:162; ARMV7: @ %bb.0:163; ARMV7-NEXT: vmov s0, r0164; ARMV7-NEXT: vldr s2, .LCPI5_0165; ARMV7-NEXT: vcmp.f32 s0, #0166; ARMV7-NEXT: vmrs APSR_nzcv, fpscr167; ARMV7-NEXT: vmovgt.f32 s2, s0168; ARMV7-NEXT: vmov r0, s2169; ARMV7-NEXT: bx lr170; ARMV7-NEXT: .p2align 2171; ARMV7-NEXT: @ %bb.1:172; ARMV7-NEXT: .LCPI5_0:173; ARMV7-NEXT: .long 0x00000000 @ float 0174;175; ARMV8-LABEL: fmaxnum32_zero_intrinsic:176; ARMV8: @ %bb.0:177; ARMV8-NEXT: vldr s0, .LCPI5_0178; ARMV8-NEXT: vmov s2, r0179; ARMV8-NEXT: vmaxnm.f32 s0, s2, s0180; ARMV8-NEXT: vmov r0, s0181; ARMV8-NEXT: bx lr182; ARMV8-NEXT: .p2align 2183; ARMV8-NEXT: @ %bb.1:184; ARMV8-NEXT: .LCPI5_0:185; ARMV8-NEXT: .long 0x00000000 @ float 0186;187; ARMV8M-LABEL: fmaxnum32_zero_intrinsic:188; ARMV8M: @ %bb.0:189; ARMV8M-NEXT: vldr s0, .LCPI5_0190; ARMV8M-NEXT: vmov s2, r0191; ARMV8M-NEXT: vmaxnm.f32 s0, s2, s0192; ARMV8M-NEXT: vmov r0, s0193; ARMV8M-NEXT: bx lr194; ARMV8M-NEXT: .p2align 2195; ARMV8M-NEXT: @ %bb.1:196; ARMV8M-NEXT: .LCPI5_0:197; ARMV8M-NEXT: .long 0x00000000 @ float 0198 %a = call nnan float @llvm.maxnum.f32(float %x, float 0.0)199 ret float %a200}201 202define float @fmaxnum32_non_zero_intrinsic(float %x) {203; ARMV7-LABEL: fmaxnum32_non_zero_intrinsic:204; ARMV7: @ %bb.0:205; ARMV7-NEXT: vmov.f32 s0, #1.000000e+00206; ARMV7-NEXT: vmov s2, r0207; ARMV7-NEXT: vmax.f32 d0, d1, d0208; ARMV7-NEXT: vmov r0, s0209; ARMV7-NEXT: bx lr210;211; ARMV8-LABEL: fmaxnum32_non_zero_intrinsic:212; ARMV8: @ %bb.0:213; ARMV8-NEXT: vmov.f32 s0, #1.000000e+00214; ARMV8-NEXT: vmov s2, r0215; ARMV8-NEXT: vmaxnm.f32 s0, s2, s0216; ARMV8-NEXT: vmov r0, s0217; ARMV8-NEXT: bx lr218;219; ARMV8M-LABEL: fmaxnum32_non_zero_intrinsic:220; ARMV8M: @ %bb.0:221; ARMV8M-NEXT: vmov.f32 s0, #1.000000e+00222; ARMV8M-NEXT: vmov s2, r0223; ARMV8M-NEXT: vmaxnm.f32 s0, s2, s0224; ARMV8M-NEXT: vmov r0, s0225; ARMV8M-NEXT: bx lr226 %a = call nnan float @llvm.maxnum.f32(float %x, float 1.0)227 ret float %a228}229 230define double @fminnum64_intrinsic(double %x, double %y) {231; ARMV7-LABEL: fminnum64_intrinsic:232; ARMV7: @ %bb.0:233; ARMV7-NEXT: vmov d16, r2, r3234; ARMV7-NEXT: vmov d17, r0, r1235; ARMV7-NEXT: vcmp.f64 d17, d16236; ARMV7-NEXT: vmrs APSR_nzcv, fpscr237; ARMV7-NEXT: vmovlt.f64 d16, d17238; ARMV7-NEXT: vmov r0, r1, d16239; ARMV7-NEXT: bx lr240;241; ARMV8-LABEL: fminnum64_intrinsic:242; ARMV8: @ %bb.0:243; ARMV8-NEXT: vmov d16, r2, r3244; ARMV8-NEXT: vmov d17, r0, r1245; ARMV8-NEXT: vminnm.f64 d16, d17, d16246; ARMV8-NEXT: vmov r0, r1, d16247; ARMV8-NEXT: bx lr248;249; ARMV8M-LABEL: fminnum64_intrinsic:250; ARMV8M: @ %bb.0:251; ARMV8M-NEXT: vmov d0, r2, r3252; ARMV8M-NEXT: vmov d1, r0, r1253; ARMV8M-NEXT: vminnm.f64 d0, d1, d0254; ARMV8M-NEXT: vmov r0, r1, d0255; ARMV8M-NEXT: bx lr256 %a = call nnan double @llvm.minnum.f64(double %x, double %y)257 ret double %a258}259 260define double @fminnum64_nsz_intrinsic(double %x, double %y) {261; ARMV7-LABEL: fminnum64_nsz_intrinsic:262; ARMV7: @ %bb.0:263; ARMV7-NEXT: vmov d16, r2, r3264; ARMV7-NEXT: vmov d17, r0, r1265; ARMV7-NEXT: vcmp.f64 d17, d16266; ARMV7-NEXT: vmrs APSR_nzcv, fpscr267; ARMV7-NEXT: vmovlt.f64 d16, d17268; ARMV7-NEXT: vmov r0, r1, d16269; ARMV7-NEXT: bx lr270;271; ARMV8-LABEL: fminnum64_nsz_intrinsic:272; ARMV8: @ %bb.0:273; ARMV8-NEXT: vmov d16, r2, r3274; ARMV8-NEXT: vmov d17, r0, r1275; ARMV8-NEXT: vminnm.f64 d16, d17, d16276; ARMV8-NEXT: vmov r0, r1, d16277; ARMV8-NEXT: bx lr278;279; ARMV8M-LABEL: fminnum64_nsz_intrinsic:280; ARMV8M: @ %bb.0:281; ARMV8M-NEXT: vmov d0, r2, r3282; ARMV8M-NEXT: vmov d1, r0, r1283; ARMV8M-NEXT: vminnm.f64 d0, d1, d0284; ARMV8M-NEXT: vmov r0, r1, d0285; ARMV8M-NEXT: bx lr286 %a = call nnan nsz double @llvm.minnum.f64(double %x, double %y)287 ret double %a288}289 290define double @fminnum64_zero_intrinsic(double %x) {291; ARMV7-LABEL: fminnum64_zero_intrinsic:292; ARMV7: @ %bb.0:293; ARMV7-NEXT: vldr d16, .LCPI9_0294; ARMV7-NEXT: vmov d17, r0, r1295; ARMV7-NEXT: vcmp.f64 d17, d16296; ARMV7-NEXT: vmrs APSR_nzcv, fpscr297; ARMV7-NEXT: vmovlt.f64 d16, d17298; ARMV7-NEXT: vmov r0, r1, d16299; ARMV7-NEXT: bx lr300; ARMV7-NEXT: .p2align 3301; ARMV7-NEXT: @ %bb.1:302; ARMV7-NEXT: .LCPI9_0:303; ARMV7-NEXT: .long 0 @ double -0304; ARMV7-NEXT: .long 2147483648305;306; ARMV8-LABEL: fminnum64_zero_intrinsic:307; ARMV8: @ %bb.0:308; ARMV8-NEXT: vldr d16, .LCPI9_0309; ARMV8-NEXT: vmov d17, r0, r1310; ARMV8-NEXT: vminnm.f64 d16, d17, d16311; ARMV8-NEXT: vmov r0, r1, d16312; ARMV8-NEXT: bx lr313; ARMV8-NEXT: .p2align 3314; ARMV8-NEXT: @ %bb.1:315; ARMV8-NEXT: .LCPI9_0:316; ARMV8-NEXT: .long 0 @ double -0317; ARMV8-NEXT: .long 2147483648318;319; ARMV8M-LABEL: fminnum64_zero_intrinsic:320; ARMV8M: @ %bb.0:321; ARMV8M-NEXT: vldr d0, .LCPI9_0322; ARMV8M-NEXT: vmov d1, r0, r1323; ARMV8M-NEXT: vminnm.f64 d0, d1, d0324; ARMV8M-NEXT: vmov r0, r1, d0325; ARMV8M-NEXT: bx lr326; ARMV8M-NEXT: .p2align 3327; ARMV8M-NEXT: @ %bb.1:328; ARMV8M-NEXT: .LCPI9_0:329; ARMV8M-NEXT: .long 0 @ double -0330; ARMV8M-NEXT: .long 2147483648331 %a = call nnan double @llvm.minnum.f64(double %x, double -0.0)332 ret double %a333}334 335define double @fminnum64_non_zero_intrinsic(double %x) {336; ARMV7-LABEL: fminnum64_non_zero_intrinsic:337; ARMV7: @ %bb.0:338; ARMV7-NEXT: vmov.f64 d16, #-1.000000e+00339; ARMV7-NEXT: vmov d17, r0, r1340; ARMV7-NEXT: vcmp.f64 d17, d16341; ARMV7-NEXT: vmrs APSR_nzcv, fpscr342; ARMV7-NEXT: vmovlt.f64 d16, d17343; ARMV7-NEXT: vmov r0, r1, d16344; ARMV7-NEXT: bx lr345;346; ARMV8-LABEL: fminnum64_non_zero_intrinsic:347; ARMV8: @ %bb.0:348; ARMV8-NEXT: vmov.f64 d16, #-1.000000e+00349; ARMV8-NEXT: vmov d17, r0, r1350; ARMV8-NEXT: vminnm.f64 d16, d17, d16351; ARMV8-NEXT: vmov r0, r1, d16352; ARMV8-NEXT: bx lr353;354; ARMV8M-LABEL: fminnum64_non_zero_intrinsic:355; ARMV8M: @ %bb.0:356; ARMV8M-NEXT: vmov.f64 d0, #-1.000000e+00357; ARMV8M-NEXT: vmov d1, r0, r1358; ARMV8M-NEXT: vminnm.f64 d0, d1, d0359; ARMV8M-NEXT: vmov r0, r1, d0360; ARMV8M-NEXT: bx lr361 %a = call nnan double @llvm.minnum.f64(double %x, double -1.0)362 ret double %a363}364 365define double@fmaxnum64_intrinsic(double %x, double %y) {366; ARMV7-LABEL: fmaxnum64_intrinsic:367; ARMV7: @ %bb.0:368; ARMV7-NEXT: vmov d16, r2, r3369; ARMV7-NEXT: vmov d17, r0, r1370; ARMV7-NEXT: vcmp.f64 d17, d16371; ARMV7-NEXT: vmrs APSR_nzcv, fpscr372; ARMV7-NEXT: vmovgt.f64 d16, d17373; ARMV7-NEXT: vmov r0, r1, d16374; ARMV7-NEXT: bx lr375;376; ARMV8-LABEL: fmaxnum64_intrinsic:377; ARMV8: @ %bb.0:378; ARMV8-NEXT: vmov d16, r2, r3379; ARMV8-NEXT: vmov d17, r0, r1380; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16381; ARMV8-NEXT: vmov r0, r1, d16382; ARMV8-NEXT: bx lr383;384; ARMV8M-LABEL: fmaxnum64_intrinsic:385; ARMV8M: @ %bb.0:386; ARMV8M-NEXT: vmov d0, r2, r3387; ARMV8M-NEXT: vmov d1, r0, r1388; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0389; ARMV8M-NEXT: vmov r0, r1, d0390; ARMV8M-NEXT: bx lr391 %a = call nnan double @llvm.maxnum.f64(double %x, double %y)392 ret double %a393}394 395define double@fmaxnum64_nsz_intrinsic(double %x, double %y) {396; ARMV7-LABEL: fmaxnum64_nsz_intrinsic:397; ARMV7: @ %bb.0:398; ARMV7-NEXT: vmov d16, r2, r3399; ARMV7-NEXT: vmov d17, r0, r1400; ARMV7-NEXT: vcmp.f64 d17, d16401; ARMV7-NEXT: vmrs APSR_nzcv, fpscr402; ARMV7-NEXT: vmovgt.f64 d16, d17403; ARMV7-NEXT: vmov r0, r1, d16404; ARMV7-NEXT: bx lr405;406; ARMV8-LABEL: fmaxnum64_nsz_intrinsic:407; ARMV8: @ %bb.0:408; ARMV8-NEXT: vmov d16, r2, r3409; ARMV8-NEXT: vmov d17, r0, r1410; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16411; ARMV8-NEXT: vmov r0, r1, d16412; ARMV8-NEXT: bx lr413;414; ARMV8M-LABEL: fmaxnum64_nsz_intrinsic:415; ARMV8M: @ %bb.0:416; ARMV8M-NEXT: vmov d0, r2, r3417; ARMV8M-NEXT: vmov d1, r0, r1418; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0419; ARMV8M-NEXT: vmov r0, r1, d0420; ARMV8M-NEXT: bx lr421 %a = call nnan nsz double @llvm.maxnum.f64(double %x, double %y)422 ret double %a423}424 425define double @fmaxnum64_zero_intrinsic(double %x) {426; ARMV7-LABEL: fmaxnum64_zero_intrinsic:427; ARMV7: @ %bb.0:428; ARMV7-NEXT: vmov d16, r0, r1429; ARMV7-NEXT: vcmp.f64 d16, #0430; ARMV7-NEXT: vmrs APSR_nzcv, fpscr431; ARMV7-NEXT: vmov.i32 d17, #0x0432; ARMV7-NEXT: vmovgt.f64 d17, d16433; ARMV7-NEXT: vmov r0, r1, d17434; ARMV7-NEXT: bx lr435;436; ARMV8-LABEL: fmaxnum64_zero_intrinsic:437; ARMV8: @ %bb.0:438; ARMV8-NEXT: vmov.i32 d16, #0x0439; ARMV8-NEXT: vmov d17, r0, r1440; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16441; ARMV8-NEXT: vmov r0, r1, d16442; ARMV8-NEXT: bx lr443;444; ARMV8M-LABEL: fmaxnum64_zero_intrinsic:445; ARMV8M: @ %bb.0:446; ARMV8M-NEXT: vldr d0, .LCPI13_0447; ARMV8M-NEXT: vmov d1, r0, r1448; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0449; ARMV8M-NEXT: vmov r0, r1, d0450; ARMV8M-NEXT: bx lr451; ARMV8M-NEXT: .p2align 3452; ARMV8M-NEXT: @ %bb.1:453; ARMV8M-NEXT: .LCPI13_0:454; ARMV8M-NEXT: .long 0 @ double 0455; ARMV8M-NEXT: .long 0456 %a = call nnan double @llvm.maxnum.f64(double %x, double 0.0)457 ret double %a458}459 460define double @fmaxnum64_non_zero_intrinsic(double %x) {461; ARMV7-LABEL: fmaxnum64_non_zero_intrinsic:462; ARMV7: @ %bb.0:463; ARMV7-NEXT: vmov.f64 d16, #1.000000e+00464; ARMV7-NEXT: vmov d17, r0, r1465; ARMV7-NEXT: vcmp.f64 d17, d16466; ARMV7-NEXT: vmrs APSR_nzcv, fpscr467; ARMV7-NEXT: vmovgt.f64 d16, d17468; ARMV7-NEXT: vmov r0, r1, d16469; ARMV7-NEXT: bx lr470;471; ARMV8-LABEL: fmaxnum64_non_zero_intrinsic:472; ARMV8: @ %bb.0:473; ARMV8-NEXT: vmov.f64 d16, #1.000000e+00474; ARMV8-NEXT: vmov d17, r0, r1475; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16476; ARMV8-NEXT: vmov r0, r1, d16477; ARMV8-NEXT: bx lr478;479; ARMV8M-LABEL: fmaxnum64_non_zero_intrinsic:480; ARMV8M: @ %bb.0:481; ARMV8M-NEXT: vmov.f64 d0, #1.000000e+00482; ARMV8M-NEXT: vmov d1, r0, r1483; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0484; ARMV8M-NEXT: vmov r0, r1, d0485; ARMV8M-NEXT: bx lr486 %a = call nnan double @llvm.maxnum.f64(double %x, double 1.0)487 ret double %a488}489 490define <4 x float> @fminnumv432_intrinsic(<4 x float> %x, <4 x float> %y) {491; ARMV7-LABEL: fminnumv432_intrinsic:492; ARMV7: @ %bb.0:493; ARMV7-NEXT: mov r12, sp494; ARMV7-NEXT: vld1.64 {d0, d1}, [r12]495; ARMV7-NEXT: vmov d3, r2, r3496; ARMV7-NEXT: vmov d2, r0, r1497; ARMV7-NEXT: vcmp.f32 s6, s2498; ARMV7-NEXT: vmrs APSR_nzcv, fpscr499; ARMV7-NEXT: vcmp.f32 s7, s3500; ARMV7-NEXT: vmovlt.f32 s2, s6501; ARMV7-NEXT: vmrs APSR_nzcv, fpscr502; ARMV7-NEXT: vcmp.f32 s5, s1503; ARMV7-NEXT: vmovlt.f32 s3, s7504; ARMV7-NEXT: vmrs APSR_nzcv, fpscr505; ARMV7-NEXT: vcmp.f32 s4, s0506; ARMV7-NEXT: vmovlt.f32 s1, s5507; ARMV7-NEXT: vmrs APSR_nzcv, fpscr508; ARMV7-NEXT: vmovlt.f32 s0, s4509; ARMV7-NEXT: vmov r2, r3, d1510; ARMV7-NEXT: vmov r0, r1, d0511; ARMV7-NEXT: bx lr512;513; ARMV8-LABEL: fminnumv432_intrinsic:514; ARMV8: @ %bb.0:515; ARMV8-NEXT: vmov d17, r2, r3516; ARMV8-NEXT: vmov d16, r0, r1517; ARMV8-NEXT: mov r0, sp518; ARMV8-NEXT: vld1.64 {d18, d19}, [r0]519; ARMV8-NEXT: vminnm.f32 q8, q8, q9520; ARMV8-NEXT: vmov r0, r1, d16521; ARMV8-NEXT: vmov r2, r3, d17522; ARMV8-NEXT: bx lr523;524; ARMV8M-LABEL: fminnumv432_intrinsic:525; ARMV8M: @ %bb.0:526; ARMV8M-NEXT: vmov d0, r0, r1527; ARMV8M-NEXT: mov r0, sp528; ARMV8M-NEXT: vldrw.u32 q1, [r0]529; ARMV8M-NEXT: vmov d1, r2, r3530; ARMV8M-NEXT: vminnm.f32 q0, q0, q1531; ARMV8M-NEXT: vmov r0, r1, d0532; ARMV8M-NEXT: vmov r2, r3, d1533; ARMV8M-NEXT: bx lr534 %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y)535 ret <4 x float> %a536}537 538define <4 x float> @fminnumv432_nsz_intrinsic(<4 x float> %x, <4 x float> %y) {539; ARMV7-LABEL: fminnumv432_nsz_intrinsic:540; ARMV7: @ %bb.0:541; ARMV7-NEXT: vmov d17, r2, r3542; ARMV7-NEXT: vmov d16, r0, r1543; ARMV7-NEXT: mov r0, sp544; ARMV7-NEXT: vld1.64 {d18, d19}, [r0]545; ARMV7-NEXT: vmin.f32 q8, q8, q9546; ARMV7-NEXT: vmov r0, r1, d16547; ARMV7-NEXT: vmov r2, r3, d17548; ARMV7-NEXT: bx lr549;550; ARMV8-LABEL: fminnumv432_nsz_intrinsic:551; ARMV8: @ %bb.0:552; ARMV8-NEXT: vmov d17, r2, r3553; ARMV8-NEXT: vmov d16, r0, r1554; ARMV8-NEXT: mov r0, sp555; ARMV8-NEXT: vld1.64 {d18, d19}, [r0]556; ARMV8-NEXT: vminnm.f32 q8, q8, q9557; ARMV8-NEXT: vmov r0, r1, d16558; ARMV8-NEXT: vmov r2, r3, d17559; ARMV8-NEXT: bx lr560;561; ARMV8M-LABEL: fminnumv432_nsz_intrinsic:562; ARMV8M: @ %bb.0:563; ARMV8M-NEXT: vmov d0, r0, r1564; ARMV8M-NEXT: mov r0, sp565; ARMV8M-NEXT: vldrw.u32 q1, [r0]566; ARMV8M-NEXT: vmov d1, r2, r3567; ARMV8M-NEXT: vminnm.f32 q0, q0, q1568; ARMV8M-NEXT: vmov r0, r1, d0569; ARMV8M-NEXT: vmov r2, r3, d1570; ARMV8M-NEXT: bx lr571 %a = call nnan nsz <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y)572 ret <4 x float> %a573}574 575define <4 x float> @fminnumv432_non_zero_intrinsic(<4 x float> %x) {576; ARMV7-LABEL: fminnumv432_non_zero_intrinsic:577; ARMV7: @ %bb.0:578; ARMV7-NEXT: vmov d19, r2, r3579; ARMV7-NEXT: vmov.f32 q8, #-1.000000e+00580; ARMV7-NEXT: vmov d18, r0, r1581; ARMV7-NEXT: vmin.f32 q8, q9, q8582; ARMV7-NEXT: vmov r0, r1, d16583; ARMV7-NEXT: vmov r2, r3, d17584; ARMV7-NEXT: bx lr585;586; ARMV8-LABEL: fminnumv432_non_zero_intrinsic:587; ARMV8: @ %bb.0:588; ARMV8-NEXT: vmov d17, r2, r3589; ARMV8-NEXT: vmov d16, r0, r1590; ARMV8-NEXT: vmov.f32 q9, #-1.000000e+00591; ARMV8-NEXT: vminnm.f32 q8, q8, q9592; ARMV8-NEXT: vmov r0, r1, d16593; ARMV8-NEXT: vmov r2, r3, d17594; ARMV8-NEXT: bx lr595;596; ARMV8M-LABEL: fminnumv432_non_zero_intrinsic:597; ARMV8M: @ %bb.0:598; ARMV8M-NEXT: vmov d1, r2, r3599; ARMV8M-NEXT: vmov.f32 q1, #-1.000000e+00600; ARMV8M-NEXT: vmov d0, r0, r1601; ARMV8M-NEXT: vminnm.f32 q0, q0, q1602; ARMV8M-NEXT: vmov r0, r1, d0603; ARMV8M-NEXT: vmov r2, r3, d1604; ARMV8M-NEXT: bx lr605 %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float -1.0, float -1.0, float -1.0>)606 ret <4 x float> %a607}608 609define <4 x float> @fminnumv432_one_zero_intrinsic(<4 x float> %x) {610; ARMV7-LABEL: fminnumv432_one_zero_intrinsic:611; ARMV7: @ %bb.0:612; ARMV7-NEXT: vmov d1, r2, r3613; ARMV7-NEXT: vldr s4, .LCPI18_0614; ARMV7-NEXT: vmov d0, r0, r1615; ARMV7-NEXT: vmov.f32 s6, #-1.000000e+00616; ARMV7-NEXT: vcmp.f32 s1, #0617; ARMV7-NEXT: vmrs APSR_nzcv, fpscr618; ARMV7-NEXT: vmov.f32 s8, s3619; ARMV7-NEXT: vmin.f32 d7, d1, d3620; ARMV7-NEXT: vmin.f32 d6, d0, d3621; ARMV7-NEXT: vmin.f32 d4, d4, d3622; ARMV7-NEXT: vmovlt.f32 s4, s1623; ARMV7-NEXT: vmov.f32 s13, s4624; ARMV7-NEXT: vmov.f32 s15, s8625; ARMV7-NEXT: vmov r0, r1, d6626; ARMV7-NEXT: vmov r2, r3, d7627; ARMV7-NEXT: bx lr628; ARMV7-NEXT: .p2align 2629; ARMV7-NEXT: @ %bb.1:630; ARMV7-NEXT: .LCPI18_0:631; ARMV7-NEXT: .long 0x00000000 @ float 0632;633; ARMV8-LABEL: fminnumv432_one_zero_intrinsic:634; ARMV8: @ %bb.0:635; ARMV8-NEXT: vmov d17, r2, r3636; ARMV8-NEXT: vmov d16, r0, r1637; ARMV8-NEXT: adr r0, .LCPI18_0638; ARMV8-NEXT: vld1.64 {d18, d19}, [r0:128]639; ARMV8-NEXT: vminnm.f32 q8, q8, q9640; ARMV8-NEXT: vmov r0, r1, d16641; ARMV8-NEXT: vmov r2, r3, d17642; ARMV8-NEXT: bx lr643; ARMV8-NEXT: .p2align 4644; ARMV8-NEXT: @ %bb.1:645; ARMV8-NEXT: .LCPI18_0:646; ARMV8-NEXT: .long 0xbf800000 @ float -1647; ARMV8-NEXT: .long 0x00000000 @ float 0648; ARMV8-NEXT: .long 0xbf800000 @ float -1649; ARMV8-NEXT: .long 0xbf800000 @ float -1650;651; ARMV8M-LABEL: fminnumv432_one_zero_intrinsic:652; ARMV8M: @ %bb.0:653; ARMV8M-NEXT: vmov d0, r0, r1654; ARMV8M-NEXT: adr r0, .LCPI18_0655; ARMV8M-NEXT: vldrw.u32 q1, [r0]656; ARMV8M-NEXT: vmov d1, r2, r3657; ARMV8M-NEXT: vminnm.f32 q0, q0, q1658; ARMV8M-NEXT: vmov r0, r1, d0659; ARMV8M-NEXT: vmov r2, r3, d1660; ARMV8M-NEXT: bx lr661; ARMV8M-NEXT: .p2align 4662; ARMV8M-NEXT: @ %bb.1:663; ARMV8M-NEXT: .LCPI18_0:664; ARMV8M-NEXT: .long 0xbf800000 @ float -1665; ARMV8M-NEXT: .long 0x00000000 @ float 0666; ARMV8M-NEXT: .long 0xbf800000 @ float -1667; ARMV8M-NEXT: .long 0xbf800000 @ float -1668 %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float 0.0, float -1.0, float -1.0>)669 ret <4 x float> %a670}671 672define <4 x float> @fmaxnumv432_intrinsic(<4 x float> %x, <4 x float> %y) {673; ARMV7-LABEL: fmaxnumv432_intrinsic:674; ARMV7: @ %bb.0:675; ARMV7-NEXT: mov r12, sp676; ARMV7-NEXT: vld1.64 {d0, d1}, [r12]677; ARMV7-NEXT: vmov d3, r2, r3678; ARMV7-NEXT: vmov d2, r0, r1679; ARMV7-NEXT: vcmp.f32 s6, s2680; ARMV7-NEXT: vmrs APSR_nzcv, fpscr681; ARMV7-NEXT: vcmp.f32 s7, s3682; ARMV7-NEXT: vmovgt.f32 s2, s6683; ARMV7-NEXT: vmrs APSR_nzcv, fpscr684; ARMV7-NEXT: vcmp.f32 s5, s1685; ARMV7-NEXT: vmovgt.f32 s3, s7686; ARMV7-NEXT: vmrs APSR_nzcv, fpscr687; ARMV7-NEXT: vcmp.f32 s4, s0688; ARMV7-NEXT: vmovgt.f32 s1, s5689; ARMV7-NEXT: vmrs APSR_nzcv, fpscr690; ARMV7-NEXT: vmovgt.f32 s0, s4691; ARMV7-NEXT: vmov r2, r3, d1692; ARMV7-NEXT: vmov r0, r1, d0693; ARMV7-NEXT: bx lr694;695; ARMV8-LABEL: fmaxnumv432_intrinsic:696; ARMV8: @ %bb.0:697; ARMV8-NEXT: vmov d17, r2, r3698; ARMV8-NEXT: vmov d16, r0, r1699; ARMV8-NEXT: mov r0, sp700; ARMV8-NEXT: vld1.64 {d18, d19}, [r0]701; ARMV8-NEXT: vmaxnm.f32 q8, q8, q9702; ARMV8-NEXT: vmov r0, r1, d16703; ARMV8-NEXT: vmov r2, r3, d17704; ARMV8-NEXT: bx lr705;706; ARMV8M-LABEL: fmaxnumv432_intrinsic:707; ARMV8M: @ %bb.0:708; ARMV8M-NEXT: vmov d0, r0, r1709; ARMV8M-NEXT: mov r0, sp710; ARMV8M-NEXT: vldrw.u32 q1, [r0]711; ARMV8M-NEXT: vmov d1, r2, r3712; ARMV8M-NEXT: vmaxnm.f32 q0, q0, q1713; ARMV8M-NEXT: vmov r0, r1, d0714; ARMV8M-NEXT: vmov r2, r3, d1715; ARMV8M-NEXT: bx lr716 %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y)717 ret <4 x float> %a718}719 720define <4 x float> @fmaxnumv432_nsz_intrinsic(<4 x float> %x, <4 x float> %y) {721; ARMV7-LABEL: fmaxnumv432_nsz_intrinsic:722; ARMV7: @ %bb.0:723; ARMV7-NEXT: vmov d17, r2, r3724; ARMV7-NEXT: vmov d16, r0, r1725; ARMV7-NEXT: mov r0, sp726; ARMV7-NEXT: vld1.64 {d18, d19}, [r0]727; ARMV7-NEXT: vmax.f32 q8, q8, q9728; ARMV7-NEXT: vmov r0, r1, d16729; ARMV7-NEXT: vmov r2, r3, d17730; ARMV7-NEXT: bx lr731;732; ARMV8-LABEL: fmaxnumv432_nsz_intrinsic:733; ARMV8: @ %bb.0:734; ARMV8-NEXT: vmov d17, r2, r3735; ARMV8-NEXT: vmov d16, r0, r1736; ARMV8-NEXT: mov r0, sp737; ARMV8-NEXT: vld1.64 {d18, d19}, [r0]738; ARMV8-NEXT: vmaxnm.f32 q8, q8, q9739; ARMV8-NEXT: vmov r0, r1, d16740; ARMV8-NEXT: vmov r2, r3, d17741; ARMV8-NEXT: bx lr742;743; ARMV8M-LABEL: fmaxnumv432_nsz_intrinsic:744; ARMV8M: @ %bb.0:745; ARMV8M-NEXT: vmov d0, r0, r1746; ARMV8M-NEXT: mov r0, sp747; ARMV8M-NEXT: vldrw.u32 q1, [r0]748; ARMV8M-NEXT: vmov d1, r2, r3749; ARMV8M-NEXT: vmaxnm.f32 q0, q0, q1750; ARMV8M-NEXT: vmov r0, r1, d0751; ARMV8M-NEXT: vmov r2, r3, d1752; ARMV8M-NEXT: bx lr753 %a = call nnan nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y)754 ret <4 x float> %a755}756 757define <4 x float> @fmaxnumv432_zero_intrinsic(<4 x float> %x) {758; ARMV7-LABEL: fmaxnumv432_zero_intrinsic:759; ARMV7: @ %bb.0:760; ARMV7-NEXT: vmov d3, r2, r3761; ARMV7-NEXT: vldr s0, .LCPI21_0762; ARMV7-NEXT: vmov d2, r0, r1763; ARMV7-NEXT: vcmp.f32 s6, #0764; ARMV7-NEXT: vmrs APSR_nzcv, fpscr765; ARMV7-NEXT: vmov.f32 s2, s0766; ARMV7-NEXT: vcmp.f32 s7, #0767; ARMV7-NEXT: vmovgt.f32 s2, s6768; ARMV7-NEXT: vmrs APSR_nzcv, fpscr769; ARMV7-NEXT: vmov.f32 s3, s0770; ARMV7-NEXT: vcmp.f32 s5, #0771; ARMV7-NEXT: vmovgt.f32 s3, s7772; ARMV7-NEXT: vmrs APSR_nzcv, fpscr773; ARMV7-NEXT: vmov.f32 s1, s0774; ARMV7-NEXT: vcmp.f32 s4, #0775; ARMV7-NEXT: vmovgt.f32 s1, s5776; ARMV7-NEXT: vmrs APSR_nzcv, fpscr777; ARMV7-NEXT: vmovgt.f32 s0, s4778; ARMV7-NEXT: vmov r2, r3, d1779; ARMV7-NEXT: vmov r0, r1, d0780; ARMV7-NEXT: bx lr781; ARMV7-NEXT: .p2align 2782; ARMV7-NEXT: @ %bb.1:783; ARMV7-NEXT: .LCPI21_0:784; ARMV7-NEXT: .long 0x00000000 @ float 0785;786; ARMV8-LABEL: fmaxnumv432_zero_intrinsic:787; ARMV8: @ %bb.0:788; ARMV8-NEXT: vmov d17, r2, r3789; ARMV8-NEXT: vmov d16, r0, r1790; ARMV8-NEXT: vmov.i32 q9, #0x0791; ARMV8-NEXT: vmaxnm.f32 q8, q8, q9792; ARMV8-NEXT: vmov r0, r1, d16793; ARMV8-NEXT: vmov r2, r3, d17794; ARMV8-NEXT: bx lr795;796; ARMV8M-LABEL: fmaxnumv432_zero_intrinsic:797; ARMV8M: @ %bb.0:798; ARMV8M-NEXT: vmov d1, r2, r3799; ARMV8M-NEXT: vmov.i32 q1, #0x0800; ARMV8M-NEXT: vmov d0, r0, r1801; ARMV8M-NEXT: vmaxnm.f32 q0, q0, q1802; ARMV8M-NEXT: vmov r0, r1, d0803; ARMV8M-NEXT: vmov r2, r3, d1804; ARMV8M-NEXT: bx lr805 %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float><float 0.0, float 0.0, float 0.0, float 0.0>)806 ret <4 x float> %a807}808 809define <4 x float> @fmaxnumv432_minus_zero_intrinsic(<4 x float> %x) {810; ARMV7-LABEL: fmaxnumv432_minus_zero_intrinsic:811; ARMV7: @ %bb.0:812; ARMV7-NEXT: vldr s0, .LCPI22_0813; ARMV7-NEXT: vmov d3, r2, r3814; ARMV7-NEXT: vmov d2, r0, r1815; ARMV7-NEXT: vcmp.f32 s6, s0816; ARMV7-NEXT: vmrs APSR_nzcv, fpscr817; ARMV7-NEXT: vcmp.f32 s7, s0818; ARMV7-NEXT: vmov.f32 s2, s0819; ARMV7-NEXT: vmovgt.f32 s2, s6820; ARMV7-NEXT: vmrs APSR_nzcv, fpscr821; ARMV7-NEXT: vcmp.f32 s5, s0822; ARMV7-NEXT: vmov.f32 s3, s0823; ARMV7-NEXT: vmovgt.f32 s3, s7824; ARMV7-NEXT: vmrs APSR_nzcv, fpscr825; ARMV7-NEXT: vcmp.f32 s4, s0826; ARMV7-NEXT: vmov.f32 s1, s0827; ARMV7-NEXT: vmovgt.f32 s1, s5828; ARMV7-NEXT: vmrs APSR_nzcv, fpscr829; ARMV7-NEXT: vmovgt.f32 s0, s4830; ARMV7-NEXT: vmov r2, r3, d1831; ARMV7-NEXT: vmov r0, r1, d0832; ARMV7-NEXT: bx lr833; ARMV7-NEXT: .p2align 2834; ARMV7-NEXT: @ %bb.1:835; ARMV7-NEXT: .LCPI22_0:836; ARMV7-NEXT: .long 0x80000000 @ float -0837;838; ARMV8-LABEL: fmaxnumv432_minus_zero_intrinsic:839; ARMV8: @ %bb.0:840; ARMV8-NEXT: vmov d17, r2, r3841; ARMV8-NEXT: vmov d16, r0, r1842; ARMV8-NEXT: vmov.i32 q9, #0x80000000843; ARMV8-NEXT: vmaxnm.f32 q8, q8, q9844; ARMV8-NEXT: vmov r0, r1, d16845; ARMV8-NEXT: vmov r2, r3, d17846; ARMV8-NEXT: bx lr847;848; ARMV8M-LABEL: fmaxnumv432_minus_zero_intrinsic:849; ARMV8M: @ %bb.0:850; ARMV8M-NEXT: vmov d1, r2, r3851; ARMV8M-NEXT: vmov.i32 q1, #0x80000000852; ARMV8M-NEXT: vmov d0, r0, r1853; ARMV8M-NEXT: vmaxnm.f32 q0, q0, q1854; ARMV8M-NEXT: vmov r0, r1, d0855; ARMV8M-NEXT: vmov r2, r3, d1856; ARMV8M-NEXT: bx lr857 %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float><float -0.0, float -0.0, float -0.0, float -0.0>)858 ret <4 x float> %a859}860 861define <4 x float> @fmaxnumv432_non_zero_intrinsic(<4 x float> %x) {862; ARMV7-LABEL: fmaxnumv432_non_zero_intrinsic:863; ARMV7: @ %bb.0:864; ARMV7-NEXT: vmov d19, r2, r3865; ARMV7-NEXT: vmov.f32 q8, #1.000000e+00866; ARMV7-NEXT: vmov d18, r0, r1867; ARMV7-NEXT: vmax.f32 q8, q9, q8868; ARMV7-NEXT: vmov r0, r1, d16869; ARMV7-NEXT: vmov r2, r3, d17870; ARMV7-NEXT: bx lr871;872; ARMV8-LABEL: fmaxnumv432_non_zero_intrinsic:873; ARMV8: @ %bb.0:874; ARMV8-NEXT: vmov d17, r2, r3875; ARMV8-NEXT: vmov d16, r0, r1876; ARMV8-NEXT: vmov.f32 q9, #1.000000e+00877; ARMV8-NEXT: vmaxnm.f32 q8, q8, q9878; ARMV8-NEXT: vmov r0, r1, d16879; ARMV8-NEXT: vmov r2, r3, d17880; ARMV8-NEXT: bx lr881;882; ARMV8M-LABEL: fmaxnumv432_non_zero_intrinsic:883; ARMV8M: @ %bb.0:884; ARMV8M-NEXT: vmov d1, r2, r3885; ARMV8M-NEXT: vmov.f32 q1, #1.000000e+00886; ARMV8M-NEXT: vmov d0, r0, r1887; ARMV8M-NEXT: vmaxnm.f32 q0, q0, q1888; ARMV8M-NEXT: vmov r0, r1, d0889; ARMV8M-NEXT: vmov r2, r3, d1890; ARMV8M-NEXT: bx lr891 %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float><float 1.0, float 1.0, float 1.0, float 1.0>)892 ret <4 x float> %a893}894 895define <2 x double> @fminnumv264_intrinsic(<2 x double> %x, <2 x double> %y) {896; ARMV7-LABEL: fminnumv264_intrinsic:897; ARMV7: @ %bb.0:898; ARMV7-NEXT: mov r12, sp899; ARMV7-NEXT: vld1.64 {d16, d17}, [r12]900; ARMV7-NEXT: vmov d18, r0, r1901; ARMV7-NEXT: vcmp.f64 d18, d16902; ARMV7-NEXT: vmrs APSR_nzcv, fpscr903; ARMV7-NEXT: vmov d19, r2, r3904; ARMV7-NEXT: vcmp.f64 d19, d17905; ARMV7-NEXT: vmovlt.f64 d16, d18906; ARMV7-NEXT: vmrs APSR_nzcv, fpscr907; ARMV7-NEXT: vmov r0, r1, d16908; ARMV7-NEXT: vmovlt.f64 d17, d19909; ARMV7-NEXT: vmov r2, r3, d17910; ARMV7-NEXT: bx lr911;912; ARMV8-LABEL: fminnumv264_intrinsic:913; ARMV8: @ %bb.0:914; ARMV8-NEXT: mov r12, sp915; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]916; ARMV8-NEXT: vmov d19, r0, r1917; ARMV8-NEXT: vmov d18, r2, r3918; ARMV8-NEXT: vminnm.f64 d19, d19, d16919; ARMV8-NEXT: vminnm.f64 d16, d18, d17920; ARMV8-NEXT: vmov r0, r1, d19921; ARMV8-NEXT: vmov r2, r3, d16922; ARMV8-NEXT: bx lr923;924; ARMV8M-LABEL: fminnumv264_intrinsic:925; ARMV8M: @ %bb.0:926; ARMV8M-NEXT: mov r12, sp927; ARMV8M-NEXT: vmov d0, r0, r1928; ARMV8M-NEXT: vldrw.u32 q1, [r12]929; ARMV8M-NEXT: vmov d1, r2, r3930; ARMV8M-NEXT: vcmp.f64 d2, d0931; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr932; ARMV8M-NEXT: vcmp.f64 d3, d1933; ARMV8M-NEXT: vselgt.f64 d0, d0, d2934; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr935; ARMV8M-NEXT: vmov r0, r1, d0936; ARMV8M-NEXT: vselgt.f64 d0, d1, d3937; ARMV8M-NEXT: vmov r2, r3, d0938; ARMV8M-NEXT: bx lr939 %a = call nnan <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)940 ret <2 x double> %a941}942 943define <2 x double> @fminnumv264_nsz_intrinsic(<2 x double> %x, <2 x double> %y) {944; ARMV7-LABEL: fminnumv264_nsz_intrinsic:945; ARMV7: @ %bb.0:946; ARMV7-NEXT: mov r12, sp947; ARMV7-NEXT: vld1.64 {d16, d17}, [r12]948; ARMV7-NEXT: vmov d18, r0, r1949; ARMV7-NEXT: vcmp.f64 d18, d16950; ARMV7-NEXT: vmrs APSR_nzcv, fpscr951; ARMV7-NEXT: vmov d19, r2, r3952; ARMV7-NEXT: vcmp.f64 d19, d17953; ARMV7-NEXT: vmovlt.f64 d16, d18954; ARMV7-NEXT: vmrs APSR_nzcv, fpscr955; ARMV7-NEXT: vmov r0, r1, d16956; ARMV7-NEXT: vmovlt.f64 d17, d19957; ARMV7-NEXT: vmov r2, r3, d17958; ARMV7-NEXT: bx lr959;960; ARMV8-LABEL: fminnumv264_nsz_intrinsic:961; ARMV8: @ %bb.0:962; ARMV8-NEXT: mov r12, sp963; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]964; ARMV8-NEXT: vmov d19, r0, r1965; ARMV8-NEXT: vmov d18, r2, r3966; ARMV8-NEXT: vminnm.f64 d19, d19, d16967; ARMV8-NEXT: vminnm.f64 d16, d18, d17968; ARMV8-NEXT: vmov r0, r1, d19969; ARMV8-NEXT: vmov r2, r3, d16970; ARMV8-NEXT: bx lr971;972; ARMV8M-LABEL: fminnumv264_nsz_intrinsic:973; ARMV8M: @ %bb.0:974; ARMV8M-NEXT: mov r12, sp975; ARMV8M-NEXT: vmov d0, r0, r1976; ARMV8M-NEXT: vldrw.u32 q1, [r12]977; ARMV8M-NEXT: vmov d1, r2, r3978; ARMV8M-NEXT: vcmp.f64 d2, d0979; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr980; ARMV8M-NEXT: vcmp.f64 d3, d1981; ARMV8M-NEXT: vselgt.f64 d0, d0, d2982; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr983; ARMV8M-NEXT: vmov r0, r1, d0984; ARMV8M-NEXT: vselgt.f64 d0, d1, d3985; ARMV8M-NEXT: vmov r2, r3, d0986; ARMV8M-NEXT: bx lr987 %a = call nnan nsz <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)988 ret <2 x double> %a989}990 991define <2 x double> @fminnumv264_non_zero_intrinsic(<2 x double> %x) {992; ARMV7-LABEL: fminnumv264_non_zero_intrinsic:993; ARMV7: @ %bb.0:994; ARMV7-NEXT: vmov.f64 d16, #1.000000e+00995; ARMV7-NEXT: vmov d17, r0, r1996; ARMV7-NEXT: vcmp.f64 d17, d16997; ARMV7-NEXT: vmrs APSR_nzcv, fpscr998; ARMV7-NEXT: vmov d18, r2, r3999; ARMV7-NEXT: vcmp.f64 d18, d161000; ARMV7-NEXT: vmov.f64 d19, d161001; ARMV7-NEXT: vmovlt.f64 d19, d171002; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1003; ARMV7-NEXT: vmov r0, r1, d191004; ARMV7-NEXT: vmovlt.f64 d16, d181005; ARMV7-NEXT: vmov r2, r3, d161006; ARMV7-NEXT: bx lr1007;1008; ARMV8-LABEL: fminnumv264_non_zero_intrinsic:1009; ARMV8: @ %bb.0:1010; ARMV8-NEXT: vmov.f64 d16, #1.000000e+001011; ARMV8-NEXT: vmov d18, r0, r11012; ARMV8-NEXT: vmov d17, r2, r31013; ARMV8-NEXT: vminnm.f64 d18, d18, d161014; ARMV8-NEXT: vminnm.f64 d16, d17, d161015; ARMV8-NEXT: vmov r0, r1, d181016; ARMV8-NEXT: vmov r2, r3, d161017; ARMV8-NEXT: bx lr1018;1019; ARMV8M-LABEL: fminnumv264_non_zero_intrinsic:1020; ARMV8M: @ %bb.0:1021; ARMV8M-NEXT: vmov d1, r0, r11022; ARMV8M-NEXT: vmov.f64 d0, #1.000000e+001023; ARMV8M-NEXT: vcmp.f64 d0, d11024; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1025; ARMV8M-NEXT: vmov d2, r2, r31026; ARMV8M-NEXT: vcmp.f64 d0, d21027; ARMV8M-NEXT: vselgt.f64 d1, d1, d01028; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1029; ARMV8M-NEXT: vmov r0, r1, d11030; ARMV8M-NEXT: vselgt.f64 d0, d2, d01031; ARMV8M-NEXT: vmov r2, r3, d01032; ARMV8M-NEXT: bx lr1033 %a = call nnan <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double><double 1.0, double 1.0>)1034 ret <2 x double> %a1035}1036 1037define <2 x double> @fminnumv264_one_zero_intrinsic(<2 x double> %x) {1038; ARMV7-LABEL: fminnumv264_one_zero_intrinsic:1039; ARMV7: @ %bb.0:1040; ARMV7-NEXT: vmov d18, r2, r31041; ARMV7-NEXT: vcmp.f64 d18, #01042; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1043; ARMV7-NEXT: vmov d19, r0, r11044; ARMV7-NEXT: vmov.f64 d16, #-1.000000e+001045; ARMV7-NEXT: vcmp.f64 d19, d161046; ARMV7-NEXT: vmov.i32 d17, #0x01047; ARMV7-NEXT: vmovlt.f64 d17, d181048; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1049; ARMV7-NEXT: vmov r2, r3, d171050; ARMV7-NEXT: vmovlt.f64 d16, d191051; ARMV7-NEXT: vmov r0, r1, d161052; ARMV7-NEXT: bx lr1053;1054; ARMV8-LABEL: fminnumv264_one_zero_intrinsic:1055; ARMV8: @ %bb.0:1056; ARMV8-NEXT: vmov.f64 d16, #-1.000000e+001057; ARMV8-NEXT: vmov d18, r0, r11058; ARMV8-NEXT: vmov.i32 d17, #0x01059; ARMV8-NEXT: vminnm.f64 d16, d18, d161060; ARMV8-NEXT: vmov d19, r2, r31061; ARMV8-NEXT: vminnm.f64 d17, d19, d171062; ARMV8-NEXT: vmov r0, r1, d161063; ARMV8-NEXT: vmov r2, r3, d171064; ARMV8-NEXT: bx lr1065;1066; ARMV8M-LABEL: fminnumv264_one_zero_intrinsic:1067; ARMV8M: @ %bb.0:1068; ARMV8M-NEXT: vmov d1, r2, r31069; ARMV8M-NEXT: vldr d0, .LCPI27_01070; ARMV8M-NEXT: vcmp.f64 d1, #01071; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1072; ARMV8M-NEXT: vmov d2, r0, r11073; ARMV8M-NEXT: vmov.f64 d3, #-1.000000e+001074; ARMV8M-NEXT: vcmp.f64 d3, d21075; ARMV8M-NEXT: vmovlt.f64 d0, d11076; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1077; ARMV8M-NEXT: vmov r2, r3, d01078; ARMV8M-NEXT: vselgt.f64 d1, d2, d31079; ARMV8M-NEXT: vmov r0, r1, d11080; ARMV8M-NEXT: bx lr1081; ARMV8M-NEXT: .p2align 31082; ARMV8M-NEXT: @ %bb.1:1083; ARMV8M-NEXT: .LCPI27_0:1084; ARMV8M-NEXT: .long 0 @ double 01085; ARMV8M-NEXT: .long 01086 %a = call nnan <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double><double -1.0, double 0.0>)1087 ret <2 x double> %a1088}1089 1090define <2 x double> @fmaxnumv264_intrinsic(<2 x double> %x, <2 x double> %y) {1091; ARMV7-LABEL: fmaxnumv264_intrinsic:1092; ARMV7: @ %bb.0:1093; ARMV7-NEXT: mov r12, sp1094; ARMV7-NEXT: vld1.64 {d16, d17}, [r12]1095; ARMV7-NEXT: vmov d18, r0, r11096; ARMV7-NEXT: vcmp.f64 d18, d161097; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1098; ARMV7-NEXT: vmov d19, r2, r31099; ARMV7-NEXT: vcmp.f64 d19, d171100; ARMV7-NEXT: vmovgt.f64 d16, d181101; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1102; ARMV7-NEXT: vmov r0, r1, d161103; ARMV7-NEXT: vmovgt.f64 d17, d191104; ARMV7-NEXT: vmov r2, r3, d171105; ARMV7-NEXT: bx lr1106;1107; ARMV8-LABEL: fmaxnumv264_intrinsic:1108; ARMV8: @ %bb.0:1109; ARMV8-NEXT: mov r12, sp1110; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]1111; ARMV8-NEXT: vmov d19, r0, r11112; ARMV8-NEXT: vmov d18, r2, r31113; ARMV8-NEXT: vmaxnm.f64 d19, d19, d161114; ARMV8-NEXT: vmaxnm.f64 d16, d18, d171115; ARMV8-NEXT: vmov r0, r1, d191116; ARMV8-NEXT: vmov r2, r3, d161117; ARMV8-NEXT: bx lr1118;1119; ARMV8M-LABEL: fmaxnumv264_intrinsic:1120; ARMV8M: @ %bb.0:1121; ARMV8M-NEXT: mov r12, sp1122; ARMV8M-NEXT: vmov d1, r0, r11123; ARMV8M-NEXT: vldrw.u32 q1, [r12]1124; ARMV8M-NEXT: vmov d0, r2, r31125; ARMV8M-NEXT: vcmp.f64 d1, d21126; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1127; ARMV8M-NEXT: vcmp.f64 d0, d31128; ARMV8M-NEXT: vselgt.f64 d1, d1, d21129; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1130; ARMV8M-NEXT: vmov r0, r1, d11131; ARMV8M-NEXT: vselgt.f64 d0, d0, d31132; ARMV8M-NEXT: vmov r2, r3, d01133; ARMV8M-NEXT: bx lr1134 %a = call nnan <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double> %y)1135 ret <2 x double> %a1136}1137 1138define <2 x double> @fmaxnumv264_nsz_intrinsic(<2 x double> %x, <2 x double> %y) {1139; ARMV7-LABEL: fmaxnumv264_nsz_intrinsic:1140; ARMV7: @ %bb.0:1141; ARMV7-NEXT: mov r12, sp1142; ARMV7-NEXT: vld1.64 {d16, d17}, [r12]1143; ARMV7-NEXT: vmov d18, r0, r11144; ARMV7-NEXT: vcmp.f64 d18, d161145; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1146; ARMV7-NEXT: vmov d19, r2, r31147; ARMV7-NEXT: vcmp.f64 d19, d171148; ARMV7-NEXT: vmovgt.f64 d16, d181149; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1150; ARMV7-NEXT: vmov r0, r1, d161151; ARMV7-NEXT: vmovgt.f64 d17, d191152; ARMV7-NEXT: vmov r2, r3, d171153; ARMV7-NEXT: bx lr1154;1155; ARMV8-LABEL: fmaxnumv264_nsz_intrinsic:1156; ARMV8: @ %bb.0:1157; ARMV8-NEXT: mov r12, sp1158; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]1159; ARMV8-NEXT: vmov d19, r0, r11160; ARMV8-NEXT: vmov d18, r2, r31161; ARMV8-NEXT: vmaxnm.f64 d19, d19, d161162; ARMV8-NEXT: vmaxnm.f64 d16, d18, d171163; ARMV8-NEXT: vmov r0, r1, d191164; ARMV8-NEXT: vmov r2, r3, d161165; ARMV8-NEXT: bx lr1166;1167; ARMV8M-LABEL: fmaxnumv264_nsz_intrinsic:1168; ARMV8M: @ %bb.0:1169; ARMV8M-NEXT: mov r12, sp1170; ARMV8M-NEXT: vmov d1, r0, r11171; ARMV8M-NEXT: vldrw.u32 q1, [r12]1172; ARMV8M-NEXT: vmov d0, r2, r31173; ARMV8M-NEXT: vcmp.f64 d1, d21174; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1175; ARMV8M-NEXT: vcmp.f64 d0, d31176; ARMV8M-NEXT: vselgt.f64 d1, d1, d21177; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1178; ARMV8M-NEXT: vmov r0, r1, d11179; ARMV8M-NEXT: vselgt.f64 d0, d0, d31180; ARMV8M-NEXT: vmov r2, r3, d01181; ARMV8M-NEXT: bx lr1182 %a = call nnan nsz <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double> %y)1183 ret <2 x double> %a1184}1185 1186define <2 x double> @fmaxnumv264_zero_intrinsic(<2 x double> %x) {1187; ARMV7-LABEL: fmaxnumv264_zero_intrinsic:1188; ARMV7: @ %bb.0:1189; ARMV7-NEXT: vmov d18, r0, r11190; ARMV7-NEXT: vldr d16, .LCPI30_01191; ARMV7-NEXT: vcmp.f64 d18, #01192; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1193; ARMV7-NEXT: vmov d19, r2, r31194; ARMV7-NEXT: vcmp.f64 d19, d161195; ARMV7-NEXT: vmov.i32 d17, #0x01196; ARMV7-NEXT: vmovgt.f64 d17, d181197; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1198; ARMV7-NEXT: vmov r0, r1, d171199; ARMV7-NEXT: vmovgt.f64 d16, d191200; ARMV7-NEXT: vmov r2, r3, d161201; ARMV7-NEXT: bx lr1202; ARMV7-NEXT: .p2align 31203; ARMV7-NEXT: @ %bb.1:1204; ARMV7-NEXT: .LCPI30_0:1205; ARMV7-NEXT: .long 0 @ double -01206; ARMV7-NEXT: .long 21474836481207;1208; ARMV8-LABEL: fmaxnumv264_zero_intrinsic:1209; ARMV8: @ %bb.0:1210; ARMV8-NEXT: vldr d16, .LCPI30_01211; ARMV8-NEXT: vmov d18, r2, r31212; ARMV8-NEXT: vmov.i32 d17, #0x01213; ARMV8-NEXT: vmov d19, r0, r11214; ARMV8-NEXT: vmaxnm.f64 d16, d18, d161215; ARMV8-NEXT: vmaxnm.f64 d17, d19, d171216; ARMV8-NEXT: vmov r2, r3, d161217; ARMV8-NEXT: vmov r0, r1, d171218; ARMV8-NEXT: bx lr1219; ARMV8-NEXT: .p2align 31220; ARMV8-NEXT: @ %bb.1:1221; ARMV8-NEXT: .LCPI30_0:1222; ARMV8-NEXT: .long 0 @ double -01223; ARMV8-NEXT: .long 21474836481224;1225; ARMV8M-LABEL: fmaxnumv264_zero_intrinsic:1226; ARMV8M: @ %bb.0:1227; ARMV8M-NEXT: vmov d2, r0, r11228; ARMV8M-NEXT: vldr d0, .LCPI30_01229; ARMV8M-NEXT: vcmp.f64 d2, #01230; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1231; ARMV8M-NEXT: vmov d1, r2, r31232; ARMV8M-NEXT: vcmp.f64 d1, d01233; ARMV8M-NEXT: vldr d3, .LCPI30_11234; ARMV8M-NEXT: vselgt.f64 d2, d2, d31235; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1236; ARMV8M-NEXT: vmov r0, r1, d21237; ARMV8M-NEXT: vselgt.f64 d0, d1, d01238; ARMV8M-NEXT: vmov r2, r3, d01239; ARMV8M-NEXT: bx lr1240; ARMV8M-NEXT: .p2align 31241; ARMV8M-NEXT: @ %bb.1:1242; ARMV8M-NEXT: .LCPI30_0:1243; ARMV8M-NEXT: .long 0 @ double -01244; ARMV8M-NEXT: .long 21474836481245; ARMV8M-NEXT: .LCPI30_1:1246; ARMV8M-NEXT: .long 0 @ double 01247; ARMV8M-NEXT: .long 01248 %a = call nnan <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double><double 0.0, double -0.0>)1249 ret <2 x double> %a1250}1251 1252define <2 x double> @fmaxnumv264_minus_zero_intrinsic(<2 x double> %x) {1253; ARMV7-LABEL: fmaxnumv264_minus_zero_intrinsic:1254; ARMV7: @ %bb.0:1255; ARMV7-NEXT: vldr d16, .LCPI31_01256; ARMV7-NEXT: vmov d17, r0, r11257; ARMV7-NEXT: vmov d18, r2, r31258; ARMV7-NEXT: vcmp.f64 d17, d161259; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1260; ARMV7-NEXT: vcmp.f64 d18, d161261; ARMV7-NEXT: vmov.f64 d19, d161262; ARMV7-NEXT: vmovgt.f64 d19, d171263; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1264; ARMV7-NEXT: vmov r0, r1, d191265; ARMV7-NEXT: vmovgt.f64 d16, d181266; ARMV7-NEXT: vmov r2, r3, d161267; ARMV7-NEXT: bx lr1268; ARMV7-NEXT: .p2align 31269; ARMV7-NEXT: @ %bb.1:1270; ARMV7-NEXT: .LCPI31_0:1271; ARMV7-NEXT: .long 0 @ double -01272; ARMV7-NEXT: .long 21474836481273;1274; ARMV8-LABEL: fmaxnumv264_minus_zero_intrinsic:1275; ARMV8: @ %bb.0:1276; ARMV8-NEXT: vldr d16, .LCPI31_01277; ARMV8-NEXT: vmov d18, r0, r11278; ARMV8-NEXT: vmov d17, r2, r31279; ARMV8-NEXT: vmaxnm.f64 d18, d18, d161280; ARMV8-NEXT: vmaxnm.f64 d16, d17, d161281; ARMV8-NEXT: vmov r0, r1, d181282; ARMV8-NEXT: vmov r2, r3, d161283; ARMV8-NEXT: bx lr1284; ARMV8-NEXT: .p2align 31285; ARMV8-NEXT: @ %bb.1:1286; ARMV8-NEXT: .LCPI31_0:1287; ARMV8-NEXT: .long 0 @ double -01288; ARMV8-NEXT: .long 21474836481289;1290; ARMV8M-LABEL: fmaxnumv264_minus_zero_intrinsic:1291; ARMV8M: @ %bb.0:1292; ARMV8M-NEXT: vldr d0, .LCPI31_01293; ARMV8M-NEXT: vmov d1, r0, r11294; ARMV8M-NEXT: vmov d2, r2, r31295; ARMV8M-NEXT: vcmp.f64 d1, d01296; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1297; ARMV8M-NEXT: vcmp.f64 d2, d01298; ARMV8M-NEXT: vselgt.f64 d1, d1, d01299; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1300; ARMV8M-NEXT: vmov r0, r1, d11301; ARMV8M-NEXT: vselgt.f64 d0, d2, d01302; ARMV8M-NEXT: vmov r2, r3, d01303; ARMV8M-NEXT: bx lr1304; ARMV8M-NEXT: .p2align 31305; ARMV8M-NEXT: @ %bb.1:1306; ARMV8M-NEXT: .LCPI31_0:1307; ARMV8M-NEXT: .long 0 @ double -01308; ARMV8M-NEXT: .long 21474836481309 %a = call nnan <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double><double -0.0, double -0.0>)1310 ret <2 x double> %a1311}1312 1313define <2 x double> @fmaxnumv264_non_zero_intrinsic(<2 x double> %x) {1314; ARMV7-LABEL: fmaxnumv264_non_zero_intrinsic:1315; ARMV7: @ %bb.0:1316; ARMV7-NEXT: vmov.f64 d16, #1.000000e+001317; ARMV7-NEXT: vmov d17, r0, r11318; ARMV7-NEXT: vcmp.f64 d17, d161319; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1320; ARMV7-NEXT: vmov d18, r2, r31321; ARMV7-NEXT: vcmp.f64 d18, d161322; ARMV7-NEXT: vmov.f64 d19, d161323; ARMV7-NEXT: vmovgt.f64 d19, d171324; ARMV7-NEXT: vmrs APSR_nzcv, fpscr1325; ARMV7-NEXT: vmov r0, r1, d191326; ARMV7-NEXT: vmovgt.f64 d16, d181327; ARMV7-NEXT: vmov r2, r3, d161328; ARMV7-NEXT: bx lr1329;1330; ARMV8-LABEL: fmaxnumv264_non_zero_intrinsic:1331; ARMV8: @ %bb.0:1332; ARMV8-NEXT: vmov.f64 d16, #1.000000e+001333; ARMV8-NEXT: vmov d18, r0, r11334; ARMV8-NEXT: vmov d17, r2, r31335; ARMV8-NEXT: vmaxnm.f64 d18, d18, d161336; ARMV8-NEXT: vmaxnm.f64 d16, d17, d161337; ARMV8-NEXT: vmov r0, r1, d181338; ARMV8-NEXT: vmov r2, r3, d161339; ARMV8-NEXT: bx lr1340;1341; ARMV8M-LABEL: fmaxnumv264_non_zero_intrinsic:1342; ARMV8M: @ %bb.0:1343; ARMV8M-NEXT: vmov.f64 d0, #1.000000e+001344; ARMV8M-NEXT: vmov d1, r0, r11345; ARMV8M-NEXT: vcmp.f64 d1, d01346; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1347; ARMV8M-NEXT: vmov d2, r2, r31348; ARMV8M-NEXT: vcmp.f64 d2, d01349; ARMV8M-NEXT: vselgt.f64 d1, d1, d01350; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr1351; ARMV8M-NEXT: vmov r0, r1, d11352; ARMV8M-NEXT: vselgt.f64 d0, d2, d01353; ARMV8M-NEXT: vmov r2, r3, d01354; ARMV8M-NEXT: bx lr1355 %a = call nnan <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double><double 1.0, double 1.0>)1356 ret <2 x double> %a1357}1358 1359define void @pr65820(ptr %y, <4 x float> %splat) {1360; ARMV7-LABEL: pr65820:1361; ARMV7: @ %bb.0: @ %entry1362; ARMV7-NEXT: vmov d16, r2, r31363; ARMV7-NEXT: vdup.32 q8, d16[0]1364; ARMV7-NEXT: vcgt.f32 q9, q8, #01365; ARMV7-NEXT: vand q8, q9, q81366; ARMV7-NEXT: vst1.32 {d16, d17}, [r0]1367; ARMV7-NEXT: bx lr1368;1369; ARMV8-LABEL: pr65820:1370; ARMV8: @ %bb.0: @ %entry1371; ARMV8-NEXT: vmov d16, r2, r31372; ARMV8-NEXT: vmov.i32 q9, #0x01373; ARMV8-NEXT: vdup.32 q8, d16[0]1374; ARMV8-NEXT: vmaxnm.f32 q8, q8, q91375; ARMV8-NEXT: vst1.32 {d16, d17}, [r0]1376; ARMV8-NEXT: bx lr1377;1378; ARMV8M-LABEL: pr65820:1379; ARMV8M: @ %bb.0: @ %entry1380; ARMV8M-NEXT: vmov d0, r2, r31381; ARMV8M-NEXT: vmov r1, s01382; ARMV8M-NEXT: vmov.i32 q0, #0x01383; ARMV8M-NEXT: vdup.32 q1, r11384; ARMV8M-NEXT: vmaxnm.f32 q0, q1, q01385; ARMV8M-NEXT: vstrw.32 q0, [r0]1386; ARMV8M-NEXT: bx lr1387entry:1388 %broadcast.splat = shufflevector <4 x float> %splat, <4 x float> zeroinitializer, <4 x i32> zeroinitializer1389 %0 = fcmp ogt <4 x float> %broadcast.splat, zeroinitializer1390 %1 = select <4 x i1> %0, <4 x float> %broadcast.splat, <4 x float> zeroinitializer1391 store <4 x float> %1, ptr %y, align 41392 ret void1393}1394