| 
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py  | 
2 |  | -; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=1 | FileCheck %s --check-prefixes=NO_FOLDING  | 
3 |  | -; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=2 | FileCheck %s --check-prefixes=NO_FOLDING  | 
 | 2 | +; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=1 | FileCheck %s --check-prefixes=NO_FOLDING,NO_FOLDING1  | 
 | 3 | +; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=2 | FileCheck %s --check-prefixes=NO_FOLDING,NO_FOLDING2  | 
4 | 4 | ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=3 | FileCheck %s --check-prefixes=FOLDING,ZVFH  | 
5 | 5 | ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfhmin,+f,+d -verify-machineinstrs %s -o - --riscv-lower-ext-max-web-size=3 | FileCheck %s --check-prefixes=FOLDING,ZVFHMIN  | 
6 | 6 | ; Check that the default value enables the web folding and  | 
7 | 7 | ; that it is bigger than 3.  | 
8 | 8 | ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+f,+d -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=FOLDING  | 
9 | 9 | 
 
  | 
10 | 10 | define void @vfwmul_v2f116_multiple_users(ptr %x, ptr %y, ptr %z, <2 x half> %a, <2 x half> %b, <2 x half> %b2) {  | 
11 |  | -; NO_FOLDING-LABEL: vfwmul_v2f116_multiple_users:  | 
12 |  | -; NO_FOLDING:       # %bb.0:  | 
13 |  | -; NO_FOLDING-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma  | 
14 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v11, v8  | 
15 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v8, v9  | 
16 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v9, v10  | 
17 |  | -; NO_FOLDING-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma  | 
18 |  | -; NO_FOLDING-NEXT:    vfmul.vv v10, v11, v8  | 
19 |  | -; NO_FOLDING-NEXT:    vfadd.vv v11, v11, v9  | 
20 |  | -; NO_FOLDING-NEXT:    vfsub.vv v8, v8, v9  | 
21 |  | -; NO_FOLDING-NEXT:    vse32.v v10, (a0)  | 
22 |  | -; NO_FOLDING-NEXT:    vse32.v v11, (a1)  | 
23 |  | -; NO_FOLDING-NEXT:    vse32.v v8, (a2)  | 
24 |  | -; NO_FOLDING-NEXT:    ret  | 
 | 11 | +; NO_FOLDING1-LABEL: vfwmul_v2f116_multiple_users:  | 
 | 12 | +; NO_FOLDING1:       # %bb.0:  | 
 | 13 | +; NO_FOLDING1-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma  | 
 | 14 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v11, v8  | 
 | 15 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v8, v9  | 
 | 16 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v9, v10  | 
 | 17 | +; NO_FOLDING1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma  | 
 | 18 | +; NO_FOLDING1-NEXT:    vfmul.vv v10, v11, v8  | 
 | 19 | +; NO_FOLDING1-NEXT:    vfadd.vv v11, v11, v9  | 
 | 20 | +; NO_FOLDING1-NEXT:    vfsub.vv v8, v8, v9  | 
 | 21 | +; NO_FOLDING1-NEXT:    vse32.v v10, (a0)  | 
 | 22 | +; NO_FOLDING1-NEXT:    vse32.v v11, (a1)  | 
 | 23 | +; NO_FOLDING1-NEXT:    vse32.v v8, (a2)  | 
 | 24 | +; NO_FOLDING1-NEXT:    ret  | 
 | 25 | +;  | 
 | 26 | +; NO_FOLDING2-LABEL: vfwmul_v2f116_multiple_users:  | 
 | 27 | +; NO_FOLDING2:       # %bb.0:  | 
 | 28 | +; NO_FOLDING2-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma  | 
 | 29 | +; NO_FOLDING2-NEXT:    vfwcvt.f.f.v v11, v8  | 
 | 30 | +; NO_FOLDING2-NEXT:    vfwcvt.f.f.v v8, v9  | 
 | 31 | +; NO_FOLDING2-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma  | 
 | 32 | +; NO_FOLDING2-NEXT:    vfmul.vv v9, v11, v8  | 
 | 33 | +; NO_FOLDING2-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma  | 
 | 34 | +; NO_FOLDING2-NEXT:    vfwadd.wv v11, v11, v10  | 
 | 35 | +; NO_FOLDING2-NEXT:    vfwsub.wv v8, v8, v10  | 
 | 36 | +; NO_FOLDING2-NEXT:    vse32.v v9, (a0)  | 
 | 37 | +; NO_FOLDING2-NEXT:    vse32.v v11, (a1)  | 
 | 38 | +; NO_FOLDING2-NEXT:    vse32.v v8, (a2)  | 
 | 39 | +; NO_FOLDING2-NEXT:    ret  | 
25 | 40 | ;  | 
26 | 41 | ; ZVFH-LABEL: vfwmul_v2f116_multiple_users:  | 
27 | 42 | ; ZVFH:       # %bb.0:  | 
@@ -61,20 +76,35 @@ define void @vfwmul_v2f116_multiple_users(ptr %x, ptr %y, ptr %z, <2 x half> %a,  | 
61 | 76 | }  | 
62 | 77 | 
 
  | 
63 | 78 | define void @vfwmul_v2f32_multiple_users(ptr %x, ptr %y, ptr %z, <2 x float> %a, <2 x float> %b, <2 x float> %b2) {  | 
64 |  | -; NO_FOLDING-LABEL: vfwmul_v2f32_multiple_users:  | 
65 |  | -; NO_FOLDING:       # %bb.0:  | 
66 |  | -; NO_FOLDING-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma  | 
67 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v11, v8  | 
68 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v8, v9  | 
69 |  | -; NO_FOLDING-NEXT:    vfwcvt.f.f.v v9, v10  | 
70 |  | -; NO_FOLDING-NEXT:    vsetvli zero, zero, e64, m1, ta, ma  | 
71 |  | -; NO_FOLDING-NEXT:    vfmul.vv v10, v11, v8  | 
72 |  | -; NO_FOLDING-NEXT:    vfadd.vv v11, v11, v9  | 
73 |  | -; NO_FOLDING-NEXT:    vfsub.vv v8, v8, v9  | 
74 |  | -; NO_FOLDING-NEXT:    vse64.v v10, (a0)  | 
75 |  | -; NO_FOLDING-NEXT:    vse64.v v11, (a1)  | 
76 |  | -; NO_FOLDING-NEXT:    vse64.v v8, (a2)  | 
77 |  | -; NO_FOLDING-NEXT:    ret  | 
 | 79 | +; NO_FOLDING1-LABEL: vfwmul_v2f32_multiple_users:  | 
 | 80 | +; NO_FOLDING1:       # %bb.0:  | 
 | 81 | +; NO_FOLDING1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma  | 
 | 82 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v11, v8  | 
 | 83 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v8, v9  | 
 | 84 | +; NO_FOLDING1-NEXT:    vfwcvt.f.f.v v9, v10  | 
 | 85 | +; NO_FOLDING1-NEXT:    vsetvli zero, zero, e64, m1, ta, ma  | 
 | 86 | +; NO_FOLDING1-NEXT:    vfmul.vv v10, v11, v8  | 
 | 87 | +; NO_FOLDING1-NEXT:    vfadd.vv v11, v11, v9  | 
 | 88 | +; NO_FOLDING1-NEXT:    vfsub.vv v8, v8, v9  | 
 | 89 | +; NO_FOLDING1-NEXT:    vse64.v v10, (a0)  | 
 | 90 | +; NO_FOLDING1-NEXT:    vse64.v v11, (a1)  | 
 | 91 | +; NO_FOLDING1-NEXT:    vse64.v v8, (a2)  | 
 | 92 | +; NO_FOLDING1-NEXT:    ret  | 
 | 93 | +;  | 
 | 94 | +; NO_FOLDING2-LABEL: vfwmul_v2f32_multiple_users:  | 
 | 95 | +; NO_FOLDING2:       # %bb.0:  | 
 | 96 | +; NO_FOLDING2-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma  | 
 | 97 | +; NO_FOLDING2-NEXT:    vfwcvt.f.f.v v11, v8  | 
 | 98 | +; NO_FOLDING2-NEXT:    vfwcvt.f.f.v v8, v9  | 
 | 99 | +; NO_FOLDING2-NEXT:    vsetvli zero, zero, e64, m1, ta, ma  | 
 | 100 | +; NO_FOLDING2-NEXT:    vfmul.vv v9, v11, v8  | 
 | 101 | +; NO_FOLDING2-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma  | 
 | 102 | +; NO_FOLDING2-NEXT:    vfwadd.wv v11, v11, v10  | 
 | 103 | +; NO_FOLDING2-NEXT:    vfwsub.wv v8, v8, v10  | 
 | 104 | +; NO_FOLDING2-NEXT:    vse64.v v9, (a0)  | 
 | 105 | +; NO_FOLDING2-NEXT:    vse64.v v11, (a1)  | 
 | 106 | +; NO_FOLDING2-NEXT:    vse64.v v8, (a2)  | 
 | 107 | +; NO_FOLDING2-NEXT:    ret  | 
78 | 108 | ;  | 
79 | 109 | ; FOLDING-LABEL: vfwmul_v2f32_multiple_users:  | 
80 | 110 | ; FOLDING:       # %bb.0:  | 
 | 
0 commit comments