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