xref: /llvm-project/llvm/test/CodeGen/RISCV/xtheadfmemidx.ll (revision ff9af4c43ad71eeba2cabe99609cfaa0fd54c1d0)
17b79e8d4SManolis Tsamis; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
27b79e8d4SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+d -mattr=+xtheadfmemidx -mattr=+m -verify-machineinstrs < %s \
37b79e8d4SManolis Tsamis; RUN:   | FileCheck %s -check-prefix=RV32XTHEADMEMIDX
47b79e8d4SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+d -mattr=+xtheadfmemidx -verify-machineinstrs < %s \
57b79e8d4SManolis Tsamis; RUN:   | FileCheck %s -check-prefix=RV64XTHEADFMEMIDX
67b79e8d4SManolis Tsamis
7*ff9af4c4SNikita Popovdefine float @flrw(ptr %a, i64 %b) {
87b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: flrw:
97b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
107b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.flrw fa5, a0, a1, 2
117b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.s fa0, fa5, fa5
127b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
137b79e8d4SManolis Tsamis;
147b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: flrw:
157b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
167b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.flrw fa5, a0, a1, 2
177b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.s fa0, fa5, fa5
187b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
19*ff9af4c4SNikita Popov  %1 = getelementptr float, ptr %a, i64 %b
20*ff9af4c4SNikita Popov  %2 = load float, ptr %1, align 4
217b79e8d4SManolis Tsamis  %3 = fadd float %2, %2
227b79e8d4SManolis Tsamis  ret float %3
237b79e8d4SManolis Tsamis}
247b79e8d4SManolis Tsamis
25*ff9af4c4SNikita Popovdefine float @flurw(ptr %a, i32 %b) {
267b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: flurw:
277b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
287b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.flrw fa5, a0, a1, 2
297b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.s fa0, fa5, fa5
307b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
317b79e8d4SManolis Tsamis;
327b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: flurw:
337b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
347b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.flurw fa5, a0, a1, 2
357b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.s fa0, fa5, fa5
367b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
377b79e8d4SManolis Tsamis  %1 = zext i32 %b to i64
38*ff9af4c4SNikita Popov  %2 = getelementptr float, ptr %a, i64 %1
39*ff9af4c4SNikita Popov  %3 = load float, ptr %2, align 4
407b79e8d4SManolis Tsamis  %4 = fadd float %3, %3
417b79e8d4SManolis Tsamis  ret float %4
427b79e8d4SManolis Tsamis}
437b79e8d4SManolis Tsamis
44*ff9af4c4SNikita Popovdefine void @fsrw(ptr %a, i64 %b, float %c) {
457b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: fsrw:
467b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
477b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.s fa5, fa0, fa0
487b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.fsrw fa5, a0, a1, 2
497b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
507b79e8d4SManolis Tsamis;
517b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: fsrw:
527b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
537b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.s fa5, fa0, fa0
547b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.fsrw fa5, a0, a1, 2
557b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
567b79e8d4SManolis Tsamis  %1 = fadd float %c, %c
57*ff9af4c4SNikita Popov  %2 = getelementptr float, ptr %a, i64 %b
58*ff9af4c4SNikita Popov  store float %1, ptr %2, align 4
597b79e8d4SManolis Tsamis  ret void
607b79e8d4SManolis Tsamis}
617b79e8d4SManolis Tsamis
62*ff9af4c4SNikita Popovdefine void @fsurw(ptr %a, i32 %b, float %c) {
637b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: fsurw:
647b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
657b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.s fa5, fa0, fa0
667b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.fsrw fa5, a0, a1, 2
677b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
687b79e8d4SManolis Tsamis;
697b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: fsurw:
707b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
717b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.s fa5, fa0, fa0
727b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.fsurw fa5, a0, a1, 2
737b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
747b79e8d4SManolis Tsamis  %1 = zext i32 %b to i64
757b79e8d4SManolis Tsamis  %2 = fadd float %c, %c
76*ff9af4c4SNikita Popov  %3 = getelementptr float, ptr %a, i64 %1
77*ff9af4c4SNikita Popov  store float %2, ptr %3, align 4
787b79e8d4SManolis Tsamis  ret void
797b79e8d4SManolis Tsamis}
807b79e8d4SManolis Tsamis
81*ff9af4c4SNikita Popovdefine double @flrd(ptr %a, i64 %b) {
827b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: flrd:
837b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
847b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.flrd fa5, a0, a1, 3
857b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.d fa0, fa5, fa5
867b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
877b79e8d4SManolis Tsamis;
887b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: flrd:
897b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
907b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.flrd fa5, a0, a1, 3
917b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.d fa0, fa5, fa5
927b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
93*ff9af4c4SNikita Popov  %1 = getelementptr double, ptr %a, i64 %b
94*ff9af4c4SNikita Popov  %2 = load double, ptr %1, align 8
957b79e8d4SManolis Tsamis  %3 = fadd double %2, %2
967b79e8d4SManolis Tsamis  ret double %3
977b79e8d4SManolis Tsamis}
987b79e8d4SManolis Tsamis
99*ff9af4c4SNikita Popovdefine double @flurd(ptr %a, i32 %b) {
1007b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: flurd:
1017b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
1027b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.flrd fa5, a0, a1, 3
1037b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.d fa0, fa5, fa5
1047b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
1057b79e8d4SManolis Tsamis;
1067b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: flurd:
1077b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
1087b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.flurd fa5, a0, a1, 3
1097b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.d fa0, fa5, fa5
1107b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
1117b79e8d4SManolis Tsamis  %1 = zext i32 %b to i64
112*ff9af4c4SNikita Popov  %2 = getelementptr double, ptr %a, i64 %1
113*ff9af4c4SNikita Popov  %3 = load double, ptr %2, align 8
1147b79e8d4SManolis Tsamis  %4 = fadd double %3, %3
1157b79e8d4SManolis Tsamis  ret double %4
1167b79e8d4SManolis Tsamis}
1177b79e8d4SManolis Tsamis
118*ff9af4c4SNikita Popovdefine void @fsrd(ptr %a, i64 %b, double %c) {
1197b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: fsrd:
1207b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
1217b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.d fa5, fa0, fa0
1227b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.fsrd fa5, a0, a1, 3
1237b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
1247b79e8d4SManolis Tsamis;
1257b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: fsrd:
1267b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
1277b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.d fa5, fa0, fa0
1287b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.fsrd fa5, a0, a1, 3
1297b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
1307b79e8d4SManolis Tsamis  %1 = fadd double %c, %c
131*ff9af4c4SNikita Popov  %2 = getelementptr double, ptr %a, i64 %b
132*ff9af4c4SNikita Popov  store double %1, ptr %2, align 8
1337b79e8d4SManolis Tsamis  ret void
1347b79e8d4SManolis Tsamis}
1357b79e8d4SManolis Tsamis
136*ff9af4c4SNikita Popovdefine void @fsurd(ptr %a, i32 %b, double %c) {
1377b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: fsurd:
1387b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX:       # %bb.0:
1397b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    fadd.d fa5, fa0, fa0
1407b0c4184SCraig Topper; RV32XTHEADMEMIDX-NEXT:    th.fsrd fa5, a0, a1, 3
1417b79e8d4SManolis Tsamis; RV32XTHEADMEMIDX-NEXT:    ret
1427b79e8d4SManolis Tsamis;
1437b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-LABEL: fsurd:
1447b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX:       # %bb.0:
1457b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    fadd.d fa5, fa0, fa0
1467b0c4184SCraig Topper; RV64XTHEADFMEMIDX-NEXT:    th.fsurd fa5, a0, a1, 3
1477b79e8d4SManolis Tsamis; RV64XTHEADFMEMIDX-NEXT:    ret
1487b79e8d4SManolis Tsamis  %1 = zext i32 %b to i64
1497b79e8d4SManolis Tsamis  %2 = fadd double %c, %c
150*ff9af4c4SNikita Popov  %3 = getelementptr double, ptr %a, i64 %1
151*ff9af4c4SNikita Popov  store double %2, ptr %3, align 8
1527b79e8d4SManolis Tsamis  ret void
1537b79e8d4SManolis Tsamis}
154