1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s 3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s 4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE 5 6target triple = "aarch64-unknown-linux-gnu" 7 8; 9; FCMP OEQ 10; 11 12define <2 x i16> @fcmp_oeq_v2f16(<2 x half> %op1, <2 x half> %op2) { 13; CHECK-LABEL: fcmp_oeq_v2f16: 14; CHECK: // %bb.0: 15; CHECK-NEXT: ptrue p0.h, vl4 16; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1 17; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 18; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h 19; CHECK-NEXT: punpklo p0.h, p0.b 20; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 21; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 22; CHECK-NEXT: ret 23; 24; NONEON-NOSVE-LABEL: fcmp_oeq_v2f16: 25; NONEON-NOSVE: // %bb.0: 26; NONEON-NOSVE-NEXT: sub sp, sp, #32 27; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 28; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8] 29; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 30; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 31; NONEON-NOSVE-NEXT: fcvt s0, h0 32; NONEON-NOSVE-NEXT: fcvt s1, h1 33; NONEON-NOSVE-NEXT: fcmp s1, s0 34; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 35; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 36; NONEON-NOSVE-NEXT: fcvt s0, h0 37; NONEON-NOSVE-NEXT: fcvt s1, h1 38; NONEON-NOSVE-NEXT: csetm w9, eq 39; NONEON-NOSVE-NEXT: fcmp s1, s0 40; NONEON-NOSVE-NEXT: csetm w8, eq 41; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24] 42; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 43; NONEON-NOSVE-NEXT: add sp, sp, #32 44; NONEON-NOSVE-NEXT: ret 45 %cmp = fcmp oeq <2 x half> %op1, %op2 46 %sext = sext <2 x i1> %cmp to <2 x i16> 47 ret <2 x i16> %sext 48} 49 50define <4 x i16> @fcmp_oeq_v4f16(<4 x half> %op1, <4 x half> %op2) { 51; CHECK-LABEL: fcmp_oeq_v4f16: 52; CHECK: // %bb.0: 53; CHECK-NEXT: ptrue p0.h, vl4 54; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1 55; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 56; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h 57; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff 58; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 59; CHECK-NEXT: ret 60; 61; NONEON-NOSVE-LABEL: fcmp_oeq_v4f16: 62; NONEON-NOSVE: // %bb.0: 63; NONEON-NOSVE-NEXT: sub sp, sp, #32 64; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 65; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8] 66; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 67; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 68; NONEON-NOSVE-NEXT: fcvt s0, h0 69; NONEON-NOSVE-NEXT: fcvt s1, h1 70; NONEON-NOSVE-NEXT: fcmp s1, s0 71; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 72; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 73; NONEON-NOSVE-NEXT: fcvt s0, h0 74; NONEON-NOSVE-NEXT: fcvt s1, h1 75; NONEON-NOSVE-NEXT: csetm w8, eq 76; NONEON-NOSVE-NEXT: strh w8, [sp, #30] 77; NONEON-NOSVE-NEXT: fcmp s1, s0 78; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 79; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 80; NONEON-NOSVE-NEXT: fcvt s0, h0 81; NONEON-NOSVE-NEXT: fcvt s1, h1 82; NONEON-NOSVE-NEXT: csetm w8, eq 83; NONEON-NOSVE-NEXT: strh w8, [sp, #28] 84; NONEON-NOSVE-NEXT: fcmp s1, s0 85; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 86; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 87; NONEON-NOSVE-NEXT: fcvt s0, h0 88; NONEON-NOSVE-NEXT: fcvt s1, h1 89; NONEON-NOSVE-NEXT: csetm w8, eq 90; NONEON-NOSVE-NEXT: strh w8, [sp, #26] 91; NONEON-NOSVE-NEXT: fcmp s1, s0 92; NONEON-NOSVE-NEXT: csetm w8, eq 93; NONEON-NOSVE-NEXT: strh w8, [sp, #24] 94; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 95; NONEON-NOSVE-NEXT: add sp, sp, #32 96; NONEON-NOSVE-NEXT: ret 97 %cmp = fcmp oeq <4 x half> %op1, %op2 98 %sext = sext <4 x i1> %cmp to <4 x i16> 99 ret <4 x i16> %sext 100} 101 102define <8 x i16> @fcmp_oeq_v8f16(<8 x half> %op1, <8 x half> %op2) { 103; CHECK-LABEL: fcmp_oeq_v8f16: 104; CHECK: // %bb.0: 105; CHECK-NEXT: ptrue p0.h, vl8 106; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1 107; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 108; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h 109; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff 110; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 111; CHECK-NEXT: ret 112; 113; NONEON-NOSVE-LABEL: fcmp_oeq_v8f16: 114; NONEON-NOSVE: // %bb.0: 115; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]! 116; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48 117; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 118; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 119; NONEON-NOSVE-NEXT: fcvt s0, h0 120; NONEON-NOSVE-NEXT: fcvt s1, h1 121; NONEON-NOSVE-NEXT: fcmp s1, s0 122; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 123; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 124; NONEON-NOSVE-NEXT: fcvt s0, h0 125; NONEON-NOSVE-NEXT: fcvt s1, h1 126; NONEON-NOSVE-NEXT: csetm w8, eq 127; NONEON-NOSVE-NEXT: strh w8, [sp, #46] 128; NONEON-NOSVE-NEXT: fcmp s1, s0 129; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 130; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 131; NONEON-NOSVE-NEXT: fcvt s0, h0 132; NONEON-NOSVE-NEXT: fcvt s1, h1 133; NONEON-NOSVE-NEXT: csetm w8, eq 134; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 135; NONEON-NOSVE-NEXT: fcmp s1, s0 136; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 137; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 138; NONEON-NOSVE-NEXT: fcvt s0, h0 139; NONEON-NOSVE-NEXT: fcvt s1, h1 140; NONEON-NOSVE-NEXT: csetm w8, eq 141; NONEON-NOSVE-NEXT: strh w8, [sp, #42] 142; NONEON-NOSVE-NEXT: fcmp s1, s0 143; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 144; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 145; NONEON-NOSVE-NEXT: fcvt s0, h0 146; NONEON-NOSVE-NEXT: fcvt s1, h1 147; NONEON-NOSVE-NEXT: csetm w8, eq 148; NONEON-NOSVE-NEXT: strh w8, [sp, #40] 149; NONEON-NOSVE-NEXT: fcmp s1, s0 150; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 151; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 152; NONEON-NOSVE-NEXT: fcvt s0, h0 153; NONEON-NOSVE-NEXT: fcvt s1, h1 154; NONEON-NOSVE-NEXT: csetm w8, eq 155; NONEON-NOSVE-NEXT: strh w8, [sp, #38] 156; NONEON-NOSVE-NEXT: fcmp s1, s0 157; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 158; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 159; NONEON-NOSVE-NEXT: fcvt s0, h0 160; NONEON-NOSVE-NEXT: fcvt s1, h1 161; NONEON-NOSVE-NEXT: csetm w8, eq 162; NONEON-NOSVE-NEXT: strh w8, [sp, #36] 163; NONEON-NOSVE-NEXT: fcmp s1, s0 164; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 165; NONEON-NOSVE-NEXT: ldr h1, [sp] 166; NONEON-NOSVE-NEXT: fcvt s0, h0 167; NONEON-NOSVE-NEXT: fcvt s1, h1 168; NONEON-NOSVE-NEXT: csetm w8, eq 169; NONEON-NOSVE-NEXT: strh w8, [sp, #34] 170; NONEON-NOSVE-NEXT: fcmp s1, s0 171; NONEON-NOSVE-NEXT: csetm w8, eq 172; NONEON-NOSVE-NEXT: strh w8, [sp, #32] 173; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 174; NONEON-NOSVE-NEXT: add sp, sp, #48 175; NONEON-NOSVE-NEXT: ret 176 %cmp = fcmp oeq <8 x half> %op1, %op2 177 %sext = sext <8 x i1> %cmp to <8 x i16> 178 ret <8 x i16> %sext 179} 180 181define void @fcmp_oeq_v16f16(ptr %a, ptr %b, ptr %c) { 182; CHECK-LABEL: fcmp_oeq_v16f16: 183; CHECK: // %bb.0: 184; CHECK-NEXT: ldp q0, q3, [x1] 185; CHECK-NEXT: ptrue p0.h, vl8 186; CHECK-NEXT: ldp q1, q2, [x0] 187; CHECK-NEXT: fcmeq p1.h, p0/z, z1.h, z0.h 188; CHECK-NEXT: fcmeq p0.h, p0/z, z2.h, z3.h 189; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 190; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 191; CHECK-NEXT: stp q0, q1, [x2] 192; CHECK-NEXT: ret 193; 194; NONEON-NOSVE-LABEL: fcmp_oeq_v16f16: 195; NONEON-NOSVE: // %bb.0: 196; NONEON-NOSVE-NEXT: sub sp, sp, #96 197; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 198; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 199; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 200; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 201; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 202; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 203; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 204; NONEON-NOSVE-NEXT: fcvt s0, h0 205; NONEON-NOSVE-NEXT: fcvt s1, h1 206; NONEON-NOSVE-NEXT: fcmp s1, s0 207; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 208; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 209; NONEON-NOSVE-NEXT: fcvt s0, h0 210; NONEON-NOSVE-NEXT: fcvt s1, h1 211; NONEON-NOSVE-NEXT: csetm w8, eq 212; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 213; NONEON-NOSVE-NEXT: fcmp s1, s0 214; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 215; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 216; NONEON-NOSVE-NEXT: fcvt s0, h0 217; NONEON-NOSVE-NEXT: fcvt s1, h1 218; NONEON-NOSVE-NEXT: csetm w8, eq 219; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 220; NONEON-NOSVE-NEXT: fcmp s1, s0 221; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 222; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 223; NONEON-NOSVE-NEXT: fcvt s0, h0 224; NONEON-NOSVE-NEXT: fcvt s1, h1 225; NONEON-NOSVE-NEXT: csetm w8, eq 226; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 227; NONEON-NOSVE-NEXT: fcmp s1, s0 228; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 229; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 230; NONEON-NOSVE-NEXT: fcvt s0, h0 231; NONEON-NOSVE-NEXT: fcvt s1, h1 232; NONEON-NOSVE-NEXT: csetm w8, eq 233; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 234; NONEON-NOSVE-NEXT: fcmp s1, s0 235; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 236; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 237; NONEON-NOSVE-NEXT: fcvt s0, h0 238; NONEON-NOSVE-NEXT: fcvt s1, h1 239; NONEON-NOSVE-NEXT: csetm w8, eq 240; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 241; NONEON-NOSVE-NEXT: fcmp s1, s0 242; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 243; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 244; NONEON-NOSVE-NEXT: fcvt s0, h0 245; NONEON-NOSVE-NEXT: fcvt s1, h1 246; NONEON-NOSVE-NEXT: csetm w8, eq 247; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 248; NONEON-NOSVE-NEXT: fcmp s1, s0 249; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 250; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 251; NONEON-NOSVE-NEXT: fcvt s0, h0 252; NONEON-NOSVE-NEXT: fcvt s1, h1 253; NONEON-NOSVE-NEXT: csetm w8, eq 254; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 255; NONEON-NOSVE-NEXT: fcmp s1, s0 256; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 257; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 258; NONEON-NOSVE-NEXT: fcvt s0, h0 259; NONEON-NOSVE-NEXT: fcvt s1, h1 260; NONEON-NOSVE-NEXT: csetm w8, eq 261; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 262; NONEON-NOSVE-NEXT: fcmp s1, s0 263; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 264; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 265; NONEON-NOSVE-NEXT: fcvt s0, h0 266; NONEON-NOSVE-NEXT: fcvt s1, h1 267; NONEON-NOSVE-NEXT: csetm w8, eq 268; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 269; NONEON-NOSVE-NEXT: fcmp s1, s0 270; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 271; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 272; NONEON-NOSVE-NEXT: fcvt s0, h0 273; NONEON-NOSVE-NEXT: fcvt s1, h1 274; NONEON-NOSVE-NEXT: csetm w8, eq 275; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 276; NONEON-NOSVE-NEXT: fcmp s1, s0 277; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 278; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 279; NONEON-NOSVE-NEXT: fcvt s0, h0 280; NONEON-NOSVE-NEXT: fcvt s1, h1 281; NONEON-NOSVE-NEXT: csetm w8, eq 282; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 283; NONEON-NOSVE-NEXT: fcmp s1, s0 284; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 285; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 286; NONEON-NOSVE-NEXT: fcvt s0, h0 287; NONEON-NOSVE-NEXT: fcvt s1, h1 288; NONEON-NOSVE-NEXT: csetm w8, eq 289; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 290; NONEON-NOSVE-NEXT: fcmp s1, s0 291; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 292; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 293; NONEON-NOSVE-NEXT: fcvt s0, h0 294; NONEON-NOSVE-NEXT: fcvt s1, h1 295; NONEON-NOSVE-NEXT: csetm w8, eq 296; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 297; NONEON-NOSVE-NEXT: fcmp s1, s0 298; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 299; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 300; NONEON-NOSVE-NEXT: fcvt s0, h0 301; NONEON-NOSVE-NEXT: fcvt s1, h1 302; NONEON-NOSVE-NEXT: csetm w8, eq 303; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 304; NONEON-NOSVE-NEXT: fcmp s1, s0 305; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 306; NONEON-NOSVE-NEXT: ldr h1, [sp] 307; NONEON-NOSVE-NEXT: fcvt s0, h0 308; NONEON-NOSVE-NEXT: fcvt s1, h1 309; NONEON-NOSVE-NEXT: csetm w8, eq 310; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 311; NONEON-NOSVE-NEXT: fcmp s1, s0 312; NONEON-NOSVE-NEXT: csetm w8, eq 313; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 314; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 315; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 316; NONEON-NOSVE-NEXT: add sp, sp, #96 317; NONEON-NOSVE-NEXT: ret 318 %op1 = load <16 x half>, ptr %a 319 %op2 = load <16 x half>, ptr %b 320 %cmp = fcmp oeq <16 x half> %op1, %op2 321 %sext = sext <16 x i1> %cmp to <16 x i16> 322 store <16 x i16> %sext, ptr %c 323 ret void 324} 325 326define <2 x i32> @fcmp_oeq_v2f32(<2 x float> %op1, <2 x float> %op2) { 327; CHECK-LABEL: fcmp_oeq_v2f32: 328; CHECK: // %bb.0: 329; CHECK-NEXT: ptrue p0.s, vl2 330; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1 331; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 332; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s 333; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 334; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 335; CHECK-NEXT: ret 336; 337; NONEON-NOSVE-LABEL: fcmp_oeq_v2f32: 338; NONEON-NOSVE: // %bb.0: 339; NONEON-NOSVE-NEXT: sub sp, sp, #32 340; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 341; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8] 342; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #16] 343; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #8] 344; NONEON-NOSVE-NEXT: fcmp s3, s2 345; NONEON-NOSVE-NEXT: csetm w9, eq 346; NONEON-NOSVE-NEXT: fcmp s1, s0 347; NONEON-NOSVE-NEXT: csetm w8, eq 348; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24] 349; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 350; NONEON-NOSVE-NEXT: add sp, sp, #32 351; NONEON-NOSVE-NEXT: ret 352 %cmp = fcmp oeq <2 x float> %op1, %op2 353 %sext = sext <2 x i1> %cmp to <2 x i32> 354 ret <2 x i32> %sext 355} 356 357define <4 x i32> @fcmp_oeq_v4f32(<4 x float> %op1, <4 x float> %op2) { 358; CHECK-LABEL: fcmp_oeq_v4f32: 359; CHECK: // %bb.0: 360; CHECK-NEXT: ptrue p0.s, vl4 361; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1 362; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 363; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s 364; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 365; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 366; CHECK-NEXT: ret 367; 368; NONEON-NOSVE-LABEL: fcmp_oeq_v4f32: 369; NONEON-NOSVE: // %bb.0: 370; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]! 371; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48 372; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #24] 373; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #8] 374; NONEON-NOSVE-NEXT: fcmp s3, s2 375; NONEON-NOSVE-NEXT: csetm w9, eq 376; NONEON-NOSVE-NEXT: fcmp s1, s0 377; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #16] 378; NONEON-NOSVE-NEXT: ldp s1, s3, [sp] 379; NONEON-NOSVE-NEXT: csetm w8, eq 380; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40] 381; NONEON-NOSVE-NEXT: fcmp s3, s2 382; NONEON-NOSVE-NEXT: csetm w9, eq 383; NONEON-NOSVE-NEXT: fcmp s1, s0 384; NONEON-NOSVE-NEXT: csetm w8, eq 385; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32] 386; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 387; NONEON-NOSVE-NEXT: add sp, sp, #48 388; NONEON-NOSVE-NEXT: ret 389 %cmp = fcmp oeq <4 x float> %op1, %op2 390 %sext = sext <4 x i1> %cmp to <4 x i32> 391 ret <4 x i32> %sext 392} 393 394define void @fcmp_oeq_v8f32(ptr %a, ptr %b, ptr %c) { 395; CHECK-LABEL: fcmp_oeq_v8f32: 396; CHECK: // %bb.0: 397; CHECK-NEXT: ldp q0, q3, [x1] 398; CHECK-NEXT: ptrue p0.s, vl4 399; CHECK-NEXT: ldp q1, q2, [x0] 400; CHECK-NEXT: fcmeq p1.s, p0/z, z1.s, z0.s 401; CHECK-NEXT: fcmeq p0.s, p0/z, z2.s, z3.s 402; CHECK-NEXT: mov z0.s, p1/z, #-1 // =0xffffffffffffffff 403; CHECK-NEXT: mov z1.s, p0/z, #-1 // =0xffffffffffffffff 404; CHECK-NEXT: stp q0, q1, [x2] 405; CHECK-NEXT: ret 406; 407; NONEON-NOSVE-LABEL: fcmp_oeq_v8f32: 408; NONEON-NOSVE: // %bb.0: 409; NONEON-NOSVE-NEXT: sub sp, sp, #96 410; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 411; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 412; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 413; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 414; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 415; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #56] 416; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #40] 417; NONEON-NOSVE-NEXT: fcmp s3, s2 418; NONEON-NOSVE-NEXT: csetm w9, eq 419; NONEON-NOSVE-NEXT: fcmp s1, s0 420; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #48] 421; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #32] 422; NONEON-NOSVE-NEXT: csetm w8, eq 423; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #88] 424; NONEON-NOSVE-NEXT: fcmp s3, s2 425; NONEON-NOSVE-NEXT: csetm w9, eq 426; NONEON-NOSVE-NEXT: fcmp s1, s0 427; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #24] 428; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #8] 429; NONEON-NOSVE-NEXT: csetm w8, eq 430; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #80] 431; NONEON-NOSVE-NEXT: fcmp s3, s2 432; NONEON-NOSVE-NEXT: csetm w9, eq 433; NONEON-NOSVE-NEXT: fcmp s1, s0 434; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #16] 435; NONEON-NOSVE-NEXT: ldp s1, s3, [sp] 436; NONEON-NOSVE-NEXT: csetm w8, eq 437; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #72] 438; NONEON-NOSVE-NEXT: fcmp s3, s2 439; NONEON-NOSVE-NEXT: csetm w9, eq 440; NONEON-NOSVE-NEXT: fcmp s1, s0 441; NONEON-NOSVE-NEXT: csetm w8, eq 442; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #64] 443; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 444; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 445; NONEON-NOSVE-NEXT: add sp, sp, #96 446; NONEON-NOSVE-NEXT: ret 447 %op1 = load <8 x float>, ptr %a 448 %op2 = load <8 x float>, ptr %b 449 %cmp = fcmp oeq <8 x float> %op1, %op2 450 %sext = sext <8 x i1> %cmp to <8 x i32> 451 store <8 x i32> %sext, ptr %c 452 ret void 453} 454 455define <1 x i64> @fcmp_oeq_v1f64(<1 x double> %op1, <1 x double> %op2) { 456; CHECK-LABEL: fcmp_oeq_v1f64: 457; CHECK: // %bb.0: 458; CHECK-NEXT: fcmp d0, d1 459; CHECK-NEXT: csetm x8, eq 460; CHECK-NEXT: mov z0.d, x8 461; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 462; CHECK-NEXT: ret 463; 464; NONEON-NOSVE-LABEL: fcmp_oeq_v1f64: 465; NONEON-NOSVE: // %bb.0: 466; NONEON-NOSVE-NEXT: sub sp, sp, #16 467; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16 468; NONEON-NOSVE-NEXT: fcmp d0, d1 469; NONEON-NOSVE-NEXT: csetm x8, eq 470; NONEON-NOSVE-NEXT: str x8, [sp, #8] 471; NONEON-NOSVE-NEXT: ldr d0, [sp, #8] 472; NONEON-NOSVE-NEXT: add sp, sp, #16 473; NONEON-NOSVE-NEXT: ret 474 %cmp = fcmp oeq <1 x double> %op1, %op2 475 %sext = sext <1 x i1> %cmp to <1 x i64> 476 ret <1 x i64> %sext 477} 478 479define <2 x i64> @fcmp_oeq_v2f64(<2 x double> %op1, <2 x double> %op2) { 480; CHECK-LABEL: fcmp_oeq_v2f64: 481; CHECK: // %bb.0: 482; CHECK-NEXT: ptrue p0.d, vl2 483; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1 484; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 485; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d 486; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff 487; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 488; CHECK-NEXT: ret 489; 490; NONEON-NOSVE-LABEL: fcmp_oeq_v2f64: 491; NONEON-NOSVE: // %bb.0: 492; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]! 493; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48 494; NONEON-NOSVE-NEXT: ldp d0, d2, [sp, #16] 495; NONEON-NOSVE-NEXT: ldp d1, d3, [sp] 496; NONEON-NOSVE-NEXT: fcmp d3, d2 497; NONEON-NOSVE-NEXT: csetm x9, eq 498; NONEON-NOSVE-NEXT: fcmp d1, d0 499; NONEON-NOSVE-NEXT: csetm x8, eq 500; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32] 501; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 502; NONEON-NOSVE-NEXT: add sp, sp, #48 503; NONEON-NOSVE-NEXT: ret 504 %cmp = fcmp oeq <2 x double> %op1, %op2 505 %sext = sext <2 x i1> %cmp to <2 x i64> 506 ret <2 x i64> %sext 507} 508 509define void @fcmp_oeq_v4f64(ptr %a, ptr %b, ptr %c) { 510; CHECK-LABEL: fcmp_oeq_v4f64: 511; CHECK: // %bb.0: 512; CHECK-NEXT: ldp q0, q3, [x1] 513; CHECK-NEXT: ptrue p0.d, vl2 514; CHECK-NEXT: ldp q1, q2, [x0] 515; CHECK-NEXT: fcmeq p1.d, p0/z, z1.d, z0.d 516; CHECK-NEXT: fcmeq p0.d, p0/z, z2.d, z3.d 517; CHECK-NEXT: mov z0.d, p1/z, #-1 // =0xffffffffffffffff 518; CHECK-NEXT: mov z1.d, p0/z, #-1 // =0xffffffffffffffff 519; CHECK-NEXT: stp q0, q1, [x2] 520; CHECK-NEXT: ret 521; 522; NONEON-NOSVE-LABEL: fcmp_oeq_v4f64: 523; NONEON-NOSVE: // %bb.0: 524; NONEON-NOSVE-NEXT: sub sp, sp, #96 525; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 526; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 527; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 528; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 529; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 530; NONEON-NOSVE-NEXT: ldp d0, d2, [sp, #48] 531; NONEON-NOSVE-NEXT: ldp d1, d3, [sp, #32] 532; NONEON-NOSVE-NEXT: fcmp d3, d2 533; NONEON-NOSVE-NEXT: csetm x9, eq 534; NONEON-NOSVE-NEXT: fcmp d1, d0 535; NONEON-NOSVE-NEXT: ldp d0, d2, [sp, #16] 536; NONEON-NOSVE-NEXT: ldp d1, d3, [sp] 537; NONEON-NOSVE-NEXT: csetm x8, eq 538; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #80] 539; NONEON-NOSVE-NEXT: fcmp d3, d2 540; NONEON-NOSVE-NEXT: csetm x9, eq 541; NONEON-NOSVE-NEXT: fcmp d1, d0 542; NONEON-NOSVE-NEXT: csetm x8, eq 543; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #64] 544; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 545; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 546; NONEON-NOSVE-NEXT: add sp, sp, #96 547; NONEON-NOSVE-NEXT: ret 548 %op1 = load <4 x double>, ptr %a 549 %op2 = load <4 x double>, ptr %b 550 %cmp = fcmp oeq <4 x double> %op1, %op2 551 %sext = sext <4 x i1> %cmp to <4 x i64> 552 store <4 x i64> %sext, ptr %c 553 ret void 554} 555 556; 557; FCMP UEQ 558; 559 560define void @fcmp_ueq_v16f16(ptr %a, ptr %b, ptr %c) { 561; CHECK-LABEL: fcmp_ueq_v16f16: 562; CHECK: // %bb.0: 563; CHECK-NEXT: ldp q0, q3, [x1] 564; CHECK-NEXT: ptrue p0.h, vl8 565; CHECK-NEXT: ldp q1, q2, [x0] 566; CHECK-NEXT: fcmuo p1.h, p0/z, z1.h, z0.h 567; CHECK-NEXT: fcmeq p2.h, p0/z, z1.h, z0.h 568; CHECK-NEXT: fcmuo p3.h, p0/z, z2.h, z3.h 569; CHECK-NEXT: fcmeq p0.h, p0/z, z2.h, z3.h 570; CHECK-NEXT: mov p1.b, p2/m, p2.b 571; CHECK-NEXT: sel p0.b, p0, p0.b, p3.b 572; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 573; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 574; CHECK-NEXT: stp q0, q1, [x2] 575; CHECK-NEXT: ret 576; 577; NONEON-NOSVE-LABEL: fcmp_ueq_v16f16: 578; NONEON-NOSVE: // %bb.0: 579; NONEON-NOSVE-NEXT: sub sp, sp, #96 580; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 581; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 582; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 583; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 584; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 585; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 586; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 587; NONEON-NOSVE-NEXT: fcvt s0, h0 588; NONEON-NOSVE-NEXT: fcvt s1, h1 589; NONEON-NOSVE-NEXT: fcmp s1, s0 590; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 591; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 592; NONEON-NOSVE-NEXT: fcvt s0, h0 593; NONEON-NOSVE-NEXT: fcvt s1, h1 594; NONEON-NOSVE-NEXT: csetm w8, eq 595; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 596; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 597; NONEON-NOSVE-NEXT: fcmp s1, s0 598; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 599; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 600; NONEON-NOSVE-NEXT: fcvt s0, h0 601; NONEON-NOSVE-NEXT: fcvt s1, h1 602; NONEON-NOSVE-NEXT: csetm w8, eq 603; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 604; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 605; NONEON-NOSVE-NEXT: fcmp s1, s0 606; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 607; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 608; NONEON-NOSVE-NEXT: fcvt s0, h0 609; NONEON-NOSVE-NEXT: fcvt s1, h1 610; NONEON-NOSVE-NEXT: csetm w8, eq 611; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 612; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 613; NONEON-NOSVE-NEXT: fcmp s1, s0 614; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 615; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 616; NONEON-NOSVE-NEXT: fcvt s0, h0 617; NONEON-NOSVE-NEXT: fcvt s1, h1 618; NONEON-NOSVE-NEXT: csetm w8, eq 619; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 620; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 621; NONEON-NOSVE-NEXT: fcmp s1, s0 622; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 623; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 624; NONEON-NOSVE-NEXT: fcvt s0, h0 625; NONEON-NOSVE-NEXT: fcvt s1, h1 626; NONEON-NOSVE-NEXT: csetm w8, eq 627; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 628; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 629; NONEON-NOSVE-NEXT: fcmp s1, s0 630; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 631; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 632; NONEON-NOSVE-NEXT: fcvt s0, h0 633; NONEON-NOSVE-NEXT: fcvt s1, h1 634; NONEON-NOSVE-NEXT: csetm w8, eq 635; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 636; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 637; NONEON-NOSVE-NEXT: fcmp s1, s0 638; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 639; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 640; NONEON-NOSVE-NEXT: fcvt s0, h0 641; NONEON-NOSVE-NEXT: fcvt s1, h1 642; NONEON-NOSVE-NEXT: csetm w8, eq 643; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 644; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 645; NONEON-NOSVE-NEXT: fcmp s1, s0 646; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 647; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 648; NONEON-NOSVE-NEXT: fcvt s0, h0 649; NONEON-NOSVE-NEXT: fcvt s1, h1 650; NONEON-NOSVE-NEXT: csetm w8, eq 651; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 652; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 653; NONEON-NOSVE-NEXT: fcmp s1, s0 654; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 655; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 656; NONEON-NOSVE-NEXT: fcvt s0, h0 657; NONEON-NOSVE-NEXT: fcvt s1, h1 658; NONEON-NOSVE-NEXT: csetm w8, eq 659; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 660; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 661; NONEON-NOSVE-NEXT: fcmp s1, s0 662; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 663; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 664; NONEON-NOSVE-NEXT: fcvt s0, h0 665; NONEON-NOSVE-NEXT: fcvt s1, h1 666; NONEON-NOSVE-NEXT: csetm w8, eq 667; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 668; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 669; NONEON-NOSVE-NEXT: fcmp s1, s0 670; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 671; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 672; NONEON-NOSVE-NEXT: fcvt s0, h0 673; NONEON-NOSVE-NEXT: fcvt s1, h1 674; NONEON-NOSVE-NEXT: csetm w8, eq 675; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 676; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 677; NONEON-NOSVE-NEXT: fcmp s1, s0 678; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 679; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 680; NONEON-NOSVE-NEXT: fcvt s0, h0 681; NONEON-NOSVE-NEXT: fcvt s1, h1 682; NONEON-NOSVE-NEXT: csetm w8, eq 683; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 684; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 685; NONEON-NOSVE-NEXT: fcmp s1, s0 686; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 687; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 688; NONEON-NOSVE-NEXT: fcvt s0, h0 689; NONEON-NOSVE-NEXT: fcvt s1, h1 690; NONEON-NOSVE-NEXT: csetm w8, eq 691; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 692; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 693; NONEON-NOSVE-NEXT: fcmp s1, s0 694; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 695; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 696; NONEON-NOSVE-NEXT: fcvt s0, h0 697; NONEON-NOSVE-NEXT: fcvt s1, h1 698; NONEON-NOSVE-NEXT: csetm w8, eq 699; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 700; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 701; NONEON-NOSVE-NEXT: fcmp s1, s0 702; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 703; NONEON-NOSVE-NEXT: ldr h1, [sp] 704; NONEON-NOSVE-NEXT: fcvt s0, h0 705; NONEON-NOSVE-NEXT: fcvt s1, h1 706; NONEON-NOSVE-NEXT: csetm w8, eq 707; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 708; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 709; NONEON-NOSVE-NEXT: fcmp s1, s0 710; NONEON-NOSVE-NEXT: csetm w8, eq 711; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, vc 712; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 713; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 714; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 715; NONEON-NOSVE-NEXT: add sp, sp, #96 716; NONEON-NOSVE-NEXT: ret 717 %op1 = load <16 x half>, ptr %a 718 %op2 = load <16 x half>, ptr %b 719 %cmp = fcmp ueq <16 x half> %op1, %op2 720 %sext = sext <16 x i1> %cmp to <16 x i16> 721 store <16 x i16> %sext, ptr %c 722 ret void 723} 724 725; 726; FCMP ONE 727; 728 729define void @fcmp_one_v16f16(ptr %a, ptr %b, ptr %c) { 730; CHECK-LABEL: fcmp_one_v16f16: 731; CHECK: // %bb.0: 732; CHECK-NEXT: ldp q0, q3, [x1] 733; CHECK-NEXT: ptrue p0.h, vl8 734; CHECK-NEXT: ldp q1, q2, [x0] 735; CHECK-NEXT: fcmgt p1.h, p0/z, z0.h, z1.h 736; CHECK-NEXT: fcmgt p2.h, p0/z, z1.h, z0.h 737; CHECK-NEXT: fcmgt p3.h, p0/z, z3.h, z2.h 738; CHECK-NEXT: fcmgt p0.h, p0/z, z2.h, z3.h 739; CHECK-NEXT: mov p1.b, p2/m, p2.b 740; CHECK-NEXT: sel p0.b, p0, p0.b, p3.b 741; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 742; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 743; CHECK-NEXT: stp q0, q1, [x2] 744; CHECK-NEXT: ret 745; 746; NONEON-NOSVE-LABEL: fcmp_one_v16f16: 747; NONEON-NOSVE: // %bb.0: 748; NONEON-NOSVE-NEXT: sub sp, sp, #96 749; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 750; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 751; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 752; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 753; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 754; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 755; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 756; NONEON-NOSVE-NEXT: fcvt s0, h0 757; NONEON-NOSVE-NEXT: fcvt s1, h1 758; NONEON-NOSVE-NEXT: fcmp s1, s0 759; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 760; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 761; NONEON-NOSVE-NEXT: fcvt s0, h0 762; NONEON-NOSVE-NEXT: fcvt s1, h1 763; NONEON-NOSVE-NEXT: csetm w8, mi 764; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 765; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 766; NONEON-NOSVE-NEXT: fcmp s1, s0 767; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 768; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 769; NONEON-NOSVE-NEXT: fcvt s0, h0 770; NONEON-NOSVE-NEXT: fcvt s1, h1 771; NONEON-NOSVE-NEXT: csetm w8, mi 772; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 773; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 774; NONEON-NOSVE-NEXT: fcmp s1, s0 775; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 776; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 777; NONEON-NOSVE-NEXT: fcvt s0, h0 778; NONEON-NOSVE-NEXT: fcvt s1, h1 779; NONEON-NOSVE-NEXT: csetm w8, mi 780; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 781; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 782; NONEON-NOSVE-NEXT: fcmp s1, s0 783; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 784; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 785; NONEON-NOSVE-NEXT: fcvt s0, h0 786; NONEON-NOSVE-NEXT: fcvt s1, h1 787; NONEON-NOSVE-NEXT: csetm w8, mi 788; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 789; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 790; NONEON-NOSVE-NEXT: fcmp s1, s0 791; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 792; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 793; NONEON-NOSVE-NEXT: fcvt s0, h0 794; NONEON-NOSVE-NEXT: fcvt s1, h1 795; NONEON-NOSVE-NEXT: csetm w8, mi 796; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 797; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 798; NONEON-NOSVE-NEXT: fcmp s1, s0 799; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 800; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 801; NONEON-NOSVE-NEXT: fcvt s0, h0 802; NONEON-NOSVE-NEXT: fcvt s1, h1 803; NONEON-NOSVE-NEXT: csetm w8, mi 804; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 805; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 806; NONEON-NOSVE-NEXT: fcmp s1, s0 807; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 808; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 809; NONEON-NOSVE-NEXT: fcvt s0, h0 810; NONEON-NOSVE-NEXT: fcvt s1, h1 811; NONEON-NOSVE-NEXT: csetm w8, mi 812; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 813; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 814; NONEON-NOSVE-NEXT: fcmp s1, s0 815; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 816; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 817; NONEON-NOSVE-NEXT: fcvt s0, h0 818; NONEON-NOSVE-NEXT: fcvt s1, h1 819; NONEON-NOSVE-NEXT: csetm w8, mi 820; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 821; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 822; NONEON-NOSVE-NEXT: fcmp s1, s0 823; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 824; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 825; NONEON-NOSVE-NEXT: fcvt s0, h0 826; NONEON-NOSVE-NEXT: fcvt s1, h1 827; NONEON-NOSVE-NEXT: csetm w8, mi 828; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 829; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 830; NONEON-NOSVE-NEXT: fcmp s1, s0 831; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 832; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 833; NONEON-NOSVE-NEXT: fcvt s0, h0 834; NONEON-NOSVE-NEXT: fcvt s1, h1 835; NONEON-NOSVE-NEXT: csetm w8, mi 836; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 837; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 838; NONEON-NOSVE-NEXT: fcmp s1, s0 839; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 840; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 841; NONEON-NOSVE-NEXT: fcvt s0, h0 842; NONEON-NOSVE-NEXT: fcvt s1, h1 843; NONEON-NOSVE-NEXT: csetm w8, mi 844; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 845; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 846; NONEON-NOSVE-NEXT: fcmp s1, s0 847; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 848; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 849; NONEON-NOSVE-NEXT: fcvt s0, h0 850; NONEON-NOSVE-NEXT: fcvt s1, h1 851; NONEON-NOSVE-NEXT: csetm w8, mi 852; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 853; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 854; NONEON-NOSVE-NEXT: fcmp s1, s0 855; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 856; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 857; NONEON-NOSVE-NEXT: fcvt s0, h0 858; NONEON-NOSVE-NEXT: fcvt s1, h1 859; NONEON-NOSVE-NEXT: csetm w8, mi 860; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 861; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 862; NONEON-NOSVE-NEXT: fcmp s1, s0 863; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 864; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 865; NONEON-NOSVE-NEXT: fcvt s0, h0 866; NONEON-NOSVE-NEXT: fcvt s1, h1 867; NONEON-NOSVE-NEXT: csetm w8, mi 868; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 869; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 870; NONEON-NOSVE-NEXT: fcmp s1, s0 871; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 872; NONEON-NOSVE-NEXT: ldr h1, [sp] 873; NONEON-NOSVE-NEXT: fcvt s0, h0 874; NONEON-NOSVE-NEXT: fcvt s1, h1 875; NONEON-NOSVE-NEXT: csetm w8, mi 876; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 877; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 878; NONEON-NOSVE-NEXT: fcmp s1, s0 879; NONEON-NOSVE-NEXT: csetm w8, mi 880; NONEON-NOSVE-NEXT: csinv w8, w8, wzr, le 881; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 882; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 883; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 884; NONEON-NOSVE-NEXT: add sp, sp, #96 885; NONEON-NOSVE-NEXT: ret 886 %op1 = load <16 x half>, ptr %a 887 %op2 = load <16 x half>, ptr %b 888 %cmp = fcmp one <16 x half> %op1, %op2 889 %sext = sext <16 x i1> %cmp to <16 x i16> 890 store <16 x i16> %sext, ptr %c 891 ret void 892} 893 894; 895; FCMP UNE 896; 897 898define void @fcmp_une_v16f16(ptr %a, ptr %b, ptr %c) { 899; CHECK-LABEL: fcmp_une_v16f16: 900; CHECK: // %bb.0: 901; CHECK-NEXT: ldp q0, q3, [x1] 902; CHECK-NEXT: ptrue p0.h, vl8 903; CHECK-NEXT: ldp q1, q2, [x0] 904; CHECK-NEXT: fcmne p1.h, p0/z, z1.h, z0.h 905; CHECK-NEXT: fcmne p0.h, p0/z, z2.h, z3.h 906; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 907; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 908; CHECK-NEXT: stp q0, q1, [x2] 909; CHECK-NEXT: ret 910; 911; NONEON-NOSVE-LABEL: fcmp_une_v16f16: 912; NONEON-NOSVE: // %bb.0: 913; NONEON-NOSVE-NEXT: sub sp, sp, #96 914; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 915; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 916; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 917; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 918; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 919; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 920; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 921; NONEON-NOSVE-NEXT: fcvt s0, h0 922; NONEON-NOSVE-NEXT: fcvt s1, h1 923; NONEON-NOSVE-NEXT: fcmp s1, s0 924; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 925; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 926; NONEON-NOSVE-NEXT: fcvt s0, h0 927; NONEON-NOSVE-NEXT: fcvt s1, h1 928; NONEON-NOSVE-NEXT: csetm w8, ne 929; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 930; NONEON-NOSVE-NEXT: fcmp s1, s0 931; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 932; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 933; NONEON-NOSVE-NEXT: fcvt s0, h0 934; NONEON-NOSVE-NEXT: fcvt s1, h1 935; NONEON-NOSVE-NEXT: csetm w8, ne 936; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 937; NONEON-NOSVE-NEXT: fcmp s1, s0 938; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 939; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 940; NONEON-NOSVE-NEXT: fcvt s0, h0 941; NONEON-NOSVE-NEXT: fcvt s1, h1 942; NONEON-NOSVE-NEXT: csetm w8, ne 943; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 944; NONEON-NOSVE-NEXT: fcmp s1, s0 945; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 946; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 947; NONEON-NOSVE-NEXT: fcvt s0, h0 948; NONEON-NOSVE-NEXT: fcvt s1, h1 949; NONEON-NOSVE-NEXT: csetm w8, ne 950; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 951; NONEON-NOSVE-NEXT: fcmp s1, s0 952; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 953; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 954; NONEON-NOSVE-NEXT: fcvt s0, h0 955; NONEON-NOSVE-NEXT: fcvt s1, h1 956; NONEON-NOSVE-NEXT: csetm w8, ne 957; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 958; NONEON-NOSVE-NEXT: fcmp s1, s0 959; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 960; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 961; NONEON-NOSVE-NEXT: fcvt s0, h0 962; NONEON-NOSVE-NEXT: fcvt s1, h1 963; NONEON-NOSVE-NEXT: csetm w8, ne 964; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 965; NONEON-NOSVE-NEXT: fcmp s1, s0 966; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 967; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 968; NONEON-NOSVE-NEXT: fcvt s0, h0 969; NONEON-NOSVE-NEXT: fcvt s1, h1 970; NONEON-NOSVE-NEXT: csetm w8, ne 971; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 972; NONEON-NOSVE-NEXT: fcmp s1, s0 973; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 974; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 975; NONEON-NOSVE-NEXT: fcvt s0, h0 976; NONEON-NOSVE-NEXT: fcvt s1, h1 977; NONEON-NOSVE-NEXT: csetm w8, ne 978; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 979; NONEON-NOSVE-NEXT: fcmp s1, s0 980; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 981; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 982; NONEON-NOSVE-NEXT: fcvt s0, h0 983; NONEON-NOSVE-NEXT: fcvt s1, h1 984; NONEON-NOSVE-NEXT: csetm w8, ne 985; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 986; NONEON-NOSVE-NEXT: fcmp s1, s0 987; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 988; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 989; NONEON-NOSVE-NEXT: fcvt s0, h0 990; NONEON-NOSVE-NEXT: fcvt s1, h1 991; NONEON-NOSVE-NEXT: csetm w8, ne 992; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 993; NONEON-NOSVE-NEXT: fcmp s1, s0 994; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 995; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 996; NONEON-NOSVE-NEXT: fcvt s0, h0 997; NONEON-NOSVE-NEXT: fcvt s1, h1 998; NONEON-NOSVE-NEXT: csetm w8, ne 999; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1000; NONEON-NOSVE-NEXT: fcmp s1, s0 1001; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1002; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1003; NONEON-NOSVE-NEXT: fcvt s0, h0 1004; NONEON-NOSVE-NEXT: fcvt s1, h1 1005; NONEON-NOSVE-NEXT: csetm w8, ne 1006; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1007; NONEON-NOSVE-NEXT: fcmp s1, s0 1008; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1009; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1010; NONEON-NOSVE-NEXT: fcvt s0, h0 1011; NONEON-NOSVE-NEXT: fcvt s1, h1 1012; NONEON-NOSVE-NEXT: csetm w8, ne 1013; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1014; NONEON-NOSVE-NEXT: fcmp s1, s0 1015; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1016; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1017; NONEON-NOSVE-NEXT: fcvt s0, h0 1018; NONEON-NOSVE-NEXT: fcvt s1, h1 1019; NONEON-NOSVE-NEXT: csetm w8, ne 1020; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1021; NONEON-NOSVE-NEXT: fcmp s1, s0 1022; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1023; NONEON-NOSVE-NEXT: ldr h1, [sp] 1024; NONEON-NOSVE-NEXT: fcvt s0, h0 1025; NONEON-NOSVE-NEXT: fcvt s1, h1 1026; NONEON-NOSVE-NEXT: csetm w8, ne 1027; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1028; NONEON-NOSVE-NEXT: fcmp s1, s0 1029; NONEON-NOSVE-NEXT: csetm w8, ne 1030; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1031; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1032; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1033; NONEON-NOSVE-NEXT: add sp, sp, #96 1034; NONEON-NOSVE-NEXT: ret 1035 %op1 = load <16 x half>, ptr %a 1036 %op2 = load <16 x half>, ptr %b 1037 %cmp = fcmp une <16 x half> %op1, %op2 1038 %sext = sext <16 x i1> %cmp to <16 x i16> 1039 store <16 x i16> %sext, ptr %c 1040 ret void 1041} 1042 1043; 1044; FCMP OGT 1045; 1046 1047define void @fcmp_ogt_v16f16(ptr %a, ptr %b, ptr %c) { 1048; CHECK-LABEL: fcmp_ogt_v16f16: 1049; CHECK: // %bb.0: 1050; CHECK-NEXT: ldp q0, q3, [x1] 1051; CHECK-NEXT: ptrue p0.h, vl8 1052; CHECK-NEXT: ldp q1, q2, [x0] 1053; CHECK-NEXT: fcmgt p1.h, p0/z, z1.h, z0.h 1054; CHECK-NEXT: fcmgt p0.h, p0/z, z2.h, z3.h 1055; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 1056; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 1057; CHECK-NEXT: stp q0, q1, [x2] 1058; CHECK-NEXT: ret 1059; 1060; NONEON-NOSVE-LABEL: fcmp_ogt_v16f16: 1061; NONEON-NOSVE: // %bb.0: 1062; NONEON-NOSVE-NEXT: sub sp, sp, #96 1063; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1064; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1065; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1066; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1067; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1068; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1069; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1070; NONEON-NOSVE-NEXT: fcvt s0, h0 1071; NONEON-NOSVE-NEXT: fcvt s1, h1 1072; NONEON-NOSVE-NEXT: fcmp s1, s0 1073; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1074; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1075; NONEON-NOSVE-NEXT: fcvt s0, h0 1076; NONEON-NOSVE-NEXT: fcvt s1, h1 1077; NONEON-NOSVE-NEXT: csetm w8, gt 1078; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1079; NONEON-NOSVE-NEXT: fcmp s1, s0 1080; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1081; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1082; NONEON-NOSVE-NEXT: fcvt s0, h0 1083; NONEON-NOSVE-NEXT: fcvt s1, h1 1084; NONEON-NOSVE-NEXT: csetm w8, gt 1085; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1086; NONEON-NOSVE-NEXT: fcmp s1, s0 1087; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1088; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1089; NONEON-NOSVE-NEXT: fcvt s0, h0 1090; NONEON-NOSVE-NEXT: fcvt s1, h1 1091; NONEON-NOSVE-NEXT: csetm w8, gt 1092; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1093; NONEON-NOSVE-NEXT: fcmp s1, s0 1094; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1095; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1096; NONEON-NOSVE-NEXT: fcvt s0, h0 1097; NONEON-NOSVE-NEXT: fcvt s1, h1 1098; NONEON-NOSVE-NEXT: csetm w8, gt 1099; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1100; NONEON-NOSVE-NEXT: fcmp s1, s0 1101; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1102; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1103; NONEON-NOSVE-NEXT: fcvt s0, h0 1104; NONEON-NOSVE-NEXT: fcvt s1, h1 1105; NONEON-NOSVE-NEXT: csetm w8, gt 1106; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1107; NONEON-NOSVE-NEXT: fcmp s1, s0 1108; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1109; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1110; NONEON-NOSVE-NEXT: fcvt s0, h0 1111; NONEON-NOSVE-NEXT: fcvt s1, h1 1112; NONEON-NOSVE-NEXT: csetm w8, gt 1113; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1114; NONEON-NOSVE-NEXT: fcmp s1, s0 1115; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1116; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1117; NONEON-NOSVE-NEXT: fcvt s0, h0 1118; NONEON-NOSVE-NEXT: fcvt s1, h1 1119; NONEON-NOSVE-NEXT: csetm w8, gt 1120; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1121; NONEON-NOSVE-NEXT: fcmp s1, s0 1122; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1123; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1124; NONEON-NOSVE-NEXT: fcvt s0, h0 1125; NONEON-NOSVE-NEXT: fcvt s1, h1 1126; NONEON-NOSVE-NEXT: csetm w8, gt 1127; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1128; NONEON-NOSVE-NEXT: fcmp s1, s0 1129; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1130; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1131; NONEON-NOSVE-NEXT: fcvt s0, h0 1132; NONEON-NOSVE-NEXT: fcvt s1, h1 1133; NONEON-NOSVE-NEXT: csetm w8, gt 1134; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1135; NONEON-NOSVE-NEXT: fcmp s1, s0 1136; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1137; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1138; NONEON-NOSVE-NEXT: fcvt s0, h0 1139; NONEON-NOSVE-NEXT: fcvt s1, h1 1140; NONEON-NOSVE-NEXT: csetm w8, gt 1141; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1142; NONEON-NOSVE-NEXT: fcmp s1, s0 1143; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1144; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1145; NONEON-NOSVE-NEXT: fcvt s0, h0 1146; NONEON-NOSVE-NEXT: fcvt s1, h1 1147; NONEON-NOSVE-NEXT: csetm w8, gt 1148; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1149; NONEON-NOSVE-NEXT: fcmp s1, s0 1150; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1151; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1152; NONEON-NOSVE-NEXT: fcvt s0, h0 1153; NONEON-NOSVE-NEXT: fcvt s1, h1 1154; NONEON-NOSVE-NEXT: csetm w8, gt 1155; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1156; NONEON-NOSVE-NEXT: fcmp s1, s0 1157; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1158; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1159; NONEON-NOSVE-NEXT: fcvt s0, h0 1160; NONEON-NOSVE-NEXT: fcvt s1, h1 1161; NONEON-NOSVE-NEXT: csetm w8, gt 1162; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1163; NONEON-NOSVE-NEXT: fcmp s1, s0 1164; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1165; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1166; NONEON-NOSVE-NEXT: fcvt s0, h0 1167; NONEON-NOSVE-NEXT: fcvt s1, h1 1168; NONEON-NOSVE-NEXT: csetm w8, gt 1169; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1170; NONEON-NOSVE-NEXT: fcmp s1, s0 1171; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1172; NONEON-NOSVE-NEXT: ldr h1, [sp] 1173; NONEON-NOSVE-NEXT: fcvt s0, h0 1174; NONEON-NOSVE-NEXT: fcvt s1, h1 1175; NONEON-NOSVE-NEXT: csetm w8, gt 1176; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1177; NONEON-NOSVE-NEXT: fcmp s1, s0 1178; NONEON-NOSVE-NEXT: csetm w8, gt 1179; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1180; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1181; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1182; NONEON-NOSVE-NEXT: add sp, sp, #96 1183; NONEON-NOSVE-NEXT: ret 1184 %op1 = load <16 x half>, ptr %a 1185 %op2 = load <16 x half>, ptr %b 1186 %cmp = fcmp ogt <16 x half> %op1, %op2 1187 %sext = sext <16 x i1> %cmp to <16 x i16> 1188 store <16 x i16> %sext, ptr %c 1189 ret void 1190} 1191 1192; 1193; FCMP UGT 1194; 1195 1196define void @fcmp_ugt_v16f16(ptr %a, ptr %b, ptr %c) { 1197; CHECK-LABEL: fcmp_ugt_v16f16: 1198; CHECK: // %bb.0: 1199; CHECK-NEXT: ldp q0, q3, [x1] 1200; CHECK-NEXT: ptrue p0.h, vl8 1201; CHECK-NEXT: ldp q1, q2, [x0] 1202; CHECK-NEXT: fcmge p1.h, p0/z, z0.h, z1.h 1203; CHECK-NEXT: fcmge p0.h, p0/z, z3.h, z2.h 1204; CHECK-NEXT: mov z0.h, #-1 // =0xffffffffffffffff 1205; CHECK-NEXT: mov z1.h, p1/z, #-1 // =0xffffffffffffffff 1206; CHECK-NEXT: mov z2.h, p0/z, #-1 // =0xffffffffffffffff 1207; CHECK-NEXT: eor z1.d, z1.d, z0.d 1208; CHECK-NEXT: eor z0.d, z2.d, z0.d 1209; CHECK-NEXT: stp q1, q0, [x2] 1210; CHECK-NEXT: ret 1211; 1212; NONEON-NOSVE-LABEL: fcmp_ugt_v16f16: 1213; NONEON-NOSVE: // %bb.0: 1214; NONEON-NOSVE-NEXT: sub sp, sp, #96 1215; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1216; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1217; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1218; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1219; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1220; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1221; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1222; NONEON-NOSVE-NEXT: fcvt s0, h0 1223; NONEON-NOSVE-NEXT: fcvt s1, h1 1224; NONEON-NOSVE-NEXT: fcmp s1, s0 1225; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1226; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1227; NONEON-NOSVE-NEXT: fcvt s0, h0 1228; NONEON-NOSVE-NEXT: fcvt s1, h1 1229; NONEON-NOSVE-NEXT: csetm w8, hi 1230; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1231; NONEON-NOSVE-NEXT: fcmp s1, s0 1232; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1233; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1234; NONEON-NOSVE-NEXT: fcvt s0, h0 1235; NONEON-NOSVE-NEXT: fcvt s1, h1 1236; NONEON-NOSVE-NEXT: csetm w8, hi 1237; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1238; NONEON-NOSVE-NEXT: fcmp s1, s0 1239; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1240; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1241; NONEON-NOSVE-NEXT: fcvt s0, h0 1242; NONEON-NOSVE-NEXT: fcvt s1, h1 1243; NONEON-NOSVE-NEXT: csetm w8, hi 1244; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1245; NONEON-NOSVE-NEXT: fcmp s1, s0 1246; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1247; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1248; NONEON-NOSVE-NEXT: fcvt s0, h0 1249; NONEON-NOSVE-NEXT: fcvt s1, h1 1250; NONEON-NOSVE-NEXT: csetm w8, hi 1251; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1252; NONEON-NOSVE-NEXT: fcmp s1, s0 1253; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1254; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1255; NONEON-NOSVE-NEXT: fcvt s0, h0 1256; NONEON-NOSVE-NEXT: fcvt s1, h1 1257; NONEON-NOSVE-NEXT: csetm w8, hi 1258; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1259; NONEON-NOSVE-NEXT: fcmp s1, s0 1260; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1261; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1262; NONEON-NOSVE-NEXT: fcvt s0, h0 1263; NONEON-NOSVE-NEXT: fcvt s1, h1 1264; NONEON-NOSVE-NEXT: csetm w8, hi 1265; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1266; NONEON-NOSVE-NEXT: fcmp s1, s0 1267; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1268; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1269; NONEON-NOSVE-NEXT: fcvt s0, h0 1270; NONEON-NOSVE-NEXT: fcvt s1, h1 1271; NONEON-NOSVE-NEXT: csetm w8, hi 1272; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1273; NONEON-NOSVE-NEXT: fcmp s1, s0 1274; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1275; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1276; NONEON-NOSVE-NEXT: fcvt s0, h0 1277; NONEON-NOSVE-NEXT: fcvt s1, h1 1278; NONEON-NOSVE-NEXT: csetm w8, hi 1279; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1280; NONEON-NOSVE-NEXT: fcmp s1, s0 1281; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1282; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1283; NONEON-NOSVE-NEXT: fcvt s0, h0 1284; NONEON-NOSVE-NEXT: fcvt s1, h1 1285; NONEON-NOSVE-NEXT: csetm w8, hi 1286; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1287; NONEON-NOSVE-NEXT: fcmp s1, s0 1288; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1289; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1290; NONEON-NOSVE-NEXT: fcvt s0, h0 1291; NONEON-NOSVE-NEXT: fcvt s1, h1 1292; NONEON-NOSVE-NEXT: csetm w8, hi 1293; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1294; NONEON-NOSVE-NEXT: fcmp s1, s0 1295; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1296; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1297; NONEON-NOSVE-NEXT: fcvt s0, h0 1298; NONEON-NOSVE-NEXT: fcvt s1, h1 1299; NONEON-NOSVE-NEXT: csetm w8, hi 1300; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1301; NONEON-NOSVE-NEXT: fcmp s1, s0 1302; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1303; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1304; NONEON-NOSVE-NEXT: fcvt s0, h0 1305; NONEON-NOSVE-NEXT: fcvt s1, h1 1306; NONEON-NOSVE-NEXT: csetm w8, hi 1307; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1308; NONEON-NOSVE-NEXT: fcmp s1, s0 1309; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1310; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1311; NONEON-NOSVE-NEXT: fcvt s0, h0 1312; NONEON-NOSVE-NEXT: fcvt s1, h1 1313; NONEON-NOSVE-NEXT: csetm w8, hi 1314; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1315; NONEON-NOSVE-NEXT: fcmp s1, s0 1316; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1317; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1318; NONEON-NOSVE-NEXT: fcvt s0, h0 1319; NONEON-NOSVE-NEXT: fcvt s1, h1 1320; NONEON-NOSVE-NEXT: csetm w8, hi 1321; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1322; NONEON-NOSVE-NEXT: fcmp s1, s0 1323; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1324; NONEON-NOSVE-NEXT: ldr h1, [sp] 1325; NONEON-NOSVE-NEXT: fcvt s0, h0 1326; NONEON-NOSVE-NEXT: fcvt s1, h1 1327; NONEON-NOSVE-NEXT: csetm w8, hi 1328; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1329; NONEON-NOSVE-NEXT: fcmp s1, s0 1330; NONEON-NOSVE-NEXT: csetm w8, hi 1331; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1332; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1333; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1334; NONEON-NOSVE-NEXT: add sp, sp, #96 1335; NONEON-NOSVE-NEXT: ret 1336 %op1 = load <16 x half>, ptr %a 1337 %op2 = load <16 x half>, ptr %b 1338 %cmp = fcmp ugt <16 x half> %op1, %op2 1339 %sext = sext <16 x i1> %cmp to <16 x i16> 1340 store <16 x i16> %sext, ptr %c 1341 ret void 1342} 1343 1344; 1345; FCMP OLT 1346; 1347 1348define void @fcmp_olt_v16f16(ptr %a, ptr %b, ptr %c) { 1349; CHECK-LABEL: fcmp_olt_v16f16: 1350; CHECK: // %bb.0: 1351; CHECK-NEXT: ldp q0, q3, [x1] 1352; CHECK-NEXT: ptrue p0.h, vl8 1353; CHECK-NEXT: ldp q1, q2, [x0] 1354; CHECK-NEXT: fcmgt p1.h, p0/z, z0.h, z1.h 1355; CHECK-NEXT: fcmgt p0.h, p0/z, z3.h, z2.h 1356; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 1357; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 1358; CHECK-NEXT: stp q0, q1, [x2] 1359; CHECK-NEXT: ret 1360; 1361; NONEON-NOSVE-LABEL: fcmp_olt_v16f16: 1362; NONEON-NOSVE: // %bb.0: 1363; NONEON-NOSVE-NEXT: sub sp, sp, #96 1364; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1365; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1366; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1367; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1368; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1369; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1370; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1371; NONEON-NOSVE-NEXT: fcvt s0, h0 1372; NONEON-NOSVE-NEXT: fcvt s1, h1 1373; NONEON-NOSVE-NEXT: fcmp s1, s0 1374; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1375; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1376; NONEON-NOSVE-NEXT: fcvt s0, h0 1377; NONEON-NOSVE-NEXT: fcvt s1, h1 1378; NONEON-NOSVE-NEXT: csetm w8, mi 1379; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1380; NONEON-NOSVE-NEXT: fcmp s1, s0 1381; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1382; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1383; NONEON-NOSVE-NEXT: fcvt s0, h0 1384; NONEON-NOSVE-NEXT: fcvt s1, h1 1385; NONEON-NOSVE-NEXT: csetm w8, mi 1386; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1387; NONEON-NOSVE-NEXT: fcmp s1, s0 1388; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1389; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1390; NONEON-NOSVE-NEXT: fcvt s0, h0 1391; NONEON-NOSVE-NEXT: fcvt s1, h1 1392; NONEON-NOSVE-NEXT: csetm w8, mi 1393; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1394; NONEON-NOSVE-NEXT: fcmp s1, s0 1395; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1396; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1397; NONEON-NOSVE-NEXT: fcvt s0, h0 1398; NONEON-NOSVE-NEXT: fcvt s1, h1 1399; NONEON-NOSVE-NEXT: csetm w8, mi 1400; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1401; NONEON-NOSVE-NEXT: fcmp s1, s0 1402; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1403; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1404; NONEON-NOSVE-NEXT: fcvt s0, h0 1405; NONEON-NOSVE-NEXT: fcvt s1, h1 1406; NONEON-NOSVE-NEXT: csetm w8, mi 1407; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1408; NONEON-NOSVE-NEXT: fcmp s1, s0 1409; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1410; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1411; NONEON-NOSVE-NEXT: fcvt s0, h0 1412; NONEON-NOSVE-NEXT: fcvt s1, h1 1413; NONEON-NOSVE-NEXT: csetm w8, mi 1414; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1415; NONEON-NOSVE-NEXT: fcmp s1, s0 1416; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1417; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1418; NONEON-NOSVE-NEXT: fcvt s0, h0 1419; NONEON-NOSVE-NEXT: fcvt s1, h1 1420; NONEON-NOSVE-NEXT: csetm w8, mi 1421; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1422; NONEON-NOSVE-NEXT: fcmp s1, s0 1423; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1424; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1425; NONEON-NOSVE-NEXT: fcvt s0, h0 1426; NONEON-NOSVE-NEXT: fcvt s1, h1 1427; NONEON-NOSVE-NEXT: csetm w8, mi 1428; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1429; NONEON-NOSVE-NEXT: fcmp s1, s0 1430; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1431; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1432; NONEON-NOSVE-NEXT: fcvt s0, h0 1433; NONEON-NOSVE-NEXT: fcvt s1, h1 1434; NONEON-NOSVE-NEXT: csetm w8, mi 1435; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1436; NONEON-NOSVE-NEXT: fcmp s1, s0 1437; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1438; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1439; NONEON-NOSVE-NEXT: fcvt s0, h0 1440; NONEON-NOSVE-NEXT: fcvt s1, h1 1441; NONEON-NOSVE-NEXT: csetm w8, mi 1442; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1443; NONEON-NOSVE-NEXT: fcmp s1, s0 1444; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1445; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1446; NONEON-NOSVE-NEXT: fcvt s0, h0 1447; NONEON-NOSVE-NEXT: fcvt s1, h1 1448; NONEON-NOSVE-NEXT: csetm w8, mi 1449; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1450; NONEON-NOSVE-NEXT: fcmp s1, s0 1451; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1452; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1453; NONEON-NOSVE-NEXT: fcvt s0, h0 1454; NONEON-NOSVE-NEXT: fcvt s1, h1 1455; NONEON-NOSVE-NEXT: csetm w8, mi 1456; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1457; NONEON-NOSVE-NEXT: fcmp s1, s0 1458; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1459; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1460; NONEON-NOSVE-NEXT: fcvt s0, h0 1461; NONEON-NOSVE-NEXT: fcvt s1, h1 1462; NONEON-NOSVE-NEXT: csetm w8, mi 1463; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1464; NONEON-NOSVE-NEXT: fcmp s1, s0 1465; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1466; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1467; NONEON-NOSVE-NEXT: fcvt s0, h0 1468; NONEON-NOSVE-NEXT: fcvt s1, h1 1469; NONEON-NOSVE-NEXT: csetm w8, mi 1470; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1471; NONEON-NOSVE-NEXT: fcmp s1, s0 1472; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1473; NONEON-NOSVE-NEXT: ldr h1, [sp] 1474; NONEON-NOSVE-NEXT: fcvt s0, h0 1475; NONEON-NOSVE-NEXT: fcvt s1, h1 1476; NONEON-NOSVE-NEXT: csetm w8, mi 1477; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1478; NONEON-NOSVE-NEXT: fcmp s1, s0 1479; NONEON-NOSVE-NEXT: csetm w8, mi 1480; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1481; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1482; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1483; NONEON-NOSVE-NEXT: add sp, sp, #96 1484; NONEON-NOSVE-NEXT: ret 1485 %op1 = load <16 x half>, ptr %a 1486 %op2 = load <16 x half>, ptr %b 1487 %cmp = fcmp olt <16 x half> %op1, %op2 1488 %sext = sext <16 x i1> %cmp to <16 x i16> 1489 store <16 x i16> %sext, ptr %c 1490 ret void 1491} 1492 1493; 1494; FCMP ULT 1495; 1496 1497define void @fcmp_ult_v16f16(ptr %a, ptr %b, ptr %c) { 1498; CHECK-LABEL: fcmp_ult_v16f16: 1499; CHECK: // %bb.0: 1500; CHECK-NEXT: ldp q0, q3, [x1] 1501; CHECK-NEXT: ptrue p0.h, vl8 1502; CHECK-NEXT: ldp q1, q2, [x0] 1503; CHECK-NEXT: fcmge p1.h, p0/z, z1.h, z0.h 1504; CHECK-NEXT: fcmge p0.h, p0/z, z2.h, z3.h 1505; CHECK-NEXT: mov z0.h, #-1 // =0xffffffffffffffff 1506; CHECK-NEXT: mov z1.h, p1/z, #-1 // =0xffffffffffffffff 1507; CHECK-NEXT: mov z2.h, p0/z, #-1 // =0xffffffffffffffff 1508; CHECK-NEXT: eor z1.d, z1.d, z0.d 1509; CHECK-NEXT: eor z0.d, z2.d, z0.d 1510; CHECK-NEXT: stp q1, q0, [x2] 1511; CHECK-NEXT: ret 1512; 1513; NONEON-NOSVE-LABEL: fcmp_ult_v16f16: 1514; NONEON-NOSVE: // %bb.0: 1515; NONEON-NOSVE-NEXT: sub sp, sp, #96 1516; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1517; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1518; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1519; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1520; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1521; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1522; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1523; NONEON-NOSVE-NEXT: fcvt s0, h0 1524; NONEON-NOSVE-NEXT: fcvt s1, h1 1525; NONEON-NOSVE-NEXT: fcmp s1, s0 1526; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1527; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1528; NONEON-NOSVE-NEXT: fcvt s0, h0 1529; NONEON-NOSVE-NEXT: fcvt s1, h1 1530; NONEON-NOSVE-NEXT: csetm w8, lt 1531; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1532; NONEON-NOSVE-NEXT: fcmp s1, s0 1533; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1534; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1535; NONEON-NOSVE-NEXT: fcvt s0, h0 1536; NONEON-NOSVE-NEXT: fcvt s1, h1 1537; NONEON-NOSVE-NEXT: csetm w8, lt 1538; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1539; NONEON-NOSVE-NEXT: fcmp s1, s0 1540; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1541; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1542; NONEON-NOSVE-NEXT: fcvt s0, h0 1543; NONEON-NOSVE-NEXT: fcvt s1, h1 1544; NONEON-NOSVE-NEXT: csetm w8, lt 1545; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1546; NONEON-NOSVE-NEXT: fcmp s1, s0 1547; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1548; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1549; NONEON-NOSVE-NEXT: fcvt s0, h0 1550; NONEON-NOSVE-NEXT: fcvt s1, h1 1551; NONEON-NOSVE-NEXT: csetm w8, lt 1552; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1553; NONEON-NOSVE-NEXT: fcmp s1, s0 1554; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1555; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1556; NONEON-NOSVE-NEXT: fcvt s0, h0 1557; NONEON-NOSVE-NEXT: fcvt s1, h1 1558; NONEON-NOSVE-NEXT: csetm w8, lt 1559; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1560; NONEON-NOSVE-NEXT: fcmp s1, s0 1561; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1562; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1563; NONEON-NOSVE-NEXT: fcvt s0, h0 1564; NONEON-NOSVE-NEXT: fcvt s1, h1 1565; NONEON-NOSVE-NEXT: csetm w8, lt 1566; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1567; NONEON-NOSVE-NEXT: fcmp s1, s0 1568; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1569; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1570; NONEON-NOSVE-NEXT: fcvt s0, h0 1571; NONEON-NOSVE-NEXT: fcvt s1, h1 1572; NONEON-NOSVE-NEXT: csetm w8, lt 1573; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1574; NONEON-NOSVE-NEXT: fcmp s1, s0 1575; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1576; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1577; NONEON-NOSVE-NEXT: fcvt s0, h0 1578; NONEON-NOSVE-NEXT: fcvt s1, h1 1579; NONEON-NOSVE-NEXT: csetm w8, lt 1580; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1581; NONEON-NOSVE-NEXT: fcmp s1, s0 1582; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1583; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1584; NONEON-NOSVE-NEXT: fcvt s0, h0 1585; NONEON-NOSVE-NEXT: fcvt s1, h1 1586; NONEON-NOSVE-NEXT: csetm w8, lt 1587; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1588; NONEON-NOSVE-NEXT: fcmp s1, s0 1589; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1590; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1591; NONEON-NOSVE-NEXT: fcvt s0, h0 1592; NONEON-NOSVE-NEXT: fcvt s1, h1 1593; NONEON-NOSVE-NEXT: csetm w8, lt 1594; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1595; NONEON-NOSVE-NEXT: fcmp s1, s0 1596; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1597; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1598; NONEON-NOSVE-NEXT: fcvt s0, h0 1599; NONEON-NOSVE-NEXT: fcvt s1, h1 1600; NONEON-NOSVE-NEXT: csetm w8, lt 1601; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1602; NONEON-NOSVE-NEXT: fcmp s1, s0 1603; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1604; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1605; NONEON-NOSVE-NEXT: fcvt s0, h0 1606; NONEON-NOSVE-NEXT: fcvt s1, h1 1607; NONEON-NOSVE-NEXT: csetm w8, lt 1608; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1609; NONEON-NOSVE-NEXT: fcmp s1, s0 1610; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1611; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1612; NONEON-NOSVE-NEXT: fcvt s0, h0 1613; NONEON-NOSVE-NEXT: fcvt s1, h1 1614; NONEON-NOSVE-NEXT: csetm w8, lt 1615; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1616; NONEON-NOSVE-NEXT: fcmp s1, s0 1617; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1618; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1619; NONEON-NOSVE-NEXT: fcvt s0, h0 1620; NONEON-NOSVE-NEXT: fcvt s1, h1 1621; NONEON-NOSVE-NEXT: csetm w8, lt 1622; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1623; NONEON-NOSVE-NEXT: fcmp s1, s0 1624; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1625; NONEON-NOSVE-NEXT: ldr h1, [sp] 1626; NONEON-NOSVE-NEXT: fcvt s0, h0 1627; NONEON-NOSVE-NEXT: fcvt s1, h1 1628; NONEON-NOSVE-NEXT: csetm w8, lt 1629; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1630; NONEON-NOSVE-NEXT: fcmp s1, s0 1631; NONEON-NOSVE-NEXT: csetm w8, lt 1632; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1633; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1634; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1635; NONEON-NOSVE-NEXT: add sp, sp, #96 1636; NONEON-NOSVE-NEXT: ret 1637 %op1 = load <16 x half>, ptr %a 1638 %op2 = load <16 x half>, ptr %b 1639 %cmp = fcmp ult <16 x half> %op1, %op2 1640 %sext = sext <16 x i1> %cmp to <16 x i16> 1641 store <16 x i16> %sext, ptr %c 1642 ret void 1643} 1644 1645; 1646; FCMP OGE 1647; 1648 1649define void @fcmp_oge_v16f16(ptr %a, ptr %b, ptr %c) { 1650; CHECK-LABEL: fcmp_oge_v16f16: 1651; CHECK: // %bb.0: 1652; CHECK-NEXT: ldp q0, q3, [x1] 1653; CHECK-NEXT: ptrue p0.h, vl8 1654; CHECK-NEXT: ldp q1, q2, [x0] 1655; CHECK-NEXT: fcmge p1.h, p0/z, z1.h, z0.h 1656; CHECK-NEXT: fcmge p0.h, p0/z, z2.h, z3.h 1657; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 1658; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 1659; CHECK-NEXT: stp q0, q1, [x2] 1660; CHECK-NEXT: ret 1661; 1662; NONEON-NOSVE-LABEL: fcmp_oge_v16f16: 1663; NONEON-NOSVE: // %bb.0: 1664; NONEON-NOSVE-NEXT: sub sp, sp, #96 1665; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1666; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1667; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1668; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1669; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1670; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1671; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1672; NONEON-NOSVE-NEXT: fcvt s0, h0 1673; NONEON-NOSVE-NEXT: fcvt s1, h1 1674; NONEON-NOSVE-NEXT: fcmp s1, s0 1675; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1676; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1677; NONEON-NOSVE-NEXT: fcvt s0, h0 1678; NONEON-NOSVE-NEXT: fcvt s1, h1 1679; NONEON-NOSVE-NEXT: csetm w8, ge 1680; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1681; NONEON-NOSVE-NEXT: fcmp s1, s0 1682; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1683; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1684; NONEON-NOSVE-NEXT: fcvt s0, h0 1685; NONEON-NOSVE-NEXT: fcvt s1, h1 1686; NONEON-NOSVE-NEXT: csetm w8, ge 1687; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1688; NONEON-NOSVE-NEXT: fcmp s1, s0 1689; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1690; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1691; NONEON-NOSVE-NEXT: fcvt s0, h0 1692; NONEON-NOSVE-NEXT: fcvt s1, h1 1693; NONEON-NOSVE-NEXT: csetm w8, ge 1694; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1695; NONEON-NOSVE-NEXT: fcmp s1, s0 1696; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1697; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1698; NONEON-NOSVE-NEXT: fcvt s0, h0 1699; NONEON-NOSVE-NEXT: fcvt s1, h1 1700; NONEON-NOSVE-NEXT: csetm w8, ge 1701; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1702; NONEON-NOSVE-NEXT: fcmp s1, s0 1703; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1704; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1705; NONEON-NOSVE-NEXT: fcvt s0, h0 1706; NONEON-NOSVE-NEXT: fcvt s1, h1 1707; NONEON-NOSVE-NEXT: csetm w8, ge 1708; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1709; NONEON-NOSVE-NEXT: fcmp s1, s0 1710; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1711; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1712; NONEON-NOSVE-NEXT: fcvt s0, h0 1713; NONEON-NOSVE-NEXT: fcvt s1, h1 1714; NONEON-NOSVE-NEXT: csetm w8, ge 1715; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1716; NONEON-NOSVE-NEXT: fcmp s1, s0 1717; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1718; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1719; NONEON-NOSVE-NEXT: fcvt s0, h0 1720; NONEON-NOSVE-NEXT: fcvt s1, h1 1721; NONEON-NOSVE-NEXT: csetm w8, ge 1722; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1723; NONEON-NOSVE-NEXT: fcmp s1, s0 1724; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1725; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1726; NONEON-NOSVE-NEXT: fcvt s0, h0 1727; NONEON-NOSVE-NEXT: fcvt s1, h1 1728; NONEON-NOSVE-NEXT: csetm w8, ge 1729; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1730; NONEON-NOSVE-NEXT: fcmp s1, s0 1731; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1732; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1733; NONEON-NOSVE-NEXT: fcvt s0, h0 1734; NONEON-NOSVE-NEXT: fcvt s1, h1 1735; NONEON-NOSVE-NEXT: csetm w8, ge 1736; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1737; NONEON-NOSVE-NEXT: fcmp s1, s0 1738; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1739; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1740; NONEON-NOSVE-NEXT: fcvt s0, h0 1741; NONEON-NOSVE-NEXT: fcvt s1, h1 1742; NONEON-NOSVE-NEXT: csetm w8, ge 1743; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1744; NONEON-NOSVE-NEXT: fcmp s1, s0 1745; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1746; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1747; NONEON-NOSVE-NEXT: fcvt s0, h0 1748; NONEON-NOSVE-NEXT: fcvt s1, h1 1749; NONEON-NOSVE-NEXT: csetm w8, ge 1750; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1751; NONEON-NOSVE-NEXT: fcmp s1, s0 1752; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1753; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1754; NONEON-NOSVE-NEXT: fcvt s0, h0 1755; NONEON-NOSVE-NEXT: fcvt s1, h1 1756; NONEON-NOSVE-NEXT: csetm w8, ge 1757; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1758; NONEON-NOSVE-NEXT: fcmp s1, s0 1759; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1760; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1761; NONEON-NOSVE-NEXT: fcvt s0, h0 1762; NONEON-NOSVE-NEXT: fcvt s1, h1 1763; NONEON-NOSVE-NEXT: csetm w8, ge 1764; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1765; NONEON-NOSVE-NEXT: fcmp s1, s0 1766; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1767; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1768; NONEON-NOSVE-NEXT: fcvt s0, h0 1769; NONEON-NOSVE-NEXT: fcvt s1, h1 1770; NONEON-NOSVE-NEXT: csetm w8, ge 1771; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1772; NONEON-NOSVE-NEXT: fcmp s1, s0 1773; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1774; NONEON-NOSVE-NEXT: ldr h1, [sp] 1775; NONEON-NOSVE-NEXT: fcvt s0, h0 1776; NONEON-NOSVE-NEXT: fcvt s1, h1 1777; NONEON-NOSVE-NEXT: csetm w8, ge 1778; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1779; NONEON-NOSVE-NEXT: fcmp s1, s0 1780; NONEON-NOSVE-NEXT: csetm w8, ge 1781; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1782; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1783; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1784; NONEON-NOSVE-NEXT: add sp, sp, #96 1785; NONEON-NOSVE-NEXT: ret 1786 %op1 = load <16 x half>, ptr %a 1787 %op2 = load <16 x half>, ptr %b 1788 %cmp = fcmp oge <16 x half> %op1, %op2 1789 %sext = sext <16 x i1> %cmp to <16 x i16> 1790 store <16 x i16> %sext, ptr %c 1791 ret void 1792} 1793 1794; 1795; FCMP UGE 1796; 1797 1798define void @fcmp_uge_v16f16(ptr %a, ptr %b, ptr %c) { 1799; CHECK-LABEL: fcmp_uge_v16f16: 1800; CHECK: // %bb.0: 1801; CHECK-NEXT: ldp q0, q3, [x1] 1802; CHECK-NEXT: ptrue p0.h, vl8 1803; CHECK-NEXT: ldp q1, q2, [x0] 1804; CHECK-NEXT: fcmgt p1.h, p0/z, z0.h, z1.h 1805; CHECK-NEXT: fcmgt p0.h, p0/z, z3.h, z2.h 1806; CHECK-NEXT: mov z0.h, #-1 // =0xffffffffffffffff 1807; CHECK-NEXT: mov z1.h, p1/z, #-1 // =0xffffffffffffffff 1808; CHECK-NEXT: mov z2.h, p0/z, #-1 // =0xffffffffffffffff 1809; CHECK-NEXT: eor z1.d, z1.d, z0.d 1810; CHECK-NEXT: eor z0.d, z2.d, z0.d 1811; CHECK-NEXT: stp q1, q0, [x2] 1812; CHECK-NEXT: ret 1813; 1814; NONEON-NOSVE-LABEL: fcmp_uge_v16f16: 1815; NONEON-NOSVE: // %bb.0: 1816; NONEON-NOSVE-NEXT: sub sp, sp, #96 1817; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1818; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1819; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1820; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1821; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1822; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1823; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1824; NONEON-NOSVE-NEXT: fcvt s0, h0 1825; NONEON-NOSVE-NEXT: fcvt s1, h1 1826; NONEON-NOSVE-NEXT: fcmp s1, s0 1827; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1828; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1829; NONEON-NOSVE-NEXT: fcvt s0, h0 1830; NONEON-NOSVE-NEXT: fcvt s1, h1 1831; NONEON-NOSVE-NEXT: csetm w8, pl 1832; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1833; NONEON-NOSVE-NEXT: fcmp s1, s0 1834; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1835; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1836; NONEON-NOSVE-NEXT: fcvt s0, h0 1837; NONEON-NOSVE-NEXT: fcvt s1, h1 1838; NONEON-NOSVE-NEXT: csetm w8, pl 1839; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1840; NONEON-NOSVE-NEXT: fcmp s1, s0 1841; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1842; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1843; NONEON-NOSVE-NEXT: fcvt s0, h0 1844; NONEON-NOSVE-NEXT: fcvt s1, h1 1845; NONEON-NOSVE-NEXT: csetm w8, pl 1846; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1847; NONEON-NOSVE-NEXT: fcmp s1, s0 1848; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1849; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1850; NONEON-NOSVE-NEXT: fcvt s0, h0 1851; NONEON-NOSVE-NEXT: fcvt s1, h1 1852; NONEON-NOSVE-NEXT: csetm w8, pl 1853; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 1854; NONEON-NOSVE-NEXT: fcmp s1, s0 1855; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 1856; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 1857; NONEON-NOSVE-NEXT: fcvt s0, h0 1858; NONEON-NOSVE-NEXT: fcvt s1, h1 1859; NONEON-NOSVE-NEXT: csetm w8, pl 1860; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 1861; NONEON-NOSVE-NEXT: fcmp s1, s0 1862; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 1863; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 1864; NONEON-NOSVE-NEXT: fcvt s0, h0 1865; NONEON-NOSVE-NEXT: fcvt s1, h1 1866; NONEON-NOSVE-NEXT: csetm w8, pl 1867; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 1868; NONEON-NOSVE-NEXT: fcmp s1, s0 1869; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 1870; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 1871; NONEON-NOSVE-NEXT: fcvt s0, h0 1872; NONEON-NOSVE-NEXT: fcvt s1, h1 1873; NONEON-NOSVE-NEXT: csetm w8, pl 1874; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 1875; NONEON-NOSVE-NEXT: fcmp s1, s0 1876; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 1877; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 1878; NONEON-NOSVE-NEXT: fcvt s0, h0 1879; NONEON-NOSVE-NEXT: fcvt s1, h1 1880; NONEON-NOSVE-NEXT: csetm w8, pl 1881; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 1882; NONEON-NOSVE-NEXT: fcmp s1, s0 1883; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 1884; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1885; NONEON-NOSVE-NEXT: fcvt s0, h0 1886; NONEON-NOSVE-NEXT: fcvt s1, h1 1887; NONEON-NOSVE-NEXT: csetm w8, pl 1888; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 1889; NONEON-NOSVE-NEXT: fcmp s1, s0 1890; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 1891; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 1892; NONEON-NOSVE-NEXT: fcvt s0, h0 1893; NONEON-NOSVE-NEXT: fcvt s1, h1 1894; NONEON-NOSVE-NEXT: csetm w8, pl 1895; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 1896; NONEON-NOSVE-NEXT: fcmp s1, s0 1897; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 1898; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 1899; NONEON-NOSVE-NEXT: fcvt s0, h0 1900; NONEON-NOSVE-NEXT: fcvt s1, h1 1901; NONEON-NOSVE-NEXT: csetm w8, pl 1902; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 1903; NONEON-NOSVE-NEXT: fcmp s1, s0 1904; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 1905; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 1906; NONEON-NOSVE-NEXT: fcvt s0, h0 1907; NONEON-NOSVE-NEXT: fcvt s1, h1 1908; NONEON-NOSVE-NEXT: csetm w8, pl 1909; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 1910; NONEON-NOSVE-NEXT: fcmp s1, s0 1911; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 1912; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 1913; NONEON-NOSVE-NEXT: fcvt s0, h0 1914; NONEON-NOSVE-NEXT: fcvt s1, h1 1915; NONEON-NOSVE-NEXT: csetm w8, pl 1916; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 1917; NONEON-NOSVE-NEXT: fcmp s1, s0 1918; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 1919; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 1920; NONEON-NOSVE-NEXT: fcvt s0, h0 1921; NONEON-NOSVE-NEXT: fcvt s1, h1 1922; NONEON-NOSVE-NEXT: csetm w8, pl 1923; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 1924; NONEON-NOSVE-NEXT: fcmp s1, s0 1925; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1926; NONEON-NOSVE-NEXT: ldr h1, [sp] 1927; NONEON-NOSVE-NEXT: fcvt s0, h0 1928; NONEON-NOSVE-NEXT: fcvt s1, h1 1929; NONEON-NOSVE-NEXT: csetm w8, pl 1930; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 1931; NONEON-NOSVE-NEXT: fcmp s1, s0 1932; NONEON-NOSVE-NEXT: csetm w8, pl 1933; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 1934; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 1935; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 1936; NONEON-NOSVE-NEXT: add sp, sp, #96 1937; NONEON-NOSVE-NEXT: ret 1938 %op1 = load <16 x half>, ptr %a 1939 %op2 = load <16 x half>, ptr %b 1940 %cmp = fcmp uge <16 x half> %op1, %op2 1941 %sext = sext <16 x i1> %cmp to <16 x i16> 1942 store <16 x i16> %sext, ptr %c 1943 ret void 1944} 1945 1946; 1947; FCMP OLE 1948; 1949 1950define void @fcmp_ole_v16f16(ptr %a, ptr %b, ptr %c) { 1951; CHECK-LABEL: fcmp_ole_v16f16: 1952; CHECK: // %bb.0: 1953; CHECK-NEXT: ldp q0, q3, [x1] 1954; CHECK-NEXT: ptrue p0.h, vl8 1955; CHECK-NEXT: ldp q1, q2, [x0] 1956; CHECK-NEXT: fcmge p1.h, p0/z, z0.h, z1.h 1957; CHECK-NEXT: fcmge p0.h, p0/z, z3.h, z2.h 1958; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 1959; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 1960; CHECK-NEXT: stp q0, q1, [x2] 1961; CHECK-NEXT: ret 1962; 1963; NONEON-NOSVE-LABEL: fcmp_ole_v16f16: 1964; NONEON-NOSVE: // %bb.0: 1965; NONEON-NOSVE-NEXT: sub sp, sp, #96 1966; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 1967; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 1968; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 1969; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 1970; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 1971; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 1972; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 1973; NONEON-NOSVE-NEXT: fcvt s0, h0 1974; NONEON-NOSVE-NEXT: fcvt s1, h1 1975; NONEON-NOSVE-NEXT: fcmp s1, s0 1976; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 1977; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 1978; NONEON-NOSVE-NEXT: fcvt s0, h0 1979; NONEON-NOSVE-NEXT: fcvt s1, h1 1980; NONEON-NOSVE-NEXT: csetm w8, ls 1981; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 1982; NONEON-NOSVE-NEXT: fcmp s1, s0 1983; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 1984; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 1985; NONEON-NOSVE-NEXT: fcvt s0, h0 1986; NONEON-NOSVE-NEXT: fcvt s1, h1 1987; NONEON-NOSVE-NEXT: csetm w8, ls 1988; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 1989; NONEON-NOSVE-NEXT: fcmp s1, s0 1990; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 1991; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 1992; NONEON-NOSVE-NEXT: fcvt s0, h0 1993; NONEON-NOSVE-NEXT: fcvt s1, h1 1994; NONEON-NOSVE-NEXT: csetm w8, ls 1995; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 1996; NONEON-NOSVE-NEXT: fcmp s1, s0 1997; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1998; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 1999; NONEON-NOSVE-NEXT: fcvt s0, h0 2000; NONEON-NOSVE-NEXT: fcvt s1, h1 2001; NONEON-NOSVE-NEXT: csetm w8, ls 2002; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2003; NONEON-NOSVE-NEXT: fcmp s1, s0 2004; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2005; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2006; NONEON-NOSVE-NEXT: fcvt s0, h0 2007; NONEON-NOSVE-NEXT: fcvt s1, h1 2008; NONEON-NOSVE-NEXT: csetm w8, ls 2009; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2010; NONEON-NOSVE-NEXT: fcmp s1, s0 2011; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2012; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2013; NONEON-NOSVE-NEXT: fcvt s0, h0 2014; NONEON-NOSVE-NEXT: fcvt s1, h1 2015; NONEON-NOSVE-NEXT: csetm w8, ls 2016; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2017; NONEON-NOSVE-NEXT: fcmp s1, s0 2018; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2019; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2020; NONEON-NOSVE-NEXT: fcvt s0, h0 2021; NONEON-NOSVE-NEXT: fcvt s1, h1 2022; NONEON-NOSVE-NEXT: csetm w8, ls 2023; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2024; NONEON-NOSVE-NEXT: fcmp s1, s0 2025; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2026; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2027; NONEON-NOSVE-NEXT: fcvt s0, h0 2028; NONEON-NOSVE-NEXT: fcvt s1, h1 2029; NONEON-NOSVE-NEXT: csetm w8, ls 2030; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2031; NONEON-NOSVE-NEXT: fcmp s1, s0 2032; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2033; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2034; NONEON-NOSVE-NEXT: fcvt s0, h0 2035; NONEON-NOSVE-NEXT: fcvt s1, h1 2036; NONEON-NOSVE-NEXT: csetm w8, ls 2037; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2038; NONEON-NOSVE-NEXT: fcmp s1, s0 2039; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2040; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2041; NONEON-NOSVE-NEXT: fcvt s0, h0 2042; NONEON-NOSVE-NEXT: fcvt s1, h1 2043; NONEON-NOSVE-NEXT: csetm w8, ls 2044; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2045; NONEON-NOSVE-NEXT: fcmp s1, s0 2046; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2047; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2048; NONEON-NOSVE-NEXT: fcvt s0, h0 2049; NONEON-NOSVE-NEXT: fcvt s1, h1 2050; NONEON-NOSVE-NEXT: csetm w8, ls 2051; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2052; NONEON-NOSVE-NEXT: fcmp s1, s0 2053; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2054; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2055; NONEON-NOSVE-NEXT: fcvt s0, h0 2056; NONEON-NOSVE-NEXT: fcvt s1, h1 2057; NONEON-NOSVE-NEXT: csetm w8, ls 2058; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2059; NONEON-NOSVE-NEXT: fcmp s1, s0 2060; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2061; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2062; NONEON-NOSVE-NEXT: fcvt s0, h0 2063; NONEON-NOSVE-NEXT: fcvt s1, h1 2064; NONEON-NOSVE-NEXT: csetm w8, ls 2065; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2066; NONEON-NOSVE-NEXT: fcmp s1, s0 2067; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2068; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2069; NONEON-NOSVE-NEXT: fcvt s0, h0 2070; NONEON-NOSVE-NEXT: fcvt s1, h1 2071; NONEON-NOSVE-NEXT: csetm w8, ls 2072; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2073; NONEON-NOSVE-NEXT: fcmp s1, s0 2074; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2075; NONEON-NOSVE-NEXT: ldr h1, [sp] 2076; NONEON-NOSVE-NEXT: fcvt s0, h0 2077; NONEON-NOSVE-NEXT: fcvt s1, h1 2078; NONEON-NOSVE-NEXT: csetm w8, ls 2079; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2080; NONEON-NOSVE-NEXT: fcmp s1, s0 2081; NONEON-NOSVE-NEXT: csetm w8, ls 2082; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2083; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2084; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2085; NONEON-NOSVE-NEXT: add sp, sp, #96 2086; NONEON-NOSVE-NEXT: ret 2087 %op1 = load <16 x half>, ptr %a 2088 %op2 = load <16 x half>, ptr %b 2089 %cmp = fcmp ole <16 x half> %op1, %op2 2090 %sext = sext <16 x i1> %cmp to <16 x i16> 2091 store <16 x i16> %sext, ptr %c 2092 ret void 2093} 2094 2095; 2096; FCMP ULE 2097; 2098 2099define void @fcmp_ule_v16f16(ptr %a, ptr %b, ptr %c) { 2100; CHECK-LABEL: fcmp_ule_v16f16: 2101; CHECK: // %bb.0: 2102; CHECK-NEXT: ldp q0, q3, [x1] 2103; CHECK-NEXT: ptrue p0.h, vl8 2104; CHECK-NEXT: ldp q1, q2, [x0] 2105; CHECK-NEXT: fcmgt p1.h, p0/z, z1.h, z0.h 2106; CHECK-NEXT: fcmgt p0.h, p0/z, z2.h, z3.h 2107; CHECK-NEXT: mov z0.h, #-1 // =0xffffffffffffffff 2108; CHECK-NEXT: mov z1.h, p1/z, #-1 // =0xffffffffffffffff 2109; CHECK-NEXT: mov z2.h, p0/z, #-1 // =0xffffffffffffffff 2110; CHECK-NEXT: eor z1.d, z1.d, z0.d 2111; CHECK-NEXT: eor z0.d, z2.d, z0.d 2112; CHECK-NEXT: stp q1, q0, [x2] 2113; CHECK-NEXT: ret 2114; 2115; NONEON-NOSVE-LABEL: fcmp_ule_v16f16: 2116; NONEON-NOSVE: // %bb.0: 2117; NONEON-NOSVE-NEXT: sub sp, sp, #96 2118; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2119; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2120; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2121; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2122; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2123; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2124; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2125; NONEON-NOSVE-NEXT: fcvt s0, h0 2126; NONEON-NOSVE-NEXT: fcvt s1, h1 2127; NONEON-NOSVE-NEXT: fcmp s1, s0 2128; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2129; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2130; NONEON-NOSVE-NEXT: fcvt s0, h0 2131; NONEON-NOSVE-NEXT: fcvt s1, h1 2132; NONEON-NOSVE-NEXT: csetm w8, le 2133; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2134; NONEON-NOSVE-NEXT: fcmp s1, s0 2135; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2136; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2137; NONEON-NOSVE-NEXT: fcvt s0, h0 2138; NONEON-NOSVE-NEXT: fcvt s1, h1 2139; NONEON-NOSVE-NEXT: csetm w8, le 2140; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2141; NONEON-NOSVE-NEXT: fcmp s1, s0 2142; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2143; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2144; NONEON-NOSVE-NEXT: fcvt s0, h0 2145; NONEON-NOSVE-NEXT: fcvt s1, h1 2146; NONEON-NOSVE-NEXT: csetm w8, le 2147; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2148; NONEON-NOSVE-NEXT: fcmp s1, s0 2149; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2150; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2151; NONEON-NOSVE-NEXT: fcvt s0, h0 2152; NONEON-NOSVE-NEXT: fcvt s1, h1 2153; NONEON-NOSVE-NEXT: csetm w8, le 2154; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2155; NONEON-NOSVE-NEXT: fcmp s1, s0 2156; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2157; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2158; NONEON-NOSVE-NEXT: fcvt s0, h0 2159; NONEON-NOSVE-NEXT: fcvt s1, h1 2160; NONEON-NOSVE-NEXT: csetm w8, le 2161; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2162; NONEON-NOSVE-NEXT: fcmp s1, s0 2163; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2164; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2165; NONEON-NOSVE-NEXT: fcvt s0, h0 2166; NONEON-NOSVE-NEXT: fcvt s1, h1 2167; NONEON-NOSVE-NEXT: csetm w8, le 2168; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2169; NONEON-NOSVE-NEXT: fcmp s1, s0 2170; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2171; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2172; NONEON-NOSVE-NEXT: fcvt s0, h0 2173; NONEON-NOSVE-NEXT: fcvt s1, h1 2174; NONEON-NOSVE-NEXT: csetm w8, le 2175; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2176; NONEON-NOSVE-NEXT: fcmp s1, s0 2177; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2178; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2179; NONEON-NOSVE-NEXT: fcvt s0, h0 2180; NONEON-NOSVE-NEXT: fcvt s1, h1 2181; NONEON-NOSVE-NEXT: csetm w8, le 2182; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2183; NONEON-NOSVE-NEXT: fcmp s1, s0 2184; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2185; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2186; NONEON-NOSVE-NEXT: fcvt s0, h0 2187; NONEON-NOSVE-NEXT: fcvt s1, h1 2188; NONEON-NOSVE-NEXT: csetm w8, le 2189; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2190; NONEON-NOSVE-NEXT: fcmp s1, s0 2191; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2192; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2193; NONEON-NOSVE-NEXT: fcvt s0, h0 2194; NONEON-NOSVE-NEXT: fcvt s1, h1 2195; NONEON-NOSVE-NEXT: csetm w8, le 2196; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2197; NONEON-NOSVE-NEXT: fcmp s1, s0 2198; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2199; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2200; NONEON-NOSVE-NEXT: fcvt s0, h0 2201; NONEON-NOSVE-NEXT: fcvt s1, h1 2202; NONEON-NOSVE-NEXT: csetm w8, le 2203; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2204; NONEON-NOSVE-NEXT: fcmp s1, s0 2205; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2206; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2207; NONEON-NOSVE-NEXT: fcvt s0, h0 2208; NONEON-NOSVE-NEXT: fcvt s1, h1 2209; NONEON-NOSVE-NEXT: csetm w8, le 2210; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2211; NONEON-NOSVE-NEXT: fcmp s1, s0 2212; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2213; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2214; NONEON-NOSVE-NEXT: fcvt s0, h0 2215; NONEON-NOSVE-NEXT: fcvt s1, h1 2216; NONEON-NOSVE-NEXT: csetm w8, le 2217; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2218; NONEON-NOSVE-NEXT: fcmp s1, s0 2219; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2220; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2221; NONEON-NOSVE-NEXT: fcvt s0, h0 2222; NONEON-NOSVE-NEXT: fcvt s1, h1 2223; NONEON-NOSVE-NEXT: csetm w8, le 2224; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2225; NONEON-NOSVE-NEXT: fcmp s1, s0 2226; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2227; NONEON-NOSVE-NEXT: ldr h1, [sp] 2228; NONEON-NOSVE-NEXT: fcvt s0, h0 2229; NONEON-NOSVE-NEXT: fcvt s1, h1 2230; NONEON-NOSVE-NEXT: csetm w8, le 2231; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2232; NONEON-NOSVE-NEXT: fcmp s1, s0 2233; NONEON-NOSVE-NEXT: csetm w8, le 2234; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2235; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2236; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2237; NONEON-NOSVE-NEXT: add sp, sp, #96 2238; NONEON-NOSVE-NEXT: ret 2239 %op1 = load <16 x half>, ptr %a 2240 %op2 = load <16 x half>, ptr %b 2241 %cmp = fcmp ule <16 x half> %op1, %op2 2242 %sext = sext <16 x i1> %cmp to <16 x i16> 2243 store <16 x i16> %sext, ptr %c 2244 ret void 2245} 2246 2247; 2248; FCMP UNO 2249; 2250 2251define void @fcmp_uno_v16f16(ptr %a, ptr %b, ptr %c) { 2252; CHECK-LABEL: fcmp_uno_v16f16: 2253; CHECK: // %bb.0: 2254; CHECK-NEXT: ldp q0, q3, [x1] 2255; CHECK-NEXT: ptrue p0.h, vl8 2256; CHECK-NEXT: ldp q1, q2, [x0] 2257; CHECK-NEXT: fcmuo p1.h, p0/z, z1.h, z0.h 2258; CHECK-NEXT: fcmuo p0.h, p0/z, z2.h, z3.h 2259; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 2260; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 2261; CHECK-NEXT: stp q0, q1, [x2] 2262; CHECK-NEXT: ret 2263; 2264; NONEON-NOSVE-LABEL: fcmp_uno_v16f16: 2265; NONEON-NOSVE: // %bb.0: 2266; NONEON-NOSVE-NEXT: sub sp, sp, #96 2267; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2268; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2269; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2270; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2271; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2272; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2273; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2274; NONEON-NOSVE-NEXT: fcvt s0, h0 2275; NONEON-NOSVE-NEXT: fcvt s1, h1 2276; NONEON-NOSVE-NEXT: fcmp s1, s0 2277; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2278; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2279; NONEON-NOSVE-NEXT: fcvt s0, h0 2280; NONEON-NOSVE-NEXT: fcvt s1, h1 2281; NONEON-NOSVE-NEXT: csetm w8, vs 2282; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2283; NONEON-NOSVE-NEXT: fcmp s1, s0 2284; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2285; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2286; NONEON-NOSVE-NEXT: fcvt s0, h0 2287; NONEON-NOSVE-NEXT: fcvt s1, h1 2288; NONEON-NOSVE-NEXT: csetm w8, vs 2289; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2290; NONEON-NOSVE-NEXT: fcmp s1, s0 2291; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2292; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2293; NONEON-NOSVE-NEXT: fcvt s0, h0 2294; NONEON-NOSVE-NEXT: fcvt s1, h1 2295; NONEON-NOSVE-NEXT: csetm w8, vs 2296; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2297; NONEON-NOSVE-NEXT: fcmp s1, s0 2298; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2299; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2300; NONEON-NOSVE-NEXT: fcvt s0, h0 2301; NONEON-NOSVE-NEXT: fcvt s1, h1 2302; NONEON-NOSVE-NEXT: csetm w8, vs 2303; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2304; NONEON-NOSVE-NEXT: fcmp s1, s0 2305; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2306; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2307; NONEON-NOSVE-NEXT: fcvt s0, h0 2308; NONEON-NOSVE-NEXT: fcvt s1, h1 2309; NONEON-NOSVE-NEXT: csetm w8, vs 2310; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2311; NONEON-NOSVE-NEXT: fcmp s1, s0 2312; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2313; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2314; NONEON-NOSVE-NEXT: fcvt s0, h0 2315; NONEON-NOSVE-NEXT: fcvt s1, h1 2316; NONEON-NOSVE-NEXT: csetm w8, vs 2317; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2318; NONEON-NOSVE-NEXT: fcmp s1, s0 2319; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2320; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2321; NONEON-NOSVE-NEXT: fcvt s0, h0 2322; NONEON-NOSVE-NEXT: fcvt s1, h1 2323; NONEON-NOSVE-NEXT: csetm w8, vs 2324; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2325; NONEON-NOSVE-NEXT: fcmp s1, s0 2326; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2327; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2328; NONEON-NOSVE-NEXT: fcvt s0, h0 2329; NONEON-NOSVE-NEXT: fcvt s1, h1 2330; NONEON-NOSVE-NEXT: csetm w8, vs 2331; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2332; NONEON-NOSVE-NEXT: fcmp s1, s0 2333; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2334; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2335; NONEON-NOSVE-NEXT: fcvt s0, h0 2336; NONEON-NOSVE-NEXT: fcvt s1, h1 2337; NONEON-NOSVE-NEXT: csetm w8, vs 2338; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2339; NONEON-NOSVE-NEXT: fcmp s1, s0 2340; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2341; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2342; NONEON-NOSVE-NEXT: fcvt s0, h0 2343; NONEON-NOSVE-NEXT: fcvt s1, h1 2344; NONEON-NOSVE-NEXT: csetm w8, vs 2345; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2346; NONEON-NOSVE-NEXT: fcmp s1, s0 2347; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2348; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2349; NONEON-NOSVE-NEXT: fcvt s0, h0 2350; NONEON-NOSVE-NEXT: fcvt s1, h1 2351; NONEON-NOSVE-NEXT: csetm w8, vs 2352; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2353; NONEON-NOSVE-NEXT: fcmp s1, s0 2354; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2355; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2356; NONEON-NOSVE-NEXT: fcvt s0, h0 2357; NONEON-NOSVE-NEXT: fcvt s1, h1 2358; NONEON-NOSVE-NEXT: csetm w8, vs 2359; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2360; NONEON-NOSVE-NEXT: fcmp s1, s0 2361; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2362; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2363; NONEON-NOSVE-NEXT: fcvt s0, h0 2364; NONEON-NOSVE-NEXT: fcvt s1, h1 2365; NONEON-NOSVE-NEXT: csetm w8, vs 2366; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2367; NONEON-NOSVE-NEXT: fcmp s1, s0 2368; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2369; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2370; NONEON-NOSVE-NEXT: fcvt s0, h0 2371; NONEON-NOSVE-NEXT: fcvt s1, h1 2372; NONEON-NOSVE-NEXT: csetm w8, vs 2373; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2374; NONEON-NOSVE-NEXT: fcmp s1, s0 2375; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2376; NONEON-NOSVE-NEXT: ldr h1, [sp] 2377; NONEON-NOSVE-NEXT: fcvt s0, h0 2378; NONEON-NOSVE-NEXT: fcvt s1, h1 2379; NONEON-NOSVE-NEXT: csetm w8, vs 2380; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2381; NONEON-NOSVE-NEXT: fcmp s1, s0 2382; NONEON-NOSVE-NEXT: csetm w8, vs 2383; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2384; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2385; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2386; NONEON-NOSVE-NEXT: add sp, sp, #96 2387; NONEON-NOSVE-NEXT: ret 2388 %op1 = load <16 x half>, ptr %a 2389 %op2 = load <16 x half>, ptr %b 2390 %cmp = fcmp uno <16 x half> %op1, %op2 2391 %sext = sext <16 x i1> %cmp to <16 x i16> 2392 store <16 x i16> %sext, ptr %c 2393 ret void 2394} 2395 2396; 2397; FCMP ORD 2398; 2399 2400define void @fcmp_ord_v16f16(ptr %a, ptr %b, ptr %c) { 2401; CHECK-LABEL: fcmp_ord_v16f16: 2402; CHECK: // %bb.0: 2403; CHECK-NEXT: ldp q0, q3, [x1] 2404; CHECK-NEXT: ptrue p0.h, vl8 2405; CHECK-NEXT: ldp q1, q2, [x0] 2406; CHECK-NEXT: fcmuo p1.h, p0/z, z1.h, z0.h 2407; CHECK-NEXT: fcmuo p0.h, p0/z, z2.h, z3.h 2408; CHECK-NEXT: mov z0.h, #-1 // =0xffffffffffffffff 2409; CHECK-NEXT: mov z1.h, p1/z, #-1 // =0xffffffffffffffff 2410; CHECK-NEXT: mov z2.h, p0/z, #-1 // =0xffffffffffffffff 2411; CHECK-NEXT: eor z1.d, z1.d, z0.d 2412; CHECK-NEXT: eor z0.d, z2.d, z0.d 2413; CHECK-NEXT: stp q1, q0, [x2] 2414; CHECK-NEXT: ret 2415; 2416; NONEON-NOSVE-LABEL: fcmp_ord_v16f16: 2417; NONEON-NOSVE: // %bb.0: 2418; NONEON-NOSVE-NEXT: sub sp, sp, #96 2419; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2420; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2421; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2422; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2423; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2424; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2425; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2426; NONEON-NOSVE-NEXT: fcvt s0, h0 2427; NONEON-NOSVE-NEXT: fcvt s1, h1 2428; NONEON-NOSVE-NEXT: fcmp s1, s0 2429; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2430; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2431; NONEON-NOSVE-NEXT: fcvt s0, h0 2432; NONEON-NOSVE-NEXT: fcvt s1, h1 2433; NONEON-NOSVE-NEXT: csetm w8, vc 2434; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2435; NONEON-NOSVE-NEXT: fcmp s1, s0 2436; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2437; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2438; NONEON-NOSVE-NEXT: fcvt s0, h0 2439; NONEON-NOSVE-NEXT: fcvt s1, h1 2440; NONEON-NOSVE-NEXT: csetm w8, vc 2441; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2442; NONEON-NOSVE-NEXT: fcmp s1, s0 2443; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2444; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2445; NONEON-NOSVE-NEXT: fcvt s0, h0 2446; NONEON-NOSVE-NEXT: fcvt s1, h1 2447; NONEON-NOSVE-NEXT: csetm w8, vc 2448; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2449; NONEON-NOSVE-NEXT: fcmp s1, s0 2450; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2451; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2452; NONEON-NOSVE-NEXT: fcvt s0, h0 2453; NONEON-NOSVE-NEXT: fcvt s1, h1 2454; NONEON-NOSVE-NEXT: csetm w8, vc 2455; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2456; NONEON-NOSVE-NEXT: fcmp s1, s0 2457; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2458; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2459; NONEON-NOSVE-NEXT: fcvt s0, h0 2460; NONEON-NOSVE-NEXT: fcvt s1, h1 2461; NONEON-NOSVE-NEXT: csetm w8, vc 2462; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2463; NONEON-NOSVE-NEXT: fcmp s1, s0 2464; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2465; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2466; NONEON-NOSVE-NEXT: fcvt s0, h0 2467; NONEON-NOSVE-NEXT: fcvt s1, h1 2468; NONEON-NOSVE-NEXT: csetm w8, vc 2469; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2470; NONEON-NOSVE-NEXT: fcmp s1, s0 2471; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2472; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2473; NONEON-NOSVE-NEXT: fcvt s0, h0 2474; NONEON-NOSVE-NEXT: fcvt s1, h1 2475; NONEON-NOSVE-NEXT: csetm w8, vc 2476; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2477; NONEON-NOSVE-NEXT: fcmp s1, s0 2478; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2479; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2480; NONEON-NOSVE-NEXT: fcvt s0, h0 2481; NONEON-NOSVE-NEXT: fcvt s1, h1 2482; NONEON-NOSVE-NEXT: csetm w8, vc 2483; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2484; NONEON-NOSVE-NEXT: fcmp s1, s0 2485; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2486; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2487; NONEON-NOSVE-NEXT: fcvt s0, h0 2488; NONEON-NOSVE-NEXT: fcvt s1, h1 2489; NONEON-NOSVE-NEXT: csetm w8, vc 2490; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2491; NONEON-NOSVE-NEXT: fcmp s1, s0 2492; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2493; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2494; NONEON-NOSVE-NEXT: fcvt s0, h0 2495; NONEON-NOSVE-NEXT: fcvt s1, h1 2496; NONEON-NOSVE-NEXT: csetm w8, vc 2497; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2498; NONEON-NOSVE-NEXT: fcmp s1, s0 2499; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2500; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2501; NONEON-NOSVE-NEXT: fcvt s0, h0 2502; NONEON-NOSVE-NEXT: fcvt s1, h1 2503; NONEON-NOSVE-NEXT: csetm w8, vc 2504; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2505; NONEON-NOSVE-NEXT: fcmp s1, s0 2506; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2507; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2508; NONEON-NOSVE-NEXT: fcvt s0, h0 2509; NONEON-NOSVE-NEXT: fcvt s1, h1 2510; NONEON-NOSVE-NEXT: csetm w8, vc 2511; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2512; NONEON-NOSVE-NEXT: fcmp s1, s0 2513; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2514; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2515; NONEON-NOSVE-NEXT: fcvt s0, h0 2516; NONEON-NOSVE-NEXT: fcvt s1, h1 2517; NONEON-NOSVE-NEXT: csetm w8, vc 2518; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2519; NONEON-NOSVE-NEXT: fcmp s1, s0 2520; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2521; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2522; NONEON-NOSVE-NEXT: fcvt s0, h0 2523; NONEON-NOSVE-NEXT: fcvt s1, h1 2524; NONEON-NOSVE-NEXT: csetm w8, vc 2525; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2526; NONEON-NOSVE-NEXT: fcmp s1, s0 2527; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2528; NONEON-NOSVE-NEXT: ldr h1, [sp] 2529; NONEON-NOSVE-NEXT: fcvt s0, h0 2530; NONEON-NOSVE-NEXT: fcvt s1, h1 2531; NONEON-NOSVE-NEXT: csetm w8, vc 2532; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2533; NONEON-NOSVE-NEXT: fcmp s1, s0 2534; NONEON-NOSVE-NEXT: csetm w8, vc 2535; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2536; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2537; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2538; NONEON-NOSVE-NEXT: add sp, sp, #96 2539; NONEON-NOSVE-NEXT: ret 2540 %op1 = load <16 x half>, ptr %a 2541 %op2 = load <16 x half>, ptr %b 2542 %cmp = fcmp ord <16 x half> %op1, %op2 2543 %sext = sext <16 x i1> %cmp to <16 x i16> 2544 store <16 x i16> %sext, ptr %c 2545 ret void 2546} 2547 2548; 2549; FCMP EQ 2550; 2551 2552define void @fcmp_eq_v16f16(ptr %a, ptr %b, ptr %c) { 2553; CHECK-LABEL: fcmp_eq_v16f16: 2554; CHECK: // %bb.0: 2555; CHECK-NEXT: ldp q0, q3, [x1] 2556; CHECK-NEXT: ptrue p0.h, vl8 2557; CHECK-NEXT: ldp q1, q2, [x0] 2558; CHECK-NEXT: fcmeq p1.h, p0/z, z1.h, z0.h 2559; CHECK-NEXT: fcmeq p0.h, p0/z, z2.h, z3.h 2560; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 2561; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 2562; CHECK-NEXT: stp q0, q1, [x2] 2563; CHECK-NEXT: ret 2564; 2565; NONEON-NOSVE-LABEL: fcmp_eq_v16f16: 2566; NONEON-NOSVE: // %bb.0: 2567; NONEON-NOSVE-NEXT: sub sp, sp, #96 2568; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2569; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2570; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2571; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2572; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2573; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2574; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2575; NONEON-NOSVE-NEXT: fcvt s0, h0 2576; NONEON-NOSVE-NEXT: fcvt s1, h1 2577; NONEON-NOSVE-NEXT: fcmp s1, s0 2578; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2579; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2580; NONEON-NOSVE-NEXT: fcvt s0, h0 2581; NONEON-NOSVE-NEXT: fcvt s1, h1 2582; NONEON-NOSVE-NEXT: csetm w8, eq 2583; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2584; NONEON-NOSVE-NEXT: fcmp s1, s0 2585; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2586; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2587; NONEON-NOSVE-NEXT: fcvt s0, h0 2588; NONEON-NOSVE-NEXT: fcvt s1, h1 2589; NONEON-NOSVE-NEXT: csetm w8, eq 2590; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2591; NONEON-NOSVE-NEXT: fcmp s1, s0 2592; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2593; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2594; NONEON-NOSVE-NEXT: fcvt s0, h0 2595; NONEON-NOSVE-NEXT: fcvt s1, h1 2596; NONEON-NOSVE-NEXT: csetm w8, eq 2597; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2598; NONEON-NOSVE-NEXT: fcmp s1, s0 2599; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2600; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2601; NONEON-NOSVE-NEXT: fcvt s0, h0 2602; NONEON-NOSVE-NEXT: fcvt s1, h1 2603; NONEON-NOSVE-NEXT: csetm w8, eq 2604; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2605; NONEON-NOSVE-NEXT: fcmp s1, s0 2606; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2607; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2608; NONEON-NOSVE-NEXT: fcvt s0, h0 2609; NONEON-NOSVE-NEXT: fcvt s1, h1 2610; NONEON-NOSVE-NEXT: csetm w8, eq 2611; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2612; NONEON-NOSVE-NEXT: fcmp s1, s0 2613; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2614; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2615; NONEON-NOSVE-NEXT: fcvt s0, h0 2616; NONEON-NOSVE-NEXT: fcvt s1, h1 2617; NONEON-NOSVE-NEXT: csetm w8, eq 2618; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2619; NONEON-NOSVE-NEXT: fcmp s1, s0 2620; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2621; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2622; NONEON-NOSVE-NEXT: fcvt s0, h0 2623; NONEON-NOSVE-NEXT: fcvt s1, h1 2624; NONEON-NOSVE-NEXT: csetm w8, eq 2625; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2626; NONEON-NOSVE-NEXT: fcmp s1, s0 2627; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2628; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2629; NONEON-NOSVE-NEXT: fcvt s0, h0 2630; NONEON-NOSVE-NEXT: fcvt s1, h1 2631; NONEON-NOSVE-NEXT: csetm w8, eq 2632; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2633; NONEON-NOSVE-NEXT: fcmp s1, s0 2634; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2635; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2636; NONEON-NOSVE-NEXT: fcvt s0, h0 2637; NONEON-NOSVE-NEXT: fcvt s1, h1 2638; NONEON-NOSVE-NEXT: csetm w8, eq 2639; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2640; NONEON-NOSVE-NEXT: fcmp s1, s0 2641; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2642; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2643; NONEON-NOSVE-NEXT: fcvt s0, h0 2644; NONEON-NOSVE-NEXT: fcvt s1, h1 2645; NONEON-NOSVE-NEXT: csetm w8, eq 2646; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2647; NONEON-NOSVE-NEXT: fcmp s1, s0 2648; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2649; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2650; NONEON-NOSVE-NEXT: fcvt s0, h0 2651; NONEON-NOSVE-NEXT: fcvt s1, h1 2652; NONEON-NOSVE-NEXT: csetm w8, eq 2653; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2654; NONEON-NOSVE-NEXT: fcmp s1, s0 2655; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2656; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2657; NONEON-NOSVE-NEXT: fcvt s0, h0 2658; NONEON-NOSVE-NEXT: fcvt s1, h1 2659; NONEON-NOSVE-NEXT: csetm w8, eq 2660; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2661; NONEON-NOSVE-NEXT: fcmp s1, s0 2662; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2663; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2664; NONEON-NOSVE-NEXT: fcvt s0, h0 2665; NONEON-NOSVE-NEXT: fcvt s1, h1 2666; NONEON-NOSVE-NEXT: csetm w8, eq 2667; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2668; NONEON-NOSVE-NEXT: fcmp s1, s0 2669; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2670; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2671; NONEON-NOSVE-NEXT: fcvt s0, h0 2672; NONEON-NOSVE-NEXT: fcvt s1, h1 2673; NONEON-NOSVE-NEXT: csetm w8, eq 2674; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2675; NONEON-NOSVE-NEXT: fcmp s1, s0 2676; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2677; NONEON-NOSVE-NEXT: ldr h1, [sp] 2678; NONEON-NOSVE-NEXT: fcvt s0, h0 2679; NONEON-NOSVE-NEXT: fcvt s1, h1 2680; NONEON-NOSVE-NEXT: csetm w8, eq 2681; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2682; NONEON-NOSVE-NEXT: fcmp s1, s0 2683; NONEON-NOSVE-NEXT: csetm w8, eq 2684; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2685; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2686; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2687; NONEON-NOSVE-NEXT: add sp, sp, #96 2688; NONEON-NOSVE-NEXT: ret 2689 %op1 = load <16 x half>, ptr %a 2690 %op2 = load <16 x half>, ptr %b 2691 %cmp = fcmp fast oeq <16 x half> %op1, %op2 2692 %sext = sext <16 x i1> %cmp to <16 x i16> 2693 store <16 x i16> %sext, ptr %c 2694 ret void 2695} 2696 2697; 2698; FCMP NE 2699; 2700 2701define void @fcmp_ne_v16f16(ptr %a, ptr %b, ptr %c) { 2702; CHECK-LABEL: fcmp_ne_v16f16: 2703; CHECK: // %bb.0: 2704; CHECK-NEXT: ldp q0, q3, [x1] 2705; CHECK-NEXT: ptrue p0.h, vl8 2706; CHECK-NEXT: ldp q1, q2, [x0] 2707; CHECK-NEXT: fcmne p1.h, p0/z, z1.h, z0.h 2708; CHECK-NEXT: fcmne p0.h, p0/z, z2.h, z3.h 2709; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 2710; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 2711; CHECK-NEXT: stp q0, q1, [x2] 2712; CHECK-NEXT: ret 2713; 2714; NONEON-NOSVE-LABEL: fcmp_ne_v16f16: 2715; NONEON-NOSVE: // %bb.0: 2716; NONEON-NOSVE-NEXT: sub sp, sp, #96 2717; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2718; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2719; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2720; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2721; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2722; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2723; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2724; NONEON-NOSVE-NEXT: fcvt s0, h0 2725; NONEON-NOSVE-NEXT: fcvt s1, h1 2726; NONEON-NOSVE-NEXT: fcmp s1, s0 2727; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2728; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2729; NONEON-NOSVE-NEXT: fcvt s0, h0 2730; NONEON-NOSVE-NEXT: fcvt s1, h1 2731; NONEON-NOSVE-NEXT: csetm w8, ne 2732; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2733; NONEON-NOSVE-NEXT: fcmp s1, s0 2734; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2735; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2736; NONEON-NOSVE-NEXT: fcvt s0, h0 2737; NONEON-NOSVE-NEXT: fcvt s1, h1 2738; NONEON-NOSVE-NEXT: csetm w8, ne 2739; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2740; NONEON-NOSVE-NEXT: fcmp s1, s0 2741; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2742; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2743; NONEON-NOSVE-NEXT: fcvt s0, h0 2744; NONEON-NOSVE-NEXT: fcvt s1, h1 2745; NONEON-NOSVE-NEXT: csetm w8, ne 2746; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2747; NONEON-NOSVE-NEXT: fcmp s1, s0 2748; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2749; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2750; NONEON-NOSVE-NEXT: fcvt s0, h0 2751; NONEON-NOSVE-NEXT: fcvt s1, h1 2752; NONEON-NOSVE-NEXT: csetm w8, ne 2753; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2754; NONEON-NOSVE-NEXT: fcmp s1, s0 2755; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2756; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2757; NONEON-NOSVE-NEXT: fcvt s0, h0 2758; NONEON-NOSVE-NEXT: fcvt s1, h1 2759; NONEON-NOSVE-NEXT: csetm w8, ne 2760; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2761; NONEON-NOSVE-NEXT: fcmp s1, s0 2762; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2763; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2764; NONEON-NOSVE-NEXT: fcvt s0, h0 2765; NONEON-NOSVE-NEXT: fcvt s1, h1 2766; NONEON-NOSVE-NEXT: csetm w8, ne 2767; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2768; NONEON-NOSVE-NEXT: fcmp s1, s0 2769; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2770; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2771; NONEON-NOSVE-NEXT: fcvt s0, h0 2772; NONEON-NOSVE-NEXT: fcvt s1, h1 2773; NONEON-NOSVE-NEXT: csetm w8, ne 2774; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2775; NONEON-NOSVE-NEXT: fcmp s1, s0 2776; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2777; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2778; NONEON-NOSVE-NEXT: fcvt s0, h0 2779; NONEON-NOSVE-NEXT: fcvt s1, h1 2780; NONEON-NOSVE-NEXT: csetm w8, ne 2781; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2782; NONEON-NOSVE-NEXT: fcmp s1, s0 2783; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2784; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2785; NONEON-NOSVE-NEXT: fcvt s0, h0 2786; NONEON-NOSVE-NEXT: fcvt s1, h1 2787; NONEON-NOSVE-NEXT: csetm w8, ne 2788; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2789; NONEON-NOSVE-NEXT: fcmp s1, s0 2790; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2791; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2792; NONEON-NOSVE-NEXT: fcvt s0, h0 2793; NONEON-NOSVE-NEXT: fcvt s1, h1 2794; NONEON-NOSVE-NEXT: csetm w8, ne 2795; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2796; NONEON-NOSVE-NEXT: fcmp s1, s0 2797; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2798; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2799; NONEON-NOSVE-NEXT: fcvt s0, h0 2800; NONEON-NOSVE-NEXT: fcvt s1, h1 2801; NONEON-NOSVE-NEXT: csetm w8, ne 2802; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2803; NONEON-NOSVE-NEXT: fcmp s1, s0 2804; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2805; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2806; NONEON-NOSVE-NEXT: fcvt s0, h0 2807; NONEON-NOSVE-NEXT: fcvt s1, h1 2808; NONEON-NOSVE-NEXT: csetm w8, ne 2809; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2810; NONEON-NOSVE-NEXT: fcmp s1, s0 2811; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2812; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2813; NONEON-NOSVE-NEXT: fcvt s0, h0 2814; NONEON-NOSVE-NEXT: fcvt s1, h1 2815; NONEON-NOSVE-NEXT: csetm w8, ne 2816; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2817; NONEON-NOSVE-NEXT: fcmp s1, s0 2818; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2819; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2820; NONEON-NOSVE-NEXT: fcvt s0, h0 2821; NONEON-NOSVE-NEXT: fcvt s1, h1 2822; NONEON-NOSVE-NEXT: csetm w8, ne 2823; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2824; NONEON-NOSVE-NEXT: fcmp s1, s0 2825; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2826; NONEON-NOSVE-NEXT: ldr h1, [sp] 2827; NONEON-NOSVE-NEXT: fcvt s0, h0 2828; NONEON-NOSVE-NEXT: fcvt s1, h1 2829; NONEON-NOSVE-NEXT: csetm w8, ne 2830; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2831; NONEON-NOSVE-NEXT: fcmp s1, s0 2832; NONEON-NOSVE-NEXT: csetm w8, ne 2833; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2834; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2835; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2836; NONEON-NOSVE-NEXT: add sp, sp, #96 2837; NONEON-NOSVE-NEXT: ret 2838 %op1 = load <16 x half>, ptr %a 2839 %op2 = load <16 x half>, ptr %b 2840 %cmp = fcmp fast one <16 x half> %op1, %op2 2841 %sext = sext <16 x i1> %cmp to <16 x i16> 2842 store <16 x i16> %sext, ptr %c 2843 ret void 2844} 2845 2846; 2847; FCMP GT 2848; 2849 2850define void @fcmp_gt_v16f16(ptr %a, ptr %b, ptr %c) { 2851; CHECK-LABEL: fcmp_gt_v16f16: 2852; CHECK: // %bb.0: 2853; CHECK-NEXT: ldp q0, q3, [x1] 2854; CHECK-NEXT: ptrue p0.h, vl8 2855; CHECK-NEXT: ldp q1, q2, [x0] 2856; CHECK-NEXT: fcmgt p1.h, p0/z, z1.h, z0.h 2857; CHECK-NEXT: fcmgt p0.h, p0/z, z2.h, z3.h 2858; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 2859; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 2860; CHECK-NEXT: stp q0, q1, [x2] 2861; CHECK-NEXT: ret 2862; 2863; NONEON-NOSVE-LABEL: fcmp_gt_v16f16: 2864; NONEON-NOSVE: // %bb.0: 2865; NONEON-NOSVE-NEXT: sub sp, sp, #96 2866; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2867; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 2868; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 2869; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 2870; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 2871; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 2872; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 2873; NONEON-NOSVE-NEXT: fcvt s0, h0 2874; NONEON-NOSVE-NEXT: fcvt s1, h1 2875; NONEON-NOSVE-NEXT: fcmp s1, s0 2876; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 2877; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 2878; NONEON-NOSVE-NEXT: fcvt s0, h0 2879; NONEON-NOSVE-NEXT: fcvt s1, h1 2880; NONEON-NOSVE-NEXT: csetm w8, gt 2881; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 2882; NONEON-NOSVE-NEXT: fcmp s1, s0 2883; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 2884; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 2885; NONEON-NOSVE-NEXT: fcvt s0, h0 2886; NONEON-NOSVE-NEXT: fcvt s1, h1 2887; NONEON-NOSVE-NEXT: csetm w8, gt 2888; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 2889; NONEON-NOSVE-NEXT: fcmp s1, s0 2890; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 2891; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 2892; NONEON-NOSVE-NEXT: fcvt s0, h0 2893; NONEON-NOSVE-NEXT: fcvt s1, h1 2894; NONEON-NOSVE-NEXT: csetm w8, gt 2895; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 2896; NONEON-NOSVE-NEXT: fcmp s1, s0 2897; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 2898; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 2899; NONEON-NOSVE-NEXT: fcvt s0, h0 2900; NONEON-NOSVE-NEXT: fcvt s1, h1 2901; NONEON-NOSVE-NEXT: csetm w8, gt 2902; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 2903; NONEON-NOSVE-NEXT: fcmp s1, s0 2904; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 2905; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 2906; NONEON-NOSVE-NEXT: fcvt s0, h0 2907; NONEON-NOSVE-NEXT: fcvt s1, h1 2908; NONEON-NOSVE-NEXT: csetm w8, gt 2909; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 2910; NONEON-NOSVE-NEXT: fcmp s1, s0 2911; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 2912; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 2913; NONEON-NOSVE-NEXT: fcvt s0, h0 2914; NONEON-NOSVE-NEXT: fcvt s1, h1 2915; NONEON-NOSVE-NEXT: csetm w8, gt 2916; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 2917; NONEON-NOSVE-NEXT: fcmp s1, s0 2918; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 2919; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 2920; NONEON-NOSVE-NEXT: fcvt s0, h0 2921; NONEON-NOSVE-NEXT: fcvt s1, h1 2922; NONEON-NOSVE-NEXT: csetm w8, gt 2923; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 2924; NONEON-NOSVE-NEXT: fcmp s1, s0 2925; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 2926; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 2927; NONEON-NOSVE-NEXT: fcvt s0, h0 2928; NONEON-NOSVE-NEXT: fcvt s1, h1 2929; NONEON-NOSVE-NEXT: csetm w8, gt 2930; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 2931; NONEON-NOSVE-NEXT: fcmp s1, s0 2932; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 2933; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 2934; NONEON-NOSVE-NEXT: fcvt s0, h0 2935; NONEON-NOSVE-NEXT: fcvt s1, h1 2936; NONEON-NOSVE-NEXT: csetm w8, gt 2937; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 2938; NONEON-NOSVE-NEXT: fcmp s1, s0 2939; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 2940; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 2941; NONEON-NOSVE-NEXT: fcvt s0, h0 2942; NONEON-NOSVE-NEXT: fcvt s1, h1 2943; NONEON-NOSVE-NEXT: csetm w8, gt 2944; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 2945; NONEON-NOSVE-NEXT: fcmp s1, s0 2946; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 2947; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 2948; NONEON-NOSVE-NEXT: fcvt s0, h0 2949; NONEON-NOSVE-NEXT: fcvt s1, h1 2950; NONEON-NOSVE-NEXT: csetm w8, gt 2951; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 2952; NONEON-NOSVE-NEXT: fcmp s1, s0 2953; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 2954; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 2955; NONEON-NOSVE-NEXT: fcvt s0, h0 2956; NONEON-NOSVE-NEXT: fcvt s1, h1 2957; NONEON-NOSVE-NEXT: csetm w8, gt 2958; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 2959; NONEON-NOSVE-NEXT: fcmp s1, s0 2960; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 2961; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 2962; NONEON-NOSVE-NEXT: fcvt s0, h0 2963; NONEON-NOSVE-NEXT: fcvt s1, h1 2964; NONEON-NOSVE-NEXT: csetm w8, gt 2965; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 2966; NONEON-NOSVE-NEXT: fcmp s1, s0 2967; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 2968; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 2969; NONEON-NOSVE-NEXT: fcvt s0, h0 2970; NONEON-NOSVE-NEXT: fcvt s1, h1 2971; NONEON-NOSVE-NEXT: csetm w8, gt 2972; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 2973; NONEON-NOSVE-NEXT: fcmp s1, s0 2974; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 2975; NONEON-NOSVE-NEXT: ldr h1, [sp] 2976; NONEON-NOSVE-NEXT: fcvt s0, h0 2977; NONEON-NOSVE-NEXT: fcvt s1, h1 2978; NONEON-NOSVE-NEXT: csetm w8, gt 2979; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 2980; NONEON-NOSVE-NEXT: fcmp s1, s0 2981; NONEON-NOSVE-NEXT: csetm w8, gt 2982; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 2983; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 2984; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 2985; NONEON-NOSVE-NEXT: add sp, sp, #96 2986; NONEON-NOSVE-NEXT: ret 2987 %op1 = load <16 x half>, ptr %a 2988 %op2 = load <16 x half>, ptr %b 2989 %cmp = fcmp fast ogt <16 x half> %op1, %op2 2990 %sext = sext <16 x i1> %cmp to <16 x i16> 2991 store <16 x i16> %sext, ptr %c 2992 ret void 2993} 2994 2995; 2996; FCMP LT 2997; 2998 2999define void @fcmp_lt_v16f16(ptr %a, ptr %b, ptr %c) { 3000; CHECK-LABEL: fcmp_lt_v16f16: 3001; CHECK: // %bb.0: 3002; CHECK-NEXT: ldp q0, q3, [x1] 3003; CHECK-NEXT: ptrue p0.h, vl8 3004; CHECK-NEXT: ldp q1, q2, [x0] 3005; CHECK-NEXT: fcmgt p1.h, p0/z, z0.h, z1.h 3006; CHECK-NEXT: fcmgt p0.h, p0/z, z3.h, z2.h 3007; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 3008; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 3009; CHECK-NEXT: stp q0, q1, [x2] 3010; CHECK-NEXT: ret 3011; 3012; NONEON-NOSVE-LABEL: fcmp_lt_v16f16: 3013; NONEON-NOSVE: // %bb.0: 3014; NONEON-NOSVE-NEXT: sub sp, sp, #96 3015; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 3016; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 3017; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 3018; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 3019; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 3020; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 3021; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 3022; NONEON-NOSVE-NEXT: fcvt s0, h0 3023; NONEON-NOSVE-NEXT: fcvt s1, h1 3024; NONEON-NOSVE-NEXT: fcmp s1, s0 3025; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 3026; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 3027; NONEON-NOSVE-NEXT: fcvt s0, h0 3028; NONEON-NOSVE-NEXT: fcvt s1, h1 3029; NONEON-NOSVE-NEXT: csetm w8, lt 3030; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 3031; NONEON-NOSVE-NEXT: fcmp s1, s0 3032; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 3033; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 3034; NONEON-NOSVE-NEXT: fcvt s0, h0 3035; NONEON-NOSVE-NEXT: fcvt s1, h1 3036; NONEON-NOSVE-NEXT: csetm w8, lt 3037; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 3038; NONEON-NOSVE-NEXT: fcmp s1, s0 3039; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 3040; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 3041; NONEON-NOSVE-NEXT: fcvt s0, h0 3042; NONEON-NOSVE-NEXT: fcvt s1, h1 3043; NONEON-NOSVE-NEXT: csetm w8, lt 3044; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 3045; NONEON-NOSVE-NEXT: fcmp s1, s0 3046; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 3047; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 3048; NONEON-NOSVE-NEXT: fcvt s0, h0 3049; NONEON-NOSVE-NEXT: fcvt s1, h1 3050; NONEON-NOSVE-NEXT: csetm w8, lt 3051; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 3052; NONEON-NOSVE-NEXT: fcmp s1, s0 3053; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 3054; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 3055; NONEON-NOSVE-NEXT: fcvt s0, h0 3056; NONEON-NOSVE-NEXT: fcvt s1, h1 3057; NONEON-NOSVE-NEXT: csetm w8, lt 3058; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 3059; NONEON-NOSVE-NEXT: fcmp s1, s0 3060; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 3061; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 3062; NONEON-NOSVE-NEXT: fcvt s0, h0 3063; NONEON-NOSVE-NEXT: fcvt s1, h1 3064; NONEON-NOSVE-NEXT: csetm w8, lt 3065; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 3066; NONEON-NOSVE-NEXT: fcmp s1, s0 3067; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 3068; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 3069; NONEON-NOSVE-NEXT: fcvt s0, h0 3070; NONEON-NOSVE-NEXT: fcvt s1, h1 3071; NONEON-NOSVE-NEXT: csetm w8, lt 3072; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 3073; NONEON-NOSVE-NEXT: fcmp s1, s0 3074; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 3075; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 3076; NONEON-NOSVE-NEXT: fcvt s0, h0 3077; NONEON-NOSVE-NEXT: fcvt s1, h1 3078; NONEON-NOSVE-NEXT: csetm w8, lt 3079; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 3080; NONEON-NOSVE-NEXT: fcmp s1, s0 3081; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 3082; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 3083; NONEON-NOSVE-NEXT: fcvt s0, h0 3084; NONEON-NOSVE-NEXT: fcvt s1, h1 3085; NONEON-NOSVE-NEXT: csetm w8, lt 3086; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 3087; NONEON-NOSVE-NEXT: fcmp s1, s0 3088; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 3089; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 3090; NONEON-NOSVE-NEXT: fcvt s0, h0 3091; NONEON-NOSVE-NEXT: fcvt s1, h1 3092; NONEON-NOSVE-NEXT: csetm w8, lt 3093; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 3094; NONEON-NOSVE-NEXT: fcmp s1, s0 3095; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 3096; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 3097; NONEON-NOSVE-NEXT: fcvt s0, h0 3098; NONEON-NOSVE-NEXT: fcvt s1, h1 3099; NONEON-NOSVE-NEXT: csetm w8, lt 3100; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 3101; NONEON-NOSVE-NEXT: fcmp s1, s0 3102; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 3103; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 3104; NONEON-NOSVE-NEXT: fcvt s0, h0 3105; NONEON-NOSVE-NEXT: fcvt s1, h1 3106; NONEON-NOSVE-NEXT: csetm w8, lt 3107; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 3108; NONEON-NOSVE-NEXT: fcmp s1, s0 3109; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 3110; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 3111; NONEON-NOSVE-NEXT: fcvt s0, h0 3112; NONEON-NOSVE-NEXT: fcvt s1, h1 3113; NONEON-NOSVE-NEXT: csetm w8, lt 3114; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 3115; NONEON-NOSVE-NEXT: fcmp s1, s0 3116; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 3117; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 3118; NONEON-NOSVE-NEXT: fcvt s0, h0 3119; NONEON-NOSVE-NEXT: fcvt s1, h1 3120; NONEON-NOSVE-NEXT: csetm w8, lt 3121; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 3122; NONEON-NOSVE-NEXT: fcmp s1, s0 3123; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 3124; NONEON-NOSVE-NEXT: ldr h1, [sp] 3125; NONEON-NOSVE-NEXT: fcvt s0, h0 3126; NONEON-NOSVE-NEXT: fcvt s1, h1 3127; NONEON-NOSVE-NEXT: csetm w8, lt 3128; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 3129; NONEON-NOSVE-NEXT: fcmp s1, s0 3130; NONEON-NOSVE-NEXT: csetm w8, lt 3131; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 3132; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 3133; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 3134; NONEON-NOSVE-NEXT: add sp, sp, #96 3135; NONEON-NOSVE-NEXT: ret 3136 %op1 = load <16 x half>, ptr %a 3137 %op2 = load <16 x half>, ptr %b 3138 %cmp = fcmp fast olt <16 x half> %op1, %op2 3139 %sext = sext <16 x i1> %cmp to <16 x i16> 3140 store <16 x i16> %sext, ptr %c 3141 ret void 3142} 3143 3144; 3145; FCMP GE 3146; 3147 3148define void @fcmp_ge_v16f16(ptr %a, ptr %b, ptr %c) { 3149; CHECK-LABEL: fcmp_ge_v16f16: 3150; CHECK: // %bb.0: 3151; CHECK-NEXT: ldp q0, q3, [x1] 3152; CHECK-NEXT: ptrue p0.h, vl8 3153; CHECK-NEXT: ldp q1, q2, [x0] 3154; CHECK-NEXT: fcmge p1.h, p0/z, z1.h, z0.h 3155; CHECK-NEXT: fcmge p0.h, p0/z, z2.h, z3.h 3156; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 3157; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 3158; CHECK-NEXT: stp q0, q1, [x2] 3159; CHECK-NEXT: ret 3160; 3161; NONEON-NOSVE-LABEL: fcmp_ge_v16f16: 3162; NONEON-NOSVE: // %bb.0: 3163; NONEON-NOSVE-NEXT: sub sp, sp, #96 3164; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 3165; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 3166; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 3167; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 3168; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 3169; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 3170; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 3171; NONEON-NOSVE-NEXT: fcvt s0, h0 3172; NONEON-NOSVE-NEXT: fcvt s1, h1 3173; NONEON-NOSVE-NEXT: fcmp s1, s0 3174; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 3175; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 3176; NONEON-NOSVE-NEXT: fcvt s0, h0 3177; NONEON-NOSVE-NEXT: fcvt s1, h1 3178; NONEON-NOSVE-NEXT: csetm w8, ge 3179; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 3180; NONEON-NOSVE-NEXT: fcmp s1, s0 3181; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 3182; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 3183; NONEON-NOSVE-NEXT: fcvt s0, h0 3184; NONEON-NOSVE-NEXT: fcvt s1, h1 3185; NONEON-NOSVE-NEXT: csetm w8, ge 3186; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 3187; NONEON-NOSVE-NEXT: fcmp s1, s0 3188; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 3189; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 3190; NONEON-NOSVE-NEXT: fcvt s0, h0 3191; NONEON-NOSVE-NEXT: fcvt s1, h1 3192; NONEON-NOSVE-NEXT: csetm w8, ge 3193; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 3194; NONEON-NOSVE-NEXT: fcmp s1, s0 3195; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 3196; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 3197; NONEON-NOSVE-NEXT: fcvt s0, h0 3198; NONEON-NOSVE-NEXT: fcvt s1, h1 3199; NONEON-NOSVE-NEXT: csetm w8, ge 3200; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 3201; NONEON-NOSVE-NEXT: fcmp s1, s0 3202; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 3203; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 3204; NONEON-NOSVE-NEXT: fcvt s0, h0 3205; NONEON-NOSVE-NEXT: fcvt s1, h1 3206; NONEON-NOSVE-NEXT: csetm w8, ge 3207; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 3208; NONEON-NOSVE-NEXT: fcmp s1, s0 3209; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 3210; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 3211; NONEON-NOSVE-NEXT: fcvt s0, h0 3212; NONEON-NOSVE-NEXT: fcvt s1, h1 3213; NONEON-NOSVE-NEXT: csetm w8, ge 3214; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 3215; NONEON-NOSVE-NEXT: fcmp s1, s0 3216; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 3217; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 3218; NONEON-NOSVE-NEXT: fcvt s0, h0 3219; NONEON-NOSVE-NEXT: fcvt s1, h1 3220; NONEON-NOSVE-NEXT: csetm w8, ge 3221; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 3222; NONEON-NOSVE-NEXT: fcmp s1, s0 3223; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 3224; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 3225; NONEON-NOSVE-NEXT: fcvt s0, h0 3226; NONEON-NOSVE-NEXT: fcvt s1, h1 3227; NONEON-NOSVE-NEXT: csetm w8, ge 3228; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 3229; NONEON-NOSVE-NEXT: fcmp s1, s0 3230; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 3231; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 3232; NONEON-NOSVE-NEXT: fcvt s0, h0 3233; NONEON-NOSVE-NEXT: fcvt s1, h1 3234; NONEON-NOSVE-NEXT: csetm w8, ge 3235; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 3236; NONEON-NOSVE-NEXT: fcmp s1, s0 3237; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 3238; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 3239; NONEON-NOSVE-NEXT: fcvt s0, h0 3240; NONEON-NOSVE-NEXT: fcvt s1, h1 3241; NONEON-NOSVE-NEXT: csetm w8, ge 3242; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 3243; NONEON-NOSVE-NEXT: fcmp s1, s0 3244; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 3245; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 3246; NONEON-NOSVE-NEXT: fcvt s0, h0 3247; NONEON-NOSVE-NEXT: fcvt s1, h1 3248; NONEON-NOSVE-NEXT: csetm w8, ge 3249; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 3250; NONEON-NOSVE-NEXT: fcmp s1, s0 3251; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 3252; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 3253; NONEON-NOSVE-NEXT: fcvt s0, h0 3254; NONEON-NOSVE-NEXT: fcvt s1, h1 3255; NONEON-NOSVE-NEXT: csetm w8, ge 3256; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 3257; NONEON-NOSVE-NEXT: fcmp s1, s0 3258; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 3259; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 3260; NONEON-NOSVE-NEXT: fcvt s0, h0 3261; NONEON-NOSVE-NEXT: fcvt s1, h1 3262; NONEON-NOSVE-NEXT: csetm w8, ge 3263; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 3264; NONEON-NOSVE-NEXT: fcmp s1, s0 3265; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 3266; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 3267; NONEON-NOSVE-NEXT: fcvt s0, h0 3268; NONEON-NOSVE-NEXT: fcvt s1, h1 3269; NONEON-NOSVE-NEXT: csetm w8, ge 3270; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 3271; NONEON-NOSVE-NEXT: fcmp s1, s0 3272; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 3273; NONEON-NOSVE-NEXT: ldr h1, [sp] 3274; NONEON-NOSVE-NEXT: fcvt s0, h0 3275; NONEON-NOSVE-NEXT: fcvt s1, h1 3276; NONEON-NOSVE-NEXT: csetm w8, ge 3277; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 3278; NONEON-NOSVE-NEXT: fcmp s1, s0 3279; NONEON-NOSVE-NEXT: csetm w8, ge 3280; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 3281; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 3282; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 3283; NONEON-NOSVE-NEXT: add sp, sp, #96 3284; NONEON-NOSVE-NEXT: ret 3285 %op1 = load <16 x half>, ptr %a 3286 %op2 = load <16 x half>, ptr %b 3287 %cmp = fcmp fast oge <16 x half> %op1, %op2 3288 %sext = sext <16 x i1> %cmp to <16 x i16> 3289 store <16 x i16> %sext, ptr %c 3290 ret void 3291} 3292 3293; 3294; FCMP LE 3295; 3296 3297define void @fcmp_le_v16f16(ptr %a, ptr %b, ptr %c) { 3298; CHECK-LABEL: fcmp_le_v16f16: 3299; CHECK: // %bb.0: 3300; CHECK-NEXT: ldp q0, q3, [x1] 3301; CHECK-NEXT: ptrue p0.h, vl8 3302; CHECK-NEXT: ldp q1, q2, [x0] 3303; CHECK-NEXT: fcmge p1.h, p0/z, z0.h, z1.h 3304; CHECK-NEXT: fcmge p0.h, p0/z, z3.h, z2.h 3305; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff 3306; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff 3307; CHECK-NEXT: stp q0, q1, [x2] 3308; CHECK-NEXT: ret 3309; 3310; NONEON-NOSVE-LABEL: fcmp_le_v16f16: 3311; NONEON-NOSVE: // %bb.0: 3312; NONEON-NOSVE-NEXT: sub sp, sp, #96 3313; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 3314; NONEON-NOSVE-NEXT: ldp q3, q0, [x1] 3315; NONEON-NOSVE-NEXT: ldp q2, q1, [x0] 3316; NONEON-NOSVE-NEXT: stp q2, q3, [sp] 3317; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32] 3318; NONEON-NOSVE-NEXT: ldr h0, [sp, #62] 3319; NONEON-NOSVE-NEXT: ldr h1, [sp, #46] 3320; NONEON-NOSVE-NEXT: fcvt s0, h0 3321; NONEON-NOSVE-NEXT: fcvt s1, h1 3322; NONEON-NOSVE-NEXT: fcmp s1, s0 3323; NONEON-NOSVE-NEXT: ldr h0, [sp, #60] 3324; NONEON-NOSVE-NEXT: ldr h1, [sp, #44] 3325; NONEON-NOSVE-NEXT: fcvt s0, h0 3326; NONEON-NOSVE-NEXT: fcvt s1, h1 3327; NONEON-NOSVE-NEXT: csetm w8, le 3328; NONEON-NOSVE-NEXT: strh w8, [sp, #94] 3329; NONEON-NOSVE-NEXT: fcmp s1, s0 3330; NONEON-NOSVE-NEXT: ldr h0, [sp, #58] 3331; NONEON-NOSVE-NEXT: ldr h1, [sp, #42] 3332; NONEON-NOSVE-NEXT: fcvt s0, h0 3333; NONEON-NOSVE-NEXT: fcvt s1, h1 3334; NONEON-NOSVE-NEXT: csetm w8, le 3335; NONEON-NOSVE-NEXT: strh w8, [sp, #92] 3336; NONEON-NOSVE-NEXT: fcmp s1, s0 3337; NONEON-NOSVE-NEXT: ldr h0, [sp, #56] 3338; NONEON-NOSVE-NEXT: ldr h1, [sp, #40] 3339; NONEON-NOSVE-NEXT: fcvt s0, h0 3340; NONEON-NOSVE-NEXT: fcvt s1, h1 3341; NONEON-NOSVE-NEXT: csetm w8, le 3342; NONEON-NOSVE-NEXT: strh w8, [sp, #90] 3343; NONEON-NOSVE-NEXT: fcmp s1, s0 3344; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 3345; NONEON-NOSVE-NEXT: ldr h1, [sp, #38] 3346; NONEON-NOSVE-NEXT: fcvt s0, h0 3347; NONEON-NOSVE-NEXT: fcvt s1, h1 3348; NONEON-NOSVE-NEXT: csetm w8, le 3349; NONEON-NOSVE-NEXT: strh w8, [sp, #88] 3350; NONEON-NOSVE-NEXT: fcmp s1, s0 3351; NONEON-NOSVE-NEXT: ldr h0, [sp, #52] 3352; NONEON-NOSVE-NEXT: ldr h1, [sp, #36] 3353; NONEON-NOSVE-NEXT: fcvt s0, h0 3354; NONEON-NOSVE-NEXT: fcvt s1, h1 3355; NONEON-NOSVE-NEXT: csetm w8, le 3356; NONEON-NOSVE-NEXT: strh w8, [sp, #86] 3357; NONEON-NOSVE-NEXT: fcmp s1, s0 3358; NONEON-NOSVE-NEXT: ldr h0, [sp, #50] 3359; NONEON-NOSVE-NEXT: ldr h1, [sp, #34] 3360; NONEON-NOSVE-NEXT: fcvt s0, h0 3361; NONEON-NOSVE-NEXT: fcvt s1, h1 3362; NONEON-NOSVE-NEXT: csetm w8, le 3363; NONEON-NOSVE-NEXT: strh w8, [sp, #84] 3364; NONEON-NOSVE-NEXT: fcmp s1, s0 3365; NONEON-NOSVE-NEXT: ldr h0, [sp, #48] 3366; NONEON-NOSVE-NEXT: ldr h1, [sp, #32] 3367; NONEON-NOSVE-NEXT: fcvt s0, h0 3368; NONEON-NOSVE-NEXT: fcvt s1, h1 3369; NONEON-NOSVE-NEXT: csetm w8, le 3370; NONEON-NOSVE-NEXT: strh w8, [sp, #82] 3371; NONEON-NOSVE-NEXT: fcmp s1, s0 3372; NONEON-NOSVE-NEXT: ldr h0, [sp, #30] 3373; NONEON-NOSVE-NEXT: ldr h1, [sp, #14] 3374; NONEON-NOSVE-NEXT: fcvt s0, h0 3375; NONEON-NOSVE-NEXT: fcvt s1, h1 3376; NONEON-NOSVE-NEXT: csetm w8, le 3377; NONEON-NOSVE-NEXT: strh w8, [sp, #80] 3378; NONEON-NOSVE-NEXT: fcmp s1, s0 3379; NONEON-NOSVE-NEXT: ldr h0, [sp, #28] 3380; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 3381; NONEON-NOSVE-NEXT: fcvt s0, h0 3382; NONEON-NOSVE-NEXT: fcvt s1, h1 3383; NONEON-NOSVE-NEXT: csetm w8, le 3384; NONEON-NOSVE-NEXT: strh w8, [sp, #78] 3385; NONEON-NOSVE-NEXT: fcmp s1, s0 3386; NONEON-NOSVE-NEXT: ldr h0, [sp, #26] 3387; NONEON-NOSVE-NEXT: ldr h1, [sp, #10] 3388; NONEON-NOSVE-NEXT: fcvt s0, h0 3389; NONEON-NOSVE-NEXT: fcvt s1, h1 3390; NONEON-NOSVE-NEXT: csetm w8, le 3391; NONEON-NOSVE-NEXT: strh w8, [sp, #76] 3392; NONEON-NOSVE-NEXT: fcmp s1, s0 3393; NONEON-NOSVE-NEXT: ldr h0, [sp, #24] 3394; NONEON-NOSVE-NEXT: ldr h1, [sp, #8] 3395; NONEON-NOSVE-NEXT: fcvt s0, h0 3396; NONEON-NOSVE-NEXT: fcvt s1, h1 3397; NONEON-NOSVE-NEXT: csetm w8, le 3398; NONEON-NOSVE-NEXT: strh w8, [sp, #74] 3399; NONEON-NOSVE-NEXT: fcmp s1, s0 3400; NONEON-NOSVE-NEXT: ldr h0, [sp, #22] 3401; NONEON-NOSVE-NEXT: ldr h1, [sp, #6] 3402; NONEON-NOSVE-NEXT: fcvt s0, h0 3403; NONEON-NOSVE-NEXT: fcvt s1, h1 3404; NONEON-NOSVE-NEXT: csetm w8, le 3405; NONEON-NOSVE-NEXT: strh w8, [sp, #72] 3406; NONEON-NOSVE-NEXT: fcmp s1, s0 3407; NONEON-NOSVE-NEXT: ldr h0, [sp, #20] 3408; NONEON-NOSVE-NEXT: ldr h1, [sp, #4] 3409; NONEON-NOSVE-NEXT: fcvt s0, h0 3410; NONEON-NOSVE-NEXT: fcvt s1, h1 3411; NONEON-NOSVE-NEXT: csetm w8, le 3412; NONEON-NOSVE-NEXT: strh w8, [sp, #70] 3413; NONEON-NOSVE-NEXT: fcmp s1, s0 3414; NONEON-NOSVE-NEXT: ldr h0, [sp, #18] 3415; NONEON-NOSVE-NEXT: ldr h1, [sp, #2] 3416; NONEON-NOSVE-NEXT: fcvt s0, h0 3417; NONEON-NOSVE-NEXT: fcvt s1, h1 3418; NONEON-NOSVE-NEXT: csetm w8, le 3419; NONEON-NOSVE-NEXT: strh w8, [sp, #68] 3420; NONEON-NOSVE-NEXT: fcmp s1, s0 3421; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 3422; NONEON-NOSVE-NEXT: ldr h1, [sp] 3423; NONEON-NOSVE-NEXT: fcvt s0, h0 3424; NONEON-NOSVE-NEXT: fcvt s1, h1 3425; NONEON-NOSVE-NEXT: csetm w8, le 3426; NONEON-NOSVE-NEXT: strh w8, [sp, #66] 3427; NONEON-NOSVE-NEXT: fcmp s1, s0 3428; NONEON-NOSVE-NEXT: csetm w8, le 3429; NONEON-NOSVE-NEXT: strh w8, [sp, #64] 3430; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64] 3431; NONEON-NOSVE-NEXT: stp q0, q1, [x2] 3432; NONEON-NOSVE-NEXT: add sp, sp, #96 3433; NONEON-NOSVE-NEXT: ret 3434 %op1 = load <16 x half>, ptr %a 3435 %op2 = load <16 x half>, ptr %b 3436 %cmp = fcmp fast ole <16 x half> %op1, %op2 3437 %sext = sext <16 x i1> %cmp to <16 x i16> 3438 store <16 x i16> %sext, ptr %c 3439 ret void 3440} 3441