brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.7 KiB · e70ddc3 Raw
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