539 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O2 < %s -mtriple=aarch64-linux-gnu | FileCheck %s3 4declare i32 @bcmp(ptr, ptr, i64)5 6define i1 @bcmp0(ptr %a, ptr %b) {7; CHECK-LABEL: bcmp0:8; CHECK: // %bb.0:9; CHECK-NEXT: mov w0, #1 // =0x110; CHECK-NEXT: ret11 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 0)12 %r = icmp eq i32 %cr, 013 ret i1 %r14}15 16define i1 @bcmp1(ptr %a, ptr %b) {17; CHECK-LABEL: bcmp1:18; CHECK: // %bb.0:19; CHECK-NEXT: ldrb w8, [x0]20; CHECK-NEXT: ldrb w9, [x1]21; CHECK-NEXT: cmp w8, w922; CHECK-NEXT: cset w0, eq23; CHECK-NEXT: ret24 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 1)25 %r = icmp eq i32 %cr, 026 ret i1 %r27}28 29define i1 @bcmp2(ptr %a, ptr %b) {30; CHECK-LABEL: bcmp2:31; CHECK: // %bb.0:32; CHECK-NEXT: ldrh w8, [x0]33; CHECK-NEXT: ldrh w9, [x1]34; CHECK-NEXT: cmp w8, w935; CHECK-NEXT: cset w0, eq36; CHECK-NEXT: ret37 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 2)38 %r = icmp eq i32 %cr, 039 ret i1 %r40}41 42; or (and (xor a, b), C1), (and (xor c, d), C2)43define i1 @bcmp3(ptr %a, ptr %b) {44; CHECK-LABEL: bcmp3:45; CHECK: // %bb.0:46; CHECK-NEXT: ldrh w8, [x0]47; CHECK-NEXT: ldrh w9, [x1]48; CHECK-NEXT: ldrb w10, [x0, #2]49; CHECK-NEXT: ldrb w11, [x1, #2]50; CHECK-NEXT: cmp w8, w951; CHECK-NEXT: ccmp w10, w11, #0, eq52; CHECK-NEXT: cset w0, eq53; CHECK-NEXT: ret54 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 3)55 %r = icmp eq i32 %cr, 056 ret i1 %r57}58 59define i1 @bcmp4(ptr %a, ptr %b) {60; CHECK-LABEL: bcmp4:61; CHECK: // %bb.0:62; CHECK-NEXT: ldr w8, [x0]63; CHECK-NEXT: ldr w9, [x1]64; CHECK-NEXT: cmp w8, w965; CHECK-NEXT: cset w0, eq66; CHECK-NEXT: ret67 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 4)68 %r = icmp eq i32 %cr, 069 ret i1 %r70}71 72; or (xor a, b), (and (xor c, d), C2)73define i1 @bcmp5(ptr %a, ptr %b) {74; CHECK-LABEL: bcmp5:75; CHECK: // %bb.0:76; CHECK-NEXT: ldr w8, [x0]77; CHECK-NEXT: ldr w9, [x1]78; CHECK-NEXT: ldrb w10, [x0, #4]79; CHECK-NEXT: ldrb w11, [x1, #4]80; CHECK-NEXT: cmp w8, w981; CHECK-NEXT: ccmp w10, w11, #0, eq82; CHECK-NEXT: cset w0, eq83; CHECK-NEXT: ret84 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 5)85 %r = icmp eq i32 %cr, 086 ret i1 %r87}88 89; or (xor a, b), (and (xor c, d), C2)90define i1 @bcmp6(ptr %a, ptr %b) {91; CHECK-LABEL: bcmp6:92; CHECK: // %bb.0:93; CHECK-NEXT: ldr w8, [x0]94; CHECK-NEXT: ldr w9, [x1]95; CHECK-NEXT: ldrh w10, [x0, #4]96; CHECK-NEXT: ldrh w11, [x1, #4]97; CHECK-NEXT: cmp w8, w998; CHECK-NEXT: ccmp w10, w11, #0, eq99; CHECK-NEXT: cset w0, eq100; CHECK-NEXT: ret101 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 6)102 %r = icmp eq i32 %cr, 0103 ret i1 %r104}105 106; or (xor a, b), (xor c, d)107define i1 @bcmp7(ptr %a, ptr %b) {108; CHECK-LABEL: bcmp7:109; CHECK: // %bb.0:110; CHECK-NEXT: ldr w8, [x0]111; CHECK-NEXT: ldr w9, [x1]112; CHECK-NEXT: ldur w10, [x0, #3]113; CHECK-NEXT: ldur w11, [x1, #3]114; CHECK-NEXT: cmp w8, w9115; CHECK-NEXT: ccmp w10, w11, #0, eq116; CHECK-NEXT: cset w0, eq117; CHECK-NEXT: ret118 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 7)119 %r = icmp eq i32 %cr, 0120 ret i1 %r121}122 123define i1 @bcmp8(ptr %a, ptr %b) {124; CHECK-LABEL: bcmp8:125; CHECK: // %bb.0:126; CHECK-NEXT: ldr x8, [x0]127; CHECK-NEXT: ldr x9, [x1]128; CHECK-NEXT: cmp x8, x9129; CHECK-NEXT: cset w0, eq130; CHECK-NEXT: ret131 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 8)132 %r = icmp eq i32 %cr, 0133 ret i1 %r134}135 136; or (xor a, b), (and (xor c, d), C2)137define i1 @bcmp9(ptr %a, ptr %b) {138; CHECK-LABEL: bcmp9:139; CHECK: // %bb.0:140; CHECK-NEXT: ldr x8, [x0]141; CHECK-NEXT: ldr x9, [x1]142; CHECK-NEXT: ldrb w10, [x0, #8]143; CHECK-NEXT: ldrb w11, [x1, #8]144; CHECK-NEXT: cmp x8, x9145; CHECK-NEXT: ccmp x10, x11, #0, eq146; CHECK-NEXT: cset w0, eq147; CHECK-NEXT: ret148 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 9)149 %r = icmp eq i32 %cr, 0150 ret i1 %r151}152 153define i1 @bcmp10(ptr %a, ptr %b) {154; CHECK-LABEL: bcmp10:155; CHECK: // %bb.0:156; CHECK-NEXT: ldr x8, [x0]157; CHECK-NEXT: ldr x9, [x1]158; CHECK-NEXT: ldrh w10, [x0, #8]159; CHECK-NEXT: ldrh w11, [x1, #8]160; CHECK-NEXT: cmp x8, x9161; CHECK-NEXT: ccmp x10, x11, #0, eq162; CHECK-NEXT: cset w0, eq163; CHECK-NEXT: ret164 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 10)165 %r = icmp eq i32 %cr, 0166 ret i1 %r167}168 169define i1 @bcmp11(ptr %a, ptr %b) {170; CHECK-LABEL: bcmp11:171; CHECK: // %bb.0:172; CHECK-NEXT: ldr x8, [x0]173; CHECK-NEXT: ldr x9, [x1]174; CHECK-NEXT: ldur x10, [x0, #3]175; CHECK-NEXT: ldur x11, [x1, #3]176; CHECK-NEXT: cmp x8, x9177; CHECK-NEXT: ccmp x10, x11, #0, eq178; CHECK-NEXT: cset w0, eq179; CHECK-NEXT: ret180 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 11)181 %r = icmp eq i32 %cr, 0182 ret i1 %r183}184 185define i1 @bcmp12(ptr %a, ptr %b) {186; CHECK-LABEL: bcmp12:187; CHECK: // %bb.0:188; CHECK-NEXT: ldr x8, [x0]189; CHECK-NEXT: ldr x9, [x1]190; CHECK-NEXT: ldr w10, [x0, #8]191; CHECK-NEXT: ldr w11, [x1, #8]192; CHECK-NEXT: cmp x8, x9193; CHECK-NEXT: ccmp x10, x11, #0, eq194; CHECK-NEXT: cset w0, eq195; CHECK-NEXT: ret196 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 12)197 %r = icmp eq i32 %cr, 0198 ret i1 %r199}200 201define i1 @bcmp13(ptr %a, ptr %b) {202; CHECK-LABEL: bcmp13:203; CHECK: // %bb.0:204; CHECK-NEXT: ldr x8, [x0]205; CHECK-NEXT: ldr x9, [x1]206; CHECK-NEXT: ldur x10, [x0, #5]207; CHECK-NEXT: ldur x11, [x1, #5]208; CHECK-NEXT: cmp x8, x9209; CHECK-NEXT: ccmp x10, x11, #0, eq210; CHECK-NEXT: cset w0, eq211; CHECK-NEXT: ret212 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 13)213 %r = icmp eq i32 %cr, 0214 ret i1 %r215}216 217define i1 @bcmp14(ptr %a, ptr %b) {218; CHECK-LABEL: bcmp14:219; CHECK: // %bb.0:220; CHECK-NEXT: ldr x8, [x0]221; CHECK-NEXT: ldr x9, [x1]222; CHECK-NEXT: ldur x10, [x0, #6]223; CHECK-NEXT: ldur x11, [x1, #6]224; CHECK-NEXT: cmp x8, x9225; CHECK-NEXT: ccmp x10, x11, #0, eq226; CHECK-NEXT: cset w0, eq227; CHECK-NEXT: ret228 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 14)229 %r = icmp eq i32 %cr, 0230 ret i1 %r231}232 233define i1 @bcmp15(ptr %a, ptr %b) {234; CHECK-LABEL: bcmp15:235; CHECK: // %bb.0:236; CHECK-NEXT: ldr x8, [x0]237; CHECK-NEXT: ldr x9, [x1]238; CHECK-NEXT: ldur x10, [x0, #7]239; CHECK-NEXT: ldur x11, [x1, #7]240; CHECK-NEXT: cmp x8, x9241; CHECK-NEXT: ccmp x10, x11, #0, eq242; CHECK-NEXT: cset w0, eq243; CHECK-NEXT: ret244 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 15)245 %r = icmp eq i32 %cr, 0246 ret i1 %r247}248 249define i1 @bcmp16(ptr %a, ptr %b) {250; CHECK-LABEL: bcmp16:251; CHECK: // %bb.0:252; CHECK-NEXT: ldp x8, x11, [x1]253; CHECK-NEXT: ldp x9, x10, [x0]254; CHECK-NEXT: cmp x9, x8255; CHECK-NEXT: ccmp x10, x11, #0, eq256; CHECK-NEXT: cset w0, eq257; CHECK-NEXT: ret258 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 16)259 %r = icmp eq i32 %cr, 0260 ret i1 %r261}262 263define i1 @bcmp20(ptr %a, ptr %b) {264; CHECK-LABEL: bcmp20:265; CHECK: // %bb.0:266; CHECK-NEXT: ldp x8, x11, [x1]267; CHECK-NEXT: ldr w12, [x0, #16]268; CHECK-NEXT: ldp x9, x10, [x0]269; CHECK-NEXT: ldr w13, [x1, #16]270; CHECK-NEXT: cmp x9, x8271; CHECK-NEXT: ccmp x10, x11, #0, eq272; CHECK-NEXT: ccmp x12, x13, #0, eq273; CHECK-NEXT: cset w0, eq274; CHECK-NEXT: ret275 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 20)276 %r = icmp eq i32 %cr, 0277 ret i1 %r278}279 280define i1 @bcmp24(ptr %a, ptr %b) {281; CHECK-LABEL: bcmp24:282; CHECK: // %bb.0:283; CHECK-NEXT: ldp x8, x11, [x1]284; CHECK-NEXT: ldr x12, [x0, #16]285; CHECK-NEXT: ldp x9, x10, [x0]286; CHECK-NEXT: ldr x13, [x1, #16]287; CHECK-NEXT: cmp x9, x8288; CHECK-NEXT: ccmp x10, x11, #0, eq289; CHECK-NEXT: ccmp x12, x13, #0, eq290; CHECK-NEXT: cset w0, eq291; CHECK-NEXT: ret292 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 24)293 %r = icmp eq i32 %cr, 0294 ret i1 %r295}296 297define i1 @bcmp28(ptr %a, ptr %b) {298; CHECK-LABEL: bcmp28:299; CHECK: // %bb.0:300; CHECK-NEXT: ldp x8, x11, [x1]301; CHECK-NEXT: ldr x12, [x0, #16]302; CHECK-NEXT: ldp x9, x10, [x0]303; CHECK-NEXT: ldr x13, [x1, #16]304; CHECK-NEXT: cmp x9, x8305; CHECK-NEXT: ldr w8, [x0, #24]306; CHECK-NEXT: ldr w9, [x1, #24]307; CHECK-NEXT: ccmp x10, x11, #0, eq308; CHECK-NEXT: ccmp x12, x13, #0, eq309; CHECK-NEXT: ccmp x8, x9, #0, eq310; CHECK-NEXT: cset w0, eq311; CHECK-NEXT: ret312 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 28)313 %r = icmp eq i32 %cr, 0314 ret i1 %r315}316 317define i1 @bcmp33(ptr %a, ptr %b) {318; CHECK-LABEL: bcmp33:319; CHECK: // %bb.0:320; CHECK-NEXT: ldp x8, x11, [x1]321; CHECK-NEXT: ldp x9, x10, [x0]322; CHECK-NEXT: ldp x12, x13, [x1, #16]323; CHECK-NEXT: cmp x9, x8324; CHECK-NEXT: ldp x8, x9, [x0, #16]325; CHECK-NEXT: ccmp x10, x11, #0, eq326; CHECK-NEXT: ldrb w10, [x0, #32]327; CHECK-NEXT: ldrb w11, [x1, #32]328; CHECK-NEXT: ccmp x8, x12, #0, eq329; CHECK-NEXT: ccmp x9, x13, #0, eq330; CHECK-NEXT: ccmp x10, x11, #0, eq331; CHECK-NEXT: cset w0, eq332; CHECK-NEXT: ret333 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 33)334 %r = icmp eq i32 %cr, 0335 ret i1 %r336}337 338define i1 @bcmp38(ptr %a, ptr %b) {339; CHECK-LABEL: bcmp38:340; CHECK: // %bb.0:341; CHECK-NEXT: ldp x8, x11, [x1]342; CHECK-NEXT: ldp x9, x10, [x0]343; CHECK-NEXT: ldp x12, x13, [x1, #16]344; CHECK-NEXT: cmp x9, x8345; CHECK-NEXT: ldp x8, x9, [x0, #16]346; CHECK-NEXT: ccmp x10, x11, #0, eq347; CHECK-NEXT: ldur x10, [x0, #30]348; CHECK-NEXT: ldur x11, [x1, #30]349; CHECK-NEXT: ccmp x8, x12, #0, eq350; CHECK-NEXT: ccmp x9, x13, #0, eq351; CHECK-NEXT: ccmp x10, x11, #0, eq352; CHECK-NEXT: cset w0, eq353; CHECK-NEXT: ret354 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 38)355 %r = icmp eq i32 %cr, 0356 ret i1 %r357}358 359define i1 @bcmp45(ptr %a, ptr %b) {360; CHECK-LABEL: bcmp45:361; CHECK: // %bb.0:362; CHECK-NEXT: ldp x8, x11, [x1]363; CHECK-NEXT: ldp x9, x10, [x0]364; CHECK-NEXT: ldp x12, x13, [x1, #16]365; CHECK-NEXT: cmp x9, x8366; CHECK-NEXT: ldp x8, x9, [x0, #16]367; CHECK-NEXT: ccmp x10, x11, #0, eq368; CHECK-NEXT: ldr x10, [x0, #32]369; CHECK-NEXT: ldr x11, [x1, #32]370; CHECK-NEXT: ccmp x8, x12, #0, eq371; CHECK-NEXT: ldur x8, [x0, #37]372; CHECK-NEXT: ldur x12, [x1, #37]373; CHECK-NEXT: ccmp x9, x13, #0, eq374; CHECK-NEXT: ccmp x10, x11, #0, eq375; CHECK-NEXT: ccmp x8, x12, #0, eq376; CHECK-NEXT: cset w0, eq377; CHECK-NEXT: ret378 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 45)379 %r = icmp eq i32 %cr, 0380 ret i1 %r381}382 383; Although the large cmp chain may be not profitable on high end CPU, we384; believe it is better on most cpus, so perform the transform now.385; 8 xor + 7 or + 1 cmp only need 6 cycles on a 4 width ALU port machine386; 2 cycle for xor387; 3 cycle for or388; 1 cycle for cmp389define i1 @bcmp64(ptr %a, ptr %b) {390; CHECK-LABEL: bcmp64:391; CHECK: // %bb.0:392; CHECK-NEXT: ldp x8, x11, [x1]393; CHECK-NEXT: ldp x9, x10, [x0]394; CHECK-NEXT: ldp x12, x13, [x1, #16]395; CHECK-NEXT: cmp x9, x8396; CHECK-NEXT: ldp x8, x9, [x0, #16]397; CHECK-NEXT: ccmp x10, x11, #0, eq398; CHECK-NEXT: ccmp x8, x12, #0, eq399; CHECK-NEXT: ldp x8, x11, [x0, #32]400; CHECK-NEXT: ldp x10, x12, [x1, #32]401; CHECK-NEXT: ccmp x9, x13, #0, eq402; CHECK-NEXT: ldp x9, x13, [x1, #48]403; CHECK-NEXT: ccmp x8, x10, #0, eq404; CHECK-NEXT: ldp x8, x10, [x0, #48]405; CHECK-NEXT: ccmp x11, x12, #0, eq406; CHECK-NEXT: ccmp x8, x9, #0, eq407; CHECK-NEXT: ccmp x10, x13, #0, eq408; CHECK-NEXT: cset w0, eq409; CHECK-NEXT: ret410 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 64)411 %r = icmp eq i32 %cr, 0412 ret i1 %r413}414 415define i1 @bcmp89(ptr %a, ptr %b) {416; CHECK-LABEL: bcmp89:417; CHECK: // %bb.0:418; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill419; CHECK-NEXT: .cfi_def_cfa_offset 16420; CHECK-NEXT: .cfi_offset w30, -16421; CHECK-NEXT: mov w2, #89 // =0x59422; CHECK-NEXT: bl bcmp423; CHECK-NEXT: cmp w0, #0424; CHECK-NEXT: cset w0, eq425; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload426; CHECK-NEXT: ret427 %cr = call i32 @bcmp(ptr %a, ptr %b, i64 89)428 %r = icmp eq i32 %cr, 0429 ret i1 %r430}431 432define i1 @bcmp_zext(i32 %0, i32 %1, i8 %2, i8 %3) {433; CHECK-LABEL: bcmp_zext:434; CHECK: // %bb.0:435; CHECK-NEXT: and w8, w2, #0xff436; CHECK-NEXT: and w9, w3, #0xff437; CHECK-NEXT: cmp w1, w0438; CHECK-NEXT: ccmp w9, w8, #0, eq439; CHECK-NEXT: cset w0, eq440; CHECK-NEXT: ret441 %5 = xor i32 %1, %0442 %6 = xor i8 %3, %2443 %7 = zext i8 %6 to i32444 %8 = or i32 %5, %7445 %9 = icmp eq i32 %8, 0446 ret i1 %9447}448 449define i1 @bcmp_i8(i8 %a0, i8 %b0, i8 %a1, i8 %b1, i8 %a2, i8 %b2) {450; CHECK-LABEL: bcmp_i8:451; CHECK: // %bb.0:452; CHECK-NEXT: and w8, w1, #0xff453; CHECK-NEXT: and w9, w2, #0xff454; CHECK-NEXT: and w10, w3, #0xff455; CHECK-NEXT: cmp w8, w0, uxtb456; CHECK-NEXT: and w8, w4, #0xff457; CHECK-NEXT: and w11, w5, #0xff458; CHECK-NEXT: ccmp w10, w9, #0, eq459; CHECK-NEXT: ccmp w11, w8, #0, eq460; CHECK-NEXT: cset w0, eq461; CHECK-NEXT: ret462 %xor0 = xor i8 %b0, %a0463 %xor1 = xor i8 %b1, %a1464 %xor2 = xor i8 %b2, %a2465 %or0 = or i8 %xor0, %xor1466 %or1 = or i8 %or0, %xor2467 %r = icmp eq i8 %or1, 0468 ret i1 %r469}470 471define i1 @bcmp_i16(i16 %a0, i16 %b0, i16 %a1, i16 %b1, i16 %a2, i16 %b2) {472; CHECK-LABEL: bcmp_i16:473; CHECK: // %bb.0:474; CHECK-NEXT: and w8, w1, #0xffff475; CHECK-NEXT: and w9, w2, #0xffff476; CHECK-NEXT: and w10, w3, #0xffff477; CHECK-NEXT: cmp w8, w0, uxth478; CHECK-NEXT: and w8, w4, #0xffff479; CHECK-NEXT: and w11, w5, #0xffff480; CHECK-NEXT: ccmp w10, w9, #0, eq481; CHECK-NEXT: ccmp w11, w8, #0, eq482; CHECK-NEXT: cset w0, eq483; CHECK-NEXT: ret484 %xor0 = xor i16 %b0, %a0485 %xor1 = xor i16 %b1, %a1486 %xor2 = xor i16 %b2, %a2487 %or0 = or i16 %xor0, %xor1488 %or1 = or i16 %or0, %xor2489 %r = icmp eq i16 %or1, 0490 ret i1 %r491}492 493define i1 @bcmp_i128(i128 %a0, i128 %b0, i128 %a1, i128 %b1, i128 %a2, i128 %b2) {494; CHECK-LABEL: bcmp_i128:495; CHECK: // %bb.0:496; CHECK-NEXT: cmp x2, x0497; CHECK-NEXT: ldp x10, x8, [sp, #8]498; CHECK-NEXT: ccmp x3, x1, #0, eq499; CHECK-NEXT: ldr x9, [sp]500; CHECK-NEXT: ldr x11, [sp, #24]501; CHECK-NEXT: ccmp x6, x4, #0, eq502; CHECK-NEXT: ccmp x7, x5, #0, eq503; CHECK-NEXT: cset w12, ne504; CHECK-NEXT: cmp x8, x9505; CHECK-NEXT: ccmp x11, x10, #0, eq506; CHECK-NEXT: csinc w0, w12, wzr, eq507; CHECK-NEXT: ret508 %xor0 = xor i128 %b0, %a0509 %xor1 = xor i128 %b1, %a1510 %xor2 = xor i128 %b2, %a2511 %or0 = or i128 %xor0, %xor1512 %or1 = or i128 %or0, %xor2513 %r = icmp ne i128 %or1, 0514 ret i1 %r515}516 517define i1 @bcmp_i42(i42 %a0, i42 %b0, i42 %a1, i42 %b1, i42 %a2, i42 %b2) {518; CHECK-LABEL: bcmp_i42:519; CHECK: // %bb.0:520; CHECK-NEXT: and x8, x0, #0x3ffffffffff521; CHECK-NEXT: and x9, x1, #0x3ffffffffff522; CHECK-NEXT: and x10, x2, #0x3ffffffffff523; CHECK-NEXT: and x11, x3, #0x3ffffffffff524; CHECK-NEXT: cmp x9, x8525; CHECK-NEXT: and x8, x4, #0x3ffffffffff526; CHECK-NEXT: and x9, x5, #0x3ffffffffff527; CHECK-NEXT: ccmp x11, x10, #0, eq528; CHECK-NEXT: ccmp x9, x8, #0, eq529; CHECK-NEXT: cset w0, ne530; CHECK-NEXT: ret531 %xor0 = xor i42 %b0, %a0532 %xor1 = xor i42 %b1, %a1533 %xor2 = xor i42 %b2, %a2534 %or0 = or i42 %xor0, %xor1535 %or1 = or i42 %or0, %xor2536 %r = icmp ne i42 %or1, 0537 ret i1 %r538}539