2086 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; AND10;11 12define <8 x i8> @and_v8i8(<8 x i8> %op1, <8 x i8> %op2) {13; CHECK-LABEL: and_v8i8:14; CHECK: // %bb.0:15; CHECK-NEXT: // kill: def $d0 killed $d0 def $z016; CHECK-NEXT: // kill: def $d1 killed $d1 def $z117; CHECK-NEXT: and z0.d, z0.d, z1.d18; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z019; CHECK-NEXT: ret20;21; NONEON-NOSVE-LABEL: and_v8i8:22; NONEON-NOSVE: // %bb.0:23; NONEON-NOSVE-NEXT: sub sp, sp, #3224; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 3225; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]26; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]27; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]28; NONEON-NOSVE-NEXT: and w8, w9, w829; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]30; NONEON-NOSVE-NEXT: strb w8, [sp, #31]31; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]32; NONEON-NOSVE-NEXT: and w8, w9, w833; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]34; NONEON-NOSVE-NEXT: strb w8, [sp, #30]35; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]36; NONEON-NOSVE-NEXT: and w8, w9, w837; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]38; NONEON-NOSVE-NEXT: strb w8, [sp, #29]39; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]40; NONEON-NOSVE-NEXT: and w8, w9, w841; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]42; NONEON-NOSVE-NEXT: strb w8, [sp, #28]43; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]44; NONEON-NOSVE-NEXT: and w8, w9, w845; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]46; NONEON-NOSVE-NEXT: strb w8, [sp, #27]47; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]48; NONEON-NOSVE-NEXT: and w8, w9, w849; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]50; NONEON-NOSVE-NEXT: strb w8, [sp, #26]51; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]52; NONEON-NOSVE-NEXT: and w8, w9, w853; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]54; NONEON-NOSVE-NEXT: strb w8, [sp, #25]55; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]56; NONEON-NOSVE-NEXT: and w8, w9, w857; NONEON-NOSVE-NEXT: strb w8, [sp, #24]58; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]59; NONEON-NOSVE-NEXT: add sp, sp, #3260; NONEON-NOSVE-NEXT: ret61 %res = and <8 x i8> %op1, %op262 ret <8 x i8> %res63}64 65define <16 x i8> @and_v16i8(<16 x i8> %op1, <16 x i8> %op2) {66; CHECK-LABEL: and_v16i8:67; CHECK: // %bb.0:68; CHECK-NEXT: // kill: def $q0 killed $q0 def $z069; CHECK-NEXT: // kill: def $q1 killed $q1 def $z170; CHECK-NEXT: and z0.d, z0.d, z1.d71; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z072; CHECK-NEXT: ret73;74; NONEON-NOSVE-LABEL: and_v16i8:75; NONEON-NOSVE: // %bb.0:76; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!77; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 4878; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]79; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]80; NONEON-NOSVE-NEXT: and w8, w9, w881; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]82; NONEON-NOSVE-NEXT: strb w8, [sp, #47]83; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]84; NONEON-NOSVE-NEXT: and w8, w9, w885; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]86; NONEON-NOSVE-NEXT: strb w8, [sp, #46]87; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]88; NONEON-NOSVE-NEXT: and w8, w9, w889; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]90; NONEON-NOSVE-NEXT: strb w8, [sp, #45]91; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]92; NONEON-NOSVE-NEXT: and w8, w9, w893; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]94; NONEON-NOSVE-NEXT: strb w8, [sp, #44]95; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]96; NONEON-NOSVE-NEXT: and w8, w9, w897; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]98; NONEON-NOSVE-NEXT: strb w8, [sp, #43]99; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]100; NONEON-NOSVE-NEXT: and w8, w9, w8101; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]102; NONEON-NOSVE-NEXT: strb w8, [sp, #42]103; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]104; NONEON-NOSVE-NEXT: and w8, w9, w8105; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]106; NONEON-NOSVE-NEXT: strb w8, [sp, #41]107; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]108; NONEON-NOSVE-NEXT: and w8, w9, w8109; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]110; NONEON-NOSVE-NEXT: strb w8, [sp, #40]111; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]112; NONEON-NOSVE-NEXT: and w8, w9, w8113; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]114; NONEON-NOSVE-NEXT: strb w8, [sp, #39]115; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]116; NONEON-NOSVE-NEXT: and w8, w9, w8117; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]118; NONEON-NOSVE-NEXT: strb w8, [sp, #38]119; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]120; NONEON-NOSVE-NEXT: and w8, w9, w8121; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]122; NONEON-NOSVE-NEXT: strb w8, [sp, #37]123; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]124; NONEON-NOSVE-NEXT: and w8, w9, w8125; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]126; NONEON-NOSVE-NEXT: strb w8, [sp, #36]127; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]128; NONEON-NOSVE-NEXT: and w8, w9, w8129; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]130; NONEON-NOSVE-NEXT: strb w8, [sp, #35]131; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]132; NONEON-NOSVE-NEXT: and w8, w9, w8133; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]134; NONEON-NOSVE-NEXT: strb w8, [sp, #34]135; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]136; NONEON-NOSVE-NEXT: and w8, w9, w8137; NONEON-NOSVE-NEXT: ldrb w9, [sp]138; NONEON-NOSVE-NEXT: strb w8, [sp, #33]139; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]140; NONEON-NOSVE-NEXT: and w8, w9, w8141; NONEON-NOSVE-NEXT: strb w8, [sp, #32]142; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]143; NONEON-NOSVE-NEXT: add sp, sp, #48144; NONEON-NOSVE-NEXT: ret145 %res = and <16 x i8> %op1, %op2146 ret <16 x i8> %res147}148 149define void @and_v32i8(ptr %a, ptr %b) {150; CHECK-LABEL: and_v32i8:151; CHECK: // %bb.0:152; CHECK-NEXT: ldp q0, q3, [x1]153; CHECK-NEXT: ldp q1, q2, [x0]154; CHECK-NEXT: and z0.d, z1.d, z0.d155; CHECK-NEXT: and z1.d, z2.d, z3.d156; CHECK-NEXT: stp q0, q1, [x0]157; CHECK-NEXT: ret158;159; NONEON-NOSVE-LABEL: and_v32i8:160; NONEON-NOSVE: // %bb.0:161; NONEON-NOSVE-NEXT: sub sp, sp, #96162; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96163; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]164; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]165; NONEON-NOSVE-NEXT: stp q2, q3, [sp]166; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]167; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]168; NONEON-NOSVE-NEXT: ldrb w9, [sp, #47]169; NONEON-NOSVE-NEXT: and w8, w9, w8170; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]171; NONEON-NOSVE-NEXT: strb w8, [sp, #95]172; NONEON-NOSVE-NEXT: ldrb w8, [sp, #62]173; NONEON-NOSVE-NEXT: and w8, w9, w8174; NONEON-NOSVE-NEXT: ldrb w9, [sp, #45]175; NONEON-NOSVE-NEXT: strb w8, [sp, #94]176; NONEON-NOSVE-NEXT: ldrb w8, [sp, #61]177; NONEON-NOSVE-NEXT: and w8, w9, w8178; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]179; NONEON-NOSVE-NEXT: strb w8, [sp, #93]180; NONEON-NOSVE-NEXT: ldrb w8, [sp, #60]181; NONEON-NOSVE-NEXT: and w8, w9, w8182; NONEON-NOSVE-NEXT: ldrb w9, [sp, #43]183; NONEON-NOSVE-NEXT: strb w8, [sp, #92]184; NONEON-NOSVE-NEXT: ldrb w8, [sp, #59]185; NONEON-NOSVE-NEXT: and w8, w9, w8186; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]187; NONEON-NOSVE-NEXT: strb w8, [sp, #91]188; NONEON-NOSVE-NEXT: ldrb w8, [sp, #58]189; NONEON-NOSVE-NEXT: and w8, w9, w8190; NONEON-NOSVE-NEXT: ldrb w9, [sp, #41]191; NONEON-NOSVE-NEXT: strb w8, [sp, #90]192; NONEON-NOSVE-NEXT: ldrb w8, [sp, #57]193; NONEON-NOSVE-NEXT: and w8, w9, w8194; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]195; NONEON-NOSVE-NEXT: strb w8, [sp, #89]196; NONEON-NOSVE-NEXT: ldrb w8, [sp, #56]197; NONEON-NOSVE-NEXT: and w8, w9, w8198; NONEON-NOSVE-NEXT: ldrb w9, [sp, #39]199; NONEON-NOSVE-NEXT: strb w8, [sp, #88]200; NONEON-NOSVE-NEXT: ldrb w8, [sp, #55]201; NONEON-NOSVE-NEXT: and w8, w9, w8202; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]203; NONEON-NOSVE-NEXT: strb w8, [sp, #87]204; NONEON-NOSVE-NEXT: ldrb w8, [sp, #54]205; NONEON-NOSVE-NEXT: and w8, w9, w8206; NONEON-NOSVE-NEXT: ldrb w9, [sp, #37]207; NONEON-NOSVE-NEXT: strb w8, [sp, #86]208; NONEON-NOSVE-NEXT: ldrb w8, [sp, #53]209; NONEON-NOSVE-NEXT: and w8, w9, w8210; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]211; NONEON-NOSVE-NEXT: strb w8, [sp, #85]212; NONEON-NOSVE-NEXT: ldrb w8, [sp, #52]213; NONEON-NOSVE-NEXT: and w8, w9, w8214; NONEON-NOSVE-NEXT: ldrb w9, [sp, #35]215; NONEON-NOSVE-NEXT: strb w8, [sp, #84]216; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]217; NONEON-NOSVE-NEXT: and w8, w9, w8218; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]219; NONEON-NOSVE-NEXT: strb w8, [sp, #83]220; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]221; NONEON-NOSVE-NEXT: and w8, w9, w8222; NONEON-NOSVE-NEXT: ldrb w9, [sp, #33]223; NONEON-NOSVE-NEXT: strb w8, [sp, #82]224; NONEON-NOSVE-NEXT: ldrb w8, [sp, #49]225; NONEON-NOSVE-NEXT: and w8, w9, w8226; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]227; NONEON-NOSVE-NEXT: strb w8, [sp, #81]228; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]229; NONEON-NOSVE-NEXT: and w8, w9, w8230; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]231; NONEON-NOSVE-NEXT: strb w8, [sp, #80]232; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]233; NONEON-NOSVE-NEXT: and w8, w9, w8234; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]235; NONEON-NOSVE-NEXT: strb w8, [sp, #79]236; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]237; NONEON-NOSVE-NEXT: and w8, w9, w8238; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]239; NONEON-NOSVE-NEXT: strb w8, [sp, #78]240; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]241; NONEON-NOSVE-NEXT: and w8, w9, w8242; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]243; NONEON-NOSVE-NEXT: strb w8, [sp, #77]244; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]245; NONEON-NOSVE-NEXT: and w8, w9, w8246; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]247; NONEON-NOSVE-NEXT: strb w8, [sp, #76]248; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]249; NONEON-NOSVE-NEXT: and w8, w9, w8250; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]251; NONEON-NOSVE-NEXT: strb w8, [sp, #75]252; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]253; NONEON-NOSVE-NEXT: and w8, w9, w8254; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]255; NONEON-NOSVE-NEXT: strb w8, [sp, #74]256; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]257; NONEON-NOSVE-NEXT: and w8, w9, w8258; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]259; NONEON-NOSVE-NEXT: strb w8, [sp, #73]260; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]261; NONEON-NOSVE-NEXT: and w8, w9, w8262; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]263; NONEON-NOSVE-NEXT: strb w8, [sp, #72]264; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]265; NONEON-NOSVE-NEXT: and w8, w9, w8266; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]267; NONEON-NOSVE-NEXT: strb w8, [sp, #71]268; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]269; NONEON-NOSVE-NEXT: and w8, w9, w8270; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]271; NONEON-NOSVE-NEXT: strb w8, [sp, #70]272; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]273; NONEON-NOSVE-NEXT: and w8, w9, w8274; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]275; NONEON-NOSVE-NEXT: strb w8, [sp, #69]276; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]277; NONEON-NOSVE-NEXT: and w8, w9, w8278; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]279; NONEON-NOSVE-NEXT: strb w8, [sp, #68]280; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]281; NONEON-NOSVE-NEXT: and w8, w9, w8282; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]283; NONEON-NOSVE-NEXT: strb w8, [sp, #67]284; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]285; NONEON-NOSVE-NEXT: and w8, w9, w8286; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]287; NONEON-NOSVE-NEXT: strb w8, [sp, #66]288; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]289; NONEON-NOSVE-NEXT: and w8, w9, w8290; NONEON-NOSVE-NEXT: ldrb w9, [sp]291; NONEON-NOSVE-NEXT: strb w8, [sp, #65]292; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]293; NONEON-NOSVE-NEXT: and w8, w9, w8294; NONEON-NOSVE-NEXT: strb w8, [sp, #64]295; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]296; NONEON-NOSVE-NEXT: stp q0, q1, [x0]297; NONEON-NOSVE-NEXT: add sp, sp, #96298; NONEON-NOSVE-NEXT: ret299 %op1 = load <32 x i8>, ptr %a300 %op2 = load <32 x i8>, ptr %b301 %res = and <32 x i8> %op1, %op2302 store <32 x i8> %res, ptr %a303 ret void304}305 306define <4 x i16> @and_v4i16(<4 x i16> %op1, <4 x i16> %op2) {307; CHECK-LABEL: and_v4i16:308; CHECK: // %bb.0:309; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0310; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1311; CHECK-NEXT: and z0.d, z0.d, z1.d312; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0313; CHECK-NEXT: ret314;315; NONEON-NOSVE-LABEL: and_v4i16:316; NONEON-NOSVE: // %bb.0:317; NONEON-NOSVE-NEXT: sub sp, sp, #32318; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32319; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]320; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]321; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]322; NONEON-NOSVE-NEXT: and w8, w9, w8323; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]324; NONEON-NOSVE-NEXT: strh w8, [sp, #30]325; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]326; NONEON-NOSVE-NEXT: and w8, w9, w8327; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]328; NONEON-NOSVE-NEXT: strh w8, [sp, #28]329; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]330; NONEON-NOSVE-NEXT: and w8, w9, w8331; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]332; NONEON-NOSVE-NEXT: strh w8, [sp, #26]333; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]334; NONEON-NOSVE-NEXT: and w8, w9, w8335; NONEON-NOSVE-NEXT: strh w8, [sp, #24]336; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]337; NONEON-NOSVE-NEXT: add sp, sp, #32338; NONEON-NOSVE-NEXT: ret339 %res = and <4 x i16> %op1, %op2340 ret <4 x i16> %res341}342 343define <8 x i16> @and_v8i16(<8 x i16> %op1, <8 x i16> %op2) {344; CHECK-LABEL: and_v8i16:345; CHECK: // %bb.0:346; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0347; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1348; CHECK-NEXT: and z0.d, z0.d, z1.d349; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0350; CHECK-NEXT: ret351;352; NONEON-NOSVE-LABEL: and_v8i16:353; NONEON-NOSVE: // %bb.0:354; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!355; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48356; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]357; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]358; NONEON-NOSVE-NEXT: and w8, w9, w8359; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]360; NONEON-NOSVE-NEXT: strh w8, [sp, #46]361; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]362; NONEON-NOSVE-NEXT: and w8, w9, w8363; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]364; NONEON-NOSVE-NEXT: strh w8, [sp, #44]365; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]366; NONEON-NOSVE-NEXT: and w8, w9, w8367; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]368; NONEON-NOSVE-NEXT: strh w8, [sp, #42]369; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]370; NONEON-NOSVE-NEXT: and w8, w9, w8371; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]372; NONEON-NOSVE-NEXT: strh w8, [sp, #40]373; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]374; NONEON-NOSVE-NEXT: and w8, w9, w8375; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]376; NONEON-NOSVE-NEXT: strh w8, [sp, #38]377; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]378; NONEON-NOSVE-NEXT: and w8, w9, w8379; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]380; NONEON-NOSVE-NEXT: strh w8, [sp, #36]381; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]382; NONEON-NOSVE-NEXT: and w8, w9, w8383; NONEON-NOSVE-NEXT: ldrh w9, [sp]384; NONEON-NOSVE-NEXT: strh w8, [sp, #34]385; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]386; NONEON-NOSVE-NEXT: and w8, w9, w8387; NONEON-NOSVE-NEXT: strh w8, [sp, #32]388; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]389; NONEON-NOSVE-NEXT: add sp, sp, #48390; NONEON-NOSVE-NEXT: ret391 %res = and <8 x i16> %op1, %op2392 ret <8 x i16> %res393}394 395define void @and_v16i16(ptr %a, ptr %b) {396; CHECK-LABEL: and_v16i16:397; CHECK: // %bb.0:398; CHECK-NEXT: ldp q0, q3, [x1]399; CHECK-NEXT: ldp q1, q2, [x0]400; CHECK-NEXT: and z0.d, z1.d, z0.d401; CHECK-NEXT: and z1.d, z2.d, z3.d402; CHECK-NEXT: stp q0, q1, [x0]403; CHECK-NEXT: ret404;405; NONEON-NOSVE-LABEL: and_v16i16:406; NONEON-NOSVE: // %bb.0:407; NONEON-NOSVE-NEXT: sub sp, sp, #96408; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96409; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]410; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]411; NONEON-NOSVE-NEXT: stp q2, q3, [sp]412; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]413; NONEON-NOSVE-NEXT: ldrh w8, [sp, #62]414; NONEON-NOSVE-NEXT: ldrh w9, [sp, #46]415; NONEON-NOSVE-NEXT: and w8, w9, w8416; NONEON-NOSVE-NEXT: ldrh w9, [sp, #44]417; NONEON-NOSVE-NEXT: strh w8, [sp, #94]418; NONEON-NOSVE-NEXT: ldrh w8, [sp, #60]419; NONEON-NOSVE-NEXT: and w8, w9, w8420; NONEON-NOSVE-NEXT: ldrh w9, [sp, #42]421; NONEON-NOSVE-NEXT: strh w8, [sp, #92]422; NONEON-NOSVE-NEXT: ldrh w8, [sp, #58]423; NONEON-NOSVE-NEXT: and w8, w9, w8424; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40]425; NONEON-NOSVE-NEXT: strh w8, [sp, #90]426; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]427; NONEON-NOSVE-NEXT: and w8, w9, w8428; NONEON-NOSVE-NEXT: ldrh w9, [sp, #38]429; NONEON-NOSVE-NEXT: strh w8, [sp, #88]430; NONEON-NOSVE-NEXT: ldrh w8, [sp, #54]431; NONEON-NOSVE-NEXT: and w8, w9, w8432; NONEON-NOSVE-NEXT: ldrh w9, [sp, #36]433; NONEON-NOSVE-NEXT: strh w8, [sp, #86]434; NONEON-NOSVE-NEXT: ldrh w8, [sp, #52]435; NONEON-NOSVE-NEXT: and w8, w9, w8436; NONEON-NOSVE-NEXT: ldrh w9, [sp, #34]437; NONEON-NOSVE-NEXT: strh w8, [sp, #84]438; NONEON-NOSVE-NEXT: ldrh w8, [sp, #50]439; NONEON-NOSVE-NEXT: and w8, w9, w8440; NONEON-NOSVE-NEXT: ldrh w9, [sp, #32]441; NONEON-NOSVE-NEXT: strh w8, [sp, #82]442; NONEON-NOSVE-NEXT: ldrh w8, [sp, #48]443; NONEON-NOSVE-NEXT: and w8, w9, w8444; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]445; NONEON-NOSVE-NEXT: strh w8, [sp, #80]446; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]447; NONEON-NOSVE-NEXT: and w8, w9, w8448; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]449; NONEON-NOSVE-NEXT: strh w8, [sp, #78]450; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]451; NONEON-NOSVE-NEXT: and w8, w9, w8452; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]453; NONEON-NOSVE-NEXT: strh w8, [sp, #76]454; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]455; NONEON-NOSVE-NEXT: and w8, w9, w8456; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]457; NONEON-NOSVE-NEXT: strh w8, [sp, #74]458; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]459; NONEON-NOSVE-NEXT: and w8, w9, w8460; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]461; NONEON-NOSVE-NEXT: strh w8, [sp, #72]462; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]463; NONEON-NOSVE-NEXT: and w8, w9, w8464; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]465; NONEON-NOSVE-NEXT: strh w8, [sp, #70]466; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]467; NONEON-NOSVE-NEXT: and w8, w9, w8468; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]469; NONEON-NOSVE-NEXT: strh w8, [sp, #68]470; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]471; NONEON-NOSVE-NEXT: and w8, w9, w8472; NONEON-NOSVE-NEXT: ldrh w9, [sp]473; NONEON-NOSVE-NEXT: strh w8, [sp, #66]474; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]475; NONEON-NOSVE-NEXT: and w8, w9, w8476; NONEON-NOSVE-NEXT: strh w8, [sp, #64]477; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]478; NONEON-NOSVE-NEXT: stp q0, q1, [x0]479; NONEON-NOSVE-NEXT: add sp, sp, #96480; NONEON-NOSVE-NEXT: ret481 %op1 = load <16 x i16>, ptr %a482 %op2 = load <16 x i16>, ptr %b483 %res = and <16 x i16> %op1, %op2484 store <16 x i16> %res, ptr %a485 ret void486}487 488define <2 x i32> @and_v2i32(<2 x i32> %op1, <2 x i32> %op2) {489; CHECK-LABEL: and_v2i32:490; CHECK: // %bb.0:491; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0492; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1493; CHECK-NEXT: and z0.d, z0.d, z1.d494; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0495; CHECK-NEXT: ret496;497; NONEON-NOSVE-LABEL: and_v2i32:498; NONEON-NOSVE: // %bb.0:499; NONEON-NOSVE-NEXT: sub sp, sp, #32500; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32501; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]502; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]503; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]504; NONEON-NOSVE-NEXT: and w8, w10, w8505; NONEON-NOSVE-NEXT: str w8, [sp, #28]506; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]507; NONEON-NOSVE-NEXT: and w8, w9, w8508; NONEON-NOSVE-NEXT: str w8, [sp, #24]509; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]510; NONEON-NOSVE-NEXT: add sp, sp, #32511; NONEON-NOSVE-NEXT: ret512 %res = and <2 x i32> %op1, %op2513 ret <2 x i32> %res514}515 516define <4 x i32> @and_v4i32(<4 x i32> %op1, <4 x i32> %op2) {517; CHECK-LABEL: and_v4i32:518; CHECK: // %bb.0:519; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0520; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1521; CHECK-NEXT: and z0.d, z0.d, z1.d522; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0523; CHECK-NEXT: ret524;525; NONEON-NOSVE-LABEL: and_v4i32:526; NONEON-NOSVE: // %bb.0:527; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!528; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48529; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]530; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]531; NONEON-NOSVE-NEXT: and w8, w10, w8532; NONEON-NOSVE-NEXT: str w8, [sp, #44]533; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]534; NONEON-NOSVE-NEXT: and w8, w9, w8535; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]536; NONEON-NOSVE-NEXT: str w8, [sp, #40]537; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]538; NONEON-NOSVE-NEXT: and w8, w10, w8539; NONEON-NOSVE-NEXT: str w8, [sp, #36]540; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]541; NONEON-NOSVE-NEXT: and w8, w9, w8542; NONEON-NOSVE-NEXT: str w8, [sp, #32]543; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]544; NONEON-NOSVE-NEXT: add sp, sp, #48545; NONEON-NOSVE-NEXT: ret546 %res = and <4 x i32> %op1, %op2547 ret <4 x i32> %res548}549 550define void @and_v8i32(ptr %a, ptr %b) {551; CHECK-LABEL: and_v8i32:552; CHECK: // %bb.0:553; CHECK-NEXT: ldp q0, q3, [x1]554; CHECK-NEXT: ldp q1, q2, [x0]555; CHECK-NEXT: and z0.d, z1.d, z0.d556; CHECK-NEXT: and z1.d, z2.d, z3.d557; CHECK-NEXT: stp q0, q1, [x0]558; CHECK-NEXT: ret559;560; NONEON-NOSVE-LABEL: and_v8i32:561; NONEON-NOSVE: // %bb.0:562; NONEON-NOSVE-NEXT: sub sp, sp, #96563; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96564; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]565; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]566; NONEON-NOSVE-NEXT: stp q2, q3, [sp]567; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]568; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #40]569; NONEON-NOSVE-NEXT: ldr w8, [sp, #60]570; NONEON-NOSVE-NEXT: and w8, w10, w8571; NONEON-NOSVE-NEXT: str w8, [sp, #92]572; NONEON-NOSVE-NEXT: ldr w8, [sp, #56]573; NONEON-NOSVE-NEXT: and w8, w9, w8574; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #32]575; NONEON-NOSVE-NEXT: str w8, [sp, #88]576; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]577; NONEON-NOSVE-NEXT: and w8, w10, w8578; NONEON-NOSVE-NEXT: str w8, [sp, #84]579; NONEON-NOSVE-NEXT: ldr w8, [sp, #48]580; NONEON-NOSVE-NEXT: and w8, w9, w8581; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]582; NONEON-NOSVE-NEXT: str w8, [sp, #80]583; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]584; NONEON-NOSVE-NEXT: and w8, w10, w8585; NONEON-NOSVE-NEXT: str w8, [sp, #76]586; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]587; NONEON-NOSVE-NEXT: and w8, w9, w8588; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]589; NONEON-NOSVE-NEXT: str w8, [sp, #72]590; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]591; NONEON-NOSVE-NEXT: and w8, w10, w8592; NONEON-NOSVE-NEXT: str w8, [sp, #68]593; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]594; NONEON-NOSVE-NEXT: and w8, w9, w8595; NONEON-NOSVE-NEXT: str w8, [sp, #64]596; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]597; NONEON-NOSVE-NEXT: stp q0, q1, [x0]598; NONEON-NOSVE-NEXT: add sp, sp, #96599; NONEON-NOSVE-NEXT: ret600 %op1 = load <8 x i32>, ptr %a601 %op2 = load <8 x i32>, ptr %b602 %res = and <8 x i32> %op1, %op2603 store <8 x i32> %res, ptr %a604 ret void605}606 607define <1 x i64> @and_v1i64(<1 x i64> %op1, <1 x i64> %op2) {608; CHECK-LABEL: and_v1i64:609; CHECK: // %bb.0:610; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0611; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1612; CHECK-NEXT: and z0.d, z0.d, z1.d613; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0614; CHECK-NEXT: ret615;616; NONEON-NOSVE-LABEL: and_v1i64:617; NONEON-NOSVE: // %bb.0:618; NONEON-NOSVE-NEXT: sub sp, sp, #16619; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16620; NONEON-NOSVE-NEXT: fmov x8, d1621; NONEON-NOSVE-NEXT: fmov x9, d0622; NONEON-NOSVE-NEXT: and x8, x9, x8623; NONEON-NOSVE-NEXT: str x8, [sp, #8]624; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]625; NONEON-NOSVE-NEXT: add sp, sp, #16626; NONEON-NOSVE-NEXT: ret627 %res = and <1 x i64> %op1, %op2628 ret <1 x i64> %res629}630 631define <2 x i64> @and_v2i64(<2 x i64> %op1, <2 x i64> %op2) {632; CHECK-LABEL: and_v2i64:633; CHECK: // %bb.0:634; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0635; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1636; CHECK-NEXT: and z0.d, z0.d, z1.d637; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0638; CHECK-NEXT: ret639;640; NONEON-NOSVE-LABEL: and_v2i64:641; NONEON-NOSVE: // %bb.0:642; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!643; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48644; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]645; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]646; NONEON-NOSVE-NEXT: and x8, x10, x8647; NONEON-NOSVE-NEXT: str x8, [sp, #40]648; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]649; NONEON-NOSVE-NEXT: and x8, x9, x8650; NONEON-NOSVE-NEXT: str x8, [sp, #32]651; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]652; NONEON-NOSVE-NEXT: add sp, sp, #48653; NONEON-NOSVE-NEXT: ret654 %res = and <2 x i64> %op1, %op2655 ret <2 x i64> %res656}657 658define void @and_v4i64(ptr %a, ptr %b) {659; CHECK-LABEL: and_v4i64:660; CHECK: // %bb.0:661; CHECK-NEXT: ldp q0, q3, [x1]662; CHECK-NEXT: ldp q1, q2, [x0]663; CHECK-NEXT: and z0.d, z1.d, z0.d664; CHECK-NEXT: and z1.d, z2.d, z3.d665; CHECK-NEXT: stp q0, q1, [x0]666; CHECK-NEXT: ret667;668; NONEON-NOSVE-LABEL: and_v4i64:669; NONEON-NOSVE: // %bb.0:670; NONEON-NOSVE-NEXT: sub sp, sp, #96671; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96672; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]673; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]674; NONEON-NOSVE-NEXT: stp q2, q3, [sp]675; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]676; NONEON-NOSVE-NEXT: ldp x9, x10, [sp, #32]677; NONEON-NOSVE-NEXT: ldr x8, [sp, #56]678; NONEON-NOSVE-NEXT: and x8, x10, x8679; NONEON-NOSVE-NEXT: str x8, [sp, #88]680; NONEON-NOSVE-NEXT: ldr x8, [sp, #48]681; NONEON-NOSVE-NEXT: and x8, x9, x8682; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]683; NONEON-NOSVE-NEXT: str x8, [sp, #80]684; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]685; NONEON-NOSVE-NEXT: and x8, x10, x8686; NONEON-NOSVE-NEXT: str x8, [sp, #72]687; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]688; NONEON-NOSVE-NEXT: and x8, x9, x8689; NONEON-NOSVE-NEXT: str x8, [sp, #64]690; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]691; NONEON-NOSVE-NEXT: stp q0, q1, [x0]692; NONEON-NOSVE-NEXT: add sp, sp, #96693; NONEON-NOSVE-NEXT: ret694 %op1 = load <4 x i64>, ptr %a695 %op2 = load <4 x i64>, ptr %b696 %res = and <4 x i64> %op1, %op2697 store <4 x i64> %res, ptr %a698 ret void699}700 701;702; OR703;704 705define <8 x i8> @or_v8i8(<8 x i8> %op1, <8 x i8> %op2) {706; CHECK-LABEL: or_v8i8:707; CHECK: // %bb.0:708; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0709; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1710; CHECK-NEXT: orr z0.d, z0.d, z1.d711; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0712; CHECK-NEXT: ret713;714; NONEON-NOSVE-LABEL: or_v8i8:715; NONEON-NOSVE: // %bb.0:716; NONEON-NOSVE-NEXT: sub sp, sp, #32717; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32718; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]719; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]720; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]721; NONEON-NOSVE-NEXT: orr w8, w9, w8722; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]723; NONEON-NOSVE-NEXT: strb w8, [sp, #31]724; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]725; NONEON-NOSVE-NEXT: orr w8, w9, w8726; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]727; NONEON-NOSVE-NEXT: strb w8, [sp, #30]728; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]729; NONEON-NOSVE-NEXT: orr w8, w9, w8730; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]731; NONEON-NOSVE-NEXT: strb w8, [sp, #29]732; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]733; NONEON-NOSVE-NEXT: orr w8, w9, w8734; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]735; NONEON-NOSVE-NEXT: strb w8, [sp, #28]736; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]737; NONEON-NOSVE-NEXT: orr w8, w9, w8738; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]739; NONEON-NOSVE-NEXT: strb w8, [sp, #27]740; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]741; NONEON-NOSVE-NEXT: orr w8, w9, w8742; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]743; NONEON-NOSVE-NEXT: strb w8, [sp, #26]744; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]745; NONEON-NOSVE-NEXT: orr w8, w9, w8746; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]747; NONEON-NOSVE-NEXT: strb w8, [sp, #25]748; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]749; NONEON-NOSVE-NEXT: orr w8, w9, w8750; NONEON-NOSVE-NEXT: strb w8, [sp, #24]751; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]752; NONEON-NOSVE-NEXT: add sp, sp, #32753; NONEON-NOSVE-NEXT: ret754 %res = or <8 x i8> %op1, %op2755 ret <8 x i8> %res756}757 758define <16 x i8> @or_v16i8(<16 x i8> %op1, <16 x i8> %op2) {759; CHECK-LABEL: or_v16i8:760; CHECK: // %bb.0:761; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0762; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1763; CHECK-NEXT: orr z0.d, z0.d, z1.d764; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0765; CHECK-NEXT: ret766;767; NONEON-NOSVE-LABEL: or_v16i8: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: ldrb w8, [sp, #31]772; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]773; NONEON-NOSVE-NEXT: orr w8, w9, w8774; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]775; NONEON-NOSVE-NEXT: strb w8, [sp, #47]776; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]777; NONEON-NOSVE-NEXT: orr w8, w9, w8778; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]779; NONEON-NOSVE-NEXT: strb w8, [sp, #46]780; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]781; NONEON-NOSVE-NEXT: orr w8, w9, w8782; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]783; NONEON-NOSVE-NEXT: strb w8, [sp, #45]784; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]785; NONEON-NOSVE-NEXT: orr w8, w9, w8786; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]787; NONEON-NOSVE-NEXT: strb w8, [sp, #44]788; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]789; NONEON-NOSVE-NEXT: orr w8, w9, w8790; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]791; NONEON-NOSVE-NEXT: strb w8, [sp, #43]792; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]793; NONEON-NOSVE-NEXT: orr w8, w9, w8794; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]795; NONEON-NOSVE-NEXT: strb w8, [sp, #42]796; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]797; NONEON-NOSVE-NEXT: orr w8, w9, w8798; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]799; NONEON-NOSVE-NEXT: strb w8, [sp, #41]800; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]801; NONEON-NOSVE-NEXT: orr w8, w9, w8802; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]803; NONEON-NOSVE-NEXT: strb w8, [sp, #40]804; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]805; NONEON-NOSVE-NEXT: orr w8, w9, w8806; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]807; NONEON-NOSVE-NEXT: strb w8, [sp, #39]808; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]809; NONEON-NOSVE-NEXT: orr w8, w9, w8810; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]811; NONEON-NOSVE-NEXT: strb w8, [sp, #38]812; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]813; NONEON-NOSVE-NEXT: orr w8, w9, w8814; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]815; NONEON-NOSVE-NEXT: strb w8, [sp, #37]816; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]817; NONEON-NOSVE-NEXT: orr w8, w9, w8818; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]819; NONEON-NOSVE-NEXT: strb w8, [sp, #36]820; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]821; NONEON-NOSVE-NEXT: orr w8, w9, w8822; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]823; NONEON-NOSVE-NEXT: strb w8, [sp, #35]824; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]825; NONEON-NOSVE-NEXT: orr w8, w9, w8826; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]827; NONEON-NOSVE-NEXT: strb w8, [sp, #34]828; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]829; NONEON-NOSVE-NEXT: orr w8, w9, w8830; NONEON-NOSVE-NEXT: ldrb w9, [sp]831; NONEON-NOSVE-NEXT: strb w8, [sp, #33]832; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]833; NONEON-NOSVE-NEXT: orr w8, w9, w8834; NONEON-NOSVE-NEXT: strb w8, [sp, #32]835; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]836; NONEON-NOSVE-NEXT: add sp, sp, #48837; NONEON-NOSVE-NEXT: ret838 %res = or <16 x i8> %op1, %op2839 ret <16 x i8> %res840}841 842define void @or_v32i8(ptr %a, ptr %b) {843; CHECK-LABEL: or_v32i8:844; CHECK: // %bb.0:845; CHECK-NEXT: ldp q0, q3, [x1]846; CHECK-NEXT: ldp q1, q2, [x0]847; CHECK-NEXT: orr z0.d, z1.d, z0.d848; CHECK-NEXT: orr z1.d, z2.d, z3.d849; CHECK-NEXT: stp q0, q1, [x0]850; CHECK-NEXT: ret851;852; NONEON-NOSVE-LABEL: or_v32i8:853; NONEON-NOSVE: // %bb.0:854; NONEON-NOSVE-NEXT: sub sp, sp, #96855; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96856; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]857; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]858; NONEON-NOSVE-NEXT: stp q2, q3, [sp]859; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]860; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]861; NONEON-NOSVE-NEXT: ldrb w9, [sp, #47]862; NONEON-NOSVE-NEXT: orr w8, w9, w8863; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]864; NONEON-NOSVE-NEXT: strb w8, [sp, #95]865; NONEON-NOSVE-NEXT: ldrb w8, [sp, #62]866; NONEON-NOSVE-NEXT: orr w8, w9, w8867; NONEON-NOSVE-NEXT: ldrb w9, [sp, #45]868; NONEON-NOSVE-NEXT: strb w8, [sp, #94]869; NONEON-NOSVE-NEXT: ldrb w8, [sp, #61]870; NONEON-NOSVE-NEXT: orr w8, w9, w8871; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]872; NONEON-NOSVE-NEXT: strb w8, [sp, #93]873; NONEON-NOSVE-NEXT: ldrb w8, [sp, #60]874; NONEON-NOSVE-NEXT: orr w8, w9, w8875; NONEON-NOSVE-NEXT: ldrb w9, [sp, #43]876; NONEON-NOSVE-NEXT: strb w8, [sp, #92]877; NONEON-NOSVE-NEXT: ldrb w8, [sp, #59]878; NONEON-NOSVE-NEXT: orr w8, w9, w8879; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]880; NONEON-NOSVE-NEXT: strb w8, [sp, #91]881; NONEON-NOSVE-NEXT: ldrb w8, [sp, #58]882; NONEON-NOSVE-NEXT: orr w8, w9, w8883; NONEON-NOSVE-NEXT: ldrb w9, [sp, #41]884; NONEON-NOSVE-NEXT: strb w8, [sp, #90]885; NONEON-NOSVE-NEXT: ldrb w8, [sp, #57]886; NONEON-NOSVE-NEXT: orr w8, w9, w8887; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]888; NONEON-NOSVE-NEXT: strb w8, [sp, #89]889; NONEON-NOSVE-NEXT: ldrb w8, [sp, #56]890; NONEON-NOSVE-NEXT: orr w8, w9, w8891; NONEON-NOSVE-NEXT: ldrb w9, [sp, #39]892; NONEON-NOSVE-NEXT: strb w8, [sp, #88]893; NONEON-NOSVE-NEXT: ldrb w8, [sp, #55]894; NONEON-NOSVE-NEXT: orr w8, w9, w8895; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]896; NONEON-NOSVE-NEXT: strb w8, [sp, #87]897; NONEON-NOSVE-NEXT: ldrb w8, [sp, #54]898; NONEON-NOSVE-NEXT: orr w8, w9, w8899; NONEON-NOSVE-NEXT: ldrb w9, [sp, #37]900; NONEON-NOSVE-NEXT: strb w8, [sp, #86]901; NONEON-NOSVE-NEXT: ldrb w8, [sp, #53]902; NONEON-NOSVE-NEXT: orr w8, w9, w8903; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]904; NONEON-NOSVE-NEXT: strb w8, [sp, #85]905; NONEON-NOSVE-NEXT: ldrb w8, [sp, #52]906; NONEON-NOSVE-NEXT: orr w8, w9, w8907; NONEON-NOSVE-NEXT: ldrb w9, [sp, #35]908; NONEON-NOSVE-NEXT: strb w8, [sp, #84]909; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]910; NONEON-NOSVE-NEXT: orr w8, w9, w8911; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]912; NONEON-NOSVE-NEXT: strb w8, [sp, #83]913; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]914; NONEON-NOSVE-NEXT: orr w8, w9, w8915; NONEON-NOSVE-NEXT: ldrb w9, [sp, #33]916; NONEON-NOSVE-NEXT: strb w8, [sp, #82]917; NONEON-NOSVE-NEXT: ldrb w8, [sp, #49]918; NONEON-NOSVE-NEXT: orr w8, w9, w8919; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]920; NONEON-NOSVE-NEXT: strb w8, [sp, #81]921; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]922; NONEON-NOSVE-NEXT: orr w8, w9, w8923; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]924; NONEON-NOSVE-NEXT: strb w8, [sp, #80]925; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]926; NONEON-NOSVE-NEXT: orr w8, w9, w8927; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]928; NONEON-NOSVE-NEXT: strb w8, [sp, #79]929; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]930; NONEON-NOSVE-NEXT: orr w8, w9, w8931; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]932; NONEON-NOSVE-NEXT: strb w8, [sp, #78]933; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]934; NONEON-NOSVE-NEXT: orr w8, w9, w8935; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]936; NONEON-NOSVE-NEXT: strb w8, [sp, #77]937; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]938; NONEON-NOSVE-NEXT: orr w8, w9, w8939; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]940; NONEON-NOSVE-NEXT: strb w8, [sp, #76]941; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]942; NONEON-NOSVE-NEXT: orr w8, w9, w8943; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]944; NONEON-NOSVE-NEXT: strb w8, [sp, #75]945; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]946; NONEON-NOSVE-NEXT: orr w8, w9, w8947; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]948; NONEON-NOSVE-NEXT: strb w8, [sp, #74]949; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]950; NONEON-NOSVE-NEXT: orr w8, w9, w8951; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]952; NONEON-NOSVE-NEXT: strb w8, [sp, #73]953; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]954; NONEON-NOSVE-NEXT: orr w8, w9, w8955; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]956; NONEON-NOSVE-NEXT: strb w8, [sp, #72]957; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]958; NONEON-NOSVE-NEXT: orr w8, w9, w8959; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]960; NONEON-NOSVE-NEXT: strb w8, [sp, #71]961; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]962; NONEON-NOSVE-NEXT: orr w8, w9, w8963; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]964; NONEON-NOSVE-NEXT: strb w8, [sp, #70]965; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]966; NONEON-NOSVE-NEXT: orr w8, w9, w8967; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]968; NONEON-NOSVE-NEXT: strb w8, [sp, #69]969; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]970; NONEON-NOSVE-NEXT: orr w8, w9, w8971; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]972; NONEON-NOSVE-NEXT: strb w8, [sp, #68]973; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]974; NONEON-NOSVE-NEXT: orr w8, w9, w8975; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]976; NONEON-NOSVE-NEXT: strb w8, [sp, #67]977; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]978; NONEON-NOSVE-NEXT: orr w8, w9, w8979; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]980; NONEON-NOSVE-NEXT: strb w8, [sp, #66]981; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]982; NONEON-NOSVE-NEXT: orr w8, w9, w8983; NONEON-NOSVE-NEXT: ldrb w9, [sp]984; NONEON-NOSVE-NEXT: strb w8, [sp, #65]985; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]986; NONEON-NOSVE-NEXT: orr w8, w9, w8987; NONEON-NOSVE-NEXT: strb w8, [sp, #64]988; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]989; NONEON-NOSVE-NEXT: stp q0, q1, [x0]990; NONEON-NOSVE-NEXT: add sp, sp, #96991; NONEON-NOSVE-NEXT: ret992 %op1 = load <32 x i8>, ptr %a993 %op2 = load <32 x i8>, ptr %b994 %res = or <32 x i8> %op1, %op2995 store <32 x i8> %res, ptr %a996 ret void997}998 999define <4 x i16> @or_v4i16(<4 x i16> %op1, <4 x i16> %op2) {1000; CHECK-LABEL: or_v4i16:1001; CHECK: // %bb.0:1002; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01003; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11004; CHECK-NEXT: orr z0.d, z0.d, z1.d1005; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01006; CHECK-NEXT: ret1007;1008; NONEON-NOSVE-LABEL: or_v4i16:1009; NONEON-NOSVE: // %bb.0:1010; NONEON-NOSVE-NEXT: sub sp, sp, #321011; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321012; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1013; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1014; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1015; NONEON-NOSVE-NEXT: orr w8, w9, w81016; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1017; NONEON-NOSVE-NEXT: strh w8, [sp, #30]1018; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1019; NONEON-NOSVE-NEXT: orr w8, w9, w81020; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1021; NONEON-NOSVE-NEXT: strh w8, [sp, #28]1022; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1023; NONEON-NOSVE-NEXT: orr w8, w9, w81024; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1025; NONEON-NOSVE-NEXT: strh w8, [sp, #26]1026; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1027; NONEON-NOSVE-NEXT: orr w8, w9, w81028; NONEON-NOSVE-NEXT: strh w8, [sp, #24]1029; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1030; NONEON-NOSVE-NEXT: add sp, sp, #321031; NONEON-NOSVE-NEXT: ret1032 %res = or <4 x i16> %op1, %op21033 ret <4 x i16> %res1034}1035 1036define <8 x i16> @or_v8i16(<8 x i16> %op1, <8 x i16> %op2) {1037; CHECK-LABEL: or_v8i16:1038; CHECK: // %bb.0:1039; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01040; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11041; CHECK-NEXT: orr z0.d, z0.d, z1.d1042; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01043; CHECK-NEXT: ret1044;1045; NONEON-NOSVE-LABEL: or_v8i16:1046; NONEON-NOSVE: // %bb.0:1047; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1048; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481049; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1050; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1051; NONEON-NOSVE-NEXT: orr w8, w9, w81052; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1053; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1054; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1055; NONEON-NOSVE-NEXT: orr w8, w9, w81056; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1057; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1058; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1059; NONEON-NOSVE-NEXT: orr w8, w9, w81060; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1061; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1062; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1063; NONEON-NOSVE-NEXT: orr w8, w9, w81064; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]1065; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1066; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1067; NONEON-NOSVE-NEXT: orr w8, w9, w81068; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]1069; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1070; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1071; NONEON-NOSVE-NEXT: orr w8, w9, w81072; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]1073; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1074; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1075; NONEON-NOSVE-NEXT: orr w8, w9, w81076; NONEON-NOSVE-NEXT: ldrh w9, [sp]1077; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1078; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1079; NONEON-NOSVE-NEXT: orr w8, w9, w81080; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1081; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1082; NONEON-NOSVE-NEXT: add sp, sp, #481083; NONEON-NOSVE-NEXT: ret1084 %res = or <8 x i16> %op1, %op21085 ret <8 x i16> %res1086}1087 1088define void @or_v16i16(ptr %a, ptr %b) {1089; CHECK-LABEL: or_v16i16:1090; CHECK: // %bb.0:1091; CHECK-NEXT: ldp q0, q3, [x1]1092; CHECK-NEXT: ldp q1, q2, [x0]1093; CHECK-NEXT: orr z0.d, z1.d, z0.d1094; CHECK-NEXT: orr z1.d, z2.d, z3.d1095; CHECK-NEXT: stp q0, q1, [x0]1096; CHECK-NEXT: ret1097;1098; NONEON-NOSVE-LABEL: or_v16i16:1099; NONEON-NOSVE: // %bb.0:1100; NONEON-NOSVE-NEXT: sub sp, sp, #961101; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961102; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1103; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1104; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1105; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1106; NONEON-NOSVE-NEXT: ldrh w8, [sp, #62]1107; NONEON-NOSVE-NEXT: ldrh w9, [sp, #46]1108; NONEON-NOSVE-NEXT: orr w8, w9, w81109; NONEON-NOSVE-NEXT: ldrh w9, [sp, #44]1110; NONEON-NOSVE-NEXT: strh w8, [sp, #94]1111; NONEON-NOSVE-NEXT: ldrh w8, [sp, #60]1112; NONEON-NOSVE-NEXT: orr w8, w9, w81113; NONEON-NOSVE-NEXT: ldrh w9, [sp, #42]1114; NONEON-NOSVE-NEXT: strh w8, [sp, #92]1115; NONEON-NOSVE-NEXT: ldrh w8, [sp, #58]1116; NONEON-NOSVE-NEXT: orr w8, w9, w81117; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40]1118; NONEON-NOSVE-NEXT: strh w8, [sp, #90]1119; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]1120; NONEON-NOSVE-NEXT: orr w8, w9, w81121; NONEON-NOSVE-NEXT: ldrh w9, [sp, #38]1122; NONEON-NOSVE-NEXT: strh w8, [sp, #88]1123; NONEON-NOSVE-NEXT: ldrh w8, [sp, #54]1124; NONEON-NOSVE-NEXT: orr w8, w9, w81125; NONEON-NOSVE-NEXT: ldrh w9, [sp, #36]1126; NONEON-NOSVE-NEXT: strh w8, [sp, #86]1127; NONEON-NOSVE-NEXT: ldrh w8, [sp, #52]1128; NONEON-NOSVE-NEXT: orr w8, w9, w81129; NONEON-NOSVE-NEXT: ldrh w9, [sp, #34]1130; NONEON-NOSVE-NEXT: strh w8, [sp, #84]1131; NONEON-NOSVE-NEXT: ldrh w8, [sp, #50]1132; NONEON-NOSVE-NEXT: orr w8, w9, w81133; NONEON-NOSVE-NEXT: ldrh w9, [sp, #32]1134; NONEON-NOSVE-NEXT: strh w8, [sp, #82]1135; NONEON-NOSVE-NEXT: ldrh w8, [sp, #48]1136; NONEON-NOSVE-NEXT: orr w8, w9, w81137; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1138; NONEON-NOSVE-NEXT: strh w8, [sp, #80]1139; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1140; NONEON-NOSVE-NEXT: orr w8, w9, w81141; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1142; NONEON-NOSVE-NEXT: strh w8, [sp, #78]1143; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1144; NONEON-NOSVE-NEXT: orr w8, w9, w81145; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1146; NONEON-NOSVE-NEXT: strh w8, [sp, #76]1147; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1148; NONEON-NOSVE-NEXT: orr w8, w9, w81149; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1150; NONEON-NOSVE-NEXT: strh w8, [sp, #74]1151; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1152; NONEON-NOSVE-NEXT: orr w8, w9, w81153; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]1154; NONEON-NOSVE-NEXT: strh w8, [sp, #72]1155; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1156; NONEON-NOSVE-NEXT: orr w8, w9, w81157; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]1158; NONEON-NOSVE-NEXT: strh w8, [sp, #70]1159; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1160; NONEON-NOSVE-NEXT: orr w8, w9, w81161; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]1162; NONEON-NOSVE-NEXT: strh w8, [sp, #68]1163; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1164; NONEON-NOSVE-NEXT: orr w8, w9, w81165; NONEON-NOSVE-NEXT: ldrh w9, [sp]1166; NONEON-NOSVE-NEXT: strh w8, [sp, #66]1167; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1168; NONEON-NOSVE-NEXT: orr w8, w9, w81169; NONEON-NOSVE-NEXT: strh w8, [sp, #64]1170; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1171; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1172; NONEON-NOSVE-NEXT: add sp, sp, #961173; NONEON-NOSVE-NEXT: ret1174 %op1 = load <16 x i16>, ptr %a1175 %op2 = load <16 x i16>, ptr %b1176 %res = or <16 x i16> %op1, %op21177 store <16 x i16> %res, ptr %a1178 ret void1179}1180 1181define <2 x i32> @or_v2i32(<2 x i32> %op1, <2 x i32> %op2) {1182; CHECK-LABEL: or_v2i32:1183; CHECK: // %bb.0:1184; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01185; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11186; CHECK-NEXT: orr z0.d, z0.d, z1.d1187; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01188; CHECK-NEXT: ret1189;1190; NONEON-NOSVE-LABEL: or_v2i32:1191; NONEON-NOSVE: // %bb.0:1192; NONEON-NOSVE-NEXT: sub sp, sp, #321193; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321194; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1195; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1196; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1197; NONEON-NOSVE-NEXT: orr w8, w10, w81198; NONEON-NOSVE-NEXT: str w8, [sp, #28]1199; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1200; NONEON-NOSVE-NEXT: orr w8, w9, w81201; NONEON-NOSVE-NEXT: str w8, [sp, #24]1202; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1203; NONEON-NOSVE-NEXT: add sp, sp, #321204; NONEON-NOSVE-NEXT: ret1205 %res = or <2 x i32> %op1, %op21206 ret <2 x i32> %res1207}1208 1209define <4 x i32> @or_v4i32(<4 x i32> %op1, <4 x i32> %op2) {1210; CHECK-LABEL: or_v4i32:1211; CHECK: // %bb.0:1212; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01213; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11214; CHECK-NEXT: orr z0.d, z0.d, z1.d1215; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01216; CHECK-NEXT: ret1217;1218; NONEON-NOSVE-LABEL: or_v4i32:1219; NONEON-NOSVE: // %bb.0:1220; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1221; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481222; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1223; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1224; NONEON-NOSVE-NEXT: orr w8, w10, w81225; NONEON-NOSVE-NEXT: str w8, [sp, #44]1226; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1227; NONEON-NOSVE-NEXT: orr w8, w9, w81228; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1229; NONEON-NOSVE-NEXT: str w8, [sp, #40]1230; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1231; NONEON-NOSVE-NEXT: orr w8, w10, w81232; NONEON-NOSVE-NEXT: str w8, [sp, #36]1233; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1234; NONEON-NOSVE-NEXT: orr w8, w9, w81235; NONEON-NOSVE-NEXT: str w8, [sp, #32]1236; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1237; NONEON-NOSVE-NEXT: add sp, sp, #481238; NONEON-NOSVE-NEXT: ret1239 %res = or <4 x i32> %op1, %op21240 ret <4 x i32> %res1241}1242 1243define void @or_v8i32(ptr %a, ptr %b) {1244; CHECK-LABEL: or_v8i32:1245; CHECK: // %bb.0:1246; CHECK-NEXT: ldp q0, q3, [x1]1247; CHECK-NEXT: ldp q1, q2, [x0]1248; CHECK-NEXT: orr z0.d, z1.d, z0.d1249; CHECK-NEXT: orr z1.d, z2.d, z3.d1250; CHECK-NEXT: stp q0, q1, [x0]1251; CHECK-NEXT: ret1252;1253; NONEON-NOSVE-LABEL: or_v8i32:1254; NONEON-NOSVE: // %bb.0:1255; NONEON-NOSVE-NEXT: sub sp, sp, #961256; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961257; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1258; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1259; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1260; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1261; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #40]1262; NONEON-NOSVE-NEXT: ldr w8, [sp, #60]1263; NONEON-NOSVE-NEXT: orr w8, w10, w81264; NONEON-NOSVE-NEXT: str w8, [sp, #92]1265; NONEON-NOSVE-NEXT: ldr w8, [sp, #56]1266; NONEON-NOSVE-NEXT: orr w8, w9, w81267; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #32]1268; NONEON-NOSVE-NEXT: str w8, [sp, #88]1269; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]1270; NONEON-NOSVE-NEXT: orr w8, w10, w81271; NONEON-NOSVE-NEXT: str w8, [sp, #84]1272; NONEON-NOSVE-NEXT: ldr w8, [sp, #48]1273; NONEON-NOSVE-NEXT: orr w8, w9, w81274; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1275; NONEON-NOSVE-NEXT: str w8, [sp, #80]1276; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1277; NONEON-NOSVE-NEXT: orr w8, w10, w81278; NONEON-NOSVE-NEXT: str w8, [sp, #76]1279; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1280; NONEON-NOSVE-NEXT: orr w8, w9, w81281; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1282; NONEON-NOSVE-NEXT: str w8, [sp, #72]1283; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1284; NONEON-NOSVE-NEXT: orr w8, w10, w81285; NONEON-NOSVE-NEXT: str w8, [sp, #68]1286; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1287; NONEON-NOSVE-NEXT: orr w8, w9, w81288; NONEON-NOSVE-NEXT: str w8, [sp, #64]1289; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1290; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1291; NONEON-NOSVE-NEXT: add sp, sp, #961292; NONEON-NOSVE-NEXT: ret1293 %op1 = load <8 x i32>, ptr %a1294 %op2 = load <8 x i32>, ptr %b1295 %res = or <8 x i32> %op1, %op21296 store <8 x i32> %res, ptr %a1297 ret void1298}1299 1300define <1 x i64> @or_v1i64(<1 x i64> %op1, <1 x i64> %op2) {1301; CHECK-LABEL: or_v1i64:1302; CHECK: // %bb.0:1303; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01304; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11305; CHECK-NEXT: orr z0.d, z0.d, z1.d1306; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01307; CHECK-NEXT: ret1308;1309; NONEON-NOSVE-LABEL: or_v1i64:1310; NONEON-NOSVE: // %bb.0:1311; NONEON-NOSVE-NEXT: sub sp, sp, #161312; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 161313; NONEON-NOSVE-NEXT: fmov x8, d11314; NONEON-NOSVE-NEXT: fmov x9, d01315; NONEON-NOSVE-NEXT: orr x8, x9, x81316; NONEON-NOSVE-NEXT: str x8, [sp, #8]1317; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]1318; NONEON-NOSVE-NEXT: add sp, sp, #161319; NONEON-NOSVE-NEXT: ret1320 %res = or <1 x i64> %op1, %op21321 ret <1 x i64> %res1322}1323 1324define <2 x i64> @or_v2i64(<2 x i64> %op1, <2 x i64> %op2) {1325; CHECK-LABEL: or_v2i64:1326; CHECK: // %bb.0:1327; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01328; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11329; CHECK-NEXT: orr z0.d, z0.d, z1.d1330; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01331; CHECK-NEXT: ret1332;1333; NONEON-NOSVE-LABEL: or_v2i64:1334; NONEON-NOSVE: // %bb.0:1335; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1336; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481337; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1338; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1339; NONEON-NOSVE-NEXT: orr x8, x10, x81340; NONEON-NOSVE-NEXT: str x8, [sp, #40]1341; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1342; NONEON-NOSVE-NEXT: orr x8, x9, x81343; NONEON-NOSVE-NEXT: str x8, [sp, #32]1344; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1345; NONEON-NOSVE-NEXT: add sp, sp, #481346; NONEON-NOSVE-NEXT: ret1347 %res = or <2 x i64> %op1, %op21348 ret <2 x i64> %res1349}1350 1351define void @or_v4i64(ptr %a, ptr %b) {1352; CHECK-LABEL: or_v4i64:1353; CHECK: // %bb.0:1354; CHECK-NEXT: ldp q0, q3, [x1]1355; CHECK-NEXT: ldp q1, q2, [x0]1356; CHECK-NEXT: orr z0.d, z1.d, z0.d1357; CHECK-NEXT: orr z1.d, z2.d, z3.d1358; CHECK-NEXT: stp q0, q1, [x0]1359; CHECK-NEXT: ret1360;1361; NONEON-NOSVE-LABEL: or_v4i64:1362; NONEON-NOSVE: // %bb.0:1363; NONEON-NOSVE-NEXT: sub sp, sp, #961364; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961365; 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: ldp x9, x10, [sp, #32]1370; NONEON-NOSVE-NEXT: ldr x8, [sp, #56]1371; NONEON-NOSVE-NEXT: orr x8, x10, x81372; NONEON-NOSVE-NEXT: str x8, [sp, #88]1373; NONEON-NOSVE-NEXT: ldr x8, [sp, #48]1374; NONEON-NOSVE-NEXT: orr x8, x9, x81375; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]1376; NONEON-NOSVE-NEXT: str x8, [sp, #80]1377; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1378; NONEON-NOSVE-NEXT: orr x8, x10, x81379; NONEON-NOSVE-NEXT: str x8, [sp, #72]1380; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1381; NONEON-NOSVE-NEXT: orr x8, x9, x81382; NONEON-NOSVE-NEXT: str x8, [sp, #64]1383; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1384; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1385; NONEON-NOSVE-NEXT: add sp, sp, #961386; NONEON-NOSVE-NEXT: ret1387 %op1 = load <4 x i64>, ptr %a1388 %op2 = load <4 x i64>, ptr %b1389 %res = or <4 x i64> %op1, %op21390 store <4 x i64> %res, ptr %a1391 ret void1392}1393 1394;1395; XOR1396;1397 1398define <8 x i8> @xor_v8i8(<8 x i8> %op1, <8 x i8> %op2) {1399; CHECK-LABEL: xor_v8i8:1400; CHECK: // %bb.0:1401; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01402; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11403; CHECK-NEXT: eor z0.d, z0.d, z1.d1404; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01405; CHECK-NEXT: ret1406;1407; NONEON-NOSVE-LABEL: xor_v8i8:1408; NONEON-NOSVE: // %bb.0:1409; NONEON-NOSVE-NEXT: sub sp, sp, #321410; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321411; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1412; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1413; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]1414; NONEON-NOSVE-NEXT: eor w8, w9, w81415; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]1416; NONEON-NOSVE-NEXT: strb w8, [sp, #31]1417; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1418; NONEON-NOSVE-NEXT: eor w8, w9, w81419; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]1420; NONEON-NOSVE-NEXT: strb w8, [sp, #30]1421; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1422; NONEON-NOSVE-NEXT: eor w8, w9, w81423; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]1424; NONEON-NOSVE-NEXT: strb w8, [sp, #29]1425; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1426; NONEON-NOSVE-NEXT: eor w8, w9, w81427; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]1428; NONEON-NOSVE-NEXT: strb w8, [sp, #28]1429; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1430; NONEON-NOSVE-NEXT: eor w8, w9, w81431; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]1432; NONEON-NOSVE-NEXT: strb w8, [sp, #27]1433; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1434; NONEON-NOSVE-NEXT: eor w8, w9, w81435; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]1436; NONEON-NOSVE-NEXT: strb w8, [sp, #26]1437; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1438; NONEON-NOSVE-NEXT: eor w8, w9, w81439; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]1440; NONEON-NOSVE-NEXT: strb w8, [sp, #25]1441; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1442; NONEON-NOSVE-NEXT: eor w8, w9, w81443; NONEON-NOSVE-NEXT: strb w8, [sp, #24]1444; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1445; NONEON-NOSVE-NEXT: add sp, sp, #321446; NONEON-NOSVE-NEXT: ret1447 %res = xor <8 x i8> %op1, %op21448 ret <8 x i8> %res1449}1450 1451define <16 x i8> @xor_v16i8(<16 x i8> %op1, <16 x i8> %op2) {1452; CHECK-LABEL: xor_v16i8:1453; CHECK: // %bb.0:1454; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01455; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11456; CHECK-NEXT: eor z0.d, z0.d, z1.d1457; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01458; CHECK-NEXT: ret1459;1460; NONEON-NOSVE-LABEL: xor_v16i8:1461; NONEON-NOSVE: // %bb.0:1462; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1463; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481464; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]1465; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]1466; NONEON-NOSVE-NEXT: eor w8, w9, w81467; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]1468; NONEON-NOSVE-NEXT: strb w8, [sp, #47]1469; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]1470; NONEON-NOSVE-NEXT: eor w8, w9, w81471; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]1472; NONEON-NOSVE-NEXT: strb w8, [sp, #46]1473; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]1474; NONEON-NOSVE-NEXT: eor w8, w9, w81475; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]1476; NONEON-NOSVE-NEXT: strb w8, [sp, #45]1477; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]1478; NONEON-NOSVE-NEXT: eor w8, w9, w81479; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]1480; NONEON-NOSVE-NEXT: strb w8, [sp, #44]1481; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]1482; NONEON-NOSVE-NEXT: eor w8, w9, w81483; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]1484; NONEON-NOSVE-NEXT: strb w8, [sp, #43]1485; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]1486; NONEON-NOSVE-NEXT: eor w8, w9, w81487; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]1488; NONEON-NOSVE-NEXT: strb w8, [sp, #42]1489; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]1490; NONEON-NOSVE-NEXT: eor w8, w9, w81491; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]1492; NONEON-NOSVE-NEXT: strb w8, [sp, #41]1493; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]1494; NONEON-NOSVE-NEXT: eor w8, w9, w81495; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]1496; NONEON-NOSVE-NEXT: strb w8, [sp, #40]1497; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1498; NONEON-NOSVE-NEXT: eor w8, w9, w81499; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]1500; NONEON-NOSVE-NEXT: strb w8, [sp, #39]1501; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1502; NONEON-NOSVE-NEXT: eor w8, w9, w81503; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]1504; NONEON-NOSVE-NEXT: strb w8, [sp, #38]1505; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1506; NONEON-NOSVE-NEXT: eor w8, w9, w81507; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]1508; NONEON-NOSVE-NEXT: strb w8, [sp, #37]1509; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1510; NONEON-NOSVE-NEXT: eor w8, w9, w81511; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]1512; NONEON-NOSVE-NEXT: strb w8, [sp, #36]1513; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1514; NONEON-NOSVE-NEXT: eor w8, w9, w81515; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]1516; NONEON-NOSVE-NEXT: strb w8, [sp, #35]1517; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1518; NONEON-NOSVE-NEXT: eor w8, w9, w81519; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]1520; NONEON-NOSVE-NEXT: strb w8, [sp, #34]1521; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1522; NONEON-NOSVE-NEXT: eor w8, w9, w81523; NONEON-NOSVE-NEXT: ldrb w9, [sp]1524; NONEON-NOSVE-NEXT: strb w8, [sp, #33]1525; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1526; NONEON-NOSVE-NEXT: eor w8, w9, w81527; NONEON-NOSVE-NEXT: strb w8, [sp, #32]1528; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1529; NONEON-NOSVE-NEXT: add sp, sp, #481530; NONEON-NOSVE-NEXT: ret1531 %res = xor <16 x i8> %op1, %op21532 ret <16 x i8> %res1533}1534 1535define void @xor_v32i8(ptr %a, ptr %b) {1536; CHECK-LABEL: xor_v32i8:1537; CHECK: // %bb.0:1538; CHECK-NEXT: ldp q0, q3, [x1]1539; CHECK-NEXT: ldp q1, q2, [x0]1540; CHECK-NEXT: eor z0.d, z1.d, z0.d1541; CHECK-NEXT: eor z1.d, z2.d, z3.d1542; CHECK-NEXT: stp q0, q1, [x0]1543; CHECK-NEXT: ret1544;1545; NONEON-NOSVE-LABEL: xor_v32i8:1546; NONEON-NOSVE: // %bb.0:1547; NONEON-NOSVE-NEXT: sub sp, sp, #961548; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961549; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1550; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1551; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1552; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1553; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]1554; NONEON-NOSVE-NEXT: ldrb w9, [sp, #47]1555; NONEON-NOSVE-NEXT: eor w8, w9, w81556; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]1557; NONEON-NOSVE-NEXT: strb w8, [sp, #95]1558; NONEON-NOSVE-NEXT: ldrb w8, [sp, #62]1559; NONEON-NOSVE-NEXT: eor w8, w9, w81560; NONEON-NOSVE-NEXT: ldrb w9, [sp, #45]1561; NONEON-NOSVE-NEXT: strb w8, [sp, #94]1562; NONEON-NOSVE-NEXT: ldrb w8, [sp, #61]1563; NONEON-NOSVE-NEXT: eor w8, w9, w81564; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]1565; NONEON-NOSVE-NEXT: strb w8, [sp, #93]1566; NONEON-NOSVE-NEXT: ldrb w8, [sp, #60]1567; NONEON-NOSVE-NEXT: eor w8, w9, w81568; NONEON-NOSVE-NEXT: ldrb w9, [sp, #43]1569; NONEON-NOSVE-NEXT: strb w8, [sp, #92]1570; NONEON-NOSVE-NEXT: ldrb w8, [sp, #59]1571; NONEON-NOSVE-NEXT: eor w8, w9, w81572; NONEON-NOSVE-NEXT: ldrb w9, [sp, #42]1573; NONEON-NOSVE-NEXT: strb w8, [sp, #91]1574; NONEON-NOSVE-NEXT: ldrb w8, [sp, #58]1575; NONEON-NOSVE-NEXT: eor w8, w9, w81576; NONEON-NOSVE-NEXT: ldrb w9, [sp, #41]1577; NONEON-NOSVE-NEXT: strb w8, [sp, #90]1578; NONEON-NOSVE-NEXT: ldrb w8, [sp, #57]1579; NONEON-NOSVE-NEXT: eor w8, w9, w81580; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]1581; NONEON-NOSVE-NEXT: strb w8, [sp, #89]1582; NONEON-NOSVE-NEXT: ldrb w8, [sp, #56]1583; NONEON-NOSVE-NEXT: eor w8, w9, w81584; NONEON-NOSVE-NEXT: ldrb w9, [sp, #39]1585; NONEON-NOSVE-NEXT: strb w8, [sp, #88]1586; NONEON-NOSVE-NEXT: ldrb w8, [sp, #55]1587; NONEON-NOSVE-NEXT: eor w8, w9, w81588; NONEON-NOSVE-NEXT: ldrb w9, [sp, #38]1589; NONEON-NOSVE-NEXT: strb w8, [sp, #87]1590; NONEON-NOSVE-NEXT: ldrb w8, [sp, #54]1591; NONEON-NOSVE-NEXT: eor w8, w9, w81592; NONEON-NOSVE-NEXT: ldrb w9, [sp, #37]1593; NONEON-NOSVE-NEXT: strb w8, [sp, #86]1594; NONEON-NOSVE-NEXT: ldrb w8, [sp, #53]1595; NONEON-NOSVE-NEXT: eor w8, w9, w81596; NONEON-NOSVE-NEXT: ldrb w9, [sp, #36]1597; NONEON-NOSVE-NEXT: strb w8, [sp, #85]1598; NONEON-NOSVE-NEXT: ldrb w8, [sp, #52]1599; NONEON-NOSVE-NEXT: eor w8, w9, w81600; NONEON-NOSVE-NEXT: ldrb w9, [sp, #35]1601; NONEON-NOSVE-NEXT: strb w8, [sp, #84]1602; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]1603; NONEON-NOSVE-NEXT: eor w8, w9, w81604; NONEON-NOSVE-NEXT: ldrb w9, [sp, #34]1605; NONEON-NOSVE-NEXT: strb w8, [sp, #83]1606; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]1607; NONEON-NOSVE-NEXT: eor w8, w9, w81608; NONEON-NOSVE-NEXT: ldrb w9, [sp, #33]1609; NONEON-NOSVE-NEXT: strb w8, [sp, #82]1610; NONEON-NOSVE-NEXT: ldrb w8, [sp, #49]1611; NONEON-NOSVE-NEXT: eor w8, w9, w81612; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]1613; NONEON-NOSVE-NEXT: strb w8, [sp, #81]1614; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]1615; NONEON-NOSVE-NEXT: eor w8, w9, w81616; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]1617; NONEON-NOSVE-NEXT: strb w8, [sp, #80]1618; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]1619; NONEON-NOSVE-NEXT: eor w8, w9, w81620; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]1621; NONEON-NOSVE-NEXT: strb w8, [sp, #79]1622; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]1623; NONEON-NOSVE-NEXT: eor w8, w9, w81624; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]1625; NONEON-NOSVE-NEXT: strb w8, [sp, #78]1626; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]1627; NONEON-NOSVE-NEXT: eor w8, w9, w81628; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]1629; NONEON-NOSVE-NEXT: strb w8, [sp, #77]1630; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]1631; NONEON-NOSVE-NEXT: eor w8, w9, w81632; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]1633; NONEON-NOSVE-NEXT: strb w8, [sp, #76]1634; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]1635; NONEON-NOSVE-NEXT: eor w8, w9, w81636; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]1637; NONEON-NOSVE-NEXT: strb w8, [sp, #75]1638; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]1639; NONEON-NOSVE-NEXT: eor w8, w9, w81640; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]1641; NONEON-NOSVE-NEXT: strb w8, [sp, #74]1642; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]1643; NONEON-NOSVE-NEXT: eor w8, w9, w81644; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]1645; NONEON-NOSVE-NEXT: strb w8, [sp, #73]1646; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]1647; NONEON-NOSVE-NEXT: eor w8, w9, w81648; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]1649; NONEON-NOSVE-NEXT: strb w8, [sp, #72]1650; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1651; NONEON-NOSVE-NEXT: eor w8, w9, w81652; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]1653; NONEON-NOSVE-NEXT: strb w8, [sp, #71]1654; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1655; NONEON-NOSVE-NEXT: eor w8, w9, w81656; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]1657; NONEON-NOSVE-NEXT: strb w8, [sp, #70]1658; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1659; NONEON-NOSVE-NEXT: eor w8, w9, w81660; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]1661; NONEON-NOSVE-NEXT: strb w8, [sp, #69]1662; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1663; NONEON-NOSVE-NEXT: eor w8, w9, w81664; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]1665; NONEON-NOSVE-NEXT: strb w8, [sp, #68]1666; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1667; NONEON-NOSVE-NEXT: eor w8, w9, w81668; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]1669; NONEON-NOSVE-NEXT: strb w8, [sp, #67]1670; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1671; NONEON-NOSVE-NEXT: eor w8, w9, w81672; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]1673; NONEON-NOSVE-NEXT: strb w8, [sp, #66]1674; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1675; NONEON-NOSVE-NEXT: eor w8, w9, w81676; NONEON-NOSVE-NEXT: ldrb w9, [sp]1677; NONEON-NOSVE-NEXT: strb w8, [sp, #65]1678; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1679; NONEON-NOSVE-NEXT: eor w8, w9, w81680; NONEON-NOSVE-NEXT: strb w8, [sp, #64]1681; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1682; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1683; NONEON-NOSVE-NEXT: add sp, sp, #961684; NONEON-NOSVE-NEXT: ret1685 %op1 = load <32 x i8>, ptr %a1686 %op2 = load <32 x i8>, ptr %b1687 %res = xor <32 x i8> %op1, %op21688 store <32 x i8> %res, ptr %a1689 ret void1690}1691 1692define <4 x i16> @xor_v4i16(<4 x i16> %op1, <4 x i16> %op2) {1693; CHECK-LABEL: xor_v4i16:1694; CHECK: // %bb.0:1695; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01696; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11697; CHECK-NEXT: eor z0.d, z0.d, z1.d1698; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01699; CHECK-NEXT: ret1700;1701; NONEON-NOSVE-LABEL: xor_v4i16:1702; NONEON-NOSVE: // %bb.0:1703; NONEON-NOSVE-NEXT: sub sp, sp, #321704; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321705; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1706; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1707; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1708; NONEON-NOSVE-NEXT: eor w8, w9, w81709; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1710; NONEON-NOSVE-NEXT: strh w8, [sp, #30]1711; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1712; NONEON-NOSVE-NEXT: eor w8, w9, w81713; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1714; NONEON-NOSVE-NEXT: strh w8, [sp, #28]1715; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1716; NONEON-NOSVE-NEXT: eor w8, w9, w81717; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1718; NONEON-NOSVE-NEXT: strh w8, [sp, #26]1719; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1720; NONEON-NOSVE-NEXT: eor w8, w9, w81721; NONEON-NOSVE-NEXT: strh w8, [sp, #24]1722; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1723; NONEON-NOSVE-NEXT: add sp, sp, #321724; NONEON-NOSVE-NEXT: ret1725 %res = xor <4 x i16> %op1, %op21726 ret <4 x i16> %res1727}1728 1729define <8 x i16> @xor_v8i16(<8 x i16> %op1, <8 x i16> %op2) {1730; CHECK-LABEL: xor_v8i16:1731; CHECK: // %bb.0:1732; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01733; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11734; CHECK-NEXT: eor z0.d, z0.d, z1.d1735; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01736; CHECK-NEXT: ret1737;1738; NONEON-NOSVE-LABEL: xor_v8i16:1739; NONEON-NOSVE: // %bb.0:1740; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1741; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481742; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1743; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1744; NONEON-NOSVE-NEXT: eor w8, w9, w81745; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1746; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1747; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1748; NONEON-NOSVE-NEXT: eor w8, w9, w81749; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1750; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1751; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1752; NONEON-NOSVE-NEXT: eor w8, w9, w81753; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1754; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1755; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1756; NONEON-NOSVE-NEXT: eor w8, w9, w81757; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]1758; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1759; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1760; NONEON-NOSVE-NEXT: eor w8, w9, w81761; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]1762; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1763; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1764; NONEON-NOSVE-NEXT: eor w8, w9, w81765; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]1766; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1767; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1768; NONEON-NOSVE-NEXT: eor w8, w9, w81769; NONEON-NOSVE-NEXT: ldrh w9, [sp]1770; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1771; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1772; NONEON-NOSVE-NEXT: eor w8, w9, w81773; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1774; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1775; NONEON-NOSVE-NEXT: add sp, sp, #481776; NONEON-NOSVE-NEXT: ret1777 %res = xor <8 x i16> %op1, %op21778 ret <8 x i16> %res1779}1780 1781define void @xor_v16i16(ptr %a, ptr %b) {1782; CHECK-LABEL: xor_v16i16:1783; CHECK: // %bb.0:1784; CHECK-NEXT: ldp q0, q3, [x1]1785; CHECK-NEXT: ldp q1, q2, [x0]1786; CHECK-NEXT: eor z0.d, z1.d, z0.d1787; CHECK-NEXT: eor z1.d, z2.d, z3.d1788; CHECK-NEXT: stp q0, q1, [x0]1789; CHECK-NEXT: ret1790;1791; NONEON-NOSVE-LABEL: xor_v16i16:1792; NONEON-NOSVE: // %bb.0:1793; NONEON-NOSVE-NEXT: sub sp, sp, #961794; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961795; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1796; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1797; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1798; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1799; NONEON-NOSVE-NEXT: ldrh w8, [sp, #62]1800; NONEON-NOSVE-NEXT: ldrh w9, [sp, #46]1801; NONEON-NOSVE-NEXT: eor w8, w9, w81802; NONEON-NOSVE-NEXT: ldrh w9, [sp, #44]1803; NONEON-NOSVE-NEXT: strh w8, [sp, #94]1804; NONEON-NOSVE-NEXT: ldrh w8, [sp, #60]1805; NONEON-NOSVE-NEXT: eor w8, w9, w81806; NONEON-NOSVE-NEXT: ldrh w9, [sp, #42]1807; NONEON-NOSVE-NEXT: strh w8, [sp, #92]1808; NONEON-NOSVE-NEXT: ldrh w8, [sp, #58]1809; NONEON-NOSVE-NEXT: eor w8, w9, w81810; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40]1811; NONEON-NOSVE-NEXT: strh w8, [sp, #90]1812; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]1813; NONEON-NOSVE-NEXT: eor w8, w9, w81814; NONEON-NOSVE-NEXT: ldrh w9, [sp, #38]1815; NONEON-NOSVE-NEXT: strh w8, [sp, #88]1816; NONEON-NOSVE-NEXT: ldrh w8, [sp, #54]1817; NONEON-NOSVE-NEXT: eor w8, w9, w81818; NONEON-NOSVE-NEXT: ldrh w9, [sp, #36]1819; NONEON-NOSVE-NEXT: strh w8, [sp, #86]1820; NONEON-NOSVE-NEXT: ldrh w8, [sp, #52]1821; NONEON-NOSVE-NEXT: eor w8, w9, w81822; NONEON-NOSVE-NEXT: ldrh w9, [sp, #34]1823; NONEON-NOSVE-NEXT: strh w8, [sp, #84]1824; NONEON-NOSVE-NEXT: ldrh w8, [sp, #50]1825; NONEON-NOSVE-NEXT: eor w8, w9, w81826; NONEON-NOSVE-NEXT: ldrh w9, [sp, #32]1827; NONEON-NOSVE-NEXT: strh w8, [sp, #82]1828; NONEON-NOSVE-NEXT: ldrh w8, [sp, #48]1829; NONEON-NOSVE-NEXT: eor w8, w9, w81830; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]1831; NONEON-NOSVE-NEXT: strh w8, [sp, #80]1832; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1833; NONEON-NOSVE-NEXT: eor w8, w9, w81834; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]1835; NONEON-NOSVE-NEXT: strh w8, [sp, #78]1836; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1837; NONEON-NOSVE-NEXT: eor w8, w9, w81838; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]1839; NONEON-NOSVE-NEXT: strh w8, [sp, #76]1840; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1841; NONEON-NOSVE-NEXT: eor w8, w9, w81842; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]1843; NONEON-NOSVE-NEXT: strh w8, [sp, #74]1844; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1845; NONEON-NOSVE-NEXT: eor w8, w9, w81846; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]1847; NONEON-NOSVE-NEXT: strh w8, [sp, #72]1848; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1849; NONEON-NOSVE-NEXT: eor w8, w9, w81850; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]1851; NONEON-NOSVE-NEXT: strh w8, [sp, #70]1852; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1853; NONEON-NOSVE-NEXT: eor w8, w9, w81854; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]1855; NONEON-NOSVE-NEXT: strh w8, [sp, #68]1856; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1857; NONEON-NOSVE-NEXT: eor w8, w9, w81858; NONEON-NOSVE-NEXT: ldrh w9, [sp]1859; NONEON-NOSVE-NEXT: strh w8, [sp, #66]1860; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1861; NONEON-NOSVE-NEXT: eor w8, w9, w81862; NONEON-NOSVE-NEXT: strh w8, [sp, #64]1863; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1864; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1865; NONEON-NOSVE-NEXT: add sp, sp, #961866; NONEON-NOSVE-NEXT: ret1867 %op1 = load <16 x i16>, ptr %a1868 %op2 = load <16 x i16>, ptr %b1869 %res = xor <16 x i16> %op1, %op21870 store <16 x i16> %res, ptr %a1871 ret void1872}1873 1874define <2 x i32> @xor_v2i32(<2 x i32> %op1, <2 x i32> %op2) {1875; CHECK-LABEL: xor_v2i32:1876; CHECK: // %bb.0:1877; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01878; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11879; CHECK-NEXT: eor z0.d, z0.d, z1.d1880; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z01881; CHECK-NEXT: ret1882;1883; NONEON-NOSVE-LABEL: xor_v2i32:1884; NONEON-NOSVE: // %bb.0:1885; NONEON-NOSVE-NEXT: sub sp, sp, #321886; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 321887; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #8]1888; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1889; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1890; NONEON-NOSVE-NEXT: eor w8, w10, w81891; NONEON-NOSVE-NEXT: str w8, [sp, #28]1892; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1893; NONEON-NOSVE-NEXT: eor w8, w9, w81894; NONEON-NOSVE-NEXT: str w8, [sp, #24]1895; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]1896; NONEON-NOSVE-NEXT: add sp, sp, #321897; NONEON-NOSVE-NEXT: ret1898 %res = xor <2 x i32> %op1, %op21899 ret <2 x i32> %res1900}1901 1902define <4 x i32> @xor_v4i32(<4 x i32> %op1, <4 x i32> %op2) {1903; CHECK-LABEL: xor_v4i32:1904; CHECK: // %bb.0:1905; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01906; CHECK-NEXT: // kill: def $q1 killed $q1 def $z11907; CHECK-NEXT: eor z0.d, z0.d, z1.d1908; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z01909; CHECK-NEXT: ret1910;1911; NONEON-NOSVE-LABEL: xor_v4i32:1912; NONEON-NOSVE: // %bb.0:1913; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!1914; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 481915; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1916; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1917; NONEON-NOSVE-NEXT: eor w8, w10, w81918; NONEON-NOSVE-NEXT: str w8, [sp, #44]1919; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1920; NONEON-NOSVE-NEXT: eor w8, w9, w81921; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1922; NONEON-NOSVE-NEXT: str w8, [sp, #40]1923; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1924; NONEON-NOSVE-NEXT: eor w8, w10, w81925; NONEON-NOSVE-NEXT: str w8, [sp, #36]1926; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1927; NONEON-NOSVE-NEXT: eor w8, w9, w81928; NONEON-NOSVE-NEXT: str w8, [sp, #32]1929; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]1930; NONEON-NOSVE-NEXT: add sp, sp, #481931; NONEON-NOSVE-NEXT: ret1932 %res = xor <4 x i32> %op1, %op21933 ret <4 x i32> %res1934}1935 1936define void @xor_v8i32(ptr %a, ptr %b) {1937; CHECK-LABEL: xor_v8i32:1938; CHECK: // %bb.0:1939; CHECK-NEXT: ldp q0, q3, [x1]1940; CHECK-NEXT: ldp q1, q2, [x0]1941; CHECK-NEXT: eor z0.d, z1.d, z0.d1942; CHECK-NEXT: eor z1.d, z2.d, z3.d1943; CHECK-NEXT: stp q0, q1, [x0]1944; CHECK-NEXT: ret1945;1946; NONEON-NOSVE-LABEL: xor_v8i32:1947; NONEON-NOSVE: // %bb.0:1948; NONEON-NOSVE-NEXT: sub sp, sp, #961949; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 961950; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]1951; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]1952; NONEON-NOSVE-NEXT: stp q2, q3, [sp]1953; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]1954; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #40]1955; NONEON-NOSVE-NEXT: ldr w8, [sp, #60]1956; NONEON-NOSVE-NEXT: eor w8, w10, w81957; NONEON-NOSVE-NEXT: str w8, [sp, #92]1958; NONEON-NOSVE-NEXT: ldr w8, [sp, #56]1959; NONEON-NOSVE-NEXT: eor w8, w9, w81960; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #32]1961; NONEON-NOSVE-NEXT: str w8, [sp, #88]1962; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]1963; NONEON-NOSVE-NEXT: eor w8, w10, w81964; NONEON-NOSVE-NEXT: str w8, [sp, #84]1965; NONEON-NOSVE-NEXT: ldr w8, [sp, #48]1966; NONEON-NOSVE-NEXT: eor w8, w9, w81967; NONEON-NOSVE-NEXT: ldp w9, w10, [sp, #8]1968; NONEON-NOSVE-NEXT: str w8, [sp, #80]1969; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1970; NONEON-NOSVE-NEXT: eor w8, w10, w81971; NONEON-NOSVE-NEXT: str w8, [sp, #76]1972; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1973; NONEON-NOSVE-NEXT: eor w8, w9, w81974; NONEON-NOSVE-NEXT: ldp w9, w10, [sp]1975; NONEON-NOSVE-NEXT: str w8, [sp, #72]1976; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1977; NONEON-NOSVE-NEXT: eor w8, w10, w81978; NONEON-NOSVE-NEXT: str w8, [sp, #68]1979; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1980; NONEON-NOSVE-NEXT: eor w8, w9, w81981; NONEON-NOSVE-NEXT: str w8, [sp, #64]1982; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]1983; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1984; NONEON-NOSVE-NEXT: add sp, sp, #961985; NONEON-NOSVE-NEXT: ret1986 %op1 = load <8 x i32>, ptr %a1987 %op2 = load <8 x i32>, ptr %b1988 %res = xor <8 x i32> %op1, %op21989 store <8 x i32> %res, ptr %a1990 ret void1991}1992 1993define <1 x i64> @xor_v1i64(<1 x i64> %op1, <1 x i64> %op2) {1994; CHECK-LABEL: xor_v1i64:1995; CHECK: // %bb.0:1996; CHECK-NEXT: // kill: def $d0 killed $d0 def $z01997; CHECK-NEXT: // kill: def $d1 killed $d1 def $z11998; CHECK-NEXT: eor z0.d, z0.d, z1.d1999; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z02000; CHECK-NEXT: ret2001;2002; NONEON-NOSVE-LABEL: xor_v1i64:2003; NONEON-NOSVE: // %bb.0:2004; NONEON-NOSVE-NEXT: sub sp, sp, #162005; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 162006; NONEON-NOSVE-NEXT: fmov x8, d12007; NONEON-NOSVE-NEXT: fmov x9, d02008; NONEON-NOSVE-NEXT: eor x8, x9, x82009; NONEON-NOSVE-NEXT: str x8, [sp, #8]2010; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]2011; NONEON-NOSVE-NEXT: add sp, sp, #162012; NONEON-NOSVE-NEXT: ret2013 %res = xor <1 x i64> %op1, %op22014 ret <1 x i64> %res2015}2016 2017define <2 x i64> @xor_v2i64(<2 x i64> %op1, <2 x i64> %op2) {2018; CHECK-LABEL: xor_v2i64:2019; CHECK: // %bb.0:2020; CHECK-NEXT: // kill: def $q0 killed $q0 def $z02021; CHECK-NEXT: // kill: def $q1 killed $q1 def $z12022; CHECK-NEXT: eor z0.d, z0.d, z1.d2023; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z02024; CHECK-NEXT: ret2025;2026; NONEON-NOSVE-LABEL: xor_v2i64:2027; NONEON-NOSVE: // %bb.0:2028; NONEON-NOSVE-NEXT: stp q0, q1, [sp, #-48]!2029; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 482030; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]2031; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]2032; NONEON-NOSVE-NEXT: eor x8, x10, x82033; NONEON-NOSVE-NEXT: str x8, [sp, #40]2034; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]2035; NONEON-NOSVE-NEXT: eor x8, x9, x82036; NONEON-NOSVE-NEXT: str x8, [sp, #32]2037; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]2038; NONEON-NOSVE-NEXT: add sp, sp, #482039; NONEON-NOSVE-NEXT: ret2040 %res = xor <2 x i64> %op1, %op22041 ret <2 x i64> %res2042}2043 2044define void @xor_v4i64(ptr %a, ptr %b) {2045; CHECK-LABEL: xor_v4i64:2046; CHECK: // %bb.0:2047; CHECK-NEXT: ldp q0, q3, [x1]2048; CHECK-NEXT: ldp q1, q2, [x0]2049; CHECK-NEXT: eor z0.d, z1.d, z0.d2050; CHECK-NEXT: eor z1.d, z2.d, z3.d2051; CHECK-NEXT: stp q0, q1, [x0]2052; CHECK-NEXT: ret2053;2054; NONEON-NOSVE-LABEL: xor_v4i64:2055; NONEON-NOSVE: // %bb.0:2056; NONEON-NOSVE-NEXT: sub sp, sp, #962057; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 962058; NONEON-NOSVE-NEXT: ldp q3, q0, [x1]2059; NONEON-NOSVE-NEXT: ldp q2, q1, [x0]2060; NONEON-NOSVE-NEXT: stp q2, q3, [sp]2061; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #32]2062; NONEON-NOSVE-NEXT: ldp x9, x10, [sp, #32]2063; NONEON-NOSVE-NEXT: ldr x8, [sp, #56]2064; NONEON-NOSVE-NEXT: eor x8, x10, x82065; NONEON-NOSVE-NEXT: str x8, [sp, #88]2066; NONEON-NOSVE-NEXT: ldr x8, [sp, #48]2067; NONEON-NOSVE-NEXT: eor x8, x9, x82068; NONEON-NOSVE-NEXT: ldp x9, x10, [sp]2069; NONEON-NOSVE-NEXT: str x8, [sp, #80]2070; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]2071; NONEON-NOSVE-NEXT: eor x8, x10, x82072; NONEON-NOSVE-NEXT: str x8, [sp, #72]2073; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]2074; NONEON-NOSVE-NEXT: eor x8, x9, x82075; NONEON-NOSVE-NEXT: str x8, [sp, #64]2076; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]2077; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2078; NONEON-NOSVE-NEXT: add sp, sp, #962079; NONEON-NOSVE-NEXT: ret2080 %op1 = load <4 x i64>, ptr %a2081 %op2 = load <4 x i64>, ptr %b2082 %res = xor <4 x i64> %op1, %op22083 store <4 x i64> %res, ptr %a2084 ret void2085}2086