Skip to content

Commit ac62dbf

Browse files
committed
Pre-commit tests
1 parent 96bbe47 commit ac62dbf

File tree

1 file changed

+299
-0
lines changed

1 file changed

+299
-0
lines changed

llvm/test/CodeGen/RISCV/shifts.ll

Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,3 +484,302 @@ define i128 @fshr128_minsize(i128 %a, i128 %b) minsize nounwind {
484484
%res = tail call i128 @llvm.fshr.i128(i128 %a, i128 %a, i128 %b)
485485
ret i128 %res
486486
}
487+
488+
define i64 @lshr64_shamt32(i64 %a, i32 signext %b) nounwind {
489+
; RV32I-LABEL: lshr64_shamt32:
490+
; RV32I: # %bb.0:
491+
; RV32I-NEXT: addi a4, a2, -32
492+
; RV32I-NEXT: srl a3, a1, a2
493+
; RV32I-NEXT: bltz a4, .LBB11_2
494+
; RV32I-NEXT: # %bb.1:
495+
; RV32I-NEXT: mv a0, a3
496+
; RV32I-NEXT: j .LBB11_3
497+
; RV32I-NEXT: .LBB11_2:
498+
; RV32I-NEXT: srl a0, a0, a2
499+
; RV32I-NEXT: not a2, a2
500+
; RV32I-NEXT: slli a1, a1, 1
501+
; RV32I-NEXT: sll a1, a1, a2
502+
; RV32I-NEXT: or a0, a0, a1
503+
; RV32I-NEXT: .LBB11_3:
504+
; RV32I-NEXT: srai a1, a4, 31
505+
; RV32I-NEXT: and a1, a1, a3
506+
; RV32I-NEXT: ret
507+
;
508+
; RV64I-LABEL: lshr64_shamt32:
509+
; RV64I: # %bb.0:
510+
; RV64I-NEXT: srl a0, a0, a1
511+
; RV64I-NEXT: ret
512+
%zext = zext nneg i32 %b to i64
513+
%1 = lshr i64 %a, %zext
514+
ret i64 %1
515+
}
516+
517+
define i64 @ashr64_shamt32(i64 %a, i32 signext %b) nounwind {
518+
; RV32I-LABEL: ashr64_shamt32:
519+
; RV32I: # %bb.0:
520+
; RV32I-NEXT: mv a3, a1
521+
; RV32I-NEXT: addi a4, a2, -32
522+
; RV32I-NEXT: sra a1, a1, a2
523+
; RV32I-NEXT: bltz a4, .LBB12_2
524+
; RV32I-NEXT: # %bb.1:
525+
; RV32I-NEXT: srai a3, a3, 31
526+
; RV32I-NEXT: mv a0, a1
527+
; RV32I-NEXT: mv a1, a3
528+
; RV32I-NEXT: ret
529+
; RV32I-NEXT: .LBB12_2:
530+
; RV32I-NEXT: srl a0, a0, a2
531+
; RV32I-NEXT: not a2, a2
532+
; RV32I-NEXT: slli a3, a3, 1
533+
; RV32I-NEXT: sll a2, a3, a2
534+
; RV32I-NEXT: or a0, a0, a2
535+
; RV32I-NEXT: ret
536+
;
537+
; RV64I-LABEL: ashr64_shamt32:
538+
; RV64I: # %bb.0:
539+
; RV64I-NEXT: sra a0, a0, a1
540+
; RV64I-NEXT: ret
541+
%zext = zext nneg i32 %b to i64
542+
%1 = ashr i64 %a, %zext
543+
ret i64 %1
544+
}
545+
546+
define i64 @shl64_shamt32(i64 %a, i32 signext %b) nounwind {
547+
; RV32I-LABEL: shl64_shamt32:
548+
; RV32I: # %bb.0:
549+
; RV32I-NEXT: addi a4, a2, -32
550+
; RV32I-NEXT: sll a3, a0, a2
551+
; RV32I-NEXT: bltz a4, .LBB13_2
552+
; RV32I-NEXT: # %bb.1:
553+
; RV32I-NEXT: mv a1, a3
554+
; RV32I-NEXT: j .LBB13_3
555+
; RV32I-NEXT: .LBB13_2:
556+
; RV32I-NEXT: sll a1, a1, a2
557+
; RV32I-NEXT: not a2, a2
558+
; RV32I-NEXT: srli a0, a0, 1
559+
; RV32I-NEXT: srl a0, a0, a2
560+
; RV32I-NEXT: or a1, a1, a0
561+
; RV32I-NEXT: .LBB13_3:
562+
; RV32I-NEXT: srai a0, a4, 31
563+
; RV32I-NEXT: and a0, a0, a3
564+
; RV32I-NEXT: ret
565+
;
566+
; RV64I-LABEL: shl64_shamt32:
567+
; RV64I: # %bb.0:
568+
; RV64I-NEXT: sll a0, a0, a1
569+
; RV64I-NEXT: ret
570+
%zext = zext nneg i32 %b to i64
571+
%1 = shl i64 %a, %zext
572+
ret i64 %1
573+
}
574+
575+
define i128 @lshr128_shamt32(i128 %a, i32 signext %b) nounwind {
576+
; RV32I-LABEL: lshr128_shamt32:
577+
; RV32I: # %bb.0:
578+
; RV32I-NEXT: addi sp, sp, -32
579+
; RV32I-NEXT: lw a3, 0(a1)
580+
; RV32I-NEXT: lw a4, 4(a1)
581+
; RV32I-NEXT: lw a5, 8(a1)
582+
; RV32I-NEXT: lw a1, 12(a1)
583+
; RV32I-NEXT: sw zero, 16(sp)
584+
; RV32I-NEXT: sw zero, 20(sp)
585+
; RV32I-NEXT: sw zero, 24(sp)
586+
; RV32I-NEXT: sw zero, 28(sp)
587+
; RV32I-NEXT: srli a6, a2, 3
588+
; RV32I-NEXT: mv a7, sp
589+
; RV32I-NEXT: andi t0, a2, 31
590+
; RV32I-NEXT: andi a6, a6, 12
591+
; RV32I-NEXT: xori t0, t0, 31
592+
; RV32I-NEXT: add a6, a7, a6
593+
; RV32I-NEXT: sw a3, 0(sp)
594+
; RV32I-NEXT: sw a4, 4(sp)
595+
; RV32I-NEXT: sw a5, 8(sp)
596+
; RV32I-NEXT: sw a1, 12(sp)
597+
; RV32I-NEXT: lw a1, 0(a6)
598+
; RV32I-NEXT: lw a3, 4(a6)
599+
; RV32I-NEXT: lw a4, 8(a6)
600+
; RV32I-NEXT: lw a5, 12(a6)
601+
; RV32I-NEXT: srl a1, a1, a2
602+
; RV32I-NEXT: slli a6, a3, 1
603+
; RV32I-NEXT: srl a3, a3, a2
604+
; RV32I-NEXT: slli a7, a4, 1
605+
; RV32I-NEXT: srl a4, a4, a2
606+
; RV32I-NEXT: srl a2, a5, a2
607+
; RV32I-NEXT: slli a5, a5, 1
608+
; RV32I-NEXT: sll a6, a6, t0
609+
; RV32I-NEXT: sll a7, a7, t0
610+
; RV32I-NEXT: sll a5, a5, t0
611+
; RV32I-NEXT: or a1, a1, a6
612+
; RV32I-NEXT: or a3, a3, a7
613+
; RV32I-NEXT: or a4, a4, a5
614+
; RV32I-NEXT: sw a1, 0(a0)
615+
; RV32I-NEXT: sw a3, 4(a0)
616+
; RV32I-NEXT: sw a4, 8(a0)
617+
; RV32I-NEXT: sw a2, 12(a0)
618+
; RV32I-NEXT: addi sp, sp, 32
619+
; RV32I-NEXT: ret
620+
;
621+
; RV64I-LABEL: lshr128_shamt32:
622+
; RV64I: # %bb.0:
623+
; RV64I-NEXT: slli a4, a2, 32
624+
; RV64I-NEXT: srli a4, a4, 32
625+
; RV64I-NEXT: addi a3, a4, -64
626+
; RV64I-NEXT: bltz a3, .LBB14_2
627+
; RV64I-NEXT: # %bb.1:
628+
; RV64I-NEXT: srl a0, a1, a4
629+
; RV64I-NEXT: j .LBB14_3
630+
; RV64I-NEXT: .LBB14_2:
631+
; RV64I-NEXT: srl a0, a0, a2
632+
; RV64I-NEXT: slli a5, a1, 1
633+
; RV64I-NEXT: not a4, a4
634+
; RV64I-NEXT: sll a4, a5, a4
635+
; RV64I-NEXT: or a0, a0, a4
636+
; RV64I-NEXT: .LBB14_3:
637+
; RV64I-NEXT: srl a1, a1, a2
638+
; RV64I-NEXT: srai a3, a3, 63
639+
; RV64I-NEXT: and a1, a3, a1
640+
; RV64I-NEXT: ret
641+
%zext = zext nneg i32 %b to i128
642+
%1 = lshr i128 %a, %zext
643+
ret i128 %1
644+
}
645+
646+
define i128 @ashr128_shamt32(i128 %a, i32 signext %b) nounwind {
647+
; RV32I-LABEL: ashr128_shamt32:
648+
; RV32I: # %bb.0:
649+
; RV32I-NEXT: addi sp, sp, -32
650+
; RV32I-NEXT: lw a3, 0(a1)
651+
; RV32I-NEXT: lw a4, 4(a1)
652+
; RV32I-NEXT: lw a5, 8(a1)
653+
; RV32I-NEXT: lw a1, 12(a1)
654+
; RV32I-NEXT: srli a6, a2, 3
655+
; RV32I-NEXT: mv a7, sp
656+
; RV32I-NEXT: andi t0, a2, 31
657+
; RV32I-NEXT: andi a6, a6, 12
658+
; RV32I-NEXT: xori t0, t0, 31
659+
; RV32I-NEXT: add a6, a7, a6
660+
; RV32I-NEXT: sw a3, 0(sp)
661+
; RV32I-NEXT: sw a4, 4(sp)
662+
; RV32I-NEXT: sw a5, 8(sp)
663+
; RV32I-NEXT: sw a1, 12(sp)
664+
; RV32I-NEXT: srai a1, a1, 31
665+
; RV32I-NEXT: sw a1, 16(sp)
666+
; RV32I-NEXT: sw a1, 20(sp)
667+
; RV32I-NEXT: sw a1, 24(sp)
668+
; RV32I-NEXT: sw a1, 28(sp)
669+
; RV32I-NEXT: lw a1, 0(a6)
670+
; RV32I-NEXT: lw a3, 4(a6)
671+
; RV32I-NEXT: lw a4, 8(a6)
672+
; RV32I-NEXT: lw a5, 12(a6)
673+
; RV32I-NEXT: srl a1, a1, a2
674+
; RV32I-NEXT: slli a6, a3, 1
675+
; RV32I-NEXT: srl a3, a3, a2
676+
; RV32I-NEXT: slli a7, a4, 1
677+
; RV32I-NEXT: srl a4, a4, a2
678+
; RV32I-NEXT: sra a2, a5, a2
679+
; RV32I-NEXT: slli a5, a5, 1
680+
; RV32I-NEXT: sll a6, a6, t0
681+
; RV32I-NEXT: sll a7, a7, t0
682+
; RV32I-NEXT: sll a5, a5, t0
683+
; RV32I-NEXT: or a1, a1, a6
684+
; RV32I-NEXT: or a3, a3, a7
685+
; RV32I-NEXT: or a4, a4, a5
686+
; RV32I-NEXT: sw a1, 0(a0)
687+
; RV32I-NEXT: sw a3, 4(a0)
688+
; RV32I-NEXT: sw a4, 8(a0)
689+
; RV32I-NEXT: sw a2, 12(a0)
690+
; RV32I-NEXT: addi sp, sp, 32
691+
; RV32I-NEXT: ret
692+
;
693+
; RV64I-LABEL: ashr128_shamt32:
694+
; RV64I: # %bb.0:
695+
; RV64I-NEXT: slli a3, a2, 32
696+
; RV64I-NEXT: srli a3, a3, 32
697+
; RV64I-NEXT: addi a4, a3, -64
698+
; RV64I-NEXT: bltz a4, .LBB15_2
699+
; RV64I-NEXT: # %bb.1:
700+
; RV64I-NEXT: sra a0, a1, a3
701+
; RV64I-NEXT: srai a1, a1, 63
702+
; RV64I-NEXT: ret
703+
; RV64I-NEXT: .LBB15_2:
704+
; RV64I-NEXT: srl a0, a0, a2
705+
; RV64I-NEXT: slli a4, a1, 1
706+
; RV64I-NEXT: not a3, a3
707+
; RV64I-NEXT: sll a3, a4, a3
708+
; RV64I-NEXT: or a0, a0, a3
709+
; RV64I-NEXT: sra a1, a1, a2
710+
; RV64I-NEXT: ret
711+
%zext = zext nneg i32 %b to i128
712+
%1 = ashr i128 %a, %zext
713+
ret i128 %1
714+
}
715+
716+
define i128 @shl128_shamt32(i128 %a, i32 signext %b) nounwind {
717+
; RV32I-LABEL: shl128_shamt32:
718+
; RV32I: # %bb.0:
719+
; RV32I-NEXT: addi sp, sp, -32
720+
; RV32I-NEXT: lw a3, 0(a1)
721+
; RV32I-NEXT: lw a4, 4(a1)
722+
; RV32I-NEXT: lw a5, 8(a1)
723+
; RV32I-NEXT: lw a1, 12(a1)
724+
; RV32I-NEXT: sw zero, 0(sp)
725+
; RV32I-NEXT: sw zero, 4(sp)
726+
; RV32I-NEXT: sw zero, 8(sp)
727+
; RV32I-NEXT: sw zero, 12(sp)
728+
; RV32I-NEXT: srli a6, a2, 3
729+
; RV32I-NEXT: addi a7, sp, 16
730+
; RV32I-NEXT: andi t0, a2, 31
731+
; RV32I-NEXT: andi a6, a6, 12
732+
; RV32I-NEXT: sub a6, a7, a6
733+
; RV32I-NEXT: sw a3, 16(sp)
734+
; RV32I-NEXT: sw a4, 20(sp)
735+
; RV32I-NEXT: sw a5, 24(sp)
736+
; RV32I-NEXT: sw a1, 28(sp)
737+
; RV32I-NEXT: lw a1, 0(a6)
738+
; RV32I-NEXT: lw a3, 4(a6)
739+
; RV32I-NEXT: lw a4, 8(a6)
740+
; RV32I-NEXT: lw a5, 12(a6)
741+
; RV32I-NEXT: xori a6, t0, 31
742+
; RV32I-NEXT: sll a7, a3, a2
743+
; RV32I-NEXT: srli t0, a1, 1
744+
; RV32I-NEXT: sll a5, a5, a2
745+
; RV32I-NEXT: sll a1, a1, a2
746+
; RV32I-NEXT: sll a2, a4, a2
747+
; RV32I-NEXT: srli a3, a3, 1
748+
; RV32I-NEXT: srli a4, a4, 1
749+
; RV32I-NEXT: srl t0, t0, a6
750+
; RV32I-NEXT: srl a3, a3, a6
751+
; RV32I-NEXT: srl a4, a4, a6
752+
; RV32I-NEXT: or a6, a7, t0
753+
; RV32I-NEXT: or a2, a2, a3
754+
; RV32I-NEXT: or a4, a5, a4
755+
; RV32I-NEXT: sw a1, 0(a0)
756+
; RV32I-NEXT: sw a6, 4(a0)
757+
; RV32I-NEXT: sw a2, 8(a0)
758+
; RV32I-NEXT: sw a4, 12(a0)
759+
; RV32I-NEXT: addi sp, sp, 32
760+
; RV32I-NEXT: ret
761+
;
762+
; RV64I-LABEL: shl128_shamt32:
763+
; RV64I: # %bb.0:
764+
; RV64I-NEXT: slli a4, a2, 32
765+
; RV64I-NEXT: srli a4, a4, 32
766+
; RV64I-NEXT: addi a3, a4, -64
767+
; RV64I-NEXT: bltz a3, .LBB16_2
768+
; RV64I-NEXT: # %bb.1:
769+
; RV64I-NEXT: sll a1, a0, a4
770+
; RV64I-NEXT: j .LBB16_3
771+
; RV64I-NEXT: .LBB16_2:
772+
; RV64I-NEXT: sll a1, a1, a2
773+
; RV64I-NEXT: srli a5, a0, 1
774+
; RV64I-NEXT: not a4, a4
775+
; RV64I-NEXT: srl a4, a5, a4
776+
; RV64I-NEXT: or a1, a1, a4
777+
; RV64I-NEXT: .LBB16_3:
778+
; RV64I-NEXT: sll a0, a0, a2
779+
; RV64I-NEXT: srai a3, a3, 63
780+
; RV64I-NEXT: and a0, a3, a0
781+
; RV64I-NEXT: ret
782+
%zext = zext nneg i32 %b to i128
783+
%1 = shl i128 %a, %zext
784+
ret i128 %1
785+
}

0 commit comments

Comments
 (0)