588 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=aarch64 --mattr=-fullfp16,-neon < %s | FileCheck %s --check-prefix=CHECK-NOFP16-NONEON3; RUN: llc --mtriple=aarch64 --mattr=+fullfp16,-neon < %s | FileCheck %s --check-prefix=CHECK-FP16-NONEON4; RUN: llc --mtriple=aarch64 --mattr=-fullfp16,+neon < %s | FileCheck %s --check-prefix=CHECK-NOFP16-NEON5; RUN: llc --mtriple=aarch64 --mattr=+fullfp16,+neon < %s | FileCheck %s --check-prefixes=CHECK-FP16-NEON6 7declare half @llvm.fcanonicalize.f16(half)8declare float @llvm.fcanonicalize.f32(float)9declare double @llvm.fcanonicalize.f64(double)10 11define half @fcanonicalize_f16(half %x) {12; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f16:13; CHECK-NOFP16-NONEON: // %bb.0:14; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h015; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s016; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s017; CHECK-NOFP16-NONEON-NEXT: ret18;19; CHECK-FP16-NONEON-LABEL: fcanonicalize_f16:20; CHECK-FP16-NONEON: // %bb.0:21; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h022; CHECK-FP16-NONEON-NEXT: ret23;24; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f16:25; CHECK-NOFP16-NEON: // %bb.0:26; CHECK-NOFP16-NEON-NEXT: fcvt s0, h027; CHECK-NOFP16-NEON-NEXT: fminnm s0, s0, s028; CHECK-NOFP16-NEON-NEXT: fcvt h0, s029; CHECK-NOFP16-NEON-NEXT: ret30;31; CHECK-FP16-NEON-LABEL: fcanonicalize_f16:32; CHECK-FP16-NEON: // %bb.0:33; CHECK-FP16-NEON-NEXT: fminnm h0, h0, h034; CHECK-FP16-NEON-NEXT: ret35 %z = call half @llvm.canonicalize.f16(half %x)36 ret half %z37}38 39define half @fcanonicalize_f16_nnan(half %x) {40; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f16_nnan:41; CHECK-NOFP16-NONEON: // %bb.0:42; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h043; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s044; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s045; CHECK-NOFP16-NONEON-NEXT: ret46;47; CHECK-FP16-NONEON-LABEL: fcanonicalize_f16_nnan:48; CHECK-FP16-NONEON: // %bb.0:49; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h050; CHECK-FP16-NONEON-NEXT: ret51;52; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f16_nnan:53; CHECK-NOFP16-NEON: // %bb.0:54; CHECK-NOFP16-NEON-NEXT: fcvt s0, h055; CHECK-NOFP16-NEON-NEXT: fminnm s0, s0, s056; CHECK-NOFP16-NEON-NEXT: fcvt h0, s057; CHECK-NOFP16-NEON-NEXT: ret58;59; CHECK-FP16-NEON-LABEL: fcanonicalize_f16_nnan:60; CHECK-FP16-NEON: // %bb.0:61; CHECK-FP16-NEON-NEXT: fminnm h0, h0, h062; CHECK-FP16-NEON-NEXT: ret63 %z = call nnan half @llvm.canonicalize.f16(half %x)64 ret half %z65}66 67define <2 x half> @fcanonicalize_v2f16(<2 x half> %x) {68; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f16:69; CHECK-NOFP16-NONEON: // %bb.0:70; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h071; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h172; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s073; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s174; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s075; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s176; CHECK-NOFP16-NONEON-NEXT: ret77;78; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f16:79; CHECK-FP16-NONEON: // %bb.0:80; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h081; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h182; CHECK-FP16-NONEON-NEXT: ret83;84; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f16:85; CHECK-NOFP16-NEON: // %bb.0:86; CHECK-NOFP16-NEON-NEXT: fcvtl v0.4s, v0.4h87; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s88; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v0.4s89; CHECK-NOFP16-NEON-NEXT: ret90;91; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f16:92; CHECK-FP16-NEON: // %bb.0:93; CHECK-FP16-NEON-NEXT: fminnm v0.4h, v0.4h, v0.4h94; CHECK-FP16-NEON-NEXT: ret95 %z = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)96 ret <2 x half> %z97}98 99define <2 x half> @fcanonicalize_v2f16_nnan(<2 x half> %x) {100; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f16_nnan:101; CHECK-NOFP16-NONEON: // %bb.0:102; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h0103; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h1104; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0105; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1106; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s0107; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s1108; CHECK-NOFP16-NONEON-NEXT: ret109;110; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f16_nnan:111; CHECK-FP16-NONEON: // %bb.0:112; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h0113; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h1114; CHECK-FP16-NONEON-NEXT: ret115;116; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f16_nnan:117; CHECK-NOFP16-NEON: // %bb.0:118; CHECK-NOFP16-NEON-NEXT: fcvtl v0.4s, v0.4h119; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s120; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v0.4s121; CHECK-NOFP16-NEON-NEXT: ret122;123; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f16_nnan:124; CHECK-FP16-NEON: // %bb.0:125; CHECK-FP16-NEON-NEXT: fminnm v0.4h, v0.4h, v0.4h126; CHECK-FP16-NEON-NEXT: ret127 %z = call nnan <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)128 ret <2 x half> %z129}130 131define <4 x half> @fcanonicalize_v4f16(<4 x half> %x) {132; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v4f16:133; CHECK-NOFP16-NONEON: // %bb.0:134; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h0135; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h1136; CHECK-NOFP16-NONEON-NEXT: fcvt s2, h2137; CHECK-NOFP16-NONEON-NEXT: fcvt s3, h3138; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0139; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1140; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2141; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3142; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s0143; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s1144; CHECK-NOFP16-NONEON-NEXT: fcvt h2, s2145; CHECK-NOFP16-NONEON-NEXT: fcvt h3, s3146; CHECK-NOFP16-NONEON-NEXT: ret147;148; CHECK-FP16-NONEON-LABEL: fcanonicalize_v4f16:149; CHECK-FP16-NONEON: // %bb.0:150; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h0151; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h1152; CHECK-FP16-NONEON-NEXT: fminnm h2, h2, h2153; CHECK-FP16-NONEON-NEXT: fminnm h3, h3, h3154; CHECK-FP16-NONEON-NEXT: ret155;156; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v4f16:157; CHECK-NOFP16-NEON: // %bb.0:158; CHECK-NOFP16-NEON-NEXT: fcvtl v0.4s, v0.4h159; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s160; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v0.4s161; CHECK-NOFP16-NEON-NEXT: ret162;163; CHECK-FP16-NEON-LABEL: fcanonicalize_v4f16:164; CHECK-FP16-NEON: // %bb.0:165; CHECK-FP16-NEON-NEXT: fminnm v0.4h, v0.4h, v0.4h166; CHECK-FP16-NEON-NEXT: ret167 %z = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)168 ret <4 x half> %z169}170 171define <4 x half> @fcanonicalize_v4f16_nnan(<4 x half> %x) {172; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v4f16_nnan:173; CHECK-NOFP16-NONEON: // %bb.0:174; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h0175; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h1176; CHECK-NOFP16-NONEON-NEXT: fcvt s2, h2177; CHECK-NOFP16-NONEON-NEXT: fcvt s3, h3178; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0179; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1180; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2181; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3182; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s0183; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s1184; CHECK-NOFP16-NONEON-NEXT: fcvt h2, s2185; CHECK-NOFP16-NONEON-NEXT: fcvt h3, s3186; CHECK-NOFP16-NONEON-NEXT: ret187;188; CHECK-FP16-NONEON-LABEL: fcanonicalize_v4f16_nnan:189; CHECK-FP16-NONEON: // %bb.0:190; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h0191; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h1192; CHECK-FP16-NONEON-NEXT: fminnm h2, h2, h2193; CHECK-FP16-NONEON-NEXT: fminnm h3, h3, h3194; CHECK-FP16-NONEON-NEXT: ret195;196; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v4f16_nnan:197; CHECK-NOFP16-NEON: // %bb.0:198; CHECK-NOFP16-NEON-NEXT: fcvtl v0.4s, v0.4h199; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s200; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v0.4s201; CHECK-NOFP16-NEON-NEXT: ret202;203; CHECK-FP16-NEON-LABEL: fcanonicalize_v4f16_nnan:204; CHECK-FP16-NEON: // %bb.0:205; CHECK-FP16-NEON-NEXT: fminnm v0.4h, v0.4h, v0.4h206; CHECK-FP16-NEON-NEXT: ret207 %z = call nnan <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)208 ret <4 x half> %z209}210 211define <8 x half> @fcanonicalize_v8f16(<8 x half> %x) {212; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v8f16:213; CHECK-NOFP16-NONEON: // %bb.0:214; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h0215; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h1216; CHECK-NOFP16-NONEON-NEXT: fcvt s2, h2217; CHECK-NOFP16-NONEON-NEXT: fcvt s3, h3218; CHECK-NOFP16-NONEON-NEXT: fcvt s4, h4219; CHECK-NOFP16-NONEON-NEXT: fcvt s5, h5220; CHECK-NOFP16-NONEON-NEXT: fcvt s6, h6221; CHECK-NOFP16-NONEON-NEXT: fcvt s7, h7222; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0223; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1224; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2225; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3226; CHECK-NOFP16-NONEON-NEXT: fminnm s4, s4, s4227; CHECK-NOFP16-NONEON-NEXT: fminnm s5, s5, s5228; CHECK-NOFP16-NONEON-NEXT: fminnm s6, s6, s6229; CHECK-NOFP16-NONEON-NEXT: fminnm s7, s7, s7230; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s0231; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s1232; CHECK-NOFP16-NONEON-NEXT: fcvt h2, s2233; CHECK-NOFP16-NONEON-NEXT: fcvt h3, s3234; CHECK-NOFP16-NONEON-NEXT: fcvt h4, s4235; CHECK-NOFP16-NONEON-NEXT: fcvt h5, s5236; CHECK-NOFP16-NONEON-NEXT: fcvt h6, s6237; CHECK-NOFP16-NONEON-NEXT: fcvt h7, s7238; CHECK-NOFP16-NONEON-NEXT: ret239;240; CHECK-FP16-NONEON-LABEL: fcanonicalize_v8f16:241; CHECK-FP16-NONEON: // %bb.0:242; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h0243; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h1244; CHECK-FP16-NONEON-NEXT: fminnm h2, h2, h2245; CHECK-FP16-NONEON-NEXT: fminnm h3, h3, h3246; CHECK-FP16-NONEON-NEXT: fminnm h4, h4, h4247; CHECK-FP16-NONEON-NEXT: fminnm h5, h5, h5248; CHECK-FP16-NONEON-NEXT: fminnm h6, h6, h6249; CHECK-FP16-NONEON-NEXT: fminnm h7, h7, h7250; CHECK-FP16-NONEON-NEXT: ret251;252; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v8f16:253; CHECK-NOFP16-NEON: // %bb.0:254; CHECK-NOFP16-NEON-NEXT: fcvtl v1.4s, v0.4h255; CHECK-NOFP16-NEON-NEXT: fcvtl2 v2.4s, v0.8h256; CHECK-NOFP16-NEON-NEXT: fminnm v1.4s, v1.4s, v1.4s257; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v1.4s258; CHECK-NOFP16-NEON-NEXT: fminnm v1.4s, v2.4s, v2.4s259; CHECK-NOFP16-NEON-NEXT: fcvtn2 v0.8h, v1.4s260; CHECK-NOFP16-NEON-NEXT: ret261;262; CHECK-FP16-NEON-LABEL: fcanonicalize_v8f16:263; CHECK-FP16-NEON: // %bb.0:264; CHECK-FP16-NEON-NEXT: fminnm v0.8h, v0.8h, v0.8h265; CHECK-FP16-NEON-NEXT: ret266 %z = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)267 ret <8 x half> %z268}269 270define <8 x half> @fcanonicalize_v8f16_nnan(<8 x half> %x) {271; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v8f16_nnan:272; CHECK-NOFP16-NONEON: // %bb.0:273; CHECK-NOFP16-NONEON-NEXT: fcvt s0, h0274; CHECK-NOFP16-NONEON-NEXT: fcvt s1, h1275; CHECK-NOFP16-NONEON-NEXT: fcvt s2, h2276; CHECK-NOFP16-NONEON-NEXT: fcvt s3, h3277; CHECK-NOFP16-NONEON-NEXT: fcvt s4, h4278; CHECK-NOFP16-NONEON-NEXT: fcvt s5, h5279; CHECK-NOFP16-NONEON-NEXT: fcvt s6, h6280; CHECK-NOFP16-NONEON-NEXT: fcvt s7, h7281; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0282; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1283; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2284; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3285; CHECK-NOFP16-NONEON-NEXT: fminnm s4, s4, s4286; CHECK-NOFP16-NONEON-NEXT: fminnm s5, s5, s5287; CHECK-NOFP16-NONEON-NEXT: fminnm s6, s6, s6288; CHECK-NOFP16-NONEON-NEXT: fminnm s7, s7, s7289; CHECK-NOFP16-NONEON-NEXT: fcvt h0, s0290; CHECK-NOFP16-NONEON-NEXT: fcvt h1, s1291; CHECK-NOFP16-NONEON-NEXT: fcvt h2, s2292; CHECK-NOFP16-NONEON-NEXT: fcvt h3, s3293; CHECK-NOFP16-NONEON-NEXT: fcvt h4, s4294; CHECK-NOFP16-NONEON-NEXT: fcvt h5, s5295; CHECK-NOFP16-NONEON-NEXT: fcvt h6, s6296; CHECK-NOFP16-NONEON-NEXT: fcvt h7, s7297; CHECK-NOFP16-NONEON-NEXT: ret298;299; CHECK-FP16-NONEON-LABEL: fcanonicalize_v8f16_nnan:300; CHECK-FP16-NONEON: // %bb.0:301; CHECK-FP16-NONEON-NEXT: fminnm h0, h0, h0302; CHECK-FP16-NONEON-NEXT: fminnm h1, h1, h1303; CHECK-FP16-NONEON-NEXT: fminnm h2, h2, h2304; CHECK-FP16-NONEON-NEXT: fminnm h3, h3, h3305; CHECK-FP16-NONEON-NEXT: fminnm h4, h4, h4306; CHECK-FP16-NONEON-NEXT: fminnm h5, h5, h5307; CHECK-FP16-NONEON-NEXT: fminnm h6, h6, h6308; CHECK-FP16-NONEON-NEXT: fminnm h7, h7, h7309; CHECK-FP16-NONEON-NEXT: ret310;311; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v8f16_nnan:312; CHECK-NOFP16-NEON: // %bb.0:313; CHECK-NOFP16-NEON-NEXT: fcvtl v1.4s, v0.4h314; CHECK-NOFP16-NEON-NEXT: fcvtl2 v2.4s, v0.8h315; CHECK-NOFP16-NEON-NEXT: fminnm v1.4s, v1.4s, v1.4s316; CHECK-NOFP16-NEON-NEXT: fcvtn v0.4h, v1.4s317; CHECK-NOFP16-NEON-NEXT: fminnm v1.4s, v2.4s, v2.4s318; CHECK-NOFP16-NEON-NEXT: fcvtn2 v0.8h, v1.4s319; CHECK-NOFP16-NEON-NEXT: ret320;321; CHECK-FP16-NEON-LABEL: fcanonicalize_v8f16_nnan:322; CHECK-FP16-NEON: // %bb.0:323; CHECK-FP16-NEON-NEXT: fminnm v0.8h, v0.8h, v0.8h324; CHECK-FP16-NEON-NEXT: ret325 %z = call nnan <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)326 ret <8 x half> %z327}328 329define float @fcanonicalize_f32(float %x) {330; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f32:331; CHECK-NOFP16-NONEON: // %bb.0:332; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0333; CHECK-NOFP16-NONEON-NEXT: ret334;335; CHECK-FP16-NONEON-LABEL: fcanonicalize_f32:336; CHECK-FP16-NONEON: // %bb.0:337; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0338; CHECK-FP16-NONEON-NEXT: ret339;340; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f32:341; CHECK-NOFP16-NEON: // %bb.0:342; CHECK-NOFP16-NEON-NEXT: fminnm s0, s0, s0343; CHECK-NOFP16-NEON-NEXT: ret344;345; CHECK-FP16-NEON-LABEL: fcanonicalize_f32:346; CHECK-FP16-NEON: // %bb.0:347; CHECK-FP16-NEON-NEXT: fminnm s0, s0, s0348; CHECK-FP16-NEON-NEXT: ret349 %z = call float @llvm.canonicalize.f32(float %x)350 ret float %z351}352 353define float @fcanonicalize_f32_nnan(float %x) {354; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f32_nnan:355; CHECK-NOFP16-NONEON: // %bb.0:356; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0357; CHECK-NOFP16-NONEON-NEXT: ret358;359; CHECK-FP16-NONEON-LABEL: fcanonicalize_f32_nnan:360; CHECK-FP16-NONEON: // %bb.0:361; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0362; CHECK-FP16-NONEON-NEXT: ret363;364; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f32_nnan:365; CHECK-NOFP16-NEON: // %bb.0:366; CHECK-NOFP16-NEON-NEXT: fminnm s0, s0, s0367; CHECK-NOFP16-NEON-NEXT: ret368;369; CHECK-FP16-NEON-LABEL: fcanonicalize_f32_nnan:370; CHECK-FP16-NEON: // %bb.0:371; CHECK-FP16-NEON-NEXT: fminnm s0, s0, s0372; CHECK-FP16-NEON-NEXT: ret373 %z = call nnan float @llvm.canonicalize.f32(float %x)374 ret float %z375}376 377define <2 x float> @fcanonicalize_v2f32(<2 x float> %x) {378; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f32:379; CHECK-NOFP16-NONEON: // %bb.0:380; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0381; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1382; CHECK-NOFP16-NONEON-NEXT: ret383;384; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f32:385; CHECK-FP16-NONEON: // %bb.0:386; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0387; CHECK-FP16-NONEON-NEXT: fminnm s1, s1, s1388; CHECK-FP16-NONEON-NEXT: ret389;390; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f32:391; CHECK-NOFP16-NEON: // %bb.0:392; CHECK-NOFP16-NEON-NEXT: fminnm v0.2s, v0.2s, v0.2s393; CHECK-NOFP16-NEON-NEXT: ret394;395; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f32:396; CHECK-FP16-NEON: // %bb.0:397; CHECK-FP16-NEON-NEXT: fminnm v0.2s, v0.2s, v0.2s398; CHECK-FP16-NEON-NEXT: ret399 %z = call <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)400 ret <2 x float> %z401}402 403define <2 x float> @fcanonicalize_v2f32_nnan(<2 x float> %x) {404; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f32_nnan:405; CHECK-NOFP16-NONEON: // %bb.0:406; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0407; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1408; CHECK-NOFP16-NONEON-NEXT: ret409;410; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f32_nnan:411; CHECK-FP16-NONEON: // %bb.0:412; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0413; CHECK-FP16-NONEON-NEXT: fminnm s1, s1, s1414; CHECK-FP16-NONEON-NEXT: ret415;416; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f32_nnan:417; CHECK-NOFP16-NEON: // %bb.0:418; CHECK-NOFP16-NEON-NEXT: fminnm v0.2s, v0.2s, v0.2s419; CHECK-NOFP16-NEON-NEXT: ret420;421; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f32_nnan:422; CHECK-FP16-NEON: // %bb.0:423; CHECK-FP16-NEON-NEXT: fminnm v0.2s, v0.2s, v0.2s424; CHECK-FP16-NEON-NEXT: ret425 %z = call nnan <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)426 ret <2 x float> %z427}428 429define <4 x float> @fcanonicalize_v4f32(<4 x float> %x) {430; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v4f32:431; CHECK-NOFP16-NONEON: // %bb.0:432; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0433; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1434; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2435; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3436; CHECK-NOFP16-NONEON-NEXT: ret437;438; CHECK-FP16-NONEON-LABEL: fcanonicalize_v4f32:439; CHECK-FP16-NONEON: // %bb.0:440; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0441; CHECK-FP16-NONEON-NEXT: fminnm s1, s1, s1442; CHECK-FP16-NONEON-NEXT: fminnm s2, s2, s2443; CHECK-FP16-NONEON-NEXT: fminnm s3, s3, s3444; CHECK-FP16-NONEON-NEXT: ret445;446; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v4f32:447; CHECK-NOFP16-NEON: // %bb.0:448; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s449; CHECK-NOFP16-NEON-NEXT: ret450;451; CHECK-FP16-NEON-LABEL: fcanonicalize_v4f32:452; CHECK-FP16-NEON: // %bb.0:453; CHECK-FP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s454; CHECK-FP16-NEON-NEXT: ret455 %z = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)456 ret <4 x float> %z457}458 459define <4 x float> @fcanonicalize_v4f32_nnan(<4 x float> %x) {460; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v4f32_nnan:461; CHECK-NOFP16-NONEON: // %bb.0:462; CHECK-NOFP16-NONEON-NEXT: fminnm s0, s0, s0463; CHECK-NOFP16-NONEON-NEXT: fminnm s1, s1, s1464; CHECK-NOFP16-NONEON-NEXT: fminnm s2, s2, s2465; CHECK-NOFP16-NONEON-NEXT: fminnm s3, s3, s3466; CHECK-NOFP16-NONEON-NEXT: ret467;468; CHECK-FP16-NONEON-LABEL: fcanonicalize_v4f32_nnan:469; CHECK-FP16-NONEON: // %bb.0:470; CHECK-FP16-NONEON-NEXT: fminnm s0, s0, s0471; CHECK-FP16-NONEON-NEXT: fminnm s1, s1, s1472; CHECK-FP16-NONEON-NEXT: fminnm s2, s2, s2473; CHECK-FP16-NONEON-NEXT: fminnm s3, s3, s3474; CHECK-FP16-NONEON-NEXT: ret475;476; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v4f32_nnan:477; CHECK-NOFP16-NEON: // %bb.0:478; CHECK-NOFP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s479; CHECK-NOFP16-NEON-NEXT: ret480;481; CHECK-FP16-NEON-LABEL: fcanonicalize_v4f32_nnan:482; CHECK-FP16-NEON: // %bb.0:483; CHECK-FP16-NEON-NEXT: fminnm v0.4s, v0.4s, v0.4s484; CHECK-FP16-NEON-NEXT: ret485 %z = call nnan <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)486 ret <4 x float> %z487}488 489define double @fcanonicalize_f64(double %x) {490; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f64:491; CHECK-NOFP16-NONEON: // %bb.0:492; CHECK-NOFP16-NONEON-NEXT: fminnm d0, d0, d0493; CHECK-NOFP16-NONEON-NEXT: ret494;495; CHECK-FP16-NONEON-LABEL: fcanonicalize_f64:496; CHECK-FP16-NONEON: // %bb.0:497; CHECK-FP16-NONEON-NEXT: fminnm d0, d0, d0498; CHECK-FP16-NONEON-NEXT: ret499;500; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f64:501; CHECK-NOFP16-NEON: // %bb.0:502; CHECK-NOFP16-NEON-NEXT: fminnm d0, d0, d0503; CHECK-NOFP16-NEON-NEXT: ret504;505; CHECK-FP16-NEON-LABEL: fcanonicalize_f64:506; CHECK-FP16-NEON: // %bb.0:507; CHECK-FP16-NEON-NEXT: fminnm d0, d0, d0508; CHECK-FP16-NEON-NEXT: ret509 %z = call double @llvm.canonicalize.f64(double %x)510 ret double %z511}512 513define double @fcanonicalize_f64_nnan(double %x) {514; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_f64_nnan:515; CHECK-NOFP16-NONEON: // %bb.0:516; CHECK-NOFP16-NONEON-NEXT: fminnm d0, d0, d0517; CHECK-NOFP16-NONEON-NEXT: ret518;519; CHECK-FP16-NONEON-LABEL: fcanonicalize_f64_nnan:520; CHECK-FP16-NONEON: // %bb.0:521; CHECK-FP16-NONEON-NEXT: fminnm d0, d0, d0522; CHECK-FP16-NONEON-NEXT: ret523;524; CHECK-NOFP16-NEON-LABEL: fcanonicalize_f64_nnan:525; CHECK-NOFP16-NEON: // %bb.0:526; CHECK-NOFP16-NEON-NEXT: fminnm d0, d0, d0527; CHECK-NOFP16-NEON-NEXT: ret528;529; CHECK-FP16-NEON-LABEL: fcanonicalize_f64_nnan:530; CHECK-FP16-NEON: // %bb.0:531; CHECK-FP16-NEON-NEXT: fminnm d0, d0, d0532; CHECK-FP16-NEON-NEXT: ret533 %z = call nnan double @llvm.canonicalize.f64(double %x)534 ret double %z535}536 537define <2 x double> @fcanonicalize_v2f64(<2 x double> %x) {538; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f64:539; CHECK-NOFP16-NONEON: // %bb.0:540; CHECK-NOFP16-NONEON-NEXT: fminnm d0, d0, d0541; CHECK-NOFP16-NONEON-NEXT: fminnm d1, d1, d1542; CHECK-NOFP16-NONEON-NEXT: ret543;544; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f64:545; CHECK-FP16-NONEON: // %bb.0:546; CHECK-FP16-NONEON-NEXT: fminnm d0, d0, d0547; CHECK-FP16-NONEON-NEXT: fminnm d1, d1, d1548; CHECK-FP16-NONEON-NEXT: ret549;550; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f64:551; CHECK-NOFP16-NEON: // %bb.0:552; CHECK-NOFP16-NEON-NEXT: fminnm v0.2d, v0.2d, v0.2d553; CHECK-NOFP16-NEON-NEXT: ret554;555; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f64:556; CHECK-FP16-NEON: // %bb.0:557; CHECK-FP16-NEON-NEXT: fminnm v0.2d, v0.2d, v0.2d558; CHECK-FP16-NEON-NEXT: ret559 %z = call <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)560 ret <2 x double> %z561}562 563define <2 x double> @fcanonicalize_v2f64_nnan(<2 x double> %x) {564; CHECK-NOFP16-NONEON-LABEL: fcanonicalize_v2f64_nnan:565; CHECK-NOFP16-NONEON: // %bb.0:566; CHECK-NOFP16-NONEON-NEXT: fminnm d0, d0, d0567; CHECK-NOFP16-NONEON-NEXT: fminnm d1, d1, d1568; CHECK-NOFP16-NONEON-NEXT: ret569;570; CHECK-FP16-NONEON-LABEL: fcanonicalize_v2f64_nnan:571; CHECK-FP16-NONEON: // %bb.0:572; CHECK-FP16-NONEON-NEXT: fminnm d0, d0, d0573; CHECK-FP16-NONEON-NEXT: fminnm d1, d1, d1574; CHECK-FP16-NONEON-NEXT: ret575;576; CHECK-NOFP16-NEON-LABEL: fcanonicalize_v2f64_nnan:577; CHECK-NOFP16-NEON: // %bb.0:578; CHECK-NOFP16-NEON-NEXT: fminnm v0.2d, v0.2d, v0.2d579; CHECK-NOFP16-NEON-NEXT: ret580;581; CHECK-FP16-NEON-LABEL: fcanonicalize_v2f64_nnan:582; CHECK-FP16-NEON: // %bb.0:583; CHECK-FP16-NEON-NEXT: fminnm v0.2d, v0.2d, v0.2d584; CHECK-FP16-NEON-NEXT: ret585 %z = call nnan <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)586 ret <2 x double> %z587}588