brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.6 KiB · 05be619 Raw
662 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 -mattr=+faminmax -mattr=+sve2 -verify-machineinstrs %s -o - | FileCheck %s3; RUN: llc -mtriple=aarch64 -mattr=+faminmax -mattr=+sme2 -force-streaming -verify-machineinstrs %s -o - | FileCheck %s4; RUN: llc -mtriple=aarch64 -mattr=+sve2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-NO-FAMINMAX5 6; Replace pattern max(abs(a), abs(b)) by famax(a,b)7; Replace pattern min(abs(a), abs(b)) by famin(a,b)8 9; When the fastmath flag 'nnan' (no nan) is enabled, we may also replace:10; minnm(abs(a), abs(b)) with famin(a, b)11; maxnm(abs(a), abs(b)) with famax(a, b)12 13define <vscale x 4 x half> @famax_max_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {14; CHECK-LABEL: famax_max_nx4f16:15; CHECK:       // %bb.0:16; CHECK-NEXT:    ptrue p0.s17; CHECK-NEXT:    famax z0.h, p0/m, z0.h, z1.h18; CHECK-NEXT:    ret19;20; CHECK-NO-FAMINMAX-LABEL: famax_max_nx4f16:21; CHECK-NO-FAMINMAX:       // %bb.0:22; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s23; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h24; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h25; CHECK-NO-FAMINMAX-NEXT:    fmax z0.h, p0/m, z0.h, z1.h26; CHECK-NO-FAMINMAX-NEXT:    ret27    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)28    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)29    %r = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)30    ret <vscale x 4 x half> %r31}32 33define <vscale x 4 x half> @famax_maxnm_nnan_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {34; CHECK-LABEL: famax_maxnm_nnan_nx4f16:35; CHECK:       // %bb.0:36; CHECK-NEXT:    ptrue p0.s37; CHECK-NEXT:    famax z0.h, p0/m, z0.h, z1.h38; CHECK-NEXT:    ret39;40; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_nnan_nx4f16:41; CHECK-NO-FAMINMAX:       // %bb.0:42; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s43; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h44; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h45; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h46; CHECK-NO-FAMINMAX-NEXT:    ret47    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)48    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)49    %r = call nnan <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)50    ret <vscale x 4 x half> %r51}52 53define <vscale x 4 x half> @famax_maxnm_noflag_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {54; CHECK-LABEL: famax_maxnm_noflag_nx4f16:55; CHECK:       // %bb.0:56; CHECK-NEXT:    ptrue p0.s57; CHECK-NEXT:    fabs z0.h, p0/m, z0.h58; CHECK-NEXT:    fabs z1.h, p0/m, z1.h59; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h60; CHECK-NEXT:    ret61;62; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_noflag_nx4f16:63; CHECK-NO-FAMINMAX:       // %bb.0:64; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s65; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h66; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h67; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h68; CHECK-NO-FAMINMAX-NEXT:    ret69    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)70    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)71    %r = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)72    ret <vscale x 4 x half> %r73}74 75define <vscale x 4 x half> @famin_min_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {76; CHECK-LABEL: famin_min_nx4f16:77; CHECK:       // %bb.0:78; CHECK-NEXT:    ptrue p0.s79; CHECK-NEXT:    famin z0.h, p0/m, z0.h, z1.h80; CHECK-NEXT:    ret81;82; CHECK-NO-FAMINMAX-LABEL: famin_min_nx4f16:83; CHECK-NO-FAMINMAX:       // %bb.0:84; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s85; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h86; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h87; CHECK-NO-FAMINMAX-NEXT:    fmin z0.h, p0/m, z0.h, z1.h88; CHECK-NO-FAMINMAX-NEXT:    ret89    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)90    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)91    %r = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)92    ret <vscale x 4 x half> %r93}94 95define <vscale x 4 x half> @famin_minnm_nnan_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {96; CHECK-LABEL: famin_minnm_nnan_nx4f16:97; CHECK:       // %bb.0:98; CHECK-NEXT:    ptrue p0.s99; CHECK-NEXT:    famin z0.h, p0/m, z0.h, z1.h100; CHECK-NEXT:    ret101;102; CHECK-NO-FAMINMAX-LABEL: famin_minnm_nnan_nx4f16:103; CHECK-NO-FAMINMAX:       // %bb.0:104; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s105; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h106; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h107; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h108; CHECK-NO-FAMINMAX-NEXT:    ret109    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)110    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)111    %r = call nnan <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)112    ret <vscale x 4 x half> %r113}114 115define <vscale x 4 x half> @famin_minnm_noflag_nx4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {116; CHECK-LABEL: famin_minnm_noflag_nx4f16:117; CHECK:       // %bb.0:118; CHECK-NEXT:    ptrue p0.s119; CHECK-NEXT:    fabs z0.h, p0/m, z0.h120; CHECK-NEXT:    fabs z1.h, p0/m, z1.h121; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h122; CHECK-NEXT:    ret123;124; CHECK-NO-FAMINMAX-LABEL: famin_minnm_noflag_nx4f16:125; CHECK-NO-FAMINMAX:       // %bb.0:126; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s127; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h128; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h129; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h130; CHECK-NO-FAMINMAX-NEXT:    ret131    %aa = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)132    %bb = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %b)133    %r = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %aa, <vscale x 4 x half> %bb)134    ret <vscale x 4 x half> %r135}136 137define <vscale x 8 x half> @famax_max_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {138; CHECK-LABEL: famax_max_nx8f16:139; CHECK:       // %bb.0:140; CHECK-NEXT:    ptrue p0.h141; CHECK-NEXT:    famax z0.h, p0/m, z0.h, z1.h142; CHECK-NEXT:    ret143;144; CHECK-NO-FAMINMAX-LABEL: famax_max_nx8f16:145; CHECK-NO-FAMINMAX:       // %bb.0:146; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h147; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h148; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h149; CHECK-NO-FAMINMAX-NEXT:    fmax z0.h, p0/m, z0.h, z1.h150; CHECK-NO-FAMINMAX-NEXT:    ret151    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)152    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)153    %r = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)154    ret <vscale x 8 x half> %r155}156 157define <vscale x 8 x half> @famax_maxnm_nnan_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {158; CHECK-LABEL: famax_maxnm_nnan_nx8f16:159; CHECK:       // %bb.0:160; CHECK-NEXT:    ptrue p0.h161; CHECK-NEXT:    famax z0.h, p0/m, z0.h, z1.h162; CHECK-NEXT:    ret163;164; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_nnan_nx8f16:165; CHECK-NO-FAMINMAX:       // %bb.0:166; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h167; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h168; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h169; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h170; CHECK-NO-FAMINMAX-NEXT:    ret171    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)172    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)173    %r = call nnan <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)174    ret <vscale x 8 x half> %r175}176 177define <vscale x 8 x half> @famax_maxnm_noflag_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {178; CHECK-LABEL: famax_maxnm_noflag_nx8f16:179; CHECK:       // %bb.0:180; CHECK-NEXT:    ptrue p0.h181; CHECK-NEXT:    fabs z0.h, p0/m, z0.h182; CHECK-NEXT:    fabs z1.h, p0/m, z1.h183; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h184; CHECK-NEXT:    ret185;186; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_noflag_nx8f16:187; CHECK-NO-FAMINMAX:       // %bb.0:188; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h189; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h190; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h191; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h192; CHECK-NO-FAMINMAX-NEXT:    ret193    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)194    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)195    %r = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)196    ret <vscale x 8 x half> %r197}198 199define <vscale x 8 x half> @famin_min_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {200; CHECK-LABEL: famin_min_nx8f16:201; CHECK:       // %bb.0:202; CHECK-NEXT:    ptrue p0.h203; CHECK-NEXT:    famin z0.h, p0/m, z0.h, z1.h204; CHECK-NEXT:    ret205;206; CHECK-NO-FAMINMAX-LABEL: famin_min_nx8f16:207; CHECK-NO-FAMINMAX:       // %bb.0:208; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h209; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h210; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h211; CHECK-NO-FAMINMAX-NEXT:    fmin z0.h, p0/m, z0.h, z1.h212; CHECK-NO-FAMINMAX-NEXT:    ret213    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)214    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)215    %r = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)216    ret <vscale x 8 x half> %r217}218 219define <vscale x 8 x half> @famin_minnm_nnan_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {220; CHECK-LABEL: famin_minnm_nnan_nx8f16:221; CHECK:       // %bb.0:222; CHECK-NEXT:    ptrue p0.h223; CHECK-NEXT:    famin z0.h, p0/m, z0.h, z1.h224; CHECK-NEXT:    ret225;226; CHECK-NO-FAMINMAX-LABEL: famin_minnm_nnan_nx8f16:227; CHECK-NO-FAMINMAX:       // %bb.0:228; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h229; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h230; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h231; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h232; CHECK-NO-FAMINMAX-NEXT:    ret233    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)234    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)235    %r = call nnan <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)236    ret <vscale x 8 x half> %r237}238 239define <vscale x 8 x half> @famin_minnm_noflag_nx8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {240; CHECK-LABEL: famin_minnm_noflag_nx8f16:241; CHECK:       // %bb.0:242; CHECK-NEXT:    ptrue p0.h243; CHECK-NEXT:    fabs z0.h, p0/m, z0.h244; CHECK-NEXT:    fabs z1.h, p0/m, z1.h245; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h246; CHECK-NEXT:    ret247;248; CHECK-NO-FAMINMAX-LABEL: famin_minnm_noflag_nx8f16:249; CHECK-NO-FAMINMAX:       // %bb.0:250; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.h251; CHECK-NO-FAMINMAX-NEXT:    fabs z0.h, p0/m, z0.h252; CHECK-NO-FAMINMAX-NEXT:    fabs z1.h, p0/m, z1.h253; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h254; CHECK-NO-FAMINMAX-NEXT:    ret255    %aa = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)256    %bb = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %b)257    %r = call  <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %aa, <vscale x 8 x half> %bb)258    ret <vscale x 8 x half> %r259}260 261define <vscale x 2 x float> @famax_max_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {262; CHECK-LABEL: famax_max_nx2f32:263; CHECK:       // %bb.0:264; CHECK-NEXT:    ptrue p0.d265; CHECK-NEXT:    famax z0.s, p0/m, z0.s, z1.s266; CHECK-NEXT:    ret267;268; CHECK-NO-FAMINMAX-LABEL: famax_max_nx2f32:269; CHECK-NO-FAMINMAX:       // %bb.0:270; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d271; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s272; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s273; CHECK-NO-FAMINMAX-NEXT:    fmax z0.s, p0/m, z0.s, z1.s274; CHECK-NO-FAMINMAX-NEXT:    ret275    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)276    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)277    %r = call <vscale x 2 x float> @llvm.maximum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)278    ret <vscale x 2 x float> %r279}280 281define <vscale x 2 x float> @famax_maxnm_nnan_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {282; CHECK-LABEL: famax_maxnm_nnan_nx2f32:283; CHECK:       // %bb.0:284; CHECK-NEXT:    ptrue p0.d285; CHECK-NEXT:    famax z0.s, p0/m, z0.s, z1.s286; CHECK-NEXT:    ret287;288; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_nnan_nx2f32:289; CHECK-NO-FAMINMAX:       // %bb.0:290; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d291; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s292; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s293; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s294; CHECK-NO-FAMINMAX-NEXT:    ret295    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)296    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)297    %r = call nnan <vscale x 2 x float> @llvm.maxnum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)298    ret <vscale x 2 x float> %r299}300 301define <vscale x 2 x float> @famax_maxnm_noflag_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {302; CHECK-LABEL: famax_maxnm_noflag_nx2f32:303; CHECK:       // %bb.0:304; CHECK-NEXT:    ptrue p0.d305; CHECK-NEXT:    fabs z0.s, p0/m, z0.s306; CHECK-NEXT:    fabs z1.s, p0/m, z1.s307; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s308; CHECK-NEXT:    ret309;310; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_noflag_nx2f32:311; CHECK-NO-FAMINMAX:       // %bb.0:312; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d313; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s314; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s315; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s316; CHECK-NO-FAMINMAX-NEXT:    ret317    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)318    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)319    %r = call <vscale x 2 x float> @llvm.maxnum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)320    ret <vscale x 2 x float> %r321}322 323define <vscale x 2 x float> @famin_min_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {324; CHECK-LABEL: famin_min_nx2f32:325; CHECK:       // %bb.0:326; CHECK-NEXT:    ptrue p0.d327; CHECK-NEXT:    famin z0.s, p0/m, z0.s, z1.s328; CHECK-NEXT:    ret329;330; CHECK-NO-FAMINMAX-LABEL: famin_min_nx2f32:331; CHECK-NO-FAMINMAX:       // %bb.0:332; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d333; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s334; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s335; CHECK-NO-FAMINMAX-NEXT:    fmin z0.s, p0/m, z0.s, z1.s336; CHECK-NO-FAMINMAX-NEXT:    ret337    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)338    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)339    %r = call <vscale x 2 x float> @llvm.minimum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)340    ret <vscale x 2 x float> %r341}342 343define <vscale x 2 x float> @famin_minnm_nnan_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {344; CHECK-LABEL: famin_minnm_nnan_nx2f32:345; CHECK:       // %bb.0:346; CHECK-NEXT:    ptrue p0.d347; CHECK-NEXT:    famin z0.s, p0/m, z0.s, z1.s348; CHECK-NEXT:    ret349;350; CHECK-NO-FAMINMAX-LABEL: famin_minnm_nnan_nx2f32:351; CHECK-NO-FAMINMAX:       // %bb.0:352; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d353; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s354; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s355; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s356; CHECK-NO-FAMINMAX-NEXT:    ret357    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)358    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)359    %r = call nnan <vscale x 2 x float> @llvm.minnum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)360    ret <vscale x 2 x float> %r361}362 363define <vscale x 2 x float> @famin_minnm_noflag_nx2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {364; CHECK-LABEL: famin_minnm_noflag_nx2f32:365; CHECK:       // %bb.0:366; CHECK-NEXT:    ptrue p0.d367; CHECK-NEXT:    fabs z0.s, p0/m, z0.s368; CHECK-NEXT:    fabs z1.s, p0/m, z1.s369; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s370; CHECK-NEXT:    ret371;372; CHECK-NO-FAMINMAX-LABEL: famin_minnm_noflag_nx2f32:373; CHECK-NO-FAMINMAX:       // %bb.0:374; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d375; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s376; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s377; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s378; CHECK-NO-FAMINMAX-NEXT:    ret379    %aa = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %a)380    %bb = call <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float> %b)381    %r = call <vscale x 2 x float> @llvm.minnum.nx2f32(<vscale x 2 x float> %aa, <vscale x  2 x float> %bb)382    ret <vscale x 2 x float> %r383}384 385define <vscale x 4 x float> @famax_max_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {386; CHECK-LABEL: famax_max_nx4f32:387; CHECK:       // %bb.0:388; CHECK-NEXT:    ptrue p0.s389; CHECK-NEXT:    famax z0.s, p0/m, z0.s, z1.s390; CHECK-NEXT:    ret391;392; CHECK-NO-FAMINMAX-LABEL: famax_max_nx4f32:393; CHECK-NO-FAMINMAX:       // %bb.0:394; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s395; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s396; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s397; CHECK-NO-FAMINMAX-NEXT:    fmax z0.s, p0/m, z0.s, z1.s398; CHECK-NO-FAMINMAX-NEXT:    ret399    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)400    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)401    %r = call <vscale x 4 x float> @llvm.maximum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)402    ret <vscale x 4 x float> %r403}404 405define <vscale x 4 x float> @famax_maxnm_nnan_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {406; CHECK-LABEL: famax_maxnm_nnan_nx4f32:407; CHECK:       // %bb.0:408; CHECK-NEXT:    ptrue p0.s409; CHECK-NEXT:    famax z0.s, p0/m, z0.s, z1.s410; CHECK-NEXT:    ret411;412; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_nnan_nx4f32:413; CHECK-NO-FAMINMAX:       // %bb.0:414; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s415; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s416; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s417; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s418; CHECK-NO-FAMINMAX-NEXT:    ret419    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)420    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)421    %r = call nnan <vscale x 4 x float> @llvm.maxnum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)422    ret <vscale x 4 x float> %r423}424 425define <vscale x 4 x float> @famax_maxnm_noflag_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {426; CHECK-LABEL: famax_maxnm_noflag_nx4f32:427; CHECK:       // %bb.0:428; CHECK-NEXT:    ptrue p0.s429; CHECK-NEXT:    fabs z0.s, p0/m, z0.s430; CHECK-NEXT:    fabs z1.s, p0/m, z1.s431; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s432; CHECK-NEXT:    ret433;434; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_noflag_nx4f32:435; CHECK-NO-FAMINMAX:       // %bb.0:436; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s437; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s438; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s439; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s440; CHECK-NO-FAMINMAX-NEXT:    ret441    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)442    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)443    %r = call <vscale x 4 x float> @llvm.maxnum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)444    ret <vscale x 4 x float> %r445}446 447define <vscale x 4 x float> @famin_min_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {448; CHECK-LABEL: famin_min_nx4f32:449; CHECK:       // %bb.0:450; CHECK-NEXT:    ptrue p0.s451; CHECK-NEXT:    famin z0.s, p0/m, z0.s, z1.s452; CHECK-NEXT:    ret453;454; CHECK-NO-FAMINMAX-LABEL: famin_min_nx4f32:455; CHECK-NO-FAMINMAX:       // %bb.0:456; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s457; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s458; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s459; CHECK-NO-FAMINMAX-NEXT:    fmin z0.s, p0/m, z0.s, z1.s460; CHECK-NO-FAMINMAX-NEXT:    ret461    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)462    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)463    %r = call <vscale x 4 x float> @llvm.minimum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)464    ret <vscale x 4 x float> %r465}466 467define <vscale x 4 x float> @famin_minnm_nnan_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {468; CHECK-LABEL: famin_minnm_nnan_nx4f32:469; CHECK:       // %bb.0:470; CHECK-NEXT:    ptrue p0.s471; CHECK-NEXT:    famin z0.s, p0/m, z0.s, z1.s472; CHECK-NEXT:    ret473;474; CHECK-NO-FAMINMAX-LABEL: famin_minnm_nnan_nx4f32:475; CHECK-NO-FAMINMAX:       // %bb.0:476; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s477; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s478; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s479; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s480; CHECK-NO-FAMINMAX-NEXT:    ret481    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)482    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)483    %r = call nnan <vscale x 4 x float> @llvm.minnum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)484    ret <vscale x 4 x float> %r485}486 487define <vscale x 4 x float> @famin_minnm_noflag_nx4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {488; CHECK-LABEL: famin_minnm_noflag_nx4f32:489; CHECK:       // %bb.0:490; CHECK-NEXT:    ptrue p0.s491; CHECK-NEXT:    fabs z0.s, p0/m, z0.s492; CHECK-NEXT:    fabs z1.s, p0/m, z1.s493; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s494; CHECK-NEXT:    ret495;496; CHECK-NO-FAMINMAX-LABEL: famin_minnm_noflag_nx4f32:497; CHECK-NO-FAMINMAX:       // %bb.0:498; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.s499; CHECK-NO-FAMINMAX-NEXT:    fabs z0.s, p0/m, z0.s500; CHECK-NO-FAMINMAX-NEXT:    fabs z1.s, p0/m, z1.s501; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s502; CHECK-NO-FAMINMAX-NEXT:    ret503    %aa = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %a)504    %bb = call <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float> %b)505    %r = call <vscale x 4 x float> @llvm.minnum.nx4f32(<vscale x 4 x float> %aa, <vscale x  4 x float> %bb)506    ret <vscale x 4 x float> %r507}508 509define <vscale x 2 x double> @famax_max_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {510; CHECK-LABEL: famax_max_nx2f64:511; CHECK:       // %bb.0:512; CHECK-NEXT:    ptrue p0.d513; CHECK-NEXT:    famax z0.d, p0/m, z0.d, z1.d514; CHECK-NEXT:    ret515;516; CHECK-NO-FAMINMAX-LABEL: famax_max_nx2f64:517; CHECK-NO-FAMINMAX:       // %bb.0:518; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d519; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d520; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d521; CHECK-NO-FAMINMAX-NEXT:    fmax z0.d, p0/m, z0.d, z1.d522; CHECK-NO-FAMINMAX-NEXT:    ret523    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)524    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)525    %r = call <vscale x 2 x double> @llvm.maximum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)526    ret <vscale x 2 x double> %r527}528 529define <vscale x 2 x double> @famax_maxnm_nnan_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {530; CHECK-LABEL: famax_maxnm_nnan_nx2f64:531; CHECK:       // %bb.0:532; CHECK-NEXT:    ptrue p0.d533; CHECK-NEXT:    famax z0.d, p0/m, z0.d, z1.d534; CHECK-NEXT:    ret535;536; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_nnan_nx2f64:537; CHECK-NO-FAMINMAX:       // %bb.0:538; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d539; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d540; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d541; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.d, p0/m, z0.d, z1.d542; CHECK-NO-FAMINMAX-NEXT:    ret543    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)544    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)545    %r = call nnan <vscale x 2 x double> @llvm.maxnum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)546    ret <vscale x 2 x double> %r547}548 549define <vscale x 2 x double> @famax_maxnm_noflag_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {550; CHECK-LABEL: famax_maxnm_noflag_nx2f64:551; CHECK:       // %bb.0:552; CHECK-NEXT:    ptrue p0.d553; CHECK-NEXT:    fabs z0.d, p0/m, z0.d554; CHECK-NEXT:    fabs z1.d, p0/m, z1.d555; CHECK-NEXT:    fmaxnm z0.d, p0/m, z0.d, z1.d556; CHECK-NEXT:    ret557;558; CHECK-NO-FAMINMAX-LABEL: famax_maxnm_noflag_nx2f64:559; CHECK-NO-FAMINMAX:       // %bb.0:560; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d561; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d562; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d563; CHECK-NO-FAMINMAX-NEXT:    fmaxnm z0.d, p0/m, z0.d, z1.d564; CHECK-NO-FAMINMAX-NEXT:    ret565    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)566    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)567    %r = call <vscale x 2 x double> @llvm.maxnum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)568    ret <vscale x 2 x double> %r569}570 571define <vscale x 2 x double> @famin_min_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {572; CHECK-LABEL: famin_min_nx2f64:573; CHECK:       // %bb.0:574; CHECK-NEXT:    ptrue p0.d575; CHECK-NEXT:    famin z0.d, p0/m, z0.d, z1.d576; CHECK-NEXT:    ret577;578; CHECK-NO-FAMINMAX-LABEL: famin_min_nx2f64:579; CHECK-NO-FAMINMAX:       // %bb.0:580; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d581; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d582; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d583; CHECK-NO-FAMINMAX-NEXT:    fmin z0.d, p0/m, z0.d, z1.d584; CHECK-NO-FAMINMAX-NEXT:    ret585    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)586    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)587    %r = call <vscale x 2 x double> @llvm.minimum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)588    ret <vscale x 2 x double> %r589}590 591define <vscale x 2 x double> @famin_minnm_nnan_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {592; CHECK-LABEL: famin_minnm_nnan_nx2f64:593; CHECK:       // %bb.0:594; CHECK-NEXT:    ptrue p0.d595; CHECK-NEXT:    famin z0.d, p0/m, z0.d, z1.d596; CHECK-NEXT:    ret597;598; CHECK-NO-FAMINMAX-LABEL: famin_minnm_nnan_nx2f64:599; CHECK-NO-FAMINMAX:       // %bb.0:600; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d601; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d602; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d603; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.d, p0/m, z0.d, z1.d604; CHECK-NO-FAMINMAX-NEXT:    ret605    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)606    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)607    %r = call nnan <vscale x 2 x double> @llvm.minnum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)608    ret <vscale x 2 x double> %r609}610 611define <vscale x 2 x double> @famin_minnm_noflag_nx2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {612; CHECK-LABEL: famin_minnm_noflag_nx2f64:613; CHECK:       // %bb.0:614; CHECK-NEXT:    ptrue p0.d615; CHECK-NEXT:    fabs z0.d, p0/m, z0.d616; CHECK-NEXT:    fabs z1.d, p0/m, z1.d617; CHECK-NEXT:    fminnm z0.d, p0/m, z0.d, z1.d618; CHECK-NEXT:    ret619;620; CHECK-NO-FAMINMAX-LABEL: famin_minnm_noflag_nx2f64:621; CHECK-NO-FAMINMAX:       // %bb.0:622; CHECK-NO-FAMINMAX-NEXT:    ptrue p0.d623; CHECK-NO-FAMINMAX-NEXT:    fabs z0.d, p0/m, z0.d624; CHECK-NO-FAMINMAX-NEXT:    fabs z1.d, p0/m, z1.d625; CHECK-NO-FAMINMAX-NEXT:    fminnm z0.d, p0/m, z0.d, z1.d626; CHECK-NO-FAMINMAX-NEXT:    ret627    %aa = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %a)628    %bb = call <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double> %b)629    %r = call <vscale x 2 x double> @llvm.minnum.nx2f64(<vscale x 2 x double> %aa, <vscale x 2 x double> %bb)630    ret <vscale x 2 x double> %r631}632 633declare <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half>)634declare <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half>)635declare <vscale x 2 x float> @llvm.fabs.nx2f32(<vscale x 2 x float>)636declare <vscale x 4 x float> @llvm.fabs.nx4f32(<vscale x 4 x float>)637declare <vscale x 2 x double> @llvm.fabs.nx2f64(<vscale x 2 x double>)638 639declare <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)640declare <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)641declare <vscale x 2 x float> @llvm.maximum.nx2f32(<vscale x 2 x float>, <vscale x  2 x float>)642declare <vscale x 4 x float> @llvm.maximum.nx4f32(<vscale x 4 x float>, <vscale x 4 x float>)643declare <vscale x 2 x double> @llvm.maximum.nx2f64(<vscale x 2 x double>, <vscale x 2 x double>)644 645declare <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)646declare <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)647declare <vscale x 2 x float> @llvm.minimum.nx2f32(<vscale x 2 x float>, <vscale x  2 x float>)648declare <vscale x 4 x float> @llvm.minimum.nx4f32(<vscale x 4 x float>, <vscale x 4 x float>)649declare <vscale x 2 x double> @llvm.minimum.nx2f64(<vscale x 2 x double>, <vscale x 2 x double>)650 651declare <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)652declare <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half> )653declare <vscale x 2 x float> @llvm.maxnum.nx2f32(<vscale x 2 x float>, <vscale x  2 x float>)654declare <vscale x 2 x double> @llvm.maxnum.nx2f64(<vscale x 2 x double>, <vscale x 2 x double>)655declare <vscale x 4 x float> @llvm.maxnum.nx4f32(<vscale x 4 x float>, <vscale x  4 x float>)656 657declare <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)658declare <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)659declare <vscale x 2 x float> @llvm.minnum.nx2f32(<vscale x 2 x float>, <vscale x  2 x float>)660declare <vscale x 4 x float> @llvm.minnum.nx4f32(<vscale x 4 x float>, <vscale x  4 x float>)661declare <vscale x 2 x double> @llvm.minnum.nx2f64(<vscale x 2 x double>, <vscale x 2 x double>)662