1951 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8;9; FMAXNM10;11 12define <4 x half> @fmaxnm_v4f16(<4 x half> %op1, <4 x half> %op2) {13; CHECK-LABEL: fmaxnm_v4f16:14; CHECK: // %bb.0:15; CHECK-NEXT: ptrue p0.h, vl416; CHECK-NEXT: // kill: def $d0 killed $d0 def $z017; CHECK-NEXT: // kill: def $d1 killed $d1 def $z118; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h19; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z020; CHECK-NEXT: ret21;22; NONEON-NOSVE-LABEL: fmaxnm_v4f16:23; NONEON-NOSVE: // %bb.0:24; NONEON-NOSVE-NEXT: sub sp, sp, #3225; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 3226; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]27; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]28; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]29; NONEON-NOSVE-NEXT: fcvt s0, h030; NONEON-NOSVE-NEXT: fcvt s1, h131; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s032; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]33; NONEON-NOSVE-NEXT: fcvt s1, h134; NONEON-NOSVE-NEXT: fcvt h0, s035; NONEON-NOSVE-NEXT: str h0, [sp, #30]36; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]37; NONEON-NOSVE-NEXT: fcvt s0, h038; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s039; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]40; NONEON-NOSVE-NEXT: fcvt s1, h141; NONEON-NOSVE-NEXT: fcvt h0, s042; NONEON-NOSVE-NEXT: str h0, [sp, #28]43; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]44; NONEON-NOSVE-NEXT: fcvt s0, h045; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s046; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]47; NONEON-NOSVE-NEXT: fcvt s1, h148; NONEON-NOSVE-NEXT: fcvt h0, s049; NONEON-NOSVE-NEXT: str h0, [sp, #26]50; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]51; NONEON-NOSVE-NEXT: fcvt s0, h052; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s053; NONEON-NOSVE-NEXT: fcvt h0, s054; NONEON-NOSVE-NEXT: str h0, [sp, #24]55; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]56; NONEON-NOSVE-NEXT: add sp, sp, #3257; NONEON-NOSVE-NEXT: ret58 %res = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %op1, <4 x half> %op2)59 ret <4 x half> %res60}61 62define <8 x half> @fmaxnm_v8f16(<8 x half> %op1, <8 x half> %op2) {63; CHECK-LABEL: fmaxnm_v8f16:64; CHECK: // %bb.0:65; CHECK-NEXT: ptrue p0.h, vl866; CHECK-NEXT: // kill: def $q0 killed $q0 def $z067; CHECK-NEXT: // kill: def $q1 killed $q1 def $z168; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h69; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z070; CHECK-NEXT: ret71;72; NONEON-NOSVE-LABEL: fmaxnm_v8f16:73; NONEON-NOSVE: // %bb.0:74; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!75; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 4876; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]77; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]78; NONEON-NOSVE-NEXT: fcvt s0, h079; NONEON-NOSVE-NEXT: fcvt s1, h180; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s081; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]82; NONEON-NOSVE-NEXT: fcvt s1, h183; NONEON-NOSVE-NEXT: fcvt h0, s084; NONEON-NOSVE-NEXT: str h0, [sp, #46]85; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]86; NONEON-NOSVE-NEXT: fcvt s0, h087; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s088; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]89; NONEON-NOSVE-NEXT: fcvt s1, h190; NONEON-NOSVE-NEXT: fcvt h0, s091; NONEON-NOSVE-NEXT: str h0, [sp, #44]92; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]93; NONEON-NOSVE-NEXT: fcvt s0, h094; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s095; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]96; NONEON-NOSVE-NEXT: fcvt s1, h197; NONEON-NOSVE-NEXT: fcvt h0, s098; NONEON-NOSVE-NEXT: str h0, [sp, #42]99; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]100; NONEON-NOSVE-NEXT: fcvt s0, h0101; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0102; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]103; NONEON-NOSVE-NEXT: fcvt s1, h1104; NONEON-NOSVE-NEXT: fcvt h0, s0105; NONEON-NOSVE-NEXT: str h0, [sp, #40]106; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]107; NONEON-NOSVE-NEXT: fcvt s0, h0108; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0109; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]110; NONEON-NOSVE-NEXT: fcvt s1, h1111; NONEON-NOSVE-NEXT: fcvt h0, s0112; NONEON-NOSVE-NEXT: str h0, [sp, #38]113; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]114; NONEON-NOSVE-NEXT: fcvt s0, h0115; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0116; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]117; NONEON-NOSVE-NEXT: fcvt s1, h1118; NONEON-NOSVE-NEXT: fcvt h0, s0119; NONEON-NOSVE-NEXT: str h0, [sp, #36]120; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]121; NONEON-NOSVE-NEXT: fcvt s0, h0122; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0123; NONEON-NOSVE-NEXT: ldr h1, [sp]124; NONEON-NOSVE-NEXT: fcvt s1, h1125; NONEON-NOSVE-NEXT: fcvt h0, s0126; NONEON-NOSVE-NEXT: str h0, [sp, #34]127; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]128; NONEON-NOSVE-NEXT: fcvt s0, h0129; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0130; NONEON-NOSVE-NEXT: fcvt h0, s0131; NONEON-NOSVE-NEXT: str h0, [sp, #32]132; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]133; NONEON-NOSVE-NEXT: add sp, sp, #48134; NONEON-NOSVE-NEXT: ret135 %res = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %op1, <8 x half> %op2)136 ret <8 x half> %res137}138 139define void @fmaxnm_v16f16(ptr %a, ptr %b) {140; CHECK-LABEL: fmaxnm_v16f16:141; CHECK: // %bb.0:142; CHECK-NEXT: ldp q0, q3, [x1]143; CHECK-NEXT: ptrue p0.h, vl8144; CHECK-NEXT: ldp q1, q2, [x0]145; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h146; CHECK-NEXT: fmaxnm z2.h, p0/m, z2.h, z3.h147; CHECK-NEXT: stp q0, q2, [x0]148; CHECK-NEXT: ret149;150; NONEON-NOSVE-LABEL: fmaxnm_v16f16:151; NONEON-NOSVE: // %bb.0:152; NONEON-NOSVE-NEXT: sub sp, sp, #96153; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96154; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]155; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]156; NONEON-NOSVE-NEXT: stp q2, q3, [sp]157; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]158; NONEON-NOSVE-NEXT: ldr h0, [sp, #62]159; NONEON-NOSVE-NEXT: ldr h1, [sp, #46]160; NONEON-NOSVE-NEXT: fcvt s0, h0161; NONEON-NOSVE-NEXT: fcvt s1, h1162; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0163; NONEON-NOSVE-NEXT: ldr h1, [sp, #44]164; NONEON-NOSVE-NEXT: fcvt s1, h1165; NONEON-NOSVE-NEXT: fcvt h0, s0166; NONEON-NOSVE-NEXT: str h0, [sp, #94]167; NONEON-NOSVE-NEXT: ldr h0, [sp, #60]168; NONEON-NOSVE-NEXT: fcvt s0, h0169; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0170; NONEON-NOSVE-NEXT: ldr h1, [sp, #42]171; NONEON-NOSVE-NEXT: fcvt s1, h1172; NONEON-NOSVE-NEXT: fcvt h0, s0173; NONEON-NOSVE-NEXT: str h0, [sp, #92]174; NONEON-NOSVE-NEXT: ldr h0, [sp, #58]175; NONEON-NOSVE-NEXT: fcvt s0, h0176; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0177; NONEON-NOSVE-NEXT: ldr h1, [sp, #40]178; NONEON-NOSVE-NEXT: fcvt s1, h1179; NONEON-NOSVE-NEXT: fcvt h0, s0180; NONEON-NOSVE-NEXT: str h0, [sp, #90]181; NONEON-NOSVE-NEXT: ldr h0, [sp, #56]182; NONEON-NOSVE-NEXT: fcvt s0, h0183; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0184; NONEON-NOSVE-NEXT: ldr h1, [sp, #38]185; NONEON-NOSVE-NEXT: fcvt s1, h1186; NONEON-NOSVE-NEXT: fcvt h0, s0187; NONEON-NOSVE-NEXT: str h0, [sp, #88]188; NONEON-NOSVE-NEXT: ldr h0, [sp, #54]189; NONEON-NOSVE-NEXT: fcvt s0, h0190; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0191; NONEON-NOSVE-NEXT: ldr h1, [sp, #36]192; NONEON-NOSVE-NEXT: fcvt s1, h1193; NONEON-NOSVE-NEXT: fcvt h0, s0194; NONEON-NOSVE-NEXT: str h0, [sp, #86]195; NONEON-NOSVE-NEXT: ldr h0, [sp, #52]196; NONEON-NOSVE-NEXT: fcvt s0, h0197; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0198; NONEON-NOSVE-NEXT: ldr h1, [sp, #34]199; NONEON-NOSVE-NEXT: fcvt s1, h1200; NONEON-NOSVE-NEXT: fcvt h0, s0201; NONEON-NOSVE-NEXT: str h0, [sp, #84]202; NONEON-NOSVE-NEXT: ldr h0, [sp, #50]203; NONEON-NOSVE-NEXT: fcvt s0, h0204; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0205; NONEON-NOSVE-NEXT: ldr h1, [sp, #32]206; NONEON-NOSVE-NEXT: fcvt s1, h1207; NONEON-NOSVE-NEXT: fcvt h0, s0208; NONEON-NOSVE-NEXT: str h0, [sp, #82]209; NONEON-NOSVE-NEXT: ldr h0, [sp, #48]210; NONEON-NOSVE-NEXT: fcvt s0, h0211; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0212; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]213; NONEON-NOSVE-NEXT: fcvt s1, h1214; NONEON-NOSVE-NEXT: fcvt h0, s0215; NONEON-NOSVE-NEXT: str h0, [sp, #80]216; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]217; NONEON-NOSVE-NEXT: fcvt s0, h0218; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0219; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]220; NONEON-NOSVE-NEXT: fcvt s1, h1221; NONEON-NOSVE-NEXT: fcvt h0, s0222; NONEON-NOSVE-NEXT: str h0, [sp, #78]223; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]224; NONEON-NOSVE-NEXT: fcvt s0, h0225; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0226; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]227; NONEON-NOSVE-NEXT: fcvt s1, h1228; NONEON-NOSVE-NEXT: fcvt h0, s0229; NONEON-NOSVE-NEXT: str h0, [sp, #76]230; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]231; NONEON-NOSVE-NEXT: fcvt s0, h0232; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0233; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]234; NONEON-NOSVE-NEXT: fcvt s1, h1235; NONEON-NOSVE-NEXT: fcvt h0, s0236; NONEON-NOSVE-NEXT: str h0, [sp, #74]237; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]238; NONEON-NOSVE-NEXT: fcvt s0, h0239; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0240; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]241; NONEON-NOSVE-NEXT: fcvt s1, h1242; NONEON-NOSVE-NEXT: fcvt h0, s0243; NONEON-NOSVE-NEXT: str h0, [sp, #72]244; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]245; NONEON-NOSVE-NEXT: fcvt s0, h0246; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0247; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]248; NONEON-NOSVE-NEXT: fcvt s1, h1249; NONEON-NOSVE-NEXT: fcvt h0, s0250; NONEON-NOSVE-NEXT: str h0, [sp, #70]251; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]252; NONEON-NOSVE-NEXT: fcvt s0, h0253; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0254; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]255; NONEON-NOSVE-NEXT: fcvt s1, h1256; NONEON-NOSVE-NEXT: fcvt h0, s0257; NONEON-NOSVE-NEXT: str h0, [sp, #68]258; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]259; NONEON-NOSVE-NEXT: fcvt s0, h0260; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0261; NONEON-NOSVE-NEXT: ldr h1, [sp]262; NONEON-NOSVE-NEXT: fcvt s1, h1263; NONEON-NOSVE-NEXT: fcvt h0, s0264; NONEON-NOSVE-NEXT: str h0, [sp, #66]265; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]266; NONEON-NOSVE-NEXT: fcvt s0, h0267; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0268; NONEON-NOSVE-NEXT: fcvt h0, s0269; NONEON-NOSVE-NEXT: str h0, [sp, #64]270; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]271; NONEON-NOSVE-NEXT: stp q0, q1, [x0]272; NONEON-NOSVE-NEXT: add sp, sp, #96273; NONEON-NOSVE-NEXT: ret274 %op1 = load <16 x half>, ptr %a275 %op2 = load <16 x half>, ptr %b276 %res = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %op1, <16 x half> %op2)277 store <16 x half> %res, ptr %a278 ret void279}280 281define <2 x float> @fmaxnm_v2f32(<2 x float> %op1, <2 x float> %op2) {282; CHECK-LABEL: fmaxnm_v2f32:283; CHECK: // %bb.0:284; CHECK-NEXT: ptrue p0.s, vl2285; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0286; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1287; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s288; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0289; CHECK-NEXT: ret290;291; NONEON-NOSVE-LABEL: fmaxnm_v2f32:292; NONEON-NOSVE: // %bb.0:293; NONEON-NOSVE-NEXT: sub sp, sp, #32294; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32295; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]296; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]297; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]298; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0299; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]300; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0301; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #24]302; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]303; NONEON-NOSVE-NEXT: add sp, sp, #32304; NONEON-NOSVE-NEXT: ret305 %res = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %op1, <2 x float> %op2)306 ret <2 x float> %res307}308 309define <4 x float> @fmaxnm_v4f32(<4 x float> %op1, <4 x float> %op2) {310; CHECK-LABEL: fmaxnm_v4f32:311; CHECK: // %bb.0:312; CHECK-NEXT: ptrue p0.s, vl4313; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0314; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1315; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s316; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0317; CHECK-NEXT: ret318;319; NONEON-NOSVE-LABEL: fmaxnm_v4f32:320; NONEON-NOSVE: // %bb.0:321; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!322; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48323; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]324; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]325; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0326; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]327; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0328; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]329; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #40]330; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]331; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0332; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]333; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0334; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #32]335; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]336; NONEON-NOSVE-NEXT: add sp, sp, #48337; NONEON-NOSVE-NEXT: ret338 %res = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %op1, <4 x float> %op2)339 ret <4 x float> %res340}341 342define void @fmaxnm_v8f32(ptr %a, ptr %b) {343; CHECK-LABEL: fmaxnm_v8f32:344; CHECK: // %bb.0:345; CHECK-NEXT: ldp q0, q3, [x1]346; CHECK-NEXT: ptrue p0.s, vl4347; CHECK-NEXT: ldp q1, q2, [x0]348; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s349; CHECK-NEXT: fmaxnm z2.s, p0/m, z2.s, z3.s350; CHECK-NEXT: stp q0, q2, [x0]351; CHECK-NEXT: ret352;353; NONEON-NOSVE-LABEL: fmaxnm_v8f32:354; NONEON-NOSVE: // %bb.0:355; NONEON-NOSVE-NEXT: sub sp, sp, #96356; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96357; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]358; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]359; NONEON-NOSVE-NEXT: stp q2, q3, [sp]360; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]361; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #40]362; NONEON-NOSVE-NEXT: ldr s0, [sp, #60]363; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0364; NONEON-NOSVE-NEXT: ldr s0, [sp, #56]365; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0366; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #32]367; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #88]368; NONEON-NOSVE-NEXT: ldr s0, [sp, #52]369; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0370; NONEON-NOSVE-NEXT: ldr s0, [sp, #48]371; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0372; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]373; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #80]374; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]375; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0376; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]377; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0378; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]379; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #72]380; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]381; NONEON-NOSVE-NEXT: fmaxnm s3, s2, s0382; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]383; NONEON-NOSVE-NEXT: fmaxnm s0, s1, s0384; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #64]385; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]386; NONEON-NOSVE-NEXT: stp q0, q1, [x0]387; NONEON-NOSVE-NEXT: add sp, sp, #96388; NONEON-NOSVE-NEXT: ret389 %op1 = load <8 x float>, ptr %a390 %op2 = load <8 x float>, ptr %b391 %res = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %op1, <8 x float> %op2)392 store <8 x float> %res, ptr %a393 ret void394}395 396define <1 x double> @fmaxnm_v1f64(<1 x double> %op1, <1 x double> %op2) {397; CHECK-LABEL: fmaxnm_v1f64:398; CHECK: // %bb.0:399; CHECK-NEXT: fmaxnm d0, d0, d1400; CHECK-NEXT: ret401;402; NONEON-NOSVE-LABEL: fmaxnm_v1f64:403; NONEON-NOSVE: // %bb.0:404; NONEON-NOSVE-NEXT: sub sp, sp, #16405; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16406; NONEON-NOSVE-NEXT: fmaxnm d0, d0, d1407; NONEON-NOSVE-NEXT: str d0, [sp, #8]408; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]409; NONEON-NOSVE-NEXT: add sp, sp, #16410; NONEON-NOSVE-NEXT: ret411 %res = call <1 x double> @llvm.maxnum.v1f64(<1 x double> %op1, <1 x double> %op2)412 ret <1 x double> %res413}414 415define <2 x double> @fmaxnm_v2f64(<2 x double> %op1, <2 x double> %op2) {416; CHECK-LABEL: fmaxnm_v2f64:417; CHECK: // %bb.0:418; CHECK-NEXT: ptrue p0.d, vl2419; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0420; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1421; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, z1.d422; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0423; CHECK-NEXT: ret424;425; NONEON-NOSVE-LABEL: fmaxnm_v2f64:426; NONEON-NOSVE: // %bb.0:427; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!428; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48429; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]430; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]431; NONEON-NOSVE-NEXT: fmaxnm d3, d2, d0432; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]433; NONEON-NOSVE-NEXT: fmaxnm d0, d1, d0434; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #32]435; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]436; NONEON-NOSVE-NEXT: add sp, sp, #48437; NONEON-NOSVE-NEXT: ret438 %res = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %op1, <2 x double> %op2)439 ret <2 x double> %res440}441 442define void @fmaxnm_v4f64(ptr %a, ptr %b) {443; CHECK-LABEL: fmaxnm_v4f64:444; CHECK: // %bb.0:445; CHECK-NEXT: ldp q0, q3, [x1]446; CHECK-NEXT: ptrue p0.d, vl2447; CHECK-NEXT: ldp q1, q2, [x0]448; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, z1.d449; CHECK-NEXT: fmaxnm z2.d, p0/m, z2.d, z3.d450; CHECK-NEXT: stp q0, q2, [x0]451; CHECK-NEXT: ret452;453; NONEON-NOSVE-LABEL: fmaxnm_v4f64:454; NONEON-NOSVE: // %bb.0:455; NONEON-NOSVE-NEXT: sub sp, sp, #96456; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96457; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]458; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]459; NONEON-NOSVE-NEXT: stp q2, q3, [sp]460; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]461; NONEON-NOSVE-NEXT: ldp d1, d2, [sp, #32]462; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]463; NONEON-NOSVE-NEXT: fmaxnm d3, d2, d0464; NONEON-NOSVE-NEXT: ldr d0, [sp, #48]465; NONEON-NOSVE-NEXT: fmaxnm d0, d1, d0466; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]467; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #80]468; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]469; NONEON-NOSVE-NEXT: fmaxnm d3, d2, d0470; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]471; NONEON-NOSVE-NEXT: fmaxnm d0, d1, d0472; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #64]473; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]474; NONEON-NOSVE-NEXT: stp q0, q1, [x0]475; NONEON-NOSVE-NEXT: add sp, sp, #96476; NONEON-NOSVE-NEXT: ret477 %op1 = load <4 x double>, ptr %a478 %op2 = load <4 x double>, ptr %b479 %res = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %op1, <4 x double> %op2)480 store <4 x double> %res, ptr %a481 ret void482}483 484;485; FMINNM486;487 488define <4 x half> @fminnm_v4f16(<4 x half> %op1, <4 x half> %op2) {489; CHECK-LABEL: fminnm_v4f16:490; CHECK: // %bb.0:491; CHECK-NEXT: ptrue p0.h, vl4492; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0493; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1494; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h495; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0496; CHECK-NEXT: ret497;498; NONEON-NOSVE-LABEL: fminnm_v4f16:499; NONEON-NOSVE: // %bb.0:500; NONEON-NOSVE-NEXT: sub sp, sp, #32501; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32502; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]503; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]504; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]505; NONEON-NOSVE-NEXT: fcvt s0, h0506; NONEON-NOSVE-NEXT: fcvt s1, h1507; NONEON-NOSVE-NEXT: fminnm s0, s1, s0508; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]509; NONEON-NOSVE-NEXT: fcvt s1, h1510; NONEON-NOSVE-NEXT: fcvt h0, s0511; NONEON-NOSVE-NEXT: str h0, [sp, #30]512; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]513; NONEON-NOSVE-NEXT: fcvt s0, h0514; NONEON-NOSVE-NEXT: fminnm s0, s1, s0515; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]516; NONEON-NOSVE-NEXT: fcvt s1, h1517; NONEON-NOSVE-NEXT: fcvt h0, s0518; NONEON-NOSVE-NEXT: str h0, [sp, #28]519; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]520; NONEON-NOSVE-NEXT: fcvt s0, h0521; NONEON-NOSVE-NEXT: fminnm s0, s1, s0522; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]523; NONEON-NOSVE-NEXT: fcvt s1, h1524; NONEON-NOSVE-NEXT: fcvt h0, s0525; NONEON-NOSVE-NEXT: str h0, [sp, #26]526; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]527; NONEON-NOSVE-NEXT: fcvt s0, h0528; NONEON-NOSVE-NEXT: fminnm s0, s1, s0529; NONEON-NOSVE-NEXT: fcvt h0, s0530; NONEON-NOSVE-NEXT: str h0, [sp, #24]531; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]532; NONEON-NOSVE-NEXT: add sp, sp, #32533; NONEON-NOSVE-NEXT: ret534 %res = call <4 x half> @llvm.minnum.v4f16(<4 x half> %op1, <4 x half> %op2)535 ret <4 x half> %res536}537 538define <8 x half> @fminnm_v8f16(<8 x half> %op1, <8 x half> %op2) {539; CHECK-LABEL: fminnm_v8f16:540; CHECK: // %bb.0:541; CHECK-NEXT: ptrue p0.h, vl8542; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0543; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1544; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h545; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0546; CHECK-NEXT: ret547;548; NONEON-NOSVE-LABEL: fminnm_v8f16:549; NONEON-NOSVE: // %bb.0:550; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!551; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48552; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]553; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]554; NONEON-NOSVE-NEXT: fcvt s0, h0555; NONEON-NOSVE-NEXT: fcvt s1, h1556; NONEON-NOSVE-NEXT: fminnm s0, s1, s0557; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]558; NONEON-NOSVE-NEXT: fcvt s1, h1559; NONEON-NOSVE-NEXT: fcvt h0, s0560; NONEON-NOSVE-NEXT: str h0, [sp, #46]561; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]562; NONEON-NOSVE-NEXT: fcvt s0, h0563; NONEON-NOSVE-NEXT: fminnm s0, s1, s0564; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]565; NONEON-NOSVE-NEXT: fcvt s1, h1566; NONEON-NOSVE-NEXT: fcvt h0, s0567; NONEON-NOSVE-NEXT: str h0, [sp, #44]568; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]569; NONEON-NOSVE-NEXT: fcvt s0, h0570; NONEON-NOSVE-NEXT: fminnm s0, s1, s0571; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]572; NONEON-NOSVE-NEXT: fcvt s1, h1573; NONEON-NOSVE-NEXT: fcvt h0, s0574; NONEON-NOSVE-NEXT: str h0, [sp, #42]575; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]576; NONEON-NOSVE-NEXT: fcvt s0, h0577; NONEON-NOSVE-NEXT: fminnm s0, s1, s0578; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]579; NONEON-NOSVE-NEXT: fcvt s1, h1580; NONEON-NOSVE-NEXT: fcvt h0, s0581; NONEON-NOSVE-NEXT: str h0, [sp, #40]582; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]583; NONEON-NOSVE-NEXT: fcvt s0, h0584; NONEON-NOSVE-NEXT: fminnm s0, s1, s0585; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]586; NONEON-NOSVE-NEXT: fcvt s1, h1587; NONEON-NOSVE-NEXT: fcvt h0, s0588; NONEON-NOSVE-NEXT: str h0, [sp, #38]589; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]590; NONEON-NOSVE-NEXT: fcvt s0, h0591; NONEON-NOSVE-NEXT: fminnm s0, s1, s0592; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]593; NONEON-NOSVE-NEXT: fcvt s1, h1594; NONEON-NOSVE-NEXT: fcvt h0, s0595; NONEON-NOSVE-NEXT: str h0, [sp, #36]596; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]597; NONEON-NOSVE-NEXT: fcvt s0, h0598; NONEON-NOSVE-NEXT: fminnm s0, s1, s0599; NONEON-NOSVE-NEXT: ldr h1, [sp]600; NONEON-NOSVE-NEXT: fcvt s1, h1601; NONEON-NOSVE-NEXT: fcvt h0, s0602; NONEON-NOSVE-NEXT: str h0, [sp, #34]603; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]604; NONEON-NOSVE-NEXT: fcvt s0, h0605; NONEON-NOSVE-NEXT: fminnm s0, s1, s0606; NONEON-NOSVE-NEXT: fcvt h0, s0607; NONEON-NOSVE-NEXT: str h0, [sp, #32]608; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]609; NONEON-NOSVE-NEXT: add sp, sp, #48610; NONEON-NOSVE-NEXT: ret611 %res = call <8 x half> @llvm.minnum.v8f16(<8 x half> %op1, <8 x half> %op2)612 ret <8 x half> %res613}614 615define void @fminnm_v16f16(ptr %a, ptr %b) {616; CHECK-LABEL: fminnm_v16f16:617; CHECK: // %bb.0:618; CHECK-NEXT: ldp q0, q3, [x1]619; CHECK-NEXT: ptrue p0.h, vl8620; CHECK-NEXT: ldp q1, q2, [x0]621; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h622; CHECK-NEXT: fminnm z2.h, p0/m, z2.h, z3.h623; CHECK-NEXT: stp q0, q2, [x0]624; CHECK-NEXT: ret625;626; NONEON-NOSVE-LABEL: fminnm_v16f16:627; NONEON-NOSVE: // %bb.0:628; NONEON-NOSVE-NEXT: sub sp, sp, #96629; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96630; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]631; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]632; NONEON-NOSVE-NEXT: stp q2, q3, [sp]633; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]634; NONEON-NOSVE-NEXT: ldr h0, [sp, #62]635; NONEON-NOSVE-NEXT: ldr h1, [sp, #46]636; NONEON-NOSVE-NEXT: fcvt s0, h0637; NONEON-NOSVE-NEXT: fcvt s1, h1638; NONEON-NOSVE-NEXT: fminnm s0, s1, s0639; NONEON-NOSVE-NEXT: ldr h1, [sp, #44]640; NONEON-NOSVE-NEXT: fcvt s1, h1641; NONEON-NOSVE-NEXT: fcvt h0, s0642; NONEON-NOSVE-NEXT: str h0, [sp, #94]643; NONEON-NOSVE-NEXT: ldr h0, [sp, #60]644; NONEON-NOSVE-NEXT: fcvt s0, h0645; NONEON-NOSVE-NEXT: fminnm s0, s1, s0646; NONEON-NOSVE-NEXT: ldr h1, [sp, #42]647; NONEON-NOSVE-NEXT: fcvt s1, h1648; NONEON-NOSVE-NEXT: fcvt h0, s0649; NONEON-NOSVE-NEXT: str h0, [sp, #92]650; NONEON-NOSVE-NEXT: ldr h0, [sp, #58]651; NONEON-NOSVE-NEXT: fcvt s0, h0652; NONEON-NOSVE-NEXT: fminnm s0, s1, s0653; NONEON-NOSVE-NEXT: ldr h1, [sp, #40]654; NONEON-NOSVE-NEXT: fcvt s1, h1655; NONEON-NOSVE-NEXT: fcvt h0, s0656; NONEON-NOSVE-NEXT: str h0, [sp, #90]657; NONEON-NOSVE-NEXT: ldr h0, [sp, #56]658; NONEON-NOSVE-NEXT: fcvt s0, h0659; NONEON-NOSVE-NEXT: fminnm s0, s1, s0660; NONEON-NOSVE-NEXT: ldr h1, [sp, #38]661; NONEON-NOSVE-NEXT: fcvt s1, h1662; NONEON-NOSVE-NEXT: fcvt h0, s0663; NONEON-NOSVE-NEXT: str h0, [sp, #88]664; NONEON-NOSVE-NEXT: ldr h0, [sp, #54]665; NONEON-NOSVE-NEXT: fcvt s0, h0666; NONEON-NOSVE-NEXT: fminnm s0, s1, s0667; NONEON-NOSVE-NEXT: ldr h1, [sp, #36]668; NONEON-NOSVE-NEXT: fcvt s1, h1669; NONEON-NOSVE-NEXT: fcvt h0, s0670; NONEON-NOSVE-NEXT: str h0, [sp, #86]671; NONEON-NOSVE-NEXT: ldr h0, [sp, #52]672; NONEON-NOSVE-NEXT: fcvt s0, h0673; NONEON-NOSVE-NEXT: fminnm s0, s1, s0674; NONEON-NOSVE-NEXT: ldr h1, [sp, #34]675; NONEON-NOSVE-NEXT: fcvt s1, h1676; NONEON-NOSVE-NEXT: fcvt h0, s0677; NONEON-NOSVE-NEXT: str h0, [sp, #84]678; NONEON-NOSVE-NEXT: ldr h0, [sp, #50]679; NONEON-NOSVE-NEXT: fcvt s0, h0680; NONEON-NOSVE-NEXT: fminnm s0, s1, s0681; NONEON-NOSVE-NEXT: ldr h1, [sp, #32]682; NONEON-NOSVE-NEXT: fcvt s1, h1683; NONEON-NOSVE-NEXT: fcvt h0, s0684; NONEON-NOSVE-NEXT: str h0, [sp, #82]685; NONEON-NOSVE-NEXT: ldr h0, [sp, #48]686; NONEON-NOSVE-NEXT: fcvt s0, h0687; NONEON-NOSVE-NEXT: fminnm s0, s1, s0688; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]689; NONEON-NOSVE-NEXT: fcvt s1, h1690; NONEON-NOSVE-NEXT: fcvt h0, s0691; NONEON-NOSVE-NEXT: str h0, [sp, #80]692; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]693; NONEON-NOSVE-NEXT: fcvt s0, h0694; NONEON-NOSVE-NEXT: fminnm s0, s1, s0695; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]696; NONEON-NOSVE-NEXT: fcvt s1, h1697; NONEON-NOSVE-NEXT: fcvt h0, s0698; NONEON-NOSVE-NEXT: str h0, [sp, #78]699; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]700; NONEON-NOSVE-NEXT: fcvt s0, h0701; NONEON-NOSVE-NEXT: fminnm s0, s1, s0702; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]703; NONEON-NOSVE-NEXT: fcvt s1, h1704; NONEON-NOSVE-NEXT: fcvt h0, s0705; NONEON-NOSVE-NEXT: str h0, [sp, #76]706; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]707; NONEON-NOSVE-NEXT: fcvt s0, h0708; NONEON-NOSVE-NEXT: fminnm s0, s1, s0709; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]710; NONEON-NOSVE-NEXT: fcvt s1, h1711; NONEON-NOSVE-NEXT: fcvt h0, s0712; NONEON-NOSVE-NEXT: str h0, [sp, #74]713; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]714; NONEON-NOSVE-NEXT: fcvt s0, h0715; NONEON-NOSVE-NEXT: fminnm s0, s1, s0716; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]717; NONEON-NOSVE-NEXT: fcvt s1, h1718; NONEON-NOSVE-NEXT: fcvt h0, s0719; NONEON-NOSVE-NEXT: str h0, [sp, #72]720; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]721; NONEON-NOSVE-NEXT: fcvt s0, h0722; NONEON-NOSVE-NEXT: fminnm s0, s1, s0723; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]724; NONEON-NOSVE-NEXT: fcvt s1, h1725; NONEON-NOSVE-NEXT: fcvt h0, s0726; NONEON-NOSVE-NEXT: str h0, [sp, #70]727; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]728; NONEON-NOSVE-NEXT: fcvt s0, h0729; NONEON-NOSVE-NEXT: fminnm s0, s1, s0730; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]731; NONEON-NOSVE-NEXT: fcvt s1, h1732; NONEON-NOSVE-NEXT: fcvt h0, s0733; NONEON-NOSVE-NEXT: str h0, [sp, #68]734; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]735; NONEON-NOSVE-NEXT: fcvt s0, h0736; NONEON-NOSVE-NEXT: fminnm s0, s1, s0737; NONEON-NOSVE-NEXT: ldr h1, [sp]738; NONEON-NOSVE-NEXT: fcvt s1, h1739; NONEON-NOSVE-NEXT: fcvt h0, s0740; NONEON-NOSVE-NEXT: str h0, [sp, #66]741; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]742; NONEON-NOSVE-NEXT: fcvt s0, h0743; NONEON-NOSVE-NEXT: fminnm s0, s1, s0744; NONEON-NOSVE-NEXT: fcvt h0, s0745; NONEON-NOSVE-NEXT: str h0, [sp, #64]746; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]747; NONEON-NOSVE-NEXT: stp q0, q1, [x0]748; NONEON-NOSVE-NEXT: add sp, sp, #96749; NONEON-NOSVE-NEXT: ret750 %op1 = load <16 x half>, ptr %a751 %op2 = load <16 x half>, ptr %b752 %res = call <16 x half> @llvm.minnum.v16f16(<16 x half> %op1, <16 x half> %op2)753 store <16 x half> %res, ptr %a754 ret void755}756 757define <2 x float> @fminnm_v2f32(<2 x float> %op1, <2 x float> %op2) {758; CHECK-LABEL: fminnm_v2f32:759; CHECK: // %bb.0:760; CHECK-NEXT: ptrue p0.s, vl2761; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0762; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1763; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s764; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0765; CHECK-NEXT: ret766;767; NONEON-NOSVE-LABEL: fminnm_v2f32:768; NONEON-NOSVE: // %bb.0:769; NONEON-NOSVE-NEXT: sub sp, sp, #32770; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32771; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]772; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]773; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]774; NONEON-NOSVE-NEXT: fminnm s3, s2, s0775; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]776; NONEON-NOSVE-NEXT: fminnm s0, s1, s0777; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #24]778; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]779; NONEON-NOSVE-NEXT: add sp, sp, #32780; NONEON-NOSVE-NEXT: ret781 %res = call <2 x float> @llvm.minnum.v2f32(<2 x float> %op1, <2 x float> %op2)782 ret <2 x float> %res783}784 785define <4 x float> @fminnm_v4f32(<4 x float> %op1, <4 x float> %op2) {786; CHECK-LABEL: fminnm_v4f32:787; CHECK: // %bb.0:788; CHECK-NEXT: ptrue p0.s, vl4789; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0790; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1791; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s792; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0793; CHECK-NEXT: ret794;795; NONEON-NOSVE-LABEL: fminnm_v4f32:796; NONEON-NOSVE: // %bb.0:797; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!798; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48799; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]800; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]801; NONEON-NOSVE-NEXT: fminnm s3, s2, s0802; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]803; NONEON-NOSVE-NEXT: fminnm s0, s1, s0804; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]805; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #40]806; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]807; NONEON-NOSVE-NEXT: fminnm s3, s2, s0808; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]809; NONEON-NOSVE-NEXT: fminnm s0, s1, s0810; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #32]811; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]812; NONEON-NOSVE-NEXT: add sp, sp, #48813; NONEON-NOSVE-NEXT: ret814 %res = call <4 x float> @llvm.minnum.v4f32(<4 x float> %op1, <4 x float> %op2)815 ret <4 x float> %res816}817 818define void @fminnm_v8f32(ptr %a, ptr %b) {819; CHECK-LABEL: fminnm_v8f32:820; CHECK: // %bb.0:821; CHECK-NEXT: ldp q0, q3, [x1]822; CHECK-NEXT: ptrue p0.s, vl4823; CHECK-NEXT: ldp q1, q2, [x0]824; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s825; CHECK-NEXT: fminnm z2.s, p0/m, z2.s, z3.s826; CHECK-NEXT: stp q0, q2, [x0]827; CHECK-NEXT: ret828;829; NONEON-NOSVE-LABEL: fminnm_v8f32:830; NONEON-NOSVE: // %bb.0:831; NONEON-NOSVE-NEXT: sub sp, sp, #96832; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96833; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]834; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]835; NONEON-NOSVE-NEXT: stp q2, q3, [sp]836; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]837; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #40]838; NONEON-NOSVE-NEXT: ldr s0, [sp, #60]839; NONEON-NOSVE-NEXT: fminnm s3, s2, s0840; NONEON-NOSVE-NEXT: ldr s0, [sp, #56]841; NONEON-NOSVE-NEXT: fminnm s0, s1, s0842; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #32]843; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #88]844; NONEON-NOSVE-NEXT: ldr s0, [sp, #52]845; NONEON-NOSVE-NEXT: fminnm s3, s2, s0846; NONEON-NOSVE-NEXT: ldr s0, [sp, #48]847; NONEON-NOSVE-NEXT: fminnm s0, s1, s0848; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]849; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #80]850; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]851; NONEON-NOSVE-NEXT: fminnm s3, s2, s0852; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]853; NONEON-NOSVE-NEXT: fminnm s0, s1, s0854; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]855; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #72]856; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]857; NONEON-NOSVE-NEXT: fminnm s3, s2, s0858; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]859; NONEON-NOSVE-NEXT: fminnm s0, s1, s0860; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #64]861; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]862; NONEON-NOSVE-NEXT: stp q0, q1, [x0]863; NONEON-NOSVE-NEXT: add sp, sp, #96864; NONEON-NOSVE-NEXT: ret865 %op1 = load <8 x float>, ptr %a866 %op2 = load <8 x float>, ptr %b867 %res = call <8 x float> @llvm.minnum.v8f32(<8 x float> %op1, <8 x float> %op2)868 store <8 x float> %res, ptr %a869 ret void870}871 872define <1 x double> @fminnm_v1f64(<1 x double> %op1, <1 x double> %op2) {873; CHECK-LABEL: fminnm_v1f64:874; CHECK: // %bb.0:875; CHECK-NEXT: fminnm d0, d0, d1876; CHECK-NEXT: ret877;878; NONEON-NOSVE-LABEL: fminnm_v1f64:879; NONEON-NOSVE: // %bb.0:880; NONEON-NOSVE-NEXT: sub sp, sp, #16881; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16882; NONEON-NOSVE-NEXT: fminnm d0, d0, d1883; NONEON-NOSVE-NEXT: str d0, [sp, #8]884; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]885; NONEON-NOSVE-NEXT: add sp, sp, #16886; NONEON-NOSVE-NEXT: ret887 %res = call <1 x double> @llvm.minnum.v1f64(<1 x double> %op1, <1 x double> %op2)888 ret <1 x double> %res889}890 891define <2 x double> @fminnm_v2f64(<2 x double> %op1, <2 x double> %op2) {892; CHECK-LABEL: fminnm_v2f64:893; CHECK: // %bb.0:894; CHECK-NEXT: ptrue p0.d, vl2895; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0896; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1897; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, z1.d898; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0899; CHECK-NEXT: ret900;901; NONEON-NOSVE-LABEL: fminnm_v2f64:902; NONEON-NOSVE: // %bb.0:903; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!904; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48905; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]906; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]907; NONEON-NOSVE-NEXT: fminnm d3, d2, d0908; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]909; NONEON-NOSVE-NEXT: fminnm d0, d1, d0910; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #32]911; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]912; NONEON-NOSVE-NEXT: add sp, sp, #48913; NONEON-NOSVE-NEXT: ret914 %res = call <2 x double> @llvm.minnum.v2f64(<2 x double> %op1, <2 x double> %op2)915 ret <2 x double> %res916}917 918define void @fminnm_v4f64(ptr %a, ptr %b) {919; CHECK-LABEL: fminnm_v4f64:920; CHECK: // %bb.0:921; CHECK-NEXT: ldp q0, q3, [x1]922; CHECK-NEXT: ptrue p0.d, vl2923; CHECK-NEXT: ldp q1, q2, [x0]924; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, z1.d925; CHECK-NEXT: fminnm z2.d, p0/m, z2.d, z3.d926; CHECK-NEXT: stp q0, q2, [x0]927; CHECK-NEXT: ret928;929; NONEON-NOSVE-LABEL: fminnm_v4f64:930; NONEON-NOSVE: // %bb.0:931; NONEON-NOSVE-NEXT: sub sp, sp, #96932; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96933; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]934; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]935; NONEON-NOSVE-NEXT: stp q2, q3, [sp]936; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]937; NONEON-NOSVE-NEXT: ldp d1, d2, [sp, #32]938; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]939; NONEON-NOSVE-NEXT: fminnm d3, d2, d0940; NONEON-NOSVE-NEXT: ldr d0, [sp, #48]941; NONEON-NOSVE-NEXT: fminnm d0, d1, d0942; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]943; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #80]944; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]945; NONEON-NOSVE-NEXT: fminnm d3, d2, d0946; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]947; NONEON-NOSVE-NEXT: fminnm d0, d1, d0948; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #64]949; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]950; NONEON-NOSVE-NEXT: stp q0, q1, [x0]951; NONEON-NOSVE-NEXT: add sp, sp, #96952; NONEON-NOSVE-NEXT: ret953 %op1 = load <4 x double>, ptr %a954 %op2 = load <4 x double>, ptr %b955 %res = call <4 x double> @llvm.minnum.v4f64(<4 x double> %op1, <4 x double> %op2)956 store <4 x double> %res, ptr %a957 ret void958}959 960;961; FMAX962;963 964define <4 x half> @fmax_v4f16(<4 x half> %op1, <4 x half> %op2) {965; CHECK-LABEL: fmax_v4f16:966; CHECK: // %bb.0:967; CHECK-NEXT: ptrue p0.h, vl4968; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0969; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1970; CHECK-NEXT: fmax z0.h, p0/m, z0.h, z1.h971; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0972; CHECK-NEXT: ret973;974; NONEON-NOSVE-LABEL: fmax_v4f16:975; NONEON-NOSVE: // %bb.0:976; NONEON-NOSVE-NEXT: sub sp, sp, #32977; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32978; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]979; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]980; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]981; NONEON-NOSVE-NEXT: fcvt s0, h0982; NONEON-NOSVE-NEXT: fcvt s1, h1983; NONEON-NOSVE-NEXT: fmax s0, s1, s0984; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]985; NONEON-NOSVE-NEXT: fcvt s1, h1986; NONEON-NOSVE-NEXT: fcvt h0, s0987; NONEON-NOSVE-NEXT: str h0, [sp, #30]988; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]989; NONEON-NOSVE-NEXT: fcvt s0, h0990; NONEON-NOSVE-NEXT: fmax s0, s1, s0991; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]992; NONEON-NOSVE-NEXT: fcvt s1, h1993; NONEON-NOSVE-NEXT: fcvt h0, s0994; NONEON-NOSVE-NEXT: str h0, [sp, #28]995; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]996; NONEON-NOSVE-NEXT: fcvt s0, h0997; NONEON-NOSVE-NEXT: fmax s0, s1, s0998; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]999; NONEON-NOSVE-NEXT: fcvt s1, h11000; NONEON-NOSVE-NEXT: fcvt h0, s01001; NONEON-NOSVE-NEXT: str h0, [sp, #26]1002; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1003; NONEON-NOSVE-NEXT: fcvt s0, h01004; NONEON-NOSVE-NEXT: fmax s0, s1, s01005; NONEON-NOSVE-NEXT: fcvt h0, s01006; NONEON-NOSVE-NEXT: str h0, [sp, #24]1007; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1008; NONEON-NOSVE-NEXT: add sp, sp, #321009; NONEON-NOSVE-NEXT: ret1010 %res = call <4 x half> @llvm.maximum.v4f16(<4 x half> %op1, <4 x half> %op2)1011 ret <4 x half> %res1012}1013 1014define <8 x half> @fmax_v8f16(<8 x half> %op1, <8 x half> %op2) {1015; CHECK-LABEL: fmax_v8f16:1016; CHECK: // %bb.0:1017; CHECK-NEXT: ptrue p0.h, vl81018; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01019; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11020; CHECK-NEXT: fmax z0.h, p0/m, z0.h, z1.h1021; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01022; CHECK-NEXT: ret1023;1024; NONEON-NOSVE-LABEL: fmax_v8f16:1025; NONEON-NOSVE: // %bb.0:1026; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1027; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481028; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]1029; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]1030; NONEON-NOSVE-NEXT: fcvt s0, h01031; NONEON-NOSVE-NEXT: fcvt s1, h11032; NONEON-NOSVE-NEXT: fmax s0, s1, s01033; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]1034; NONEON-NOSVE-NEXT: fcvt s1, h11035; NONEON-NOSVE-NEXT: fcvt h0, s01036; NONEON-NOSVE-NEXT: str h0, [sp, #46]1037; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]1038; NONEON-NOSVE-NEXT: fcvt s0, h01039; NONEON-NOSVE-NEXT: fmax s0, s1, s01040; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]1041; NONEON-NOSVE-NEXT: fcvt s1, h11042; NONEON-NOSVE-NEXT: fcvt h0, s01043; NONEON-NOSVE-NEXT: str h0, [sp, #44]1044; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]1045; NONEON-NOSVE-NEXT: fcvt s0, h01046; NONEON-NOSVE-NEXT: fmax s0, s1, s01047; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]1048; NONEON-NOSVE-NEXT: fcvt s1, h11049; NONEON-NOSVE-NEXT: fcvt h0, s01050; NONEON-NOSVE-NEXT: str h0, [sp, #42]1051; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]1052; NONEON-NOSVE-NEXT: fcvt s0, h01053; NONEON-NOSVE-NEXT: fmax s0, s1, s01054; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]1055; NONEON-NOSVE-NEXT: fcvt s1, h11056; NONEON-NOSVE-NEXT: fcvt h0, s01057; NONEON-NOSVE-NEXT: str h0, [sp, #40]1058; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]1059; NONEON-NOSVE-NEXT: fcvt s0, h01060; NONEON-NOSVE-NEXT: fmax s0, s1, s01061; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]1062; NONEON-NOSVE-NEXT: fcvt s1, h11063; NONEON-NOSVE-NEXT: fcvt h0, s01064; NONEON-NOSVE-NEXT: str h0, [sp, #38]1065; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]1066; NONEON-NOSVE-NEXT: fcvt s0, h01067; NONEON-NOSVE-NEXT: fmax s0, s1, s01068; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]1069; NONEON-NOSVE-NEXT: fcvt s1, h11070; NONEON-NOSVE-NEXT: fcvt h0, s01071; NONEON-NOSVE-NEXT: str h0, [sp, #36]1072; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]1073; NONEON-NOSVE-NEXT: fcvt s0, h01074; NONEON-NOSVE-NEXT: fmax s0, s1, s01075; NONEON-NOSVE-NEXT: ldr h1, [sp]1076; NONEON-NOSVE-NEXT: fcvt s1, h11077; NONEON-NOSVE-NEXT: fcvt h0, s01078; NONEON-NOSVE-NEXT: str h0, [sp, #34]1079; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1080; NONEON-NOSVE-NEXT: fcvt s0, h01081; NONEON-NOSVE-NEXT: fmax s0, s1, s01082; NONEON-NOSVE-NEXT: fcvt h0, s01083; NONEON-NOSVE-NEXT: str h0, [sp, #32]1084; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1085; NONEON-NOSVE-NEXT: add sp, sp, #481086; NONEON-NOSVE-NEXT: ret1087 %res = call <8 x half> @llvm.maximum.v8f16(<8 x half> %op1, <8 x half> %op2)1088 ret <8 x half> %res1089}1090 1091define void @fmax_v16f16(ptr %a, ptr %b) {1092; CHECK-LABEL: fmax_v16f16:1093; CHECK: // %bb.0:1094; CHECK-NEXT: ldp q0, q3, [x1]1095; CHECK-NEXT: ptrue p0.h, vl81096; CHECK-NEXT: ldp q1, q2, [x0]1097; CHECK-NEXT: fmax z0.h, p0/m, z0.h, z1.h1098; CHECK-NEXT: fmax z2.h, p0/m, z2.h, z3.h1099; CHECK-NEXT: stp q0, q2, [x0]1100; CHECK-NEXT: ret1101;1102; NONEON-NOSVE-LABEL: fmax_v16f16:1103; NONEON-NOSVE: // %bb.0:1104; NONEON-NOSVE-NEXT: sub sp, sp, #961105; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961106; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1107; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1108; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1109; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1110; NONEON-NOSVE-NEXT: ldr h0, [sp, #62]1111; NONEON-NOSVE-NEXT: ldr h1, [sp, #46]1112; NONEON-NOSVE-NEXT: fcvt s0, h01113; NONEON-NOSVE-NEXT: fcvt s1, h11114; NONEON-NOSVE-NEXT: fmax s0, s1, s01115; NONEON-NOSVE-NEXT: ldr h1, [sp, #44]1116; NONEON-NOSVE-NEXT: fcvt s1, h11117; NONEON-NOSVE-NEXT: fcvt h0, s01118; NONEON-NOSVE-NEXT: str h0, [sp, #94]1119; NONEON-NOSVE-NEXT: ldr h0, [sp, #60]1120; NONEON-NOSVE-NEXT: fcvt s0, h01121; NONEON-NOSVE-NEXT: fmax s0, s1, s01122; NONEON-NOSVE-NEXT: ldr h1, [sp, #42]1123; NONEON-NOSVE-NEXT: fcvt s1, h11124; NONEON-NOSVE-NEXT: fcvt h0, s01125; NONEON-NOSVE-NEXT: str h0, [sp, #92]1126; NONEON-NOSVE-NEXT: ldr h0, [sp, #58]1127; NONEON-NOSVE-NEXT: fcvt s0, h01128; NONEON-NOSVE-NEXT: fmax s0, s1, s01129; NONEON-NOSVE-NEXT: ldr h1, [sp, #40]1130; NONEON-NOSVE-NEXT: fcvt s1, h11131; NONEON-NOSVE-NEXT: fcvt h0, s01132; NONEON-NOSVE-NEXT: str h0, [sp, #90]1133; NONEON-NOSVE-NEXT: ldr h0, [sp, #56]1134; NONEON-NOSVE-NEXT: fcvt s0, h01135; NONEON-NOSVE-NEXT: fmax s0, s1, s01136; NONEON-NOSVE-NEXT: ldr h1, [sp, #38]1137; NONEON-NOSVE-NEXT: fcvt s1, h11138; NONEON-NOSVE-NEXT: fcvt h0, s01139; NONEON-NOSVE-NEXT: str h0, [sp, #88]1140; NONEON-NOSVE-NEXT: ldr h0, [sp, #54]1141; NONEON-NOSVE-NEXT: fcvt s0, h01142; NONEON-NOSVE-NEXT: fmax s0, s1, s01143; NONEON-NOSVE-NEXT: ldr h1, [sp, #36]1144; NONEON-NOSVE-NEXT: fcvt s1, h11145; NONEON-NOSVE-NEXT: fcvt h0, s01146; NONEON-NOSVE-NEXT: str h0, [sp, #86]1147; NONEON-NOSVE-NEXT: ldr h0, [sp, #52]1148; NONEON-NOSVE-NEXT: fcvt s0, h01149; NONEON-NOSVE-NEXT: fmax s0, s1, s01150; NONEON-NOSVE-NEXT: ldr h1, [sp, #34]1151; NONEON-NOSVE-NEXT: fcvt s1, h11152; NONEON-NOSVE-NEXT: fcvt h0, s01153; NONEON-NOSVE-NEXT: str h0, [sp, #84]1154; NONEON-NOSVE-NEXT: ldr h0, [sp, #50]1155; NONEON-NOSVE-NEXT: fcvt s0, h01156; NONEON-NOSVE-NEXT: fmax s0, s1, s01157; NONEON-NOSVE-NEXT: ldr h1, [sp, #32]1158; NONEON-NOSVE-NEXT: fcvt s1, h11159; NONEON-NOSVE-NEXT: fcvt h0, s01160; NONEON-NOSVE-NEXT: str h0, [sp, #82]1161; NONEON-NOSVE-NEXT: ldr h0, [sp, #48]1162; NONEON-NOSVE-NEXT: fcvt s0, h01163; NONEON-NOSVE-NEXT: fmax s0, s1, s01164; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]1165; NONEON-NOSVE-NEXT: fcvt s1, h11166; NONEON-NOSVE-NEXT: fcvt h0, s01167; NONEON-NOSVE-NEXT: str h0, [sp, #80]1168; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]1169; NONEON-NOSVE-NEXT: fcvt s0, h01170; NONEON-NOSVE-NEXT: fmax s0, s1, s01171; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]1172; NONEON-NOSVE-NEXT: fcvt s1, h11173; NONEON-NOSVE-NEXT: fcvt h0, s01174; NONEON-NOSVE-NEXT: str h0, [sp, #78]1175; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]1176; NONEON-NOSVE-NEXT: fcvt s0, h01177; NONEON-NOSVE-NEXT: fmax s0, s1, s01178; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]1179; NONEON-NOSVE-NEXT: fcvt s1, h11180; NONEON-NOSVE-NEXT: fcvt h0, s01181; NONEON-NOSVE-NEXT: str h0, [sp, #76]1182; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]1183; NONEON-NOSVE-NEXT: fcvt s0, h01184; NONEON-NOSVE-NEXT: fmax s0, s1, s01185; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]1186; NONEON-NOSVE-NEXT: fcvt s1, h11187; NONEON-NOSVE-NEXT: fcvt h0, s01188; NONEON-NOSVE-NEXT: str h0, [sp, #74]1189; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]1190; NONEON-NOSVE-NEXT: fcvt s0, h01191; NONEON-NOSVE-NEXT: fmax s0, s1, s01192; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]1193; NONEON-NOSVE-NEXT: fcvt s1, h11194; NONEON-NOSVE-NEXT: fcvt h0, s01195; NONEON-NOSVE-NEXT: str h0, [sp, #72]1196; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]1197; NONEON-NOSVE-NEXT: fcvt s0, h01198; NONEON-NOSVE-NEXT: fmax s0, s1, s01199; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]1200; NONEON-NOSVE-NEXT: fcvt s1, h11201; NONEON-NOSVE-NEXT: fcvt h0, s01202; NONEON-NOSVE-NEXT: str h0, [sp, #70]1203; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]1204; NONEON-NOSVE-NEXT: fcvt s0, h01205; NONEON-NOSVE-NEXT: fmax s0, s1, s01206; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]1207; NONEON-NOSVE-NEXT: fcvt s1, h11208; NONEON-NOSVE-NEXT: fcvt h0, s01209; NONEON-NOSVE-NEXT: str h0, [sp, #68]1210; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]1211; NONEON-NOSVE-NEXT: fcvt s0, h01212; NONEON-NOSVE-NEXT: fmax s0, s1, s01213; NONEON-NOSVE-NEXT: ldr h1, [sp]1214; NONEON-NOSVE-NEXT: fcvt s1, h11215; NONEON-NOSVE-NEXT: fcvt h0, s01216; NONEON-NOSVE-NEXT: str h0, [sp, #66]1217; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1218; NONEON-NOSVE-NEXT: fcvt s0, h01219; NONEON-NOSVE-NEXT: fmax s0, s1, s01220; NONEON-NOSVE-NEXT: fcvt h0, s01221; NONEON-NOSVE-NEXT: str h0, [sp, #64]1222; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1223; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1224; NONEON-NOSVE-NEXT: add sp, sp, #961225; NONEON-NOSVE-NEXT: ret1226 %op1 = load <16 x half>, ptr %a1227 %op2 = load <16 x half>, ptr %b1228 %res = call <16 x half> @llvm.maximum.v16f16(<16 x half> %op1, <16 x half> %op2)1229 store <16 x half> %res, ptr %a1230 ret void1231}1232 1233define <2 x float> @fmax_v2f32(<2 x float> %op1, <2 x float> %op2) {1234; CHECK-LABEL: fmax_v2f32:1235; CHECK: // %bb.0:1236; CHECK-NEXT: ptrue p0.s, vl21237; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01238; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11239; CHECK-NEXT: fmax z0.s, p0/m, z0.s, z1.s1240; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01241; CHECK-NEXT: ret1242;1243; NONEON-NOSVE-LABEL: fmax_v2f32:1244; NONEON-NOSVE: // %bb.0:1245; NONEON-NOSVE-NEXT: sub sp, sp, #321246; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321247; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1248; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1249; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1250; NONEON-NOSVE-NEXT: fmax s3, s2, s01251; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1252; NONEON-NOSVE-NEXT: fmax s0, s1, s01253; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #24]1254; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1255; NONEON-NOSVE-NEXT: add sp, sp, #321256; NONEON-NOSVE-NEXT: ret1257 %res = call <2 x float> @llvm.maximum.v2f32(<2 x float> %op1, <2 x float> %op2)1258 ret <2 x float> %res1259}1260 1261define <4 x float> @fmax_v4f32(<4 x float> %op1, <4 x float> %op2) {1262; CHECK-LABEL: fmax_v4f32:1263; CHECK: // %bb.0:1264; CHECK-NEXT: ptrue p0.s, vl41265; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01266; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11267; CHECK-NEXT: fmax z0.s, p0/m, z0.s, z1.s1268; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01269; CHECK-NEXT: ret1270;1271; NONEON-NOSVE-LABEL: fmax_v4f32:1272; NONEON-NOSVE: // %bb.0:1273; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1274; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481275; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1276; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]1277; NONEON-NOSVE-NEXT: fmax s3, s2, s01278; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]1279; NONEON-NOSVE-NEXT: fmax s0, s1, s01280; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]1281; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #40]1282; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1283; NONEON-NOSVE-NEXT: fmax s3, s2, s01284; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1285; NONEON-NOSVE-NEXT: fmax s0, s1, s01286; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #32]1287; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1288; NONEON-NOSVE-NEXT: add sp, sp, #481289; NONEON-NOSVE-NEXT: ret1290 %res = call <4 x float> @llvm.maximum.v4f32(<4 x float> %op1, <4 x float> %op2)1291 ret <4 x float> %res1292}1293 1294define void @fmax_v8f32(ptr %a, ptr %b) {1295; CHECK-LABEL: fmax_v8f32:1296; CHECK: // %bb.0:1297; CHECK-NEXT: ldp q0, q3, [x1]1298; CHECK-NEXT: ptrue p0.s, vl41299; CHECK-NEXT: ldp q1, q2, [x0]1300; CHECK-NEXT: fmax z0.s, p0/m, z0.s, z1.s1301; CHECK-NEXT: fmax z2.s, p0/m, z2.s, z3.s1302; CHECK-NEXT: stp q0, q2, [x0]1303; CHECK-NEXT: ret1304;1305; NONEON-NOSVE-LABEL: fmax_v8f32:1306; NONEON-NOSVE: // %bb.0:1307; NONEON-NOSVE-NEXT: sub sp, sp, #961308; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961309; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1310; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1311; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1312; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1313; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #40]1314; NONEON-NOSVE-NEXT: ldr s0, [sp, #60]1315; NONEON-NOSVE-NEXT: fmax s3, s2, s01316; NONEON-NOSVE-NEXT: ldr s0, [sp, #56]1317; NONEON-NOSVE-NEXT: fmax s0, s1, s01318; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #32]1319; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #88]1320; NONEON-NOSVE-NEXT: ldr s0, [sp, #52]1321; NONEON-NOSVE-NEXT: fmax s3, s2, s01322; NONEON-NOSVE-NEXT: ldr s0, [sp, #48]1323; NONEON-NOSVE-NEXT: fmax s0, s1, s01324; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1325; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #80]1326; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]1327; NONEON-NOSVE-NEXT: fmax s3, s2, s01328; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]1329; NONEON-NOSVE-NEXT: fmax s0, s1, s01330; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]1331; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #72]1332; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1333; NONEON-NOSVE-NEXT: fmax s3, s2, s01334; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1335; NONEON-NOSVE-NEXT: fmax s0, s1, s01336; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #64]1337; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1338; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1339; NONEON-NOSVE-NEXT: add sp, sp, #961340; NONEON-NOSVE-NEXT: ret1341 %op1 = load <8 x float>, ptr %a1342 %op2 = load <8 x float>, ptr %b1343 %res = call <8 x float> @llvm.maximum.v8f32(<8 x float> %op1, <8 x float> %op2)1344 store <8 x float> %res, ptr %a1345 ret void1346}1347 1348define <1 x double> @fmax_v1f64(<1 x double> %op1, <1 x double> %op2) {1349; CHECK-LABEL: fmax_v1f64:1350; CHECK: // %bb.0:1351; CHECK-NEXT: fmax d0, d0, d11352; CHECK-NEXT: ret1353;1354; NONEON-NOSVE-LABEL: fmax_v1f64:1355; NONEON-NOSVE: // %bb.0:1356; NONEON-NOSVE-NEXT: sub sp, sp, #161357; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 161358; NONEON-NOSVE-NEXT: fmax d0, d0, d11359; NONEON-NOSVE-NEXT: str d0, [sp, #8]1360; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]1361; NONEON-NOSVE-NEXT: add sp, sp, #161362; NONEON-NOSVE-NEXT: ret1363 %res = call <1 x double> @llvm.maximum.v1f64(<1 x double> %op1, <1 x double> %op2)1364 ret <1 x double> %res1365}1366 1367define <2 x double> @fmax_v2f64(<2 x double> %op1, <2 x double> %op2) {1368; CHECK-LABEL: fmax_v2f64:1369; CHECK: // %bb.0:1370; CHECK-NEXT: ptrue p0.d, vl21371; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01372; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11373; CHECK-NEXT: fmax z0.d, p0/m, z0.d, z1.d1374; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01375; CHECK-NEXT: ret1376;1377; NONEON-NOSVE-LABEL: fmax_v2f64:1378; NONEON-NOSVE: // %bb.0:1379; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1380; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481381; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]1382; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1383; NONEON-NOSVE-NEXT: fmax d3, d2, d01384; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]1385; NONEON-NOSVE-NEXT: fmax d0, d1, d01386; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #32]1387; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1388; NONEON-NOSVE-NEXT: add sp, sp, #481389; NONEON-NOSVE-NEXT: ret1390 %res = call <2 x double> @llvm.maximum.v2f64(<2 x double> %op1, <2 x double> %op2)1391 ret <2 x double> %res1392}1393 1394define void @fmax_v4f64(ptr %a, ptr %b) {1395; CHECK-LABEL: fmax_v4f64:1396; CHECK: // %bb.0:1397; CHECK-NEXT: ldp q0, q3, [x1]1398; CHECK-NEXT: ptrue p0.d, vl21399; CHECK-NEXT: ldp q1, q2, [x0]1400; CHECK-NEXT: fmax z0.d, p0/m, z0.d, z1.d1401; CHECK-NEXT: fmax z2.d, p0/m, z2.d, z3.d1402; CHECK-NEXT: stp q0, q2, [x0]1403; CHECK-NEXT: ret1404;1405; NONEON-NOSVE-LABEL: fmax_v4f64:1406; NONEON-NOSVE: // %bb.0:1407; NONEON-NOSVE-NEXT: sub sp, sp, #961408; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961409; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1410; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1411; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1412; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1413; NONEON-NOSVE-NEXT: ldp d1, d2, [sp, #32]1414; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]1415; NONEON-NOSVE-NEXT: fmax d3, d2, d01416; NONEON-NOSVE-NEXT: ldr d0, [sp, #48]1417; NONEON-NOSVE-NEXT: fmax d0, d1, d01418; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]1419; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #80]1420; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1421; NONEON-NOSVE-NEXT: fmax d3, d2, d01422; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]1423; NONEON-NOSVE-NEXT: fmax d0, d1, d01424; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #64]1425; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1426; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1427; NONEON-NOSVE-NEXT: add sp, sp, #961428; NONEON-NOSVE-NEXT: ret1429 %op1 = load <4 x double>, ptr %a1430 %op2 = load <4 x double>, ptr %b1431 %res = call <4 x double> @llvm.maximum.v4f64(<4 x double> %op1, <4 x double> %op2)1432 store <4 x double> %res, ptr %a1433 ret void1434}1435 1436;1437; FMIN1438;1439 1440define <4 x half> @fmin_v4f16(<4 x half> %op1, <4 x half> %op2) {1441; CHECK-LABEL: fmin_v4f16:1442; CHECK: // %bb.0:1443; CHECK-NEXT: ptrue p0.h, vl41444; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01445; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11446; CHECK-NEXT: fmin z0.h, p0/m, z0.h, z1.h1447; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01448; CHECK-NEXT: ret1449;1450; NONEON-NOSVE-LABEL: fmin_v4f16:1451; NONEON-NOSVE: // %bb.0:1452; NONEON-NOSVE-NEXT: sub sp, sp, #321453; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321454; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1455; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]1456; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]1457; NONEON-NOSVE-NEXT: fcvt s0, h01458; NONEON-NOSVE-NEXT: fcvt s1, h11459; NONEON-NOSVE-NEXT: fmin s0, s1, s01460; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]1461; NONEON-NOSVE-NEXT: fcvt s1, h11462; NONEON-NOSVE-NEXT: fcvt h0, s01463; NONEON-NOSVE-NEXT: str h0, [sp, #30]1464; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]1465; NONEON-NOSVE-NEXT: fcvt s0, h01466; NONEON-NOSVE-NEXT: fmin s0, s1, s01467; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]1468; NONEON-NOSVE-NEXT: fcvt s1, h11469; NONEON-NOSVE-NEXT: fcvt h0, s01470; NONEON-NOSVE-NEXT: str h0, [sp, #28]1471; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]1472; NONEON-NOSVE-NEXT: fcvt s0, h01473; NONEON-NOSVE-NEXT: fmin s0, s1, s01474; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]1475; NONEON-NOSVE-NEXT: fcvt s1, h11476; NONEON-NOSVE-NEXT: fcvt h0, s01477; NONEON-NOSVE-NEXT: str h0, [sp, #26]1478; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1479; NONEON-NOSVE-NEXT: fcvt s0, h01480; NONEON-NOSVE-NEXT: fmin s0, s1, s01481; NONEON-NOSVE-NEXT: fcvt h0, s01482; NONEON-NOSVE-NEXT: str h0, [sp, #24]1483; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1484; NONEON-NOSVE-NEXT: add sp, sp, #321485; NONEON-NOSVE-NEXT: ret1486 %res = call <4 x half> @llvm.minimum.v4f16(<4 x half> %op1, <4 x half> %op2)1487 ret <4 x half> %res1488}1489 1490define <8 x half> @fmin_v8f16(<8 x half> %op1, <8 x half> %op2) {1491; CHECK-LABEL: fmin_v8f16:1492; CHECK: // %bb.0:1493; CHECK-NEXT: ptrue p0.h, vl81494; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01495; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11496; CHECK-NEXT: fmin z0.h, p0/m, z0.h, z1.h1497; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01498; CHECK-NEXT: ret1499;1500; NONEON-NOSVE-LABEL: fmin_v8f16:1501; NONEON-NOSVE: // %bb.0:1502; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1503; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481504; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]1505; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]1506; NONEON-NOSVE-NEXT: fcvt s0, h01507; NONEON-NOSVE-NEXT: fcvt s1, h11508; NONEON-NOSVE-NEXT: fmin s0, s1, s01509; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]1510; NONEON-NOSVE-NEXT: fcvt s1, h11511; NONEON-NOSVE-NEXT: fcvt h0, s01512; NONEON-NOSVE-NEXT: str h0, [sp, #46]1513; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]1514; NONEON-NOSVE-NEXT: fcvt s0, h01515; NONEON-NOSVE-NEXT: fmin s0, s1, s01516; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]1517; NONEON-NOSVE-NEXT: fcvt s1, h11518; NONEON-NOSVE-NEXT: fcvt h0, s01519; NONEON-NOSVE-NEXT: str h0, [sp, #44]1520; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]1521; NONEON-NOSVE-NEXT: fcvt s0, h01522; NONEON-NOSVE-NEXT: fmin s0, s1, s01523; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]1524; NONEON-NOSVE-NEXT: fcvt s1, h11525; NONEON-NOSVE-NEXT: fcvt h0, s01526; NONEON-NOSVE-NEXT: str h0, [sp, #42]1527; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]1528; NONEON-NOSVE-NEXT: fcvt s0, h01529; NONEON-NOSVE-NEXT: fmin s0, s1, s01530; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]1531; NONEON-NOSVE-NEXT: fcvt s1, h11532; NONEON-NOSVE-NEXT: fcvt h0, s01533; NONEON-NOSVE-NEXT: str h0, [sp, #40]1534; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]1535; NONEON-NOSVE-NEXT: fcvt s0, h01536; NONEON-NOSVE-NEXT: fmin s0, s1, s01537; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]1538; NONEON-NOSVE-NEXT: fcvt s1, h11539; NONEON-NOSVE-NEXT: fcvt h0, s01540; NONEON-NOSVE-NEXT: str h0, [sp, #38]1541; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]1542; NONEON-NOSVE-NEXT: fcvt s0, h01543; NONEON-NOSVE-NEXT: fmin s0, s1, s01544; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]1545; NONEON-NOSVE-NEXT: fcvt s1, h11546; NONEON-NOSVE-NEXT: fcvt h0, s01547; NONEON-NOSVE-NEXT: str h0, [sp, #36]1548; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]1549; NONEON-NOSVE-NEXT: fcvt s0, h01550; NONEON-NOSVE-NEXT: fmin s0, s1, s01551; NONEON-NOSVE-NEXT: ldr h1, [sp]1552; NONEON-NOSVE-NEXT: fcvt s1, h11553; NONEON-NOSVE-NEXT: fcvt h0, s01554; NONEON-NOSVE-NEXT: str h0, [sp, #34]1555; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1556; NONEON-NOSVE-NEXT: fcvt s0, h01557; NONEON-NOSVE-NEXT: fmin s0, s1, s01558; NONEON-NOSVE-NEXT: fcvt h0, s01559; NONEON-NOSVE-NEXT: str h0, [sp, #32]1560; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1561; NONEON-NOSVE-NEXT: add sp, sp, #481562; NONEON-NOSVE-NEXT: ret1563 %res = call <8 x half> @llvm.minimum.v8f16(<8 x half> %op1, <8 x half> %op2)1564 ret <8 x half> %res1565}1566 1567define void @fmin_v16f16(ptr %a, ptr %b) {1568; CHECK-LABEL: fmin_v16f16:1569; CHECK: // %bb.0:1570; CHECK-NEXT: ldp q0, q3, [x1]1571; CHECK-NEXT: ptrue p0.h, vl81572; CHECK-NEXT: ldp q1, q2, [x0]1573; CHECK-NEXT: fmin z0.h, p0/m, z0.h, z1.h1574; CHECK-NEXT: fmin z2.h, p0/m, z2.h, z3.h1575; CHECK-NEXT: stp q0, q2, [x0]1576; CHECK-NEXT: ret1577;1578; NONEON-NOSVE-LABEL: fmin_v16f16:1579; NONEON-NOSVE: // %bb.0:1580; NONEON-NOSVE-NEXT: sub sp, sp, #961581; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961582; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1583; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1584; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1585; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1586; NONEON-NOSVE-NEXT: ldr h0, [sp, #62]1587; NONEON-NOSVE-NEXT: ldr h1, [sp, #46]1588; NONEON-NOSVE-NEXT: fcvt s0, h01589; NONEON-NOSVE-NEXT: fcvt s1, h11590; NONEON-NOSVE-NEXT: fmin s0, s1, s01591; NONEON-NOSVE-NEXT: ldr h1, [sp, #44]1592; NONEON-NOSVE-NEXT: fcvt s1, h11593; NONEON-NOSVE-NEXT: fcvt h0, s01594; NONEON-NOSVE-NEXT: str h0, [sp, #94]1595; NONEON-NOSVE-NEXT: ldr h0, [sp, #60]1596; NONEON-NOSVE-NEXT: fcvt s0, h01597; NONEON-NOSVE-NEXT: fmin s0, s1, s01598; NONEON-NOSVE-NEXT: ldr h1, [sp, #42]1599; NONEON-NOSVE-NEXT: fcvt s1, h11600; NONEON-NOSVE-NEXT: fcvt h0, s01601; NONEON-NOSVE-NEXT: str h0, [sp, #92]1602; NONEON-NOSVE-NEXT: ldr h0, [sp, #58]1603; NONEON-NOSVE-NEXT: fcvt s0, h01604; NONEON-NOSVE-NEXT: fmin s0, s1, s01605; NONEON-NOSVE-NEXT: ldr h1, [sp, #40]1606; NONEON-NOSVE-NEXT: fcvt s1, h11607; NONEON-NOSVE-NEXT: fcvt h0, s01608; NONEON-NOSVE-NEXT: str h0, [sp, #90]1609; NONEON-NOSVE-NEXT: ldr h0, [sp, #56]1610; NONEON-NOSVE-NEXT: fcvt s0, h01611; NONEON-NOSVE-NEXT: fmin s0, s1, s01612; NONEON-NOSVE-NEXT: ldr h1, [sp, #38]1613; NONEON-NOSVE-NEXT: fcvt s1, h11614; NONEON-NOSVE-NEXT: fcvt h0, s01615; NONEON-NOSVE-NEXT: str h0, [sp, #88]1616; NONEON-NOSVE-NEXT: ldr h0, [sp, #54]1617; NONEON-NOSVE-NEXT: fcvt s0, h01618; NONEON-NOSVE-NEXT: fmin s0, s1, s01619; NONEON-NOSVE-NEXT: ldr h1, [sp, #36]1620; NONEON-NOSVE-NEXT: fcvt s1, h11621; NONEON-NOSVE-NEXT: fcvt h0, s01622; NONEON-NOSVE-NEXT: str h0, [sp, #86]1623; NONEON-NOSVE-NEXT: ldr h0, [sp, #52]1624; NONEON-NOSVE-NEXT: fcvt s0, h01625; NONEON-NOSVE-NEXT: fmin s0, s1, s01626; NONEON-NOSVE-NEXT: ldr h1, [sp, #34]1627; NONEON-NOSVE-NEXT: fcvt s1, h11628; NONEON-NOSVE-NEXT: fcvt h0, s01629; NONEON-NOSVE-NEXT: str h0, [sp, #84]1630; NONEON-NOSVE-NEXT: ldr h0, [sp, #50]1631; NONEON-NOSVE-NEXT: fcvt s0, h01632; NONEON-NOSVE-NEXT: fmin s0, s1, s01633; NONEON-NOSVE-NEXT: ldr h1, [sp, #32]1634; NONEON-NOSVE-NEXT: fcvt s1, h11635; NONEON-NOSVE-NEXT: fcvt h0, s01636; NONEON-NOSVE-NEXT: str h0, [sp, #82]1637; NONEON-NOSVE-NEXT: ldr h0, [sp, #48]1638; NONEON-NOSVE-NEXT: fcvt s0, h01639; NONEON-NOSVE-NEXT: fmin s0, s1, s01640; NONEON-NOSVE-NEXT: ldr h1, [sp, #14]1641; NONEON-NOSVE-NEXT: fcvt s1, h11642; NONEON-NOSVE-NEXT: fcvt h0, s01643; NONEON-NOSVE-NEXT: str h0, [sp, #80]1644; NONEON-NOSVE-NEXT: ldr h0, [sp, #30]1645; NONEON-NOSVE-NEXT: fcvt s0, h01646; NONEON-NOSVE-NEXT: fmin s0, s1, s01647; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]1648; NONEON-NOSVE-NEXT: fcvt s1, h11649; NONEON-NOSVE-NEXT: fcvt h0, s01650; NONEON-NOSVE-NEXT: str h0, [sp, #78]1651; NONEON-NOSVE-NEXT: ldr h0, [sp, #28]1652; NONEON-NOSVE-NEXT: fcvt s0, h01653; NONEON-NOSVE-NEXT: fmin s0, s1, s01654; NONEON-NOSVE-NEXT: ldr h1, [sp, #10]1655; NONEON-NOSVE-NEXT: fcvt s1, h11656; NONEON-NOSVE-NEXT: fcvt h0, s01657; NONEON-NOSVE-NEXT: str h0, [sp, #76]1658; NONEON-NOSVE-NEXT: ldr h0, [sp, #26]1659; NONEON-NOSVE-NEXT: fcvt s0, h01660; NONEON-NOSVE-NEXT: fmin s0, s1, s01661; NONEON-NOSVE-NEXT: ldr h1, [sp, #8]1662; NONEON-NOSVE-NEXT: fcvt s1, h11663; NONEON-NOSVE-NEXT: fcvt h0, s01664; NONEON-NOSVE-NEXT: str h0, [sp, #74]1665; NONEON-NOSVE-NEXT: ldr h0, [sp, #24]1666; NONEON-NOSVE-NEXT: fcvt s0, h01667; NONEON-NOSVE-NEXT: fmin s0, s1, s01668; NONEON-NOSVE-NEXT: ldr h1, [sp, #6]1669; NONEON-NOSVE-NEXT: fcvt s1, h11670; NONEON-NOSVE-NEXT: fcvt h0, s01671; NONEON-NOSVE-NEXT: str h0, [sp, #72]1672; NONEON-NOSVE-NEXT: ldr h0, [sp, #22]1673; NONEON-NOSVE-NEXT: fcvt s0, h01674; NONEON-NOSVE-NEXT: fmin s0, s1, s01675; NONEON-NOSVE-NEXT: ldr h1, [sp, #4]1676; NONEON-NOSVE-NEXT: fcvt s1, h11677; NONEON-NOSVE-NEXT: fcvt h0, s01678; NONEON-NOSVE-NEXT: str h0, [sp, #70]1679; NONEON-NOSVE-NEXT: ldr h0, [sp, #20]1680; NONEON-NOSVE-NEXT: fcvt s0, h01681; NONEON-NOSVE-NEXT: fmin s0, s1, s01682; NONEON-NOSVE-NEXT: ldr h1, [sp, #2]1683; NONEON-NOSVE-NEXT: fcvt s1, h11684; NONEON-NOSVE-NEXT: fcvt h0, s01685; NONEON-NOSVE-NEXT: str h0, [sp, #68]1686; NONEON-NOSVE-NEXT: ldr h0, [sp, #18]1687; NONEON-NOSVE-NEXT: fcvt s0, h01688; NONEON-NOSVE-NEXT: fmin s0, s1, s01689; NONEON-NOSVE-NEXT: ldr h1, [sp]1690; NONEON-NOSVE-NEXT: fcvt s1, h11691; NONEON-NOSVE-NEXT: fcvt h0, s01692; NONEON-NOSVE-NEXT: str h0, [sp, #66]1693; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]1694; NONEON-NOSVE-NEXT: fcvt s0, h01695; NONEON-NOSVE-NEXT: fmin s0, s1, s01696; NONEON-NOSVE-NEXT: fcvt h0, s01697; NONEON-NOSVE-NEXT: str h0, [sp, #64]1698; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1699; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1700; NONEON-NOSVE-NEXT: add sp, sp, #961701; NONEON-NOSVE-NEXT: ret1702 %op1 = load <16 x half>, ptr %a1703 %op2 = load <16 x half>, ptr %b1704 %res = call <16 x half> @llvm.minimum.v16f16(<16 x half> %op1, <16 x half> %op2)1705 store <16 x half> %res, ptr %a1706 ret void1707}1708 1709define <2 x float> @fmin_v2f32(<2 x float> %op1, <2 x float> %op2) {1710; CHECK-LABEL: fmin_v2f32:1711; CHECK: // %bb.0:1712; CHECK-NEXT: ptrue p0.s, vl21713; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01714; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11715; CHECK-NEXT: fmin z0.s, p0/m, z0.s, z1.s1716; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01717; CHECK-NEXT: ret1718;1719; NONEON-NOSVE-LABEL: fmin_v2f32:1720; NONEON-NOSVE: // %bb.0:1721; NONEON-NOSVE-NEXT: sub sp, sp, #321722; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321723; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1724; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1725; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1726; NONEON-NOSVE-NEXT: fmin s3, s2, s01727; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1728; NONEON-NOSVE-NEXT: fmin s0, s1, s01729; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #24]1730; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1731; NONEON-NOSVE-NEXT: add sp, sp, #321732; NONEON-NOSVE-NEXT: ret1733 %res = call <2 x float> @llvm.minimum.v2f32(<2 x float> %op1, <2 x float> %op2)1734 ret <2 x float> %res1735}1736 1737define <4 x float> @fmin_v4f32(<4 x float> %op1, <4 x float> %op2) {1738; CHECK-LABEL: fmin_v4f32:1739; CHECK: // %bb.0:1740; CHECK-NEXT: ptrue p0.s, vl41741; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01742; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11743; CHECK-NEXT: fmin z0.s, p0/m, z0.s, z1.s1744; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01745; CHECK-NEXT: ret1746;1747; NONEON-NOSVE-LABEL: fmin_v4f32:1748; NONEON-NOSVE: // %bb.0:1749; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1750; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481751; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1752; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]1753; NONEON-NOSVE-NEXT: fmin s3, s2, s01754; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]1755; NONEON-NOSVE-NEXT: fmin s0, s1, s01756; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]1757; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #40]1758; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1759; NONEON-NOSVE-NEXT: fmin s3, s2, s01760; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1761; NONEON-NOSVE-NEXT: fmin s0, s1, s01762; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #32]1763; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1764; NONEON-NOSVE-NEXT: add sp, sp, #481765; NONEON-NOSVE-NEXT: ret1766 %res = call <4 x float> @llvm.minimum.v4f32(<4 x float> %op1, <4 x float> %op2)1767 ret <4 x float> %res1768}1769 1770define void @fmin_v8f32(ptr %a, ptr %b) {1771; CHECK-LABEL: fmin_v8f32:1772; CHECK: // %bb.0:1773; CHECK-NEXT: ldp q0, q3, [x1]1774; CHECK-NEXT: ptrue p0.s, vl41775; CHECK-NEXT: ldp q1, q2, [x0]1776; CHECK-NEXT: fmin z0.s, p0/m, z0.s, z1.s1777; CHECK-NEXT: fmin z2.s, p0/m, z2.s, z3.s1778; CHECK-NEXT: stp q0, q2, [x0]1779; CHECK-NEXT: ret1780;1781; NONEON-NOSVE-LABEL: fmin_v8f32:1782; NONEON-NOSVE: // %bb.0:1783; NONEON-NOSVE-NEXT: sub sp, sp, #961784; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961785; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1786; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1787; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1788; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1789; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #40]1790; NONEON-NOSVE-NEXT: ldr s0, [sp, #60]1791; NONEON-NOSVE-NEXT: fmin s3, s2, s01792; NONEON-NOSVE-NEXT: ldr s0, [sp, #56]1793; NONEON-NOSVE-NEXT: fmin s0, s1, s01794; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #32]1795; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #88]1796; NONEON-NOSVE-NEXT: ldr s0, [sp, #52]1797; NONEON-NOSVE-NEXT: fmin s3, s2, s01798; NONEON-NOSVE-NEXT: ldr s0, [sp, #48]1799; NONEON-NOSVE-NEXT: fmin s0, s1, s01800; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #8]1801; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #80]1802; NONEON-NOSVE-NEXT: ldr s0, [sp, #28]1803; NONEON-NOSVE-NEXT: fmin s3, s2, s01804; NONEON-NOSVE-NEXT: ldr s0, [sp, #24]1805; NONEON-NOSVE-NEXT: fmin s0, s1, s01806; NONEON-NOSVE-NEXT: ldp s1, s2, [sp]1807; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #72]1808; NONEON-NOSVE-NEXT: ldr s0, [sp, #20]1809; NONEON-NOSVE-NEXT: fmin s3, s2, s01810; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]1811; NONEON-NOSVE-NEXT: fmin s0, s1, s01812; NONEON-NOSVE-NEXT: stp s0, s3, [sp, #64]1813; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1814; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1815; NONEON-NOSVE-NEXT: add sp, sp, #961816; NONEON-NOSVE-NEXT: ret1817 %op1 = load <8 x float>, ptr %a1818 %op2 = load <8 x float>, ptr %b1819 %res = call <8 x float> @llvm.minimum.v8f32(<8 x float> %op1, <8 x float> %op2)1820 store <8 x float> %res, ptr %a1821 ret void1822}1823 1824define <1 x double> @fmin_v1f64(<1 x double> %op1, <1 x double> %op2) {1825; CHECK-LABEL: fmin_v1f64:1826; CHECK: // %bb.0:1827; CHECK-NEXT: fmin d0, d0, d11828; CHECK-NEXT: ret1829;1830; NONEON-NOSVE-LABEL: fmin_v1f64:1831; NONEON-NOSVE: // %bb.0:1832; NONEON-NOSVE-NEXT: sub sp, sp, #161833; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 161834; NONEON-NOSVE-NEXT: fmin d0, d0, d11835; NONEON-NOSVE-NEXT: str d0, [sp, #8]1836; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]1837; NONEON-NOSVE-NEXT: add sp, sp, #161838; NONEON-NOSVE-NEXT: ret1839 %res = call <1 x double> @llvm.minimum.v1f64(<1 x double> %op1, <1 x double> %op2)1840 ret <1 x double> %res1841}1842 1843define <2 x double> @fmin_v2f64(<2 x double> %op1, <2 x double> %op2) {1844; CHECK-LABEL: fmin_v2f64:1845; CHECK: // %bb.0:1846; CHECK-NEXT: ptrue p0.d, vl21847; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01848; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11849; CHECK-NEXT: fmin z0.d, p0/m, z0.d, z1.d1850; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01851; CHECK-NEXT: ret1852;1853; NONEON-NOSVE-LABEL: fmin_v2f64:1854; NONEON-NOSVE: // %bb.0:1855; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1856; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481857; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]1858; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1859; NONEON-NOSVE-NEXT: fmin d3, d2, d01860; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]1861; NONEON-NOSVE-NEXT: fmin d0, d1, d01862; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #32]1863; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1864; NONEON-NOSVE-NEXT: add sp, sp, #481865; NONEON-NOSVE-NEXT: ret1866 %res = call <2 x double> @llvm.minimum.v2f64(<2 x double> %op1, <2 x double> %op2)1867 ret <2 x double> %res1868}1869 1870define void @fmin_v4f64(ptr %a, ptr %b) {1871; CHECK-LABEL: fmin_v4f64:1872; CHECK: // %bb.0:1873; CHECK-NEXT: ldp q0, q3, [x1]1874; CHECK-NEXT: ptrue p0.d, vl21875; CHECK-NEXT: ldp q1, q2, [x0]1876; CHECK-NEXT: fmin z0.d, p0/m, z0.d, z1.d1877; CHECK-NEXT: fmin z2.d, p0/m, z2.d, z3.d1878; CHECK-NEXT: stp q0, q2, [x0]1879; CHECK-NEXT: ret1880;1881; NONEON-NOSVE-LABEL: fmin_v4f64:1882; NONEON-NOSVE: // %bb.0:1883; NONEON-NOSVE-NEXT: sub sp, sp, #961884; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961885; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1886; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1887; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1888; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1889; NONEON-NOSVE-NEXT: ldp d1, d2, [sp, #32]1890; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]1891; NONEON-NOSVE-NEXT: fmin d3, d2, d01892; NONEON-NOSVE-NEXT: ldr d0, [sp, #48]1893; NONEON-NOSVE-NEXT: fmin d0, d1, d01894; NONEON-NOSVE-NEXT: ldp d1, d2, [sp]1895; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #80]1896; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1897; NONEON-NOSVE-NEXT: fmin d3, d2, d01898; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]1899; NONEON-NOSVE-NEXT: fmin d0, d1, d01900; NONEON-NOSVE-NEXT: stp d0, d3, [sp, #64]1901; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1902; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1903; NONEON-NOSVE-NEXT: add sp, sp, #961904; NONEON-NOSVE-NEXT: ret1905 %op1 = load <4 x double>, ptr %a1906 %op2 = load <4 x double>, ptr %b1907 %res = call <4 x double> @llvm.minimum.v4f64(<4 x double> %op1, <4 x double> %op2)1908 store <4 x double> %res, ptr %a1909 ret void1910}1911 1912declare <4 x half> @llvm.minnum.v4f16(<4 x half>, <4 x half>)1913declare <8 x half> @llvm.minnum.v8f16(<8 x half>, <8 x half>)1914declare <16 x half> @llvm.minnum.v16f16(<16 x half>, <16 x half>)1915declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)1916declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)1917declare <8 x float> @llvm.minnum.v8f32(<8 x float>, <8 x float>)1918declare <1 x double> @llvm.minnum.v1f64(<1 x double>, <1 x double>)1919declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)1920declare <4 x double> @llvm.minnum.v4f64(<4 x double>, <4 x double>)1921 1922declare <4 x half> @llvm.maxnum.v4f16(<4 x half>, <4 x half>)1923declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)1924declare <16 x half> @llvm.maxnum.v16f16(<16 x half>, <16 x half>)1925declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>)1926declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)1927declare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>)1928declare <1 x double> @llvm.maxnum.v1f64(<1 x double>, <1 x double>)1929declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)1930declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>)1931 1932declare <4 x half> @llvm.minimum.v4f16(<4 x half>, <4 x half>)1933declare <8 x half> @llvm.minimum.v8f16(<8 x half>, <8 x half>)1934declare <16 x half> @llvm.minimum.v16f16(<16 x half>, <16 x half>)1935declare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>)1936declare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>)1937declare <8 x float> @llvm.minimum.v8f32(<8 x float>, <8 x float>)1938declare <1 x double> @llvm.minimum.v1f64(<1 x double>, <1 x double>)1939declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)1940declare <4 x double> @llvm.minimum.v4f64(<4 x double>, <4 x double>)1941 1942declare <4 x half> @llvm.maximum.v4f16(<4 x half>, <4 x half>)1943declare <8 x half> @llvm.maximum.v8f16(<8 x half>, <8 x half>)1944declare <16 x half> @llvm.maximum.v16f16(<16 x half>, <16 x half>)1945declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>)1946declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)1947declare <8 x float> @llvm.maximum.v8f32(<8 x float>, <8 x float>)1948declare <1 x double> @llvm.maximum.v1f64(<1 x double>, <1 x double>)1949declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)1950declare <4 x double> @llvm.maximum.v4f64(<4 x double>, <4 x double>)1951