brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.6 KiB · 607cc92 Raw
663 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s3 4define <vscale x 4 x i1> @oeq(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {5; CHECK-LABEL: oeq:6; CHECK:       // %bb.0:7; CHECK-NEXT:    ptrue p0.s8; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s9; CHECK-NEXT:    ret10  %y = fcmp oeq <vscale x 4 x float> %x, %x211  ret <vscale x 4 x i1> %y12}13define <vscale x 4 x i1> @ogt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {14; CHECK-LABEL: ogt:15; CHECK:       // %bb.0:16; CHECK-NEXT:    ptrue p0.s17; CHECK-NEXT:    fcmgt p0.s, p0/z, z0.s, z1.s18; CHECK-NEXT:    ret19  %y = fcmp ogt <vscale x 4 x float> %x, %x220  ret <vscale x 4 x i1> %y21}22define <vscale x 4 x i1> @oge(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {23; CHECK-LABEL: oge:24; CHECK:       // %bb.0:25; CHECK-NEXT:    ptrue p0.s26; CHECK-NEXT:    fcmge p0.s, p0/z, z0.s, z1.s27; CHECK-NEXT:    ret28  %y = fcmp oge <vscale x 4 x float> %x, %x229  ret <vscale x 4 x i1> %y30}31define <vscale x 4 x i1> @olt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {32; CHECK-LABEL: olt:33; CHECK:       // %bb.0:34; CHECK-NEXT:    ptrue p0.s35; CHECK-NEXT:    fcmgt p0.s, p0/z, z1.s, z0.s36; CHECK-NEXT:    ret37  %y = fcmp olt <vscale x 4 x float> %x, %x238  ret <vscale x 4 x i1> %y39}40define <vscale x 4 x i1> @ole(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {41; CHECK-LABEL: ole:42; CHECK:       // %bb.0:43; CHECK-NEXT:    ptrue p0.s44; CHECK-NEXT:    fcmge p0.s, p0/z, z1.s, z0.s45; CHECK-NEXT:    ret46  %y = fcmp ole <vscale x 4 x float> %x, %x247  ret <vscale x 4 x i1> %y48}49define <vscale x 4 x i1> @one(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {50; CHECK-LABEL: one:51; CHECK:       // %bb.0:52; CHECK-NEXT:    ptrue p0.s53; CHECK-NEXT:    fcmgt p1.s, p0/z, z1.s, z0.s54; CHECK-NEXT:    fcmgt p0.s, p0/z, z0.s, z1.s55; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b56; CHECK-NEXT:    ret57  %y = fcmp one <vscale x 4 x float> %x, %x258  ret <vscale x 4 x i1> %y59}60define <vscale x 4 x i1> @ord(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {61; CHECK-LABEL: ord:62; CHECK:       // %bb.0:63; CHECK-NEXT:    ptrue p0.s64; CHECK-NEXT:    fcmuo p1.s, p0/z, z0.s, z1.s65; CHECK-NEXT:    not p0.b, p0/z, p1.b66; CHECK-NEXT:    ret67  %y = fcmp ord <vscale x 4 x float> %x, %x268  ret <vscale x 4 x i1> %y69}70define <vscale x 4 x i1> @ueq(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {71; CHECK-LABEL: ueq:72; CHECK:       // %bb.0:73; CHECK-NEXT:    ptrue p0.s74; CHECK-NEXT:    fcmuo p1.s, p0/z, z0.s, z1.s75; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s76; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b77; CHECK-NEXT:    ret78  %y = fcmp ueq <vscale x 4 x float> %x, %x279  ret <vscale x 4 x i1> %y80}81define <vscale x 4 x i1> @ugt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {82; CHECK-LABEL: ugt:83; CHECK:       // %bb.0:84; CHECK-NEXT:    ptrue p0.s85; CHECK-NEXT:    fcmge p1.s, p0/z, z1.s, z0.s86; CHECK-NEXT:    not p0.b, p0/z, p1.b87; CHECK-NEXT:    ret88  %y = fcmp ugt <vscale x 4 x float> %x, %x289  ret <vscale x 4 x i1> %y90}91define <vscale x 4 x i1> @uge(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {92; CHECK-LABEL: uge:93; CHECK:       // %bb.0:94; CHECK-NEXT:    ptrue p0.s95; CHECK-NEXT:    fcmgt p1.s, p0/z, z1.s, z0.s96; CHECK-NEXT:    not p0.b, p0/z, p1.b97; CHECK-NEXT:    ret98  %y = fcmp uge <vscale x 4 x float> %x, %x299  ret <vscale x 4 x i1> %y100}101define <vscale x 4 x i1> @ult(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {102; CHECK-LABEL: ult:103; CHECK:       // %bb.0:104; CHECK-NEXT:    ptrue p0.s105; CHECK-NEXT:    fcmge p1.s, p0/z, z0.s, z1.s106; CHECK-NEXT:    not p0.b, p0/z, p1.b107; CHECK-NEXT:    ret108  %y = fcmp ult <vscale x 4 x float> %x, %x2109  ret <vscale x 4 x i1> %y110}111define <vscale x 4 x i1> @ule(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {112; CHECK-LABEL: ule:113; CHECK:       // %bb.0:114; CHECK-NEXT:    ptrue p0.s115; CHECK-NEXT:    fcmgt p1.s, p0/z, z0.s, z1.s116; CHECK-NEXT:    not p0.b, p0/z, p1.b117; CHECK-NEXT:    ret118  %y = fcmp ule <vscale x 4 x float> %x, %x2119  ret <vscale x 4 x i1> %y120}121define <vscale x 4 x i1> @une(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {122; CHECK-LABEL: une:123; CHECK:       // %bb.0:124; CHECK-NEXT:    ptrue p0.s125; CHECK-NEXT:    fcmne p0.s, p0/z, z0.s, z1.s126; CHECK-NEXT:    ret127  %y = fcmp une <vscale x 4 x float> %x, %x2128  ret <vscale x 4 x i1> %y129}130define <vscale x 4 x i1> @uno(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {131; CHECK-LABEL: uno:132; CHECK:       // %bb.0:133; CHECK-NEXT:    ptrue p0.s134; CHECK-NEXT:    fcmuo p0.s, p0/z, z0.s, z1.s135; CHECK-NEXT:    ret136  %y = fcmp uno <vscale x 4 x float> %x, %x2137  ret <vscale x 4 x i1> %y138}139define <vscale x 2 x i1> @oeq_2f32(<vscale x 2 x float> %x, <vscale x 2 x float> %x2) {140; CHECK-LABEL: oeq_2f32:141; CHECK:       // %bb.0:142; CHECK-NEXT:    ptrue p0.d143; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s144; CHECK-NEXT:    ret145  %y = fcmp oeq <vscale x 2 x float> %x, %x2146  ret <vscale x 2 x i1> %y147}148define <vscale x 2 x i1> @ueq_2f32(<vscale x 2 x float> %x, <vscale x 2 x float> %x2) {149; CHECK-LABEL: ueq_2f32:150; CHECK:       // %bb.0:151; CHECK-NEXT:    ptrue p0.d152; CHECK-NEXT:    fcmuo p1.s, p0/z, z0.s, z1.s153; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s154; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b155; CHECK-NEXT:    ret156  %y = fcmp ueq <vscale x 2 x float> %x, %x2157  ret <vscale x 2 x i1> %y158}159define <vscale x 2 x i1> @oeq_2f64(<vscale x 2 x double> %x, <vscale x 2 x double> %x2) {160; CHECK-LABEL: oeq_2f64:161; CHECK:       // %bb.0:162; CHECK-NEXT:    ptrue p0.d163; CHECK-NEXT:    fcmeq p0.d, p0/z, z0.d, z1.d164; CHECK-NEXT:    ret165  %y = fcmp oeq <vscale x 2 x double> %x, %x2166  ret <vscale x 2 x i1> %y167}168define <vscale x 2 x i1> @ueq_2f64(<vscale x 2 x double> %x, <vscale x 2 x double> %x2) {169; CHECK-LABEL: ueq_2f64:170; CHECK:       // %bb.0:171; CHECK-NEXT:    ptrue p0.d172; CHECK-NEXT:    fcmuo p1.d, p0/z, z0.d, z1.d173; CHECK-NEXT:    fcmeq p0.d, p0/z, z0.d, z1.d174; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b175; CHECK-NEXT:    ret176  %y = fcmp ueq <vscale x 2 x double> %x, %x2177  ret <vscale x 2 x i1> %y178}179define <vscale x 2 x i1> @oeq_2f16(<vscale x 2 x half> %x, <vscale x 2 x half> %x2) {180; CHECK-LABEL: oeq_2f16:181; CHECK:       // %bb.0:182; CHECK-NEXT:    ptrue p0.d183; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h184; CHECK-NEXT:    ret185  %y = fcmp oeq <vscale x 2 x half> %x, %x2186  ret <vscale x 2 x i1> %y187}188define <vscale x 2 x i1> @ueq_2f16(<vscale x 2 x half> %x, <vscale x 2 x half> %x2) {189; CHECK-LABEL: ueq_2f16:190; CHECK:       // %bb.0:191; CHECK-NEXT:    ptrue p0.d192; CHECK-NEXT:    fcmuo p1.h, p0/z, z0.h, z1.h193; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h194; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b195; CHECK-NEXT:    ret196  %y = fcmp ueq <vscale x 2 x half> %x, %x2197  ret <vscale x 2 x i1> %y198}199define <vscale x 4 x i1> @oeq_4f16(<vscale x 4 x half> %x, <vscale x 4 x half> %x2) {200; CHECK-LABEL: oeq_4f16:201; CHECK:       // %bb.0:202; CHECK-NEXT:    ptrue p0.s203; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h204; CHECK-NEXT:    ret205  %y = fcmp oeq <vscale x 4 x half> %x, %x2206  ret <vscale x 4 x i1> %y207}208define <vscale x 4 x i1> @ueq_4f16(<vscale x 4 x half> %x, <vscale x 4 x half> %x2) {209; CHECK-LABEL: ueq_4f16:210; CHECK:       // %bb.0:211; CHECK-NEXT:    ptrue p0.s212; CHECK-NEXT:    fcmuo p1.h, p0/z, z0.h, z1.h213; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h214; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b215; CHECK-NEXT:    ret216  %y = fcmp ueq <vscale x 4 x half> %x, %x2217  ret <vscale x 4 x i1> %y218}219define <vscale x 8 x i1> @oeq_8f16(<vscale x 8 x half> %x, <vscale x 8 x half> %x2) {220; CHECK-LABEL: oeq_8f16:221; CHECK:       // %bb.0:222; CHECK-NEXT:    ptrue p0.h223; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h224; CHECK-NEXT:    ret225  %y = fcmp oeq <vscale x 8 x half> %x, %x2226  ret <vscale x 8 x i1> %y227}228define <vscale x 8 x i1> @ueq_8f16(<vscale x 8 x half> %x, <vscale x 8 x half> %x2) {229; CHECK-LABEL: ueq_8f16:230; CHECK:       // %bb.0:231; CHECK-NEXT:    ptrue p0.h232; CHECK-NEXT:    fcmuo p1.h, p0/z, z0.h, z1.h233; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, z1.h234; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b235; CHECK-NEXT:    ret236  %y = fcmp ueq <vscale x 8 x half> %x, %x2237  ret <vscale x 8 x i1> %y238}239 240define <vscale x 4 x i32> @oeq_4f32_sext(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {241; CHECK-LABEL: oeq_4f32_sext:242; CHECK:       // %bb.0:243; CHECK-NEXT:    ptrue p0.s244; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s245; CHECK-NEXT:    mov z0.s, p0/z, #-1 // =0xffffffffffffffff246; CHECK-NEXT:    ret247  %y = fcmp oeq <vscale x 4 x float> %x, %x2248  %r = sext <vscale x 4 x i1> %y to <vscale x 4 x i32>249  ret <vscale x 4 x i32> %r250}251 252define <vscale x 4 x i32> @oeq_4f32_zext(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {253; CHECK-LABEL: oeq_4f32_zext:254; CHECK:       // %bb.0:255; CHECK-NEXT:    ptrue p0.s256; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s257; CHECK-NEXT:    mov z0.s, p0/z, #1 // =0x1258; CHECK-NEXT:    ret259  %y = fcmp oeq <vscale x 4 x float> %x, %x2260  %r = zext <vscale x 4 x i1> %y to <vscale x 4 x i32>261  ret <vscale x 4 x i32> %r262}263 264define <vscale x 4 x i1> @eq_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {265; CHECK-LABEL: eq_fast:266; CHECK:       // %bb.0:267; CHECK-NEXT:    ptrue p0.s268; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, z1.s269; CHECK-NEXT:    ret270  %y = fcmp fast oeq <vscale x 4 x float> %x, %x2271  ret <vscale x 4 x i1> %y272}273define <vscale x 4 x i1> @gt_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {274; CHECK-LABEL: gt_fast:275; CHECK:       // %bb.0:276; CHECK-NEXT:    ptrue p0.s277; CHECK-NEXT:    fcmgt p0.s, p0/z, z0.s, z1.s278; CHECK-NEXT:    ret279  %y = fcmp fast ogt <vscale x 4 x float> %x, %x2280  ret <vscale x 4 x i1> %y281}282define <vscale x 4 x i1> @ge_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {283; CHECK-LABEL: ge_fast:284; CHECK:       // %bb.0:285; CHECK-NEXT:    ptrue p0.s286; CHECK-NEXT:    fcmge p0.s, p0/z, z0.s, z1.s287; CHECK-NEXT:    ret288  %y = fcmp fast oge <vscale x 4 x float> %x, %x2289  ret <vscale x 4 x i1> %y290}291define <vscale x 4 x i1> @lt_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {292; CHECK-LABEL: lt_fast:293; CHECK:       // %bb.0:294; CHECK-NEXT:    ptrue p0.s295; CHECK-NEXT:    fcmgt p0.s, p0/z, z1.s, z0.s296; CHECK-NEXT:    ret297  %y = fcmp fast olt <vscale x 4 x float> %x, %x2298  ret <vscale x 4 x i1> %y299}300define <vscale x 4 x i1> @le_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {301; CHECK-LABEL: le_fast:302; CHECK:       // %bb.0:303; CHECK-NEXT:    ptrue p0.s304; CHECK-NEXT:    fcmge p0.s, p0/z, z1.s, z0.s305; CHECK-NEXT:    ret306  %y = fcmp fast ole <vscale x 4 x float> %x, %x2307  ret <vscale x 4 x i1> %y308}309define <vscale x 4 x i1> @ne_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {310; CHECK-LABEL: ne_fast:311; CHECK:       // %bb.0:312; CHECK-NEXT:    ptrue p0.s313; CHECK-NEXT:    fcmne p0.s, p0/z, z0.s, z1.s314; CHECK-NEXT:    ret315  %y = fcmp fast one <vscale x 4 x float> %x, %x2316  ret <vscale x 4 x i1> %y317}318define <vscale x 4 x i1> @oeq_zero(<vscale x 4 x float> %x) {319; CHECK-LABEL: oeq_zero:320; CHECK:       // %bb.0:321; CHECK-NEXT:    ptrue p0.s322; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, #0.0323; CHECK-NEXT:    ret324  %y = fcmp oeq <vscale x 4 x float> %x, zeroinitializer325  ret <vscale x 4 x i1> %y326}327define <vscale x 4 x i1> @ogt_zero(<vscale x 4 x float> %x) {328; CHECK-LABEL: ogt_zero:329; CHECK:       // %bb.0:330; CHECK-NEXT:    ptrue p0.s331; CHECK-NEXT:    fcmgt p0.s, p0/z, z0.s, #0.0332; CHECK-NEXT:    ret333  %y = fcmp ogt <vscale x 4 x float> %x, zeroinitializer334  ret <vscale x 4 x i1> %y335}336define <vscale x 4 x i1> @oge_zero(<vscale x 4 x float> %x) {337; CHECK-LABEL: oge_zero:338; CHECK:       // %bb.0:339; CHECK-NEXT:    ptrue p0.s340; CHECK-NEXT:    fcmge p0.s, p0/z, z0.s, #0.0341; CHECK-NEXT:    ret342  %y = fcmp oge <vscale x 4 x float> %x, zeroinitializer343  ret <vscale x 4 x i1> %y344}345define <vscale x 4 x i1> @olt_zero(<vscale x 4 x float> %x) {346; CHECK-LABEL: olt_zero:347; CHECK:       // %bb.0:348; CHECK-NEXT:    ptrue p0.s349; CHECK-NEXT:    fcmlt p0.s, p0/z, z0.s, #0.0350; CHECK-NEXT:    ret351  %y = fcmp olt <vscale x 4 x float> %x, zeroinitializer352  ret <vscale x 4 x i1> %y353}354define <vscale x 4 x i1> @ole_zero(<vscale x 4 x float> %x) {355; CHECK-LABEL: ole_zero:356; CHECK:       // %bb.0:357; CHECK-NEXT:    ptrue p0.s358; CHECK-NEXT:    fcmle p0.s, p0/z, z0.s, #0.0359; CHECK-NEXT:    ret360  %y = fcmp ole <vscale x 4 x float> %x, zeroinitializer361  ret <vscale x 4 x i1> %y362}363define <vscale x 4 x i1> @one_zero(<vscale x 4 x float> %x) {364; CHECK-LABEL: one_zero:365; CHECK:       // %bb.0:366; CHECK-NEXT:    ptrue p0.s367; CHECK-NEXT:    fcmlt p1.s, p0/z, z0.s, #0.0368; CHECK-NEXT:    fcmgt p0.s, p0/z, z0.s, #0.0369; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b370; CHECK-NEXT:    ret371  %y = fcmp one <vscale x 4 x float> %x, zeroinitializer372  ret <vscale x 4 x i1> %y373}374define <vscale x 4 x i1> @ueq_zero(<vscale x 4 x float> %x) {375; CHECK-LABEL: ueq_zero:376; CHECK:       // %bb.0:377; CHECK-NEXT:    movi v1.2d, #0000000000000000378; CHECK-NEXT:    ptrue p0.s379; CHECK-NEXT:    fcmuo p1.s, p0/z, z0.s, z1.s380; CHECK-NEXT:    fcmeq p0.s, p0/z, z0.s, #0.0381; CHECK-NEXT:    sel p0.b, p0, p0.b, p1.b382; CHECK-NEXT:    ret383  %y = fcmp ueq <vscale x 4 x float> %x, zeroinitializer384  ret <vscale x 4 x i1> %y385}386define <vscale x 4 x i1> @ugt_zero(<vscale x 4 x float> %x) {387; CHECK-LABEL: ugt_zero:388; CHECK:       // %bb.0:389; CHECK-NEXT:    ptrue p0.s390; CHECK-NEXT:    fcmle p1.s, p0/z, z0.s, #0.0391; CHECK-NEXT:    not p0.b, p0/z, p1.b392; CHECK-NEXT:    ret393  %y = fcmp ugt <vscale x 4 x float> %x, zeroinitializer394  ret <vscale x 4 x i1> %y395}396define <vscale x 4 x i1> @uge_zero(<vscale x 4 x float> %x) {397; CHECK-LABEL: uge_zero:398; CHECK:       // %bb.0:399; CHECK-NEXT:    ptrue p0.s400; CHECK-NEXT:    fcmlt p1.s, p0/z, z0.s, #0.0401; CHECK-NEXT:    not p0.b, p0/z, p1.b402; CHECK-NEXT:    ret403  %y = fcmp uge <vscale x 4 x float> %x, zeroinitializer404  ret <vscale x 4 x i1> %y405}406define <vscale x 4 x i1> @ult_zero(<vscale x 4 x float> %x) {407; CHECK-LABEL: ult_zero:408; CHECK:       // %bb.0:409; CHECK-NEXT:    ptrue p0.s410; CHECK-NEXT:    fcmge p1.s, p0/z, z0.s, #0.0411; CHECK-NEXT:    not p0.b, p0/z, p1.b412; CHECK-NEXT:    ret413  %y = fcmp ult <vscale x 4 x float> %x, zeroinitializer414  ret <vscale x 4 x i1> %y415}416define <vscale x 4 x i1> @ule_zero(<vscale x 4 x float> %x) {417; CHECK-LABEL: ule_zero:418; CHECK:       // %bb.0:419; CHECK-NEXT:    ptrue p0.s420; CHECK-NEXT:    fcmgt p1.s, p0/z, z0.s, #0.0421; CHECK-NEXT:    not p0.b, p0/z, p1.b422; CHECK-NEXT:    ret423  %y = fcmp ule <vscale x 4 x float> %x, zeroinitializer424  ret <vscale x 4 x i1> %y425}426define <vscale x 4 x i1> @une_zero(<vscale x 4 x float> %x) {427; CHECK-LABEL: une_zero:428; CHECK:       // %bb.0:429; CHECK-NEXT:    ptrue p0.s430; CHECK-NEXT:    fcmne p0.s, p0/z, z0.s, #0.0431; CHECK-NEXT:    ret432  %y = fcmp une <vscale x 4 x float> %x, zeroinitializer433  ret <vscale x 4 x i1> %y434}435define <vscale x 8 x i1> @oeq_zero_pred(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {436; CHECK-LABEL: oeq_zero_pred:437; CHECK:       // %bb.0:438; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, #0.0439; CHECK-NEXT:    ret440  %y = fcmp oeq <vscale x 8 x half> %x, zeroinitializer441  %z = and <vscale x 8 x i1> %pg, %y442  ret <vscale x 8 x i1> %z443}444define <vscale x 4 x i1> @ogt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {445; CHECK-LABEL: ogt_zero_pred:446; CHECK:       // %bb.0:447; CHECK-NEXT:    fcmgt p0.h, p0/z, z0.h, #0.0448; CHECK-NEXT:    ret449  %y = fcmp ogt <vscale x 4 x half> %x, zeroinitializer450  %z = and <vscale x 4 x i1> %pg, %y451  ret <vscale x 4 x i1> %z452}453define <vscale x 2 x i1> @oge_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {454; CHECK-LABEL: oge_zero_pred:455; CHECK:       // %bb.0:456; CHECK-NEXT:    fcmge p0.h, p0/z, z0.h, #0.0457; CHECK-NEXT:    ret458  %y = fcmp oge <vscale x 2 x half> %x, zeroinitializer459  %z = and <vscale x 2 x i1> %pg, %y460  ret <vscale x 2 x i1> %z461}462define <vscale x 4 x i1> @olt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {463; CHECK-LABEL: olt_zero_pred:464; CHECK:       // %bb.0:465; CHECK-NEXT:    fcmlt p0.s, p0/z, z0.s, #0.0466; CHECK-NEXT:    ret467  %y = fcmp olt <vscale x 4 x float> %x, zeroinitializer468  %z = and <vscale x 4 x i1> %pg, %y469  ret <vscale x 4 x i1> %z470}471define <vscale x 2 x i1> @ole_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {472; CHECK-LABEL: ole_zero_pred:473; CHECK:       // %bb.0:474; CHECK-NEXT:    fcmle p0.s, p0/z, z0.s, #0.0475; CHECK-NEXT:    ret476  %y = fcmp ole <vscale x 2 x float> %x, zeroinitializer477  %z = and <vscale x 2 x i1> %pg, %y478  ret <vscale x 2 x i1> %z479}480define <vscale x 2 x i1> @une_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {481; CHECK-LABEL: une_zero_pred:482; CHECK:       // %bb.0:483; CHECK-NEXT:    fcmne p0.d, p0/z, z0.d, #0.0484; CHECK-NEXT:    ret485  %y = fcmp une <vscale x 2 x double> %x, zeroinitializer486  %z = and <vscale x 2 x i1> %pg, %y487  ret <vscale x 2 x i1> %z488}489 490%svboolx2 = type { <vscale x 4 x i1>, <vscale x 4 x i1> }491 492define %svboolx2 @and_of_multiuse_fcmp_ogt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {493; CHECK-LABEL: and_of_multiuse_fcmp_ogt:494; CHECK:       // %bb.0:495; CHECK-NEXT:    ptrue p1.s496; CHECK-NEXT:    fcmgt p1.s, p1/z, z0.s, z1.s497; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b498; CHECK-NEXT:    ret499  %cmp = fcmp ogt <vscale x 4 x float> %x, %y500  %and = and <vscale x 4 x i1> %pg, %cmp501  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0502  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1503  ret %svboolx2 %ins.2504}505 506define %svboolx2 @and_of_multiuse_fcmp_ogt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {507; CHECK-LABEL: and_of_multiuse_fcmp_ogt_zero:508; CHECK:       // %bb.0:509; CHECK-NEXT:    ptrue p1.s510; CHECK-NEXT:    fcmgt p1.s, p1/z, z0.s, #0.0511; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b512; CHECK-NEXT:    ret513  %cmp = fcmp ogt <vscale x 4 x float> %x, zeroinitializer514  %and = and <vscale x 4 x i1> %pg, %cmp515  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0516  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1517  ret %svboolx2 %ins.2518}519 520define %svboolx2 @and_of_multiuse_fcmp_olt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {521; CHECK-LABEL: and_of_multiuse_fcmp_olt:522; CHECK:       // %bb.0:523; CHECK-NEXT:    ptrue p1.s524; CHECK-NEXT:    fcmgt p1.s, p1/z, z1.s, z0.s525; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b526; CHECK-NEXT:    ret527  %cmp = fcmp olt <vscale x 4 x float> %x, %y528  %and = and <vscale x 4 x i1> %pg, %cmp529  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0530  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1531  ret %svboolx2 %ins.2532}533 534define %svboolx2 @and_of_multiuse_fcmp_olt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {535; CHECK-LABEL: and_of_multiuse_fcmp_olt_zero:536; CHECK:       // %bb.0:537; CHECK-NEXT:    ptrue p1.s538; CHECK-NEXT:    fcmlt p1.s, p1/z, z0.s, #0.0539; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b540; CHECK-NEXT:    ret541  %cmp = fcmp olt <vscale x 4 x float> %x, zeroinitializer542  %and = and <vscale x 4 x i1> %pg, %cmp543  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0544  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1545  ret %svboolx2 %ins.2546}547 548define <vscale x 8 x i1> @logical_and_oeq_zero_pred(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {549; CHECK-LABEL: logical_and_oeq_zero_pred:550; CHECK:       // %bb.0:551; CHECK-NEXT:    fcmeq p0.h, p0/z, z0.h, #0.0552; CHECK-NEXT:    ret553  %y = fcmp oeq <vscale x 8 x half> %x, zeroinitializer554  %z = select <vscale x 8 x i1> %pg, <vscale x 8 x i1> %y, <vscale x 8 x i1> zeroinitializer555 ret <vscale x 8 x i1> %z556}557 558define <vscale x 4 x i1> @logical_and_ogt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {559; CHECK-LABEL: logical_and_ogt_zero_pred:560; CHECK:       // %bb.0:561; CHECK-NEXT:    fcmgt p0.h, p0/z, z0.h, #0.0562; CHECK-NEXT:    ret563  %y = fcmp ogt <vscale x 4 x half> %x, zeroinitializer564  %z = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %y, <vscale x 4 x i1> zeroinitializer565  ret <vscale x 4 x i1> %z566}567 568define <vscale x 2 x i1> @logical_and_oge_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {569; CHECK-LABEL: logical_and_oge_zero_pred:570; CHECK:       // %bb.0:571; CHECK-NEXT:    fcmge p0.h, p0/z, z0.h, #0.0572; CHECK-NEXT:    ret573  %y = fcmp oge <vscale x 2 x half> %x, zeroinitializer574  %z = select <vscale x 2 x i1> %pg, <vscale x 2 x i1> %y, <vscale x 2 x i1> zeroinitializer575  ret <vscale x 2 x i1> %z576}577 578define <vscale x 4 x i1> @logical_and_olt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {579; CHECK-LABEL: logical_and_olt_zero_pred:580; CHECK:       // %bb.0:581; CHECK-NEXT:    fcmlt p0.s, p0/z, z0.s, #0.0582; CHECK-NEXT:    ret583  %y = fcmp olt <vscale x 4 x float> %x, zeroinitializer584  %z = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %y, <vscale x 4 x i1> zeroinitializer585  ret <vscale x 4 x i1> %z586}587 588define <vscale x 2 x i1> @logical_and_ole_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {589; CHECK-LABEL: logical_and_ole_zero_pred:590; CHECK:       // %bb.0:591; CHECK-NEXT:    fcmle p0.s, p0/z, z0.s, #0.0592; CHECK-NEXT:    ret593  %y = fcmp ole <vscale x 2 x float> %x, zeroinitializer594  %z = select <vscale x 2 x i1> %pg, <vscale x 2 x i1> %y, <vscale x 2 x i1> zeroinitializer595  ret <vscale x 2 x i1> %z596}597 598define <vscale x 2 x i1> @logical_and_une_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {599; CHECK-LABEL: logical_and_une_zero_pred:600; CHECK:       // %bb.0:601; CHECK-NEXT:    fcmne p0.d, p0/z, z0.d, #0.0602; CHECK-NEXT:    ret603  %y = fcmp une <vscale x 2 x double> %x, zeroinitializer604  %z = select <vscale x 2 x i1> %pg, <vscale x 2 x i1> %y, <vscale x 2 x i1> zeroinitializer605  ret <vscale x 2 x i1> %z606}607 608define %svboolx2 @logical_and_of_multiuse_fcmp_ogt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {609; CHECK-LABEL: logical_and_of_multiuse_fcmp_ogt:610; CHECK:       // %bb.0:611; CHECK-NEXT:    ptrue p1.s612; CHECK-NEXT:    fcmgt p1.s, p1/z, z0.s, z1.s613; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b614; CHECK-NEXT:    ret615  %cmp = fcmp ogt <vscale x 4 x float> %x, %y616  %and = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %cmp, <vscale x 4 x i1> zeroinitializer617  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0618  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1619  ret %svboolx2 %ins.2620}621 622define %svboolx2 @logical_and_of_multiuse_fcmp_ogt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {623; CHECK-LABEL: logical_and_of_multiuse_fcmp_ogt_zero:624; CHECK:       // %bb.0:625; CHECK-NEXT:    ptrue p1.s626; CHECK-NEXT:    fcmgt p1.s, p1/z, z0.s, #0.0627; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b628; CHECK-NEXT:    ret629  %cmp = fcmp ogt <vscale x 4 x float> %x, zeroinitializer630  %and = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %cmp, <vscale x 4 x i1> zeroinitializer631  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0632  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1633  ret %svboolx2 %ins.2634}635 636define %svboolx2 @logical_and_of_multiuse_fcmp_olt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {637; CHECK-LABEL: logical_and_of_multiuse_fcmp_olt:638; CHECK:       // %bb.0:639; CHECK-NEXT:    ptrue p1.s640; CHECK-NEXT:    fcmgt p1.s, p1/z, z1.s, z0.s641; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b642; CHECK-NEXT:    ret643  %cmp = fcmp olt <vscale x 4 x float> %x, %y644  %and = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %cmp, <vscale x 4 x i1> zeroinitializer645  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0646  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1647  ret %svboolx2 %ins.2648}649 650define %svboolx2 @logical_and_of_multiuse_fcmp_olt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {651; CHECK-LABEL: logical_and_of_multiuse_fcmp_olt_zero:652; CHECK:       // %bb.0:653; CHECK-NEXT:    ptrue p1.s654; CHECK-NEXT:    fcmlt p1.s, p1/z, z0.s, #0.0655; CHECK-NEXT:    and p0.b, p0/z, p0.b, p1.b656; CHECK-NEXT:    ret657  %cmp = fcmp olt <vscale x 4 x float> %x, zeroinitializer658  %and = select <vscale x 4 x i1> %pg, <vscale x 4 x i1> %cmp, <vscale x 4 x i1> zeroinitializer659  %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0660  %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1661  ret %svboolx2 %ins.2662}663