@@ -549,3 +549,58 @@ define i64 @orr_32_eor_64() nounwind {
549549; CHECK-NEXT: ret
550550 ret i64 18446604367017541391
551551}
552+
553+ ;==--------------------------------------------------------------------------==
554+ ; Tests for EOR / EON with MOVN.
555+ ;==--------------------------------------------------------------------------==
556+
557+ define i64 @movn_0_eon () {
558+ ; CHECK-LABEL: movn_0_eon:
559+ ; CHECK: // %bb.0:
560+ ; CHECK-NEXT: mov x0, #43690 // =0xaaaa
561+ ; CHECK-NEXT: movk x0, #21845, lsl #32
562+ ; CHECK-NEXT: movk x0, #65535, lsl #48
563+ ; CHECK-NEXT: ret
564+ ret i64 u0xffff55550000aaaa
565+ }
566+
567+ define i64 @movn_1_eon () {
568+ ; CHECK-LABEL: movn_1_eon:
569+ ; CHECK: // %bb.0:
570+ ; CHECK-NEXT: mov x0, #2863267840 // =0xaaaa0000
571+ ; CHECK-NEXT: movk x0, #65535, lsl #32
572+ ; CHECK-NEXT: movk x0, #21845, lsl #48
573+ ; CHECK-NEXT: ret
574+ ret i64 u0x5555ffffaaaa0000
575+ }
576+
577+ define i64 @movn_0_eor () {
578+ ; CHECK-LABEL: movn_0_eor:
579+ ; CHECK: // %bb.0:
580+ ; CHECK-NEXT: mov x0, #21845 // =0x5555
581+ ; CHECK-NEXT: movk x0, #65535, lsl #16
582+ ; CHECK-NEXT: movk x0, #43690, lsl #32
583+ ; CHECK-NEXT: ret
584+ ret i64 u0x0000aaaaffff5555
585+ }
586+
587+ define i64 @movn_1_eor () {
588+ ; CHECK-LABEL: movn_1_eor:
589+ ; CHECK: // %bb.0:
590+ ; CHECK-NEXT: mov x0, #65535 // =0xffff
591+ ; CHECK-NEXT: movk x0, #21845, lsl #16
592+ ; CHECK-NEXT: movk x0, #43690, lsl #48
593+ ; CHECK-NEXT: ret
594+ ret i64 u0xaaaa00005555ffff
595+ }
596+
597+ define i64 @movn_movk_eor () {
598+ ; CHECK-LABEL: movn_movk_eor:
599+ ; CHECK: // %bb.0:
600+ ; CHECK-NEXT: mov x0, #43690 // =0xaaaa
601+ ; CHECK-NEXT: movk x0, #52428, lsl #16
602+ ; CHECK-NEXT: movk x0, #21845, lsl #32
603+ ; CHECK-NEXT: movk x0, #13107, lsl #48
604+ ; CHECK-NEXT: ret
605+ ret i64 u0x33335555ccccaaaa
606+ }
0 commit comments