@@ -554,48 +554,172 @@ define i64 @orr_32_eor_64() nounwind {
554554; Tests for EOR / EON with MOVN.
555555;==--------------------------------------------------------------------------==
556556
557- define i64 @movn_0_eon () {
558- ; CHECK-LABEL: movn_0_eon:
557+ define i64 @movn_0_eon_lsl_17 () {
558+ ; CHECK-LABEL: movn_0_eon_lsl_17:
559+ ; CHECK: // %bb.0:
560+ ; CHECK-NEXT: mov x0, #-4370 // =0xffffffffffffeeee
561+ ; CHECK-NEXT: movk x0, #8738, lsl #16
562+ ; CHECK-NEXT: movk x0, #65534, lsl #32
563+ ; CHECK-NEXT: ret
564+ ret i64 u0xfffffffe2222eeee
565+ }
566+
567+ define i64 @movn_0_eon_lsl_32 () {
568+ ; CHECK-LABEL: movn_0_eon_lsl_32:
559569; CHECK: // %bb.0:
560570; CHECK-NEXT: mov x0, #-43691 // =0xffffffffffff5555
561571; CHECK-NEXT: eon x0, x0, x0, lsl #32
562572; CHECK-NEXT: ret
563573 ret i64 u0xffff55550000aaaa
564574}
565575
566- define i64 @movn_1_eon () {
567- ; CHECK-LABEL: movn_1_eon:
576+ define i64 @movn_0_eon_lsl_47 () {
577+ ; CHECK-LABEL: movn_0_eon_lsl_47:
578+ ; CHECK: // %bb.0:
579+ ; CHECK-NEXT: mov x0, #61166 // =0xeeee
580+ ; CHECK-NEXT: movk x0, #32768, lsl #32
581+ ; CHECK-NEXT: movk x0, #34952, lsl #48
582+ ; CHECK-NEXT: ret
583+ ret i64 u0x888880000000eeee
584+ }
585+
586+ define i64 @movn_1_eon_lsl_17 () {
587+ ; CHECK-LABEL: movn_1_eon_lsl_17:
588+ ; CHECK: // %bb.0:
589+ ; CHECK-NEXT: mov x0, #286261248 // =0x11100000
590+ ; CHECK-NEXT: movk x0, #8739, lsl #32
591+ ; CHECK-NEXT: movk x0, #65534, lsl #48
592+ ; CHECK-NEXT: ret
593+ ret i64 u0xfffe222311100000
594+ }
595+
596+ define i64 @movn_1_eon_lsl_32 () {
597+ ; CHECK-LABEL: movn_1_eon_lsl_32:
568598; CHECK: // %bb.0:
569599; CHECK-NEXT: mov x0, #-2863267841 // =0xffffffff5555ffff
570600; CHECK-NEXT: eon x0, x0, x0, lsl #32
571601; CHECK-NEXT: ret
572602 ret i64 u0x5555ffffaaaa0000
573603}
574604
575- define i64 @movn_0_eor () {
576- ; CHECK-LABEL: movn_0_eor:
605+ define i64 @movn_1_eon_lsl_46 () {
606+ ; CHECK-LABEL: movn_1_eon_lsl_46:
607+ ; CHECK: // %bb.0:
608+ ; CHECK-NEXT: mov x0, #4008509440 // =0xeeed0000
609+ ; CHECK-NEXT: movk x0, #49152, lsl #32
610+ ; CHECK-NEXT: movk x0, #49151, lsl #48
611+ ; CHECK-NEXT: ret
612+ ret i64 u0xbfffc000eeed0000
613+ }
614+
615+ define i64 @movn_0_eor_lsl_17 () {
616+ ; CHECK-LABEL: movn_0_eor_lsl_17:
617+ ; CHECK: // %bb.0:
618+ ; CHECK-NEXT: mov x0, #4369 // =0x1111
619+ ; CHECK-NEXT: movk x0, #56797, lsl #16
620+ ; CHECK-NEXT: movk x0, #1, lsl #32
621+ ; CHECK-NEXT: ret
622+ ret i64 u0x00000001dddd1111
623+ }
624+
625+ define i64 @movn_0_eor_lsl_32 () {
626+ ; CHECK-LABEL: movn_0_eor_lsl_32:
577627; CHECK: // %bb.0:
578628; CHECK-NEXT: mov x0, #-43691 // =0xffffffffffff5555
579629; CHECK-NEXT: eor x0, x0, x0, lsl #32
580630; CHECK-NEXT: ret
581631 ret i64 u0x0000aaaaffff5555
582632}
583633
584- define i64 @movn_1_eor () {
585- ; CHECK-LABEL: movn_1_eor:
634+ define i64 @movn_0_eor_lsl_47 () {
635+ ; CHECK-LABEL: movn_0_eor_lsl_47:
636+ ; CHECK: // %bb.0:
637+ ; CHECK-NEXT: mov x0, #-61167 // =0xffffffffffff1111
638+ ; CHECK-NEXT: movk x0, #32767, lsl #32
639+ ; CHECK-NEXT: movk x0, #30583, lsl #48
640+ ; CHECK-NEXT: ret
641+ ret i64 u0x77777fffffff1111
642+ }
643+
644+ define i64 @movn_1_eor_lsl_17 () {
645+ ; CHECK-LABEL: movn_1_eor_lsl_17:
646+ ; CHECK: // %bb.0:
647+ ; CHECK-NEXT: mov x0, #-286261249 // =0xffffffffeeefffff
648+ ; CHECK-NEXT: movk x0, #56796, lsl #32
649+ ; CHECK-NEXT: movk x0, #1, lsl #48
650+ ; CHECK-NEXT: ret
651+ ret i64 u0x0001dddceeefffff
652+ }
653+
654+ define i64 @movn_1_eor_lsl_32 () {
655+ ; CHECK-LABEL: movn_1_eor_lsl_32:
586656; CHECK: // %bb.0:
587657; CHECK-NEXT: mov x0, #-2863267841 // =0xffffffff5555ffff
588658; CHECK-NEXT: eor x0, x0, x0, lsl #32
589659; CHECK-NEXT: ret
590660 ret i64 u0xaaaa00005555ffff
591661}
592662
593- define i64 @movn_movk_eor () {
594- ; CHECK-LABEL: movn_movk_eor:
663+ define i64 @movn_1_eor_lsl_46 () {
664+ ; CHECK-LABEL: movn_1_eor_lsl_46:
665+ ; CHECK: // %bb.0:
666+ ; CHECK-NEXT: mov x0, #-4008509441
667+ ; CHECK-NEXT: movk x0, #16383, lsl #32
668+ ; CHECK-NEXT: movk x0, #16384, lsl #48
669+ ; CHECK-NEXT: ret
670+ ret i64 u0x40003fff1112ffff
671+ }
672+
673+ define i64 @movn_movk_eon_lsl_17 () {
674+ ; CHECK-LABEL: movn_movk_eon_lsl_17:
675+ ; CHECK: // %bb.0:
676+ ; CHECK-NEXT: mov x0, #43399 // =0xa987
677+ ; CHECK-NEXT: movk x0, #16699, lsl #16
678+ ; CHECK-NEXT: movk x0, #9320, lsl #32
679+ ; CHECK-NEXT: movk x0, #65534, lsl #48
680+ ; CHECK-NEXT: ret
681+ ret i64 u0xfffe2468413ba987
682+ }
683+
684+ define i64 @movn_movk_eon_lsl_47 () {
685+ ; CHECK-LABEL: movn_movk_eon_lsl_47:
686+ ; CHECK: // %bb.0:
687+ ; CHECK-NEXT: mov x0, #61166 // =0xeeee
688+ ; CHECK-NEXT: movk x0, #21554, lsl #16
689+ ; CHECK-NEXT: movk x0, #32768, lsl #32
690+ ; CHECK-NEXT: movk x0, #34952, lsl #48
691+ ; CHECK-NEXT: ret
692+ ret i64 u0x888880005432eeee
693+ }
694+
695+ define i64 @movn_movk_eor_lsl_17 () {
696+ ; CHECK-LABEL: movn_movk_eor_lsl_17:
697+ ; CHECK: // %bb.0:
698+ ; CHECK-NEXT: mov x0, #22136 // =0x5678
699+ ; CHECK-NEXT: movk x0, #48836, lsl #16
700+ ; CHECK-NEXT: movk x0, #56215, lsl #32
701+ ; CHECK-NEXT: movk x0, #1, lsl #48
702+ ; CHECK-NEXT: ret
703+ ret i64 u0x0001db97bec45678
704+ }
705+
706+ define i64 @movn_movk_eor_lsl_32 () {
707+ ; CHECK-LABEL: movn_movk_eor_lsl_32:
595708; CHECK: // %bb.0:
596709; CHECK-NEXT: mov x0, #-21846 // =0xffffffffffffaaaa
597710; CHECK-NEXT: movk x0, #52428, lsl #16
598711; CHECK-NEXT: eor x0, x0, x0, lsl #32
599712; CHECK-NEXT: ret
600713 ret i64 u0x33335555ccccaaaa
601714}
715+
716+ define i64 @movn_movk_eor_lsl_47 () {
717+ ; CHECK-LABEL: movn_movk_eor_lsl_47:
718+ ; CHECK: // %bb.0:
719+ ; CHECK-NEXT: mov x0, #4369 // =0x1111
720+ ; CHECK-NEXT: movk x0, #43981, lsl #16
721+ ; CHECK-NEXT: movk x0, #32767, lsl #32
722+ ; CHECK-NEXT: movk x0, #30583, lsl #48
723+ ; CHECK-NEXT: ret
724+ ret i64 u0x77777fffabcd1111
725+ }
0 commit comments