|
4 | 4 | ; RUN: llc -mtriple=riscv64 -mattr=+m,+zba -verify-machineinstrs < %s \
|
5 | 5 | ; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBA,RV64ZBANOZBB
|
6 | 6 | ; RUN: llc -mtriple=riscv64 -mattr=+m,+zba,+zbb -verify-machineinstrs < %s \
|
7 |
| -; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBA,RV64ZBAZBB |
| 7 | +; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBA,RV64ZBAZBB,RV64ZBAZBBNOZBS |
| 8 | +; RUN: llc -mtriple=riscv64 -mattr=+m,+zba,+zbb,+zbs -verify-machineinstrs < %s \ |
| 9 | +; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBA,RV64ZBAZBB,RV64ZBAZBBZBS |
8 | 10 |
|
9 | 11 | define i64 @slliuw(i64 %a) nounwind {
|
10 | 12 | ; RV64I-LABEL: slliuw:
|
@@ -2733,3 +2735,121 @@ define i64 @mul_neg8(i64 %a) {
|
2733 | 2735 | %c = mul i64 %a, -8
|
2734 | 2736 | ret i64 %c
|
2735 | 2737 | }
|
| 2738 | + |
| 2739 | +define i64 @bext_mul12(i32 %1, i32 %2) { |
| 2740 | +; RV64I-LABEL: bext_mul12: |
| 2741 | +; RV64I: # %bb.0: # %entry |
| 2742 | +; RV64I-NEXT: srlw a0, a0, a1 |
| 2743 | +; RV64I-NEXT: andi a0, a0, 1 |
| 2744 | +; RV64I-NEXT: li a1, 12 |
| 2745 | +; RV64I-NEXT: mul a0, a0, a1 |
| 2746 | +; RV64I-NEXT: ret |
| 2747 | +; |
| 2748 | +; RV64ZBANOZBB-LABEL: bext_mul12: |
| 2749 | +; RV64ZBANOZBB: # %bb.0: # %entry |
| 2750 | +; RV64ZBANOZBB-NEXT: srlw a0, a0, a1 |
| 2751 | +; RV64ZBANOZBB-NEXT: andi a0, a0, 1 |
| 2752 | +; RV64ZBANOZBB-NEXT: sh1add a0, a0, a0 |
| 2753 | +; RV64ZBANOZBB-NEXT: slli a0, a0, 2 |
| 2754 | +; RV64ZBANOZBB-NEXT: ret |
| 2755 | +; |
| 2756 | +; RV64ZBAZBBNOZBS-LABEL: bext_mul12: |
| 2757 | +; RV64ZBAZBBNOZBS: # %bb.0: # %entry |
| 2758 | +; RV64ZBAZBBNOZBS-NEXT: srlw a0, a0, a1 |
| 2759 | +; RV64ZBAZBBNOZBS-NEXT: andi a0, a0, 1 |
| 2760 | +; RV64ZBAZBBNOZBS-NEXT: sh1add a0, a0, a0 |
| 2761 | +; RV64ZBAZBBNOZBS-NEXT: slli a0, a0, 2 |
| 2762 | +; RV64ZBAZBBNOZBS-NEXT: ret |
| 2763 | +; |
| 2764 | +; RV64ZBAZBBZBS-LABEL: bext_mul12: |
| 2765 | +; RV64ZBAZBBZBS: # %bb.0: # %entry |
| 2766 | +; RV64ZBAZBBZBS-NEXT: bext a0, a0, a1 |
| 2767 | +; RV64ZBAZBBZBS-NEXT: sh1add a0, a0, a0 |
| 2768 | +; RV64ZBAZBBZBS-NEXT: slli a0, a0, 2 |
| 2769 | +; RV64ZBAZBBZBS-NEXT: ret |
| 2770 | +entry: |
| 2771 | + %3 = lshr i32 %1, %2 |
| 2772 | + %4 = and i32 %3, 1 |
| 2773 | + %5 = zext nneg i32 %4 to i64 |
| 2774 | + %6 = mul i64 %5, 12 |
| 2775 | + ret i64 %6 |
| 2776 | +} |
| 2777 | + |
| 2778 | +define i64 @bext_mul45(i32 %1, i32 %2) { |
| 2779 | +; RV64I-LABEL: bext_mul45: |
| 2780 | +; RV64I: # %bb.0: # %entry |
| 2781 | +; RV64I-NEXT: srlw a0, a0, a1 |
| 2782 | +; RV64I-NEXT: andi a0, a0, 1 |
| 2783 | +; RV64I-NEXT: li a1, 45 |
| 2784 | +; RV64I-NEXT: mul a0, a0, a1 |
| 2785 | +; RV64I-NEXT: ret |
| 2786 | +; |
| 2787 | +; RV64ZBANOZBB-LABEL: bext_mul45: |
| 2788 | +; RV64ZBANOZBB: # %bb.0: # %entry |
| 2789 | +; RV64ZBANOZBB-NEXT: srlw a0, a0, a1 |
| 2790 | +; RV64ZBANOZBB-NEXT: andi a0, a0, 1 |
| 2791 | +; RV64ZBANOZBB-NEXT: sh2add a0, a0, a0 |
| 2792 | +; RV64ZBANOZBB-NEXT: sh3add a0, a0, a0 |
| 2793 | +; RV64ZBANOZBB-NEXT: ret |
| 2794 | +; |
| 2795 | +; RV64ZBAZBBNOZBS-LABEL: bext_mul45: |
| 2796 | +; RV64ZBAZBBNOZBS: # %bb.0: # %entry |
| 2797 | +; RV64ZBAZBBNOZBS-NEXT: srlw a0, a0, a1 |
| 2798 | +; RV64ZBAZBBNOZBS-NEXT: andi a0, a0, 1 |
| 2799 | +; RV64ZBAZBBNOZBS-NEXT: sh2add a0, a0, a0 |
| 2800 | +; RV64ZBAZBBNOZBS-NEXT: sh3add a0, a0, a0 |
| 2801 | +; RV64ZBAZBBNOZBS-NEXT: ret |
| 2802 | +; |
| 2803 | +; RV64ZBAZBBZBS-LABEL: bext_mul45: |
| 2804 | +; RV64ZBAZBBZBS: # %bb.0: # %entry |
| 2805 | +; RV64ZBAZBBZBS-NEXT: bext a0, a0, a1 |
| 2806 | +; RV64ZBAZBBZBS-NEXT: sh2add a0, a0, a0 |
| 2807 | +; RV64ZBAZBBZBS-NEXT: sh3add a0, a0, a0 |
| 2808 | +; RV64ZBAZBBZBS-NEXT: ret |
| 2809 | +entry: |
| 2810 | + %3 = lshr i32 %1, %2 |
| 2811 | + %4 = and i32 %3, 1 |
| 2812 | + %5 = zext nneg i32 %4 to i64 |
| 2813 | + %6 = mul i64 %5, 45 |
| 2814 | + ret i64 %6 |
| 2815 | +} |
| 2816 | + |
| 2817 | +define i64 @bext_mul132(i32 %1, i32 %2) { |
| 2818 | +; RV64I-LABEL: bext_mul132: |
| 2819 | +; RV64I: # %bb.0: # %entry |
| 2820 | +; RV64I-NEXT: srlw a0, a0, a1 |
| 2821 | +; RV64I-NEXT: andi a0, a0, 1 |
| 2822 | +; RV64I-NEXT: li a1, 132 |
| 2823 | +; RV64I-NEXT: mul a0, a0, a1 |
| 2824 | +; RV64I-NEXT: ret |
| 2825 | +; |
| 2826 | +; RV64ZBANOZBB-LABEL: bext_mul132: |
| 2827 | +; RV64ZBANOZBB: # %bb.0: # %entry |
| 2828 | +; RV64ZBANOZBB-NEXT: srlw a0, a0, a1 |
| 2829 | +; RV64ZBANOZBB-NEXT: andi a0, a0, 1 |
| 2830 | +; RV64ZBANOZBB-NEXT: slli a1, a0, 7 |
| 2831 | +; RV64ZBANOZBB-NEXT: sh2add a0, a0, a1 |
| 2832 | +; RV64ZBANOZBB-NEXT: ret |
| 2833 | +; |
| 2834 | +; RV64ZBAZBBNOZBS-LABEL: bext_mul132: |
| 2835 | +; RV64ZBAZBBNOZBS: # %bb.0: # %entry |
| 2836 | +; RV64ZBAZBBNOZBS-NEXT: srlw a0, a0, a1 |
| 2837 | +; RV64ZBAZBBNOZBS-NEXT: andi a0, a0, 1 |
| 2838 | +; RV64ZBAZBBNOZBS-NEXT: slli a1, a0, 7 |
| 2839 | +; RV64ZBAZBBNOZBS-NEXT: sh2add a0, a0, a1 |
| 2840 | +; RV64ZBAZBBNOZBS-NEXT: ret |
| 2841 | +; |
| 2842 | +; RV64ZBAZBBZBS-LABEL: bext_mul132: |
| 2843 | +; RV64ZBAZBBZBS: # %bb.0: # %entry |
| 2844 | +; RV64ZBAZBBZBS-NEXT: bext a0, a0, a1 |
| 2845 | +; RV64ZBAZBBZBS-NEXT: slli a1, a0, 7 |
| 2846 | +; RV64ZBAZBBZBS-NEXT: sh2add a0, a0, a1 |
| 2847 | +; RV64ZBAZBBZBS-NEXT: ret |
| 2848 | +entry: |
| 2849 | + %3 = lshr i32 %1, %2 |
| 2850 | + %4 = and i32 %3, 1 |
| 2851 | + %5 = zext nneg i32 %4 to i64 |
| 2852 | + %6 = mul i64 %5, 132 |
| 2853 | + ret i64 %6 |
| 2854 | +} |
| 2855 | + |
0 commit comments