1504 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8;9; ICMP EQ10;11 12define <8 x i8> @icmp_eq_v8i8(<8 x i8> %op1, <8 x i8> %op2) {13; CHECK-LABEL: icmp_eq_v8i8:14; CHECK: // %bb.0:15; CHECK-NEXT: ptrue p0.b, vl816; CHECK-NEXT: // kill: def $d1 killed $d1 def $z117; CHECK-NEXT: // kill: def $d0 killed $d0 def $z018; CHECK-NEXT: cmpeq p0.b, p0/z, z0.b, z1.b19; CHECK-NEXT: mov z0.b, p0/z, #-1 // =0xffffffffffffffff20; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z021; CHECK-NEXT: ret22;23; NONEON-NOSVE-LABEL: icmp_eq_v8i8:24; NONEON-NOSVE: // %bb.0:25; NONEON-NOSVE-NEXT: sub sp, sp, #3226; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 3227; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]28; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]29; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]30; NONEON-NOSVE-NEXT: cmp w9, w831; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]32; NONEON-NOSVE-NEXT: csetm w8, eq33; NONEON-NOSVE-NEXT: strb w8, [sp, #31]34; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]35; NONEON-NOSVE-NEXT: cmp w9, w836; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]37; NONEON-NOSVE-NEXT: csetm w8, eq38; NONEON-NOSVE-NEXT: strb w8, [sp, #30]39; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]40; NONEON-NOSVE-NEXT: cmp w9, w841; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]42; NONEON-NOSVE-NEXT: csetm w8, eq43; NONEON-NOSVE-NEXT: strb w8, [sp, #29]44; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]45; NONEON-NOSVE-NEXT: cmp w9, w846; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]47; NONEON-NOSVE-NEXT: csetm w8, eq48; NONEON-NOSVE-NEXT: strb w8, [sp, #28]49; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]50; NONEON-NOSVE-NEXT: cmp w9, w851; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]52; NONEON-NOSVE-NEXT: csetm w8, eq53; NONEON-NOSVE-NEXT: strb w8, [sp, #27]54; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]55; NONEON-NOSVE-NEXT: cmp w9, w856; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]57; NONEON-NOSVE-NEXT: csetm w8, eq58; NONEON-NOSVE-NEXT: strb w8, [sp, #26]59; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]60; NONEON-NOSVE-NEXT: cmp w9, w861; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]62; NONEON-NOSVE-NEXT: csetm w8, eq63; NONEON-NOSVE-NEXT: strb w8, [sp, #25]64; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]65; NONEON-NOSVE-NEXT: cmp w9, w866; NONEON-NOSVE-NEXT: csetm w8, eq67; NONEON-NOSVE-NEXT: strb w8, [sp, #24]68; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]69; NONEON-NOSVE-NEXT: add sp, sp, #3270; NONEON-NOSVE-NEXT: ret71 %cmp = icmp eq <8 x i8> %op1, %op272 %sext = sext <8 x i1> %cmp to <8 x i8>73 ret <8 x i8> %sext74}75 76define <16 x i8> @icmp_eq_v16i8(<16 x i8> %op1, <16 x i8> %op2) {77; CHECK-LABEL: icmp_eq_v16i8:78; CHECK: // %bb.0:79; CHECK-NEXT: ptrue p0.b, vl1680; CHECK-NEXT: // kill: def $q1 killed $q1 def $z181; CHECK-NEXT: // kill: def $q0 killed $q0 def $z082; CHECK-NEXT: cmpeq p0.b, p0/z, z0.b, z1.b83; CHECK-NEXT: mov z0.b, p0/z, #-1 // =0xffffffffffffffff84; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z085; CHECK-NEXT: ret86;87; NONEON-NOSVE-LABEL: icmp_eq_v16i8:88; NONEON-NOSVE: // %bb.0:89; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!90; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 4891; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]92; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]93; NONEON-NOSVE-NEXT: cmp w9, w894; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]95; NONEON-NOSVE-NEXT: csetm w8, eq96; NONEON-NOSVE-NEXT: strb w8, [sp, #47]97; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]98; NONEON-NOSVE-NEXT: cmp w9, w899; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]100; NONEON-NOSVE-NEXT: csetm w8, eq101; NONEON-NOSVE-NEXT: strb w8, [sp, #46]102; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]103; NONEON-NOSVE-NEXT: cmp w9, w8104; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]105; NONEON-NOSVE-NEXT: csetm w8, eq106; NONEON-NOSVE-NEXT: strb w8, [sp, #45]107; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]108; NONEON-NOSVE-NEXT: cmp w9, w8109; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]110; NONEON-NOSVE-NEXT: csetm w8, eq111; NONEON-NOSVE-NEXT: strb w8, [sp, #44]112; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]113; NONEON-NOSVE-NEXT: cmp w9, w8114; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]115; NONEON-NOSVE-NEXT: csetm w8, eq116; NONEON-NOSVE-NEXT: strb w8, [sp, #43]117; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]118; NONEON-NOSVE-NEXT: cmp w9, w8119; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]120; NONEON-NOSVE-NEXT: csetm w8, eq121; NONEON-NOSVE-NEXT: strb w8, [sp, #42]122; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]123; NONEON-NOSVE-NEXT: cmp w9, w8124; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]125; NONEON-NOSVE-NEXT: csetm w8, eq126; NONEON-NOSVE-NEXT: strb w8, [sp, #41]127; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]128; NONEON-NOSVE-NEXT: cmp w9, w8129; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]130; NONEON-NOSVE-NEXT: csetm w8, eq131; NONEON-NOSVE-NEXT: strb w8, [sp, #40]132; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]133; NONEON-NOSVE-NEXT: cmp w9, w8134; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]135; NONEON-NOSVE-NEXT: csetm w8, eq136; NONEON-NOSVE-NEXT: strb w8, [sp, #39]137; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]138; NONEON-NOSVE-NEXT: cmp w9, w8139; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]140; NONEON-NOSVE-NEXT: csetm w8, eq141; NONEON-NOSVE-NEXT: strb w8, [sp, #38]142; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]143; NONEON-NOSVE-NEXT: cmp w9, w8144; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]145; NONEON-NOSVE-NEXT: csetm w8, eq146; NONEON-NOSVE-NEXT: strb w8, [sp, #37]147; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]148; NONEON-NOSVE-NEXT: cmp w9, w8149; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]150; NONEON-NOSVE-NEXT: csetm w8, eq151; NONEON-NOSVE-NEXT: strb w8, [sp, #36]152; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]153; NONEON-NOSVE-NEXT: cmp w9, w8154; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]155; NONEON-NOSVE-NEXT: csetm w8, eq156; NONEON-NOSVE-NEXT: strb w8, [sp, #35]157; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]158; NONEON-NOSVE-NEXT: cmp w9, w8159; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]160; NONEON-NOSVE-NEXT: csetm w8, eq161; NONEON-NOSVE-NEXT: strb w8, [sp, #34]162; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]163; NONEON-NOSVE-NEXT: cmp w9, w8164; NONEON-NOSVE-NEXT: ldrb w9, [sp]165; NONEON-NOSVE-NEXT: csetm w8, eq166; NONEON-NOSVE-NEXT: strb w8, [sp, #33]167; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]168; NONEON-NOSVE-NEXT: cmp w9, w8169; NONEON-NOSVE-NEXT: csetm w8, eq170; NONEON-NOSVE-NEXT: strb w8, [sp, #32]171; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]172; NONEON-NOSVE-NEXT: add sp, sp, #48173; NONEON-NOSVE-NEXT: ret174 %cmp = icmp eq <16 x i8> %op1, %op2175 %sext = sext <16 x i1> %cmp to <16 x i8>176 ret <16 x i8> %sext177}178 179define void @icmp_eq_v32i8(ptr %a, ptr %b) {180; CHECK-LABEL: icmp_eq_v32i8:181; CHECK: // %bb.0:182; CHECK-NEXT: ldp q0, q3, [x1]183; CHECK-NEXT: ptrue p0.b, vl16184; CHECK-NEXT: ldp q1, q2, [x0]185; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z0.b186; CHECK-NEXT: cmpeq p0.b, p0/z, z2.b, z3.b187; CHECK-NEXT: mov z0.b, p1/z, #-1 // =0xffffffffffffffff188; CHECK-NEXT: mov z1.b, p0/z, #-1 // =0xffffffffffffffff189; CHECK-NEXT: stp q0, q1, [x0]190; CHECK-NEXT: ret191;192; NONEON-NOSVE-LABEL: icmp_eq_v32i8:193; NONEON-NOSVE: // %bb.0:194; NONEON-NOSVE-NEXT: sub sp, sp, #96195; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96196; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]197; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]198; NONEON-NOSVE-NEXT: stp q2, q3, [sp]199; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]200; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]201; NONEON-NOSVE-NEXT: ldrb w9, [sp, #47]202; NONEON-NOSVE-NEXT: cmp w9, w8203; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]204; NONEON-NOSVE-NEXT: csetm w8, eq205; NONEON-NOSVE-NEXT: strb w8, [sp, #95]206; NONEON-NOSVE-NEXT: ldrb w8, [sp, #62]207; NONEON-NOSVE-NEXT: cmp w9, w8208; NONEON-NOSVE-NEXT: ldrb w9, [sp, #45]209; NONEON-NOSVE-NEXT: csetm w8, eq210; NONEON-NOSVE-NEXT: strb w8, [sp, #94]211; NONEON-NOSVE-NEXT: ldrb w8, [sp, #61]212; NONEON-NOSVE-NEXT: cmp w9, w8213; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]214; NONEON-NOSVE-NEXT: csetm w8, eq215; NONEON-NOSVE-NEXT: strb w8, [sp, #93]216; NONEON-NOSVE-NEXT: ldrb w8, [sp, #60]217; NONEON-NOSVE-NEXT: cmp w9, w8218; NONEON-NOSVE-NEXT: ldrb w9, [sp, #43]219; NONEON-NOSVE-NEXT: csetm w8, eq220; NONEON-NOSVE-NEXT: strb w8, [sp, #92]221; NONEON-NOSVE-NEXT: ldrb w8, [sp, #59]222; NONEON-NOSVE-NEXT: cmp w9, w8223; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]224; NONEON-NOSVE-NEXT: csetm w8, eq225; NONEON-NOSVE-NEXT: strb w8, [sp, #91]226; NONEON-NOSVE-NEXT: ldrb w8, [sp, #58]227; NONEON-NOSVE-NEXT: cmp w9, w8228; NONEON-NOSVE-NEXT: ldrb w9, [sp, #41]229; NONEON-NOSVE-NEXT: csetm w8, eq230; NONEON-NOSVE-NEXT: strb w8, [sp, #90]231; NONEON-NOSVE-NEXT: ldrb w8, [sp, #57]232; NONEON-NOSVE-NEXT: cmp w9, w8233; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]234; NONEON-NOSVE-NEXT: csetm w8, eq235; NONEON-NOSVE-NEXT: strb w8, [sp, #89]236; NONEON-NOSVE-NEXT: ldrb w8, [sp, #56]237; NONEON-NOSVE-NEXT: cmp w9, w8238; NONEON-NOSVE-NEXT: ldrb w9, [sp, #39]239; NONEON-NOSVE-NEXT: csetm w8, eq240; NONEON-NOSVE-NEXT: strb w8, [sp, #88]241; NONEON-NOSVE-NEXT: ldrb w8, [sp, #55]242; NONEON-NOSVE-NEXT: cmp w9, w8243; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]244; NONEON-NOSVE-NEXT: csetm w8, eq245; NONEON-NOSVE-NEXT: strb w8, [sp, #87]246; NONEON-NOSVE-NEXT: ldrb w8, [sp, #54]247; NONEON-NOSVE-NEXT: cmp w9, w8248; NONEON-NOSVE-NEXT: ldrb w9, [sp, #37]249; NONEON-NOSVE-NEXT: csetm w8, eq250; NONEON-NOSVE-NEXT: strb w8, [sp, #86]251; NONEON-NOSVE-NEXT: ldrb w8, [sp, #53]252; NONEON-NOSVE-NEXT: cmp w9, w8253; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]254; NONEON-NOSVE-NEXT: csetm w8, eq255; NONEON-NOSVE-NEXT: strb w8, [sp, #85]256; NONEON-NOSVE-NEXT: ldrb w8, [sp, #52]257; NONEON-NOSVE-NEXT: cmp w9, w8258; NONEON-NOSVE-NEXT: ldrb w9, [sp, #35]259; NONEON-NOSVE-NEXT: csetm w8, eq260; NONEON-NOSVE-NEXT: strb w8, [sp, #84]261; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]262; NONEON-NOSVE-NEXT: cmp w9, w8263; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]264; NONEON-NOSVE-NEXT: csetm w8, eq265; NONEON-NOSVE-NEXT: strb w8, [sp, #83]266; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]267; NONEON-NOSVE-NEXT: cmp w9, w8268; NONEON-NOSVE-NEXT: ldrb w9, [sp, #33]269; NONEON-NOSVE-NEXT: csetm w8, eq270; NONEON-NOSVE-NEXT: strb w8, [sp, #82]271; NONEON-NOSVE-NEXT: ldrb w8, [sp, #49]272; NONEON-NOSVE-NEXT: cmp w9, w8273; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]274; NONEON-NOSVE-NEXT: csetm w8, eq275; NONEON-NOSVE-NEXT: strb w8, [sp, #81]276; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]277; NONEON-NOSVE-NEXT: cmp w9, w8278; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]279; NONEON-NOSVE-NEXT: csetm w8, eq280; NONEON-NOSVE-NEXT: strb w8, [sp, #80]281; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]282; NONEON-NOSVE-NEXT: cmp w9, w8283; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]284; NONEON-NOSVE-NEXT: csetm w8, eq285; NONEON-NOSVE-NEXT: strb w8, [sp, #79]286; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]287; NONEON-NOSVE-NEXT: cmp w9, w8288; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]289; NONEON-NOSVE-NEXT: csetm w8, eq290; NONEON-NOSVE-NEXT: strb w8, [sp, #78]291; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]292; NONEON-NOSVE-NEXT: cmp w9, w8293; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]294; NONEON-NOSVE-NEXT: csetm w8, eq295; NONEON-NOSVE-NEXT: strb w8, [sp, #77]296; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]297; NONEON-NOSVE-NEXT: cmp w9, w8298; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]299; NONEON-NOSVE-NEXT: csetm w8, eq300; NONEON-NOSVE-NEXT: strb w8, [sp, #76]301; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]302; NONEON-NOSVE-NEXT: cmp w9, w8303; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]304; NONEON-NOSVE-NEXT: csetm w8, eq305; NONEON-NOSVE-NEXT: strb w8, [sp, #75]306; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]307; NONEON-NOSVE-NEXT: cmp w9, w8308; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]309; NONEON-NOSVE-NEXT: csetm w8, eq310; NONEON-NOSVE-NEXT: strb w8, [sp, #74]311; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]312; NONEON-NOSVE-NEXT: cmp w9, w8313; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]314; NONEON-NOSVE-NEXT: csetm w8, eq315; NONEON-NOSVE-NEXT: strb w8, [sp, #73]316; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]317; NONEON-NOSVE-NEXT: cmp w9, w8318; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]319; NONEON-NOSVE-NEXT: csetm w8, eq320; NONEON-NOSVE-NEXT: strb w8, [sp, #72]321; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]322; NONEON-NOSVE-NEXT: cmp w9, w8323; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]324; NONEON-NOSVE-NEXT: csetm w8, eq325; NONEON-NOSVE-NEXT: strb w8, [sp, #71]326; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]327; NONEON-NOSVE-NEXT: cmp w9, w8328; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]329; NONEON-NOSVE-NEXT: csetm w8, eq330; NONEON-NOSVE-NEXT: strb w8, [sp, #70]331; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]332; NONEON-NOSVE-NEXT: cmp w9, w8333; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]334; NONEON-NOSVE-NEXT: csetm w8, eq335; NONEON-NOSVE-NEXT: strb w8, [sp, #69]336; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]337; NONEON-NOSVE-NEXT: cmp w9, w8338; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]339; NONEON-NOSVE-NEXT: csetm w8, eq340; NONEON-NOSVE-NEXT: strb w8, [sp, #68]341; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]342; NONEON-NOSVE-NEXT: cmp w9, w8343; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]344; NONEON-NOSVE-NEXT: csetm w8, eq345; NONEON-NOSVE-NEXT: strb w8, [sp, #67]346; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]347; NONEON-NOSVE-NEXT: cmp w9, w8348; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]349; NONEON-NOSVE-NEXT: csetm w8, eq350; NONEON-NOSVE-NEXT: strb w8, [sp, #66]351; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]352; NONEON-NOSVE-NEXT: cmp w9, w8353; NONEON-NOSVE-NEXT: ldrb w9, [sp]354; NONEON-NOSVE-NEXT: csetm w8, eq355; NONEON-NOSVE-NEXT: strb w8, [sp, #65]356; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]357; NONEON-NOSVE-NEXT: cmp w9, w8358; NONEON-NOSVE-NEXT: csetm w8, eq359; NONEON-NOSVE-NEXT: strb w8, [sp, #64]360; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]361; NONEON-NOSVE-NEXT: stp q0, q1, [x0]362; NONEON-NOSVE-NEXT: add sp, sp, #96363; NONEON-NOSVE-NEXT: ret364 %op1 = load <32 x i8>, ptr %a365 %op2 = load <32 x i8>, ptr %b366 %cmp = icmp eq <32 x i8> %op1, %op2367 %sext = sext <32 x i1> %cmp to <32 x i8>368 store <32 x i8> %sext, ptr %a369 ret void370}371 372define <4 x i16> @icmp_eq_v4i16(<4 x i16> %op1, <4 x i16> %op2) {373; CHECK-LABEL: icmp_eq_v4i16:374; CHECK: // %bb.0:375; CHECK-NEXT: ptrue p0.h, vl4376; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1377; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0378; CHECK-NEXT: cmpeq p0.h, p0/z, z0.h, z1.h379; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff380; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0381; CHECK-NEXT: ret382;383; NONEON-NOSVE-LABEL: icmp_eq_v4i16:384; NONEON-NOSVE: // %bb.0:385; NONEON-NOSVE-NEXT: sub sp, sp, #32386; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32387; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]388; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]389; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]390; NONEON-NOSVE-NEXT: cmp w9, w8391; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]392; NONEON-NOSVE-NEXT: csetm w8, eq393; NONEON-NOSVE-NEXT: strh w8, [sp, #30]394; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]395; NONEON-NOSVE-NEXT: cmp w9, w8396; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]397; NONEON-NOSVE-NEXT: csetm w8, eq398; NONEON-NOSVE-NEXT: strh w8, [sp, #28]399; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]400; NONEON-NOSVE-NEXT: cmp w9, w8401; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]402; NONEON-NOSVE-NEXT: csetm w8, eq403; NONEON-NOSVE-NEXT: strh w8, [sp, #26]404; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]405; NONEON-NOSVE-NEXT: cmp w9, w8406; NONEON-NOSVE-NEXT: csetm w8, eq407; NONEON-NOSVE-NEXT: strh w8, [sp, #24]408; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]409; NONEON-NOSVE-NEXT: add sp, sp, #32410; NONEON-NOSVE-NEXT: ret411 %cmp = icmp eq <4 x i16> %op1, %op2412 %sext = sext <4 x i1> %cmp to <4 x i16>413 ret <4 x i16> %sext414}415 416define <8 x i16> @icmp_eq_v8i16(<8 x i16> %op1, <8 x i16> %op2) {417; CHECK-LABEL: icmp_eq_v8i16:418; CHECK: // %bb.0:419; CHECK-NEXT: ptrue p0.h, vl8420; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1421; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0422; CHECK-NEXT: cmpeq p0.h, p0/z, z0.h, z1.h423; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff424; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0425; CHECK-NEXT: ret426;427; NONEON-NOSVE-LABEL: icmp_eq_v8i16:428; NONEON-NOSVE: // %bb.0:429; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!430; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48431; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]432; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]433; NONEON-NOSVE-NEXT: cmp w9, w8434; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]435; NONEON-NOSVE-NEXT: csetm w8, eq436; NONEON-NOSVE-NEXT: strh w8, [sp, #46]437; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]438; NONEON-NOSVE-NEXT: cmp w9, w8439; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]440; NONEON-NOSVE-NEXT: csetm w8, eq441; NONEON-NOSVE-NEXT: strh w8, [sp, #44]442; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]443; NONEON-NOSVE-NEXT: cmp w9, w8444; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]445; NONEON-NOSVE-NEXT: csetm w8, eq446; NONEON-NOSVE-NEXT: strh w8, [sp, #42]447; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]448; NONEON-NOSVE-NEXT: cmp w9, w8449; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]450; NONEON-NOSVE-NEXT: csetm w8, eq451; NONEON-NOSVE-NEXT: strh w8, [sp, #40]452; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]453; NONEON-NOSVE-NEXT: cmp w9, w8454; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]455; NONEON-NOSVE-NEXT: csetm w8, eq456; NONEON-NOSVE-NEXT: strh w8, [sp, #38]457; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]458; NONEON-NOSVE-NEXT: cmp w9, w8459; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]460; NONEON-NOSVE-NEXT: csetm w8, eq461; NONEON-NOSVE-NEXT: strh w8, [sp, #36]462; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]463; NONEON-NOSVE-NEXT: cmp w9, w8464; NONEON-NOSVE-NEXT: ldrh w9, [sp]465; NONEON-NOSVE-NEXT: csetm w8, eq466; NONEON-NOSVE-NEXT: strh w8, [sp, #34]467; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]468; NONEON-NOSVE-NEXT: cmp w9, w8469; NONEON-NOSVE-NEXT: csetm w8, eq470; NONEON-NOSVE-NEXT: strh w8, [sp, #32]471; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]472; NONEON-NOSVE-NEXT: add sp, sp, #48473; NONEON-NOSVE-NEXT: ret474 %cmp = icmp eq <8 x i16> %op1, %op2475 %sext = sext <8 x i1> %cmp to <8 x i16>476 ret <8 x i16> %sext477}478 479define void @icmp_eq_v16i16(ptr %a, ptr %b) {480; CHECK-LABEL: icmp_eq_v16i16:481; CHECK: // %bb.0:482; CHECK-NEXT: ldp q0, q3, [x1]483; CHECK-NEXT: ptrue p0.h, vl8484; CHECK-NEXT: ldp q1, q2, [x0]485; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z0.h486; CHECK-NEXT: cmpeq p0.h, p0/z, z2.h, z3.h487; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff488; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff489; CHECK-NEXT: stp q0, q1, [x0]490; CHECK-NEXT: ret491;492; NONEON-NOSVE-LABEL: icmp_eq_v16i16:493; NONEON-NOSVE: // %bb.0:494; NONEON-NOSVE-NEXT: sub sp, sp, #96495; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96496; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]497; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]498; NONEON-NOSVE-NEXT: stp q2, q3, [sp]499; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]500; NONEON-NOSVE-NEXT: ldrh w8, [sp, #62]501; NONEON-NOSVE-NEXT: ldrh w9, [sp, #46]502; NONEON-NOSVE-NEXT: cmp w9, w8503; NONEON-NOSVE-NEXT: ldrh w9, [sp, #44]504; NONEON-NOSVE-NEXT: csetm w8, eq505; NONEON-NOSVE-NEXT: strh w8, [sp, #94]506; NONEON-NOSVE-NEXT: ldrh w8, [sp, #60]507; NONEON-NOSVE-NEXT: cmp w9, w8508; NONEON-NOSVE-NEXT: ldrh w9, [sp, #42]509; NONEON-NOSVE-NEXT: csetm w8, eq510; NONEON-NOSVE-NEXT: strh w8, [sp, #92]511; NONEON-NOSVE-NEXT: ldrh w8, [sp, #58]512; NONEON-NOSVE-NEXT: cmp w9, w8513; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40]514; NONEON-NOSVE-NEXT: csetm w8, eq515; NONEON-NOSVE-NEXT: strh w8, [sp, #90]516; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]517; NONEON-NOSVE-NEXT: cmp w9, w8518; NONEON-NOSVE-NEXT: ldrh w9, [sp, #38]519; NONEON-NOSVE-NEXT: csetm w8, eq520; NONEON-NOSVE-NEXT: strh w8, [sp, #88]521; NONEON-NOSVE-NEXT: ldrh w8, [sp, #54]522; NONEON-NOSVE-NEXT: cmp w9, w8523; NONEON-NOSVE-NEXT: ldrh w9, [sp, #36]524; NONEON-NOSVE-NEXT: csetm w8, eq525; NONEON-NOSVE-NEXT: strh w8, [sp, #86]526; NONEON-NOSVE-NEXT: ldrh w8, [sp, #52]527; NONEON-NOSVE-NEXT: cmp w9, w8528; NONEON-NOSVE-NEXT: ldrh w9, [sp, #34]529; NONEON-NOSVE-NEXT: csetm w8, eq530; NONEON-NOSVE-NEXT: strh w8, [sp, #84]531; NONEON-NOSVE-NEXT: ldrh w8, [sp, #50]532; NONEON-NOSVE-NEXT: cmp w9, w8533; NONEON-NOSVE-NEXT: ldrh w9, [sp, #32]534; NONEON-NOSVE-NEXT: csetm w8, eq535; NONEON-NOSVE-NEXT: strh w8, [sp, #82]536; NONEON-NOSVE-NEXT: ldrh w8, [sp, #48]537; NONEON-NOSVE-NEXT: cmp w9, w8538; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]539; NONEON-NOSVE-NEXT: csetm w8, eq540; NONEON-NOSVE-NEXT: strh w8, [sp, #80]541; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]542; NONEON-NOSVE-NEXT: cmp w9, w8543; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]544; NONEON-NOSVE-NEXT: csetm w8, eq545; NONEON-NOSVE-NEXT: strh w8, [sp, #78]546; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]547; NONEON-NOSVE-NEXT: cmp w9, w8548; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]549; NONEON-NOSVE-NEXT: csetm w8, eq550; NONEON-NOSVE-NEXT: strh w8, [sp, #76]551; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]552; NONEON-NOSVE-NEXT: cmp w9, w8553; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]554; NONEON-NOSVE-NEXT: csetm w8, eq555; NONEON-NOSVE-NEXT: strh w8, [sp, #74]556; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]557; NONEON-NOSVE-NEXT: cmp w9, w8558; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]559; NONEON-NOSVE-NEXT: csetm w8, eq560; NONEON-NOSVE-NEXT: strh w8, [sp, #72]561; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]562; NONEON-NOSVE-NEXT: cmp w9, w8563; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]564; NONEON-NOSVE-NEXT: csetm w8, eq565; NONEON-NOSVE-NEXT: strh w8, [sp, #70]566; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]567; NONEON-NOSVE-NEXT: cmp w9, w8568; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]569; NONEON-NOSVE-NEXT: csetm w8, eq570; NONEON-NOSVE-NEXT: strh w8, [sp, #68]571; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]572; NONEON-NOSVE-NEXT: cmp w9, w8573; NONEON-NOSVE-NEXT: ldrh w9, [sp]574; NONEON-NOSVE-NEXT: csetm w8, eq575; NONEON-NOSVE-NEXT: strh w8, [sp, #66]576; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]577; NONEON-NOSVE-NEXT: cmp w9, w8578; NONEON-NOSVE-NEXT: csetm w8, eq579; NONEON-NOSVE-NEXT: strh w8, [sp, #64]580; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]581; NONEON-NOSVE-NEXT: stp q0, q1, [x0]582; NONEON-NOSVE-NEXT: add sp, sp, #96583; NONEON-NOSVE-NEXT: ret584 %op1 = load <16 x i16>, ptr %a585 %op2 = load <16 x i16>, ptr %b586 %cmp = icmp eq <16 x i16> %op1, %op2587 %sext = sext <16 x i1> %cmp to <16 x i16>588 store <16 x i16> %sext, ptr %a589 ret void590}591 592define <2 x i32> @icmp_eq_v2i32(<2 x i32> %op1, <2 x i32> %op2) {593; CHECK-LABEL: icmp_eq_v2i32:594; CHECK: // %bb.0:595; CHECK-NEXT: ptrue p0.s, vl2596; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1597; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0598; CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, z1.s599; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff600; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0601; CHECK-NEXT: ret602;603; NONEON-NOSVE-LABEL: icmp_eq_v2i32:604; NONEON-NOSVE: // %bb.0:605; NONEON-NOSVE-NEXT: sub sp, sp, #32606; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32607; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]608; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]609; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]610; NONEON-NOSVE-NEXT: cmp w10, w8611; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]612; NONEON-NOSVE-NEXT: csetm w10, eq613; NONEON-NOSVE-NEXT: cmp w9, w8614; NONEON-NOSVE-NEXT: csetm w8, eq615; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #24]616; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]617; NONEON-NOSVE-NEXT: add sp, sp, #32618; NONEON-NOSVE-NEXT: ret619 %cmp = icmp eq <2 x i32> %op1, %op2620 %sext = sext <2 x i1> %cmp to <2 x i32>621 ret <2 x i32> %sext622}623 624define <4 x i32> @icmp_eq_v4i32(<4 x i32> %op1, <4 x i32> %op2) {625; CHECK-LABEL: icmp_eq_v4i32:626; CHECK: // %bb.0:627; CHECK-NEXT: ptrue p0.s, vl4628; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1629; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0630; CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, z1.s631; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff632; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0633; CHECK-NEXT: ret634;635; NONEON-NOSVE-LABEL: icmp_eq_v4i32:636; NONEON-NOSVE: // %bb.0:637; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!638; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48639; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]640; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]641; NONEON-NOSVE-NEXT: cmp w10, w8642; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]643; NONEON-NOSVE-NEXT: csetm w10, eq644; NONEON-NOSVE-NEXT: cmp w9, w8645; NONEON-NOSVE-NEXT: csetm w8, eq646; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #40]647; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]648; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]649; NONEON-NOSVE-NEXT: cmp w10, w8650; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]651; NONEON-NOSVE-NEXT: csetm w10, eq652; NONEON-NOSVE-NEXT: cmp w9, w8653; NONEON-NOSVE-NEXT: csetm w8, eq654; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]655; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]656; NONEON-NOSVE-NEXT: add sp, sp, #48657; NONEON-NOSVE-NEXT: ret658 %cmp = icmp eq <4 x i32> %op1, %op2659 %sext = sext <4 x i1> %cmp to <4 x i32>660 ret <4 x i32> %sext661}662 663define void @icmp_eq_v8i32(ptr %a, ptr %b) {664; CHECK-LABEL: icmp_eq_v8i32:665; CHECK: // %bb.0:666; CHECK-NEXT: ldp q0, q3, [x1]667; CHECK-NEXT: ptrue p0.s, vl4668; CHECK-NEXT: ldp q1, q2, [x0]669; CHECK-NEXT: cmpeq p1.s, p0/z, z1.s, z0.s670; CHECK-NEXT: cmpeq p0.s, p0/z, z2.s, z3.s671; CHECK-NEXT: mov z0.s, p1/z, #-1 // =0xffffffffffffffff672; CHECK-NEXT: mov z1.s, p0/z, #-1 // =0xffffffffffffffff673; CHECK-NEXT: stp q0, q1, [x0]674; CHECK-NEXT: ret675;676; NONEON-NOSVE-LABEL: icmp_eq_v8i32:677; NONEON-NOSVE: // %bb.0:678; NONEON-NOSVE-NEXT: sub sp, sp, #96679; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96680; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]681; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]682; NONEON-NOSVE-NEXT: stp q2, q3, [sp]683; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]684; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #40]685; NONEON-NOSVE-NEXT: ldr w8, [sp, #60]686; NONEON-NOSVE-NEXT: cmp w10, w8687; NONEON-NOSVE-NEXT: ldr w8, [sp, #56]688; NONEON-NOSVE-NEXT: csetm w10, eq689; NONEON-NOSVE-NEXT: cmp w9, w8690; NONEON-NOSVE-NEXT: csetm w8, eq691; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #88]692; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]693; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #32]694; NONEON-NOSVE-NEXT: cmp w10, w8695; NONEON-NOSVE-NEXT: ldr w8, [sp, #48]696; NONEON-NOSVE-NEXT: csetm w10, eq697; NONEON-NOSVE-NEXT: cmp w9, w8698; NONEON-NOSVE-NEXT: csetm w8, eq699; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #80]700; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]701; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]702; NONEON-NOSVE-NEXT: cmp w10, w8703; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]704; NONEON-NOSVE-NEXT: csetm w10, eq705; NONEON-NOSVE-NEXT: cmp w9, w8706; NONEON-NOSVE-NEXT: csetm w8, eq707; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #72]708; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]709; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]710; NONEON-NOSVE-NEXT: cmp w10, w8711; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]712; NONEON-NOSVE-NEXT: csetm w10, eq713; NONEON-NOSVE-NEXT: cmp w9, w8714; NONEON-NOSVE-NEXT: csetm w8, eq715; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #64]716; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]717; NONEON-NOSVE-NEXT: stp q0, q1, [x0]718; NONEON-NOSVE-NEXT: add sp, sp, #96719; NONEON-NOSVE-NEXT: ret720 %op1 = load <8 x i32>, ptr %a721 %op2 = load <8 x i32>, ptr %b722 %cmp = icmp eq <8 x i32> %op1, %op2723 %sext = sext <8 x i1> %cmp to <8 x i32>724 store <8 x i32> %sext, ptr %a725 ret void726}727 728define <1 x i64> @icmp_eq_v1i64(<1 x i64> %op1, <1 x i64> %op2) {729; CHECK-LABEL: icmp_eq_v1i64:730; CHECK: // %bb.0:731; CHECK-NEXT: ptrue p0.d, vl1732; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1733; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0734; CHECK-NEXT: cmpeq p0.d, p0/z, z0.d, z1.d735; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff736; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0737; CHECK-NEXT: ret738;739; NONEON-NOSVE-LABEL: icmp_eq_v1i64:740; NONEON-NOSVE: // %bb.0:741; NONEON-NOSVE-NEXT: sub sp, sp, #16742; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16743; NONEON-NOSVE-NEXT: fmov x8, d1744; NONEON-NOSVE-NEXT: fmov x9, d0745; NONEON-NOSVE-NEXT: cmp x9, x8746; NONEON-NOSVE-NEXT: csetm x8, eq747; NONEON-NOSVE-NEXT: str x8, [sp, #8]748; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]749; NONEON-NOSVE-NEXT: add sp, sp, #16750; NONEON-NOSVE-NEXT: ret751 %cmp = icmp eq <1 x i64> %op1, %op2752 %sext = sext <1 x i1> %cmp to <1 x i64>753 ret <1 x i64> %sext754}755 756define <2 x i64> @icmp_eq_v2i64(<2 x i64> %op1, <2 x i64> %op2) {757; CHECK-LABEL: icmp_eq_v2i64:758; CHECK: // %bb.0:759; CHECK-NEXT: ptrue p0.d, vl2760; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1761; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0762; CHECK-NEXT: cmpeq p0.d, p0/z, z0.d, z1.d763; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff764; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0765; CHECK-NEXT: ret766;767; NONEON-NOSVE-LABEL: icmp_eq_v2i64:768; NONEON-NOSVE: // %bb.0:769; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!770; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48771; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]772; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]773; NONEON-NOSVE-NEXT: cmp x10, x8774; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]775; NONEON-NOSVE-NEXT: csetm x10, eq776; NONEON-NOSVE-NEXT: cmp x9, x8777; NONEON-NOSVE-NEXT: csetm x8, eq778; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]779; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]780; NONEON-NOSVE-NEXT: add sp, sp, #48781; NONEON-NOSVE-NEXT: ret782 %cmp = icmp eq <2 x i64> %op1, %op2783 %sext = sext <2 x i1> %cmp to <2 x i64>784 ret <2 x i64> %sext785}786 787define void @icmp_eq_v4i64(ptr %a, ptr %b) {788; CHECK-LABEL: icmp_eq_v4i64:789; CHECK: // %bb.0:790; CHECK-NEXT: ldp q0, q3, [x1]791; CHECK-NEXT: ptrue p0.d, vl2792; CHECK-NEXT: ldp q1, q2, [x0]793; CHECK-NEXT: cmpeq p1.d, p0/z, z1.d, z0.d794; CHECK-NEXT: cmpeq p0.d, p0/z, z2.d, z3.d795; CHECK-NEXT: mov z0.d, p1/z, #-1 // =0xffffffffffffffff796; CHECK-NEXT: mov z1.d, p0/z, #-1 // =0xffffffffffffffff797; CHECK-NEXT: stp q0, q1, [x0]798; CHECK-NEXT: ret799;800; NONEON-NOSVE-LABEL: icmp_eq_v4i64:801; NONEON-NOSVE: // %bb.0:802; NONEON-NOSVE-NEXT: sub sp, sp, #96803; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96804; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]805; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]806; NONEON-NOSVE-NEXT: stp q2, q3, [sp]807; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]808; NONEON-NOSVE-NEXT: ldp x9, x10, [sp, #32]809; NONEON-NOSVE-NEXT: ldr x8, [sp, #56]810; NONEON-NOSVE-NEXT: cmp x10, x8811; NONEON-NOSVE-NEXT: ldr x8, [sp, #48]812; NONEON-NOSVE-NEXT: csetm x10, eq813; NONEON-NOSVE-NEXT: cmp x9, x8814; NONEON-NOSVE-NEXT: csetm x8, eq815; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #80]816; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]817; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]818; NONEON-NOSVE-NEXT: cmp x10, x8819; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]820; NONEON-NOSVE-NEXT: csetm x10, eq821; NONEON-NOSVE-NEXT: cmp x9, x8822; NONEON-NOSVE-NEXT: csetm x8, eq823; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #64]824; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]825; NONEON-NOSVE-NEXT: stp q0, q1, [x0]826; NONEON-NOSVE-NEXT: add sp, sp, #96827; NONEON-NOSVE-NEXT: ret828 %op1 = load <4 x i64>, ptr %a829 %op2 = load <4 x i64>, ptr %b830 %cmp = icmp eq <4 x i64> %op1, %op2831 %sext = sext <4 x i1> %cmp to <4 x i64>832 store <4 x i64> %sext, ptr %a833 ret void834}835 836;837; ICMP NE838;839 840define void @icmp_ne_v32i8(ptr %a, ptr %b) {841; CHECK-LABEL: icmp_ne_v32i8:842; CHECK: // %bb.0:843; CHECK-NEXT: ldp q0, q3, [x1]844; CHECK-NEXT: ptrue p0.b, vl16845; CHECK-NEXT: ldp q1, q2, [x0]846; CHECK-NEXT: cmpne p1.b, p0/z, z1.b, z0.b847; CHECK-NEXT: cmpne p0.b, p0/z, z2.b, z3.b848; CHECK-NEXT: mov z0.b, p1/z, #-1 // =0xffffffffffffffff849; CHECK-NEXT: mov z1.b, p0/z, #-1 // =0xffffffffffffffff850; CHECK-NEXT: stp q0, q1, [x0]851; CHECK-NEXT: ret852;853; NONEON-NOSVE-LABEL: icmp_ne_v32i8:854; NONEON-NOSVE: // %bb.0:855; NONEON-NOSVE-NEXT: sub sp, sp, #96856; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96857; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]858; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]859; NONEON-NOSVE-NEXT: stp q2, q3, [sp]860; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]861; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]862; NONEON-NOSVE-NEXT: ldrb w9, [sp, #47]863; NONEON-NOSVE-NEXT: cmp w9, w8864; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]865; NONEON-NOSVE-NEXT: csetm w8, ne866; NONEON-NOSVE-NEXT: strb w8, [sp, #95]867; NONEON-NOSVE-NEXT: ldrb w8, [sp, #62]868; NONEON-NOSVE-NEXT: cmp w9, w8869; NONEON-NOSVE-NEXT: ldrb w9, [sp, #45]870; NONEON-NOSVE-NEXT: csetm w8, ne871; NONEON-NOSVE-NEXT: strb w8, [sp, #94]872; NONEON-NOSVE-NEXT: ldrb w8, [sp, #61]873; NONEON-NOSVE-NEXT: cmp w9, w8874; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]875; NONEON-NOSVE-NEXT: csetm w8, ne876; NONEON-NOSVE-NEXT: strb w8, [sp, #93]877; NONEON-NOSVE-NEXT: ldrb w8, [sp, #60]878; NONEON-NOSVE-NEXT: cmp w9, w8879; NONEON-NOSVE-NEXT: ldrb w9, [sp, #43]880; NONEON-NOSVE-NEXT: csetm w8, ne881; NONEON-NOSVE-NEXT: strb w8, [sp, #92]882; NONEON-NOSVE-NEXT: ldrb w8, [sp, #59]883; NONEON-NOSVE-NEXT: cmp w9, w8884; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]885; NONEON-NOSVE-NEXT: csetm w8, ne886; NONEON-NOSVE-NEXT: strb w8, [sp, #91]887; NONEON-NOSVE-NEXT: ldrb w8, [sp, #58]888; NONEON-NOSVE-NEXT: cmp w9, w8889; NONEON-NOSVE-NEXT: ldrb w9, [sp, #41]890; NONEON-NOSVE-NEXT: csetm w8, ne891; NONEON-NOSVE-NEXT: strb w8, [sp, #90]892; NONEON-NOSVE-NEXT: ldrb w8, [sp, #57]893; NONEON-NOSVE-NEXT: cmp w9, w8894; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]895; NONEON-NOSVE-NEXT: csetm w8, ne896; NONEON-NOSVE-NEXT: strb w8, [sp, #89]897; NONEON-NOSVE-NEXT: ldrb w8, [sp, #56]898; NONEON-NOSVE-NEXT: cmp w9, w8899; NONEON-NOSVE-NEXT: ldrb w9, [sp, #39]900; NONEON-NOSVE-NEXT: csetm w8, ne901; NONEON-NOSVE-NEXT: strb w8, [sp, #88]902; NONEON-NOSVE-NEXT: ldrb w8, [sp, #55]903; NONEON-NOSVE-NEXT: cmp w9, w8904; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]905; NONEON-NOSVE-NEXT: csetm w8, ne906; NONEON-NOSVE-NEXT: strb w8, [sp, #87]907; NONEON-NOSVE-NEXT: ldrb w8, [sp, #54]908; NONEON-NOSVE-NEXT: cmp w9, w8909; NONEON-NOSVE-NEXT: ldrb w9, [sp, #37]910; NONEON-NOSVE-NEXT: csetm w8, ne911; NONEON-NOSVE-NEXT: strb w8, [sp, #86]912; NONEON-NOSVE-NEXT: ldrb w8, [sp, #53]913; NONEON-NOSVE-NEXT: cmp w9, w8914; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]915; NONEON-NOSVE-NEXT: csetm w8, ne916; NONEON-NOSVE-NEXT: strb w8, [sp, #85]917; NONEON-NOSVE-NEXT: ldrb w8, [sp, #52]918; NONEON-NOSVE-NEXT: cmp w9, w8919; NONEON-NOSVE-NEXT: ldrb w9, [sp, #35]920; NONEON-NOSVE-NEXT: csetm w8, ne921; NONEON-NOSVE-NEXT: strb w8, [sp, #84]922; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]923; NONEON-NOSVE-NEXT: cmp w9, w8924; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]925; NONEON-NOSVE-NEXT: csetm w8, ne926; NONEON-NOSVE-NEXT: strb w8, [sp, #83]927; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]928; NONEON-NOSVE-NEXT: cmp w9, w8929; NONEON-NOSVE-NEXT: ldrb w9, [sp, #33]930; NONEON-NOSVE-NEXT: csetm w8, ne931; NONEON-NOSVE-NEXT: strb w8, [sp, #82]932; NONEON-NOSVE-NEXT: ldrb w8, [sp, #49]933; NONEON-NOSVE-NEXT: cmp w9, w8934; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]935; NONEON-NOSVE-NEXT: csetm w8, ne936; NONEON-NOSVE-NEXT: strb w8, [sp, #81]937; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]938; NONEON-NOSVE-NEXT: cmp w9, w8939; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]940; NONEON-NOSVE-NEXT: csetm w8, ne941; NONEON-NOSVE-NEXT: strb w8, [sp, #80]942; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]943; NONEON-NOSVE-NEXT: cmp w9, w8944; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]945; NONEON-NOSVE-NEXT: csetm w8, ne946; NONEON-NOSVE-NEXT: strb w8, [sp, #79]947; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]948; NONEON-NOSVE-NEXT: cmp w9, w8949; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]950; NONEON-NOSVE-NEXT: csetm w8, ne951; NONEON-NOSVE-NEXT: strb w8, [sp, #78]952; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]953; NONEON-NOSVE-NEXT: cmp w9, w8954; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]955; NONEON-NOSVE-NEXT: csetm w8, ne956; NONEON-NOSVE-NEXT: strb w8, [sp, #77]957; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]958; NONEON-NOSVE-NEXT: cmp w9, w8959; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]960; NONEON-NOSVE-NEXT: csetm w8, ne961; NONEON-NOSVE-NEXT: strb w8, [sp, #76]962; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]963; NONEON-NOSVE-NEXT: cmp w9, w8964; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]965; NONEON-NOSVE-NEXT: csetm w8, ne966; NONEON-NOSVE-NEXT: strb w8, [sp, #75]967; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]968; NONEON-NOSVE-NEXT: cmp w9, w8969; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]970; NONEON-NOSVE-NEXT: csetm w8, ne971; NONEON-NOSVE-NEXT: strb w8, [sp, #74]972; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]973; NONEON-NOSVE-NEXT: cmp w9, w8974; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]975; NONEON-NOSVE-NEXT: csetm w8, ne976; NONEON-NOSVE-NEXT: strb w8, [sp, #73]977; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]978; NONEON-NOSVE-NEXT: cmp w9, w8979; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]980; NONEON-NOSVE-NEXT: csetm w8, ne981; NONEON-NOSVE-NEXT: strb w8, [sp, #72]982; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]983; NONEON-NOSVE-NEXT: cmp w9, w8984; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]985; NONEON-NOSVE-NEXT: csetm w8, ne986; NONEON-NOSVE-NEXT: strb w8, [sp, #71]987; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]988; NONEON-NOSVE-NEXT: cmp w9, w8989; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]990; NONEON-NOSVE-NEXT: csetm w8, ne991; NONEON-NOSVE-NEXT: strb w8, [sp, #70]992; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]993; NONEON-NOSVE-NEXT: cmp w9, w8994; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]995; NONEON-NOSVE-NEXT: csetm w8, ne996; NONEON-NOSVE-NEXT: strb w8, [sp, #69]997; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]998; NONEON-NOSVE-NEXT: cmp w9, w8999; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]1000; NONEON-NOSVE-NEXT: csetm w8, ne1001; NONEON-NOSVE-NEXT: strb w8, [sp, #68]1002; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1003; NONEON-NOSVE-NEXT: cmp w9, w81004; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]1005; NONEON-NOSVE-NEXT: csetm w8, ne1006; NONEON-NOSVE-NEXT: strb w8, [sp, #67]1007; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1008; NONEON-NOSVE-NEXT: cmp w9, w81009; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]1010; NONEON-NOSVE-NEXT: csetm w8, ne1011; NONEON-NOSVE-NEXT: strb w8, [sp, #66]1012; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1013; NONEON-NOSVE-NEXT: cmp w9, w81014; NONEON-NOSVE-NEXT: ldrb w9, [sp]1015; NONEON-NOSVE-NEXT: csetm w8, ne1016; NONEON-NOSVE-NEXT: strb w8, [sp, #65]1017; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1018; NONEON-NOSVE-NEXT: cmp w9, w81019; NONEON-NOSVE-NEXT: csetm w8, ne1020; NONEON-NOSVE-NEXT: strb w8, [sp, #64]1021; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1022; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1023; NONEON-NOSVE-NEXT: add sp, sp, #961024; NONEON-NOSVE-NEXT: ret1025 %op1 = load <32 x i8>, ptr %a1026 %op2 = load <32 x i8>, ptr %b1027 %cmp = icmp ne <32 x i8> %op1, %op21028 %sext = sext <32 x i1> %cmp to <32 x i8>1029 store <32 x i8> %sext, ptr %a1030 ret void1031}1032 1033;1034; ICMP SGE1035;1036 1037define void @icmp_sge_v8i16(ptr %a, ptr %b) {1038; CHECK-LABEL: icmp_sge_v8i16:1039; CHECK: // %bb.0:1040; CHECK-NEXT: ptrue p0.h, vl81041; CHECK-NEXT: ldr q0, [x0]1042; CHECK-NEXT: ldr q1, [x1]1043; CHECK-NEXT: cmpge p0.h, p0/z, z0.h, z1.h1044; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff1045; CHECK-NEXT: str q0, [x0]1046; CHECK-NEXT: ret1047;1048; NONEON-NOSVE-LABEL: icmp_sge_v8i16:1049; NONEON-NOSVE: // %bb.0:1050; NONEON-NOSVE-NEXT: ldr q0, [x1]1051; NONEON-NOSVE-NEXT: ldr q1, [x0]1052; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1053; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481054; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #30]1055; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]1056; NONEON-NOSVE-NEXT: cmp w9, w81057; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #12]1058; NONEON-NOSVE-NEXT: csetm w8, ge1059; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1060; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]1061; NONEON-NOSVE-NEXT: cmp w9, w81062; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]1063; NONEON-NOSVE-NEXT: csetm w8, ge1064; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1065; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #26]1066; NONEON-NOSVE-NEXT: cmp w9, w81067; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #8]1068; NONEON-NOSVE-NEXT: csetm w8, ge1069; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1070; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]1071; NONEON-NOSVE-NEXT: cmp w9, w81072; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #6]1073; NONEON-NOSVE-NEXT: csetm w8, ge1074; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1075; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #22]1076; NONEON-NOSVE-NEXT: cmp w9, w81077; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #4]1078; NONEON-NOSVE-NEXT: csetm w8, ge1079; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1080; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]1081; NONEON-NOSVE-NEXT: cmp w9, w81082; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #2]1083; NONEON-NOSVE-NEXT: csetm w8, ge1084; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1085; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #18]1086; NONEON-NOSVE-NEXT: cmp w9, w81087; NONEON-NOSVE-NEXT: ldrsh w9, [sp]1088; NONEON-NOSVE-NEXT: csetm w8, ge1089; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1090; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]1091; NONEON-NOSVE-NEXT: cmp w9, w81092; NONEON-NOSVE-NEXT: csetm w8, ge1093; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1094; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1095; NONEON-NOSVE-NEXT: str q0, [x0]1096; NONEON-NOSVE-NEXT: add sp, sp, #481097; NONEON-NOSVE-NEXT: ret1098 %op1 = load <8 x i16>, ptr %a1099 %op2 = load <8 x i16>, ptr %b1100 %cmp = icmp sge <8 x i16> %op1, %op21101 %sext = sext <8 x i1> %cmp to <8 x i16>1102 store <8 x i16> %sext, ptr %a1103 ret void1104}1105 1106;1107; ICMP SGT1108;1109 1110define void @icmp_sgt_v16i16(ptr %a, ptr %b) {1111; CHECK-LABEL: icmp_sgt_v16i16:1112; CHECK: // %bb.0:1113; CHECK-NEXT: ldp q0, q3, [x1]1114; CHECK-NEXT: ptrue p0.h, vl81115; CHECK-NEXT: ldp q1, q2, [x0]1116; CHECK-NEXT: cmpgt p1.h, p0/z, z1.h, z0.h1117; CHECK-NEXT: cmpgt p0.h, p0/z, z2.h, z3.h1118; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff1119; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff1120; CHECK-NEXT: stp q0, q1, [x0]1121; CHECK-NEXT: ret1122;1123; NONEON-NOSVE-LABEL: icmp_sgt_v16i16:1124; NONEON-NOSVE: // %bb.0:1125; NONEON-NOSVE-NEXT: sub sp, sp, #961126; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961127; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1128; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1129; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1130; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1131; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #62]1132; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #46]1133; NONEON-NOSVE-NEXT: cmp w9, w81134; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #44]1135; NONEON-NOSVE-NEXT: csetm w8, gt1136; NONEON-NOSVE-NEXT: strh w8, [sp, #94]1137; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #60]1138; NONEON-NOSVE-NEXT: cmp w9, w81139; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #42]1140; NONEON-NOSVE-NEXT: csetm w8, gt1141; NONEON-NOSVE-NEXT: strh w8, [sp, #92]1142; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #58]1143; NONEON-NOSVE-NEXT: cmp w9, w81144; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #40]1145; NONEON-NOSVE-NEXT: csetm w8, gt1146; NONEON-NOSVE-NEXT: strh w8, [sp, #90]1147; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #56]1148; NONEON-NOSVE-NEXT: cmp w9, w81149; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #38]1150; NONEON-NOSVE-NEXT: csetm w8, gt1151; NONEON-NOSVE-NEXT: strh w8, [sp, #88]1152; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #54]1153; NONEON-NOSVE-NEXT: cmp w9, w81154; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #36]1155; NONEON-NOSVE-NEXT: csetm w8, gt1156; NONEON-NOSVE-NEXT: strh w8, [sp, #86]1157; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #52]1158; NONEON-NOSVE-NEXT: cmp w9, w81159; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #34]1160; NONEON-NOSVE-NEXT: csetm w8, gt1161; NONEON-NOSVE-NEXT: strh w8, [sp, #84]1162; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #50]1163; NONEON-NOSVE-NEXT: cmp w9, w81164; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #32]1165; NONEON-NOSVE-NEXT: csetm w8, gt1166; NONEON-NOSVE-NEXT: strh w8, [sp, #82]1167; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #48]1168; NONEON-NOSVE-NEXT: cmp w9, w81169; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]1170; NONEON-NOSVE-NEXT: csetm w8, gt1171; NONEON-NOSVE-NEXT: strh w8, [sp, #80]1172; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #30]1173; NONEON-NOSVE-NEXT: cmp w9, w81174; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #12]1175; NONEON-NOSVE-NEXT: csetm w8, gt1176; NONEON-NOSVE-NEXT: strh w8, [sp, #78]1177; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]1178; NONEON-NOSVE-NEXT: cmp w9, w81179; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]1180; NONEON-NOSVE-NEXT: csetm w8, gt1181; NONEON-NOSVE-NEXT: strh w8, [sp, #76]1182; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #26]1183; NONEON-NOSVE-NEXT: cmp w9, w81184; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #8]1185; NONEON-NOSVE-NEXT: csetm w8, gt1186; NONEON-NOSVE-NEXT: strh w8, [sp, #74]1187; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]1188; NONEON-NOSVE-NEXT: cmp w9, w81189; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #6]1190; NONEON-NOSVE-NEXT: csetm w8, gt1191; NONEON-NOSVE-NEXT: strh w8, [sp, #72]1192; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #22]1193; NONEON-NOSVE-NEXT: cmp w9, w81194; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #4]1195; NONEON-NOSVE-NEXT: csetm w8, gt1196; NONEON-NOSVE-NEXT: strh w8, [sp, #70]1197; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]1198; NONEON-NOSVE-NEXT: cmp w9, w81199; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #2]1200; NONEON-NOSVE-NEXT: csetm w8, gt1201; NONEON-NOSVE-NEXT: strh w8, [sp, #68]1202; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #18]1203; NONEON-NOSVE-NEXT: cmp w9, w81204; NONEON-NOSVE-NEXT: ldrsh w9, [sp]1205; NONEON-NOSVE-NEXT: csetm w8, gt1206; NONEON-NOSVE-NEXT: strh w8, [sp, #66]1207; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]1208; NONEON-NOSVE-NEXT: cmp w9, w81209; NONEON-NOSVE-NEXT: csetm w8, gt1210; NONEON-NOSVE-NEXT: strh w8, [sp, #64]1211; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1212; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1213; NONEON-NOSVE-NEXT: add sp, sp, #961214; NONEON-NOSVE-NEXT: ret1215 %op1 = load <16 x i16>, ptr %a1216 %op2 = load <16 x i16>, ptr %b1217 %cmp = icmp sgt <16 x i16> %op1, %op21218 %sext = sext <16 x i1> %cmp to <16 x i16>1219 store <16 x i16> %sext, ptr %a1220 ret void1221}1222 1223;1224; ICMP SLE1225;1226 1227define void @icmp_sle_v4i32(ptr %a, ptr %b) {1228; CHECK-LABEL: icmp_sle_v4i32:1229; CHECK: // %bb.0:1230; CHECK-NEXT: ptrue p0.s, vl41231; CHECK-NEXT: ldr q0, [x0]1232; CHECK-NEXT: ldr q1, [x1]1233; CHECK-NEXT: cmpge p0.s, p0/z, z1.s, z0.s1234; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff1235; CHECK-NEXT: str q0, [x0]1236; CHECK-NEXT: ret1237;1238; NONEON-NOSVE-LABEL: icmp_sle_v4i32:1239; NONEON-NOSVE: // %bb.0:1240; NONEON-NOSVE-NEXT: ldr q0, [x1]1241; NONEON-NOSVE-NEXT: ldr q1, [x0]1242; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1243; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481244; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1245; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1246; NONEON-NOSVE-NEXT: cmp w10, w81247; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1248; NONEON-NOSVE-NEXT: csetm w10, le1249; NONEON-NOSVE-NEXT: cmp w9, w81250; NONEON-NOSVE-NEXT: csetm w8, le1251; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #40]1252; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1253; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1254; NONEON-NOSVE-NEXT: cmp w10, w81255; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1256; NONEON-NOSVE-NEXT: csetm w10, le1257; NONEON-NOSVE-NEXT: cmp w9, w81258; NONEON-NOSVE-NEXT: csetm w8, le1259; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]1260; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1261; NONEON-NOSVE-NEXT: str q0, [x0]1262; NONEON-NOSVE-NEXT: add sp, sp, #481263; NONEON-NOSVE-NEXT: ret1264 %op1 = load <4 x i32>, ptr %a1265 %op2 = load <4 x i32>, ptr %b1266 %cmp = icmp sle <4 x i32> %op1, %op21267 %sext = sext <4 x i1> %cmp to <4 x i32>1268 store <4 x i32> %sext, ptr %a1269 ret void1270}1271 1272;1273; ICMP SLT1274;1275 1276define void @icmp_slt_v8i32(ptr %a, ptr %b) {1277; CHECK-LABEL: icmp_slt_v8i32:1278; CHECK: // %bb.0:1279; CHECK-NEXT: ldp q0, q3, [x1]1280; CHECK-NEXT: ptrue p0.s, vl41281; CHECK-NEXT: ldp q1, q2, [x0]1282; CHECK-NEXT: cmpgt p1.s, p0/z, z0.s, z1.s1283; CHECK-NEXT: cmpgt p0.s, p0/z, z3.s, z2.s1284; CHECK-NEXT: mov z0.s, p1/z, #-1 // =0xffffffffffffffff1285; CHECK-NEXT: mov z1.s, p0/z, #-1 // =0xffffffffffffffff1286; CHECK-NEXT: stp q0, q1, [x0]1287; CHECK-NEXT: ret1288;1289; NONEON-NOSVE-LABEL: icmp_slt_v8i32:1290; NONEON-NOSVE: // %bb.0:1291; NONEON-NOSVE-NEXT: sub sp, sp, #961292; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961293; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1294; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1295; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1296; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1297; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #40]1298; NONEON-NOSVE-NEXT: ldr w8, [sp, #60]1299; NONEON-NOSVE-NEXT: cmp w10, w81300; NONEON-NOSVE-NEXT: ldr w8, [sp, #56]1301; NONEON-NOSVE-NEXT: csetm w10, lt1302; NONEON-NOSVE-NEXT: cmp w9, w81303; NONEON-NOSVE-NEXT: csetm w8, lt1304; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #88]1305; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]1306; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #32]1307; NONEON-NOSVE-NEXT: cmp w10, w81308; NONEON-NOSVE-NEXT: ldr w8, [sp, #48]1309; NONEON-NOSVE-NEXT: csetm w10, lt1310; NONEON-NOSVE-NEXT: cmp w9, w81311; NONEON-NOSVE-NEXT: csetm w8, lt1312; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #80]1313; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1314; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1315; NONEON-NOSVE-NEXT: cmp w10, w81316; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1317; NONEON-NOSVE-NEXT: csetm w10, lt1318; NONEON-NOSVE-NEXT: cmp w9, w81319; NONEON-NOSVE-NEXT: csetm w8, lt1320; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #72]1321; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1322; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1323; NONEON-NOSVE-NEXT: cmp w10, w81324; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1325; NONEON-NOSVE-NEXT: csetm w10, lt1326; NONEON-NOSVE-NEXT: cmp w9, w81327; NONEON-NOSVE-NEXT: csetm w8, lt1328; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #64]1329; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1330; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1331; NONEON-NOSVE-NEXT: add sp, sp, #961332; NONEON-NOSVE-NEXT: ret1333 %op1 = load <8 x i32>, ptr %a1334 %op2 = load <8 x i32>, ptr %b1335 %cmp = icmp slt <8 x i32> %op1, %op21336 %sext = sext <8 x i1> %cmp to <8 x i32>1337 store <8 x i32> %sext, ptr %a1338 ret void1339}1340 1341;1342; ICMP UGE1343;1344 1345define void @icmp_uge_v2i64(ptr %a, ptr %b) {1346; CHECK-LABEL: icmp_uge_v2i64:1347; CHECK: // %bb.0:1348; CHECK-NEXT: ptrue p0.d, vl21349; CHECK-NEXT: ldr q0, [x0]1350; CHECK-NEXT: ldr q1, [x1]1351; CHECK-NEXT: cmphs p0.d, p0/z, z0.d, z1.d1352; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff1353; CHECK-NEXT: str q0, [x0]1354; CHECK-NEXT: ret1355;1356; NONEON-NOSVE-LABEL: icmp_uge_v2i64:1357; NONEON-NOSVE: // %bb.0:1358; NONEON-NOSVE-NEXT: ldr q0, [x1]1359; NONEON-NOSVE-NEXT: ldr q1, [x0]1360; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1361; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481362; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1363; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1364; NONEON-NOSVE-NEXT: cmp x10, x81365; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1366; NONEON-NOSVE-NEXT: csetm x10, hs1367; NONEON-NOSVE-NEXT: cmp x9, x81368; NONEON-NOSVE-NEXT: csetm x8, hs1369; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]1370; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1371; NONEON-NOSVE-NEXT: str q0, [x0]1372; NONEON-NOSVE-NEXT: add sp, sp, #481373; NONEON-NOSVE-NEXT: ret1374 %op1 = load <2 x i64>, ptr %a1375 %op2 = load <2 x i64>, ptr %b1376 %cmp = icmp uge <2 x i64> %op1, %op21377 %sext = sext <2 x i1> %cmp to <2 x i64>1378 store <2 x i64> %sext, ptr %a1379 ret void1380}1381 1382;1383; ICMP UGT1384;1385 1386define void @icmp_ugt_v2i64(ptr %a, ptr %b) {1387; CHECK-LABEL: icmp_ugt_v2i64:1388; CHECK: // %bb.0:1389; CHECK-NEXT: ptrue p0.d, vl21390; CHECK-NEXT: ldr q0, [x0]1391; CHECK-NEXT: ldr q1, [x1]1392; CHECK-NEXT: cmphi p0.d, p0/z, z0.d, z1.d1393; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff1394; CHECK-NEXT: str q0, [x0]1395; CHECK-NEXT: ret1396;1397; NONEON-NOSVE-LABEL: icmp_ugt_v2i64:1398; NONEON-NOSVE: // %bb.0:1399; NONEON-NOSVE-NEXT: ldr q0, [x1]1400; NONEON-NOSVE-NEXT: ldr q1, [x0]1401; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1402; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481403; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1404; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1405; NONEON-NOSVE-NEXT: cmp x10, x81406; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1407; NONEON-NOSVE-NEXT: csetm x10, hi1408; NONEON-NOSVE-NEXT: cmp x9, x81409; NONEON-NOSVE-NEXT: csetm x8, hi1410; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]1411; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1412; NONEON-NOSVE-NEXT: str q0, [x0]1413; NONEON-NOSVE-NEXT: add sp, sp, #481414; NONEON-NOSVE-NEXT: ret1415 %op1 = load <2 x i64>, ptr %a1416 %op2 = load <2 x i64>, ptr %b1417 %cmp = icmp ugt <2 x i64> %op1, %op21418 %sext = sext <2 x i1> %cmp to <2 x i64>1419 store <2 x i64> %sext, ptr %a1420 ret void1421}1422 1423;1424; ICMP ULE1425;1426 1427define void @icmp_ule_v2i64(ptr %a, ptr %b) {1428; CHECK-LABEL: icmp_ule_v2i64:1429; CHECK: // %bb.0:1430; CHECK-NEXT: ptrue p0.d, vl21431; CHECK-NEXT: ldr q0, [x0]1432; CHECK-NEXT: ldr q1, [x1]1433; CHECK-NEXT: cmphs p0.d, p0/z, z1.d, z0.d1434; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff1435; CHECK-NEXT: str q0, [x0]1436; CHECK-NEXT: ret1437;1438; NONEON-NOSVE-LABEL: icmp_ule_v2i64:1439; NONEON-NOSVE: // %bb.0:1440; NONEON-NOSVE-NEXT: ldr q0, [x1]1441; NONEON-NOSVE-NEXT: ldr q1, [x0]1442; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1443; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481444; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1445; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1446; NONEON-NOSVE-NEXT: cmp x10, x81447; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1448; NONEON-NOSVE-NEXT: csetm x10, ls1449; NONEON-NOSVE-NEXT: cmp x9, x81450; NONEON-NOSVE-NEXT: csetm x8, ls1451; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]1452; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1453; NONEON-NOSVE-NEXT: str q0, [x0]1454; NONEON-NOSVE-NEXT: add sp, sp, #481455; NONEON-NOSVE-NEXT: ret1456 %op1 = load <2 x i64>, ptr %a1457 %op2 = load <2 x i64>, ptr %b1458 %cmp = icmp ule <2 x i64> %op1, %op21459 %sext = sext <2 x i1> %cmp to <2 x i64>1460 store <2 x i64> %sext, ptr %a1461 ret void1462}1463 1464;1465; ICMP ULT1466;1467 1468define void @icmp_ult_v2i64(ptr %a, ptr %b) {1469; CHECK-LABEL: icmp_ult_v2i64:1470; CHECK: // %bb.0:1471; CHECK-NEXT: ptrue p0.d, vl21472; CHECK-NEXT: ldr q0, [x0]1473; CHECK-NEXT: ldr q1, [x1]1474; CHECK-NEXT: cmphi p0.d, p0/z, z1.d, z0.d1475; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff1476; CHECK-NEXT: str q0, [x0]1477; CHECK-NEXT: ret1478;1479; NONEON-NOSVE-LABEL: icmp_ult_v2i64:1480; NONEON-NOSVE: // %bb.0:1481; NONEON-NOSVE-NEXT: ldr q0, [x1]1482; NONEON-NOSVE-NEXT: ldr q1, [x0]1483; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-48]!1484; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481485; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1486; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1487; NONEON-NOSVE-NEXT: cmp x10, x81488; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1489; NONEON-NOSVE-NEXT: csetm x10, lo1490; NONEON-NOSVE-NEXT: cmp x9, x81491; NONEON-NOSVE-NEXT: csetm x8, lo1492; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]1493; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1494; NONEON-NOSVE-NEXT: str q0, [x0]1495; NONEON-NOSVE-NEXT: add sp, sp, #481496; NONEON-NOSVE-NEXT: ret1497 %op1 = load <2 x i64>, ptr %a1498 %op2 = load <2 x i64>, ptr %b1499 %cmp = icmp ult <2 x i64> %op1, %op21500 %sext = sext <2 x i1> %cmp to <2 x i64>1501 store <2 x i64> %sext, ptr %a1502 ret void1503}1504