16774ba84SManolis Tsamis; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 26774ba84SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s \ 36774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32I 46774ba84SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+zbb -mattr=+m -verify-machineinstrs < %s \ 56774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32ZBB 66774ba84SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+xtheadbb -mattr=+m -verify-machineinstrs < %s \ 76774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32XTHEADBB 86774ba84SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+xtheadmac -mattr=+m -verify-machineinstrs < %s \ 96774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32XTHEADMAC 106774ba84SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+xtheadmac -mattr=+xtheadbb -mattr=+m -verify-machineinstrs < %s \ 116774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32XTHEAD 126774ba84SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s \ 136774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64I 146774ba84SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+zbb -mattr=+m -verify-machineinstrs < %s \ 156774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64ZBB 166774ba84SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+xtheadmac -mattr=+m -verify-machineinstrs < %s \ 176774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64XTHEADMAC 186774ba84SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+xtheadbb -mattr=+m -verify-machineinstrs < %s \ 196774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64XTHEADBB 206774ba84SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+xtheadmac -mattr=+xtheadbb -mattr=+m -verify-machineinstrs < %s \ 216774ba84SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64XTHEAD 226774ba84SManolis Tsamis 236774ba84SManolis Tsamisdefine i32 @f(i32 %A, i32 %B, i32 %C) { 246774ba84SManolis Tsamis; RV32I-LABEL: f: 256774ba84SManolis Tsamis; RV32I: # %bb.0: # %entry 266774ba84SManolis Tsamis; RV32I-NEXT: mul a0, a1, a0 276774ba84SManolis Tsamis; RV32I-NEXT: slli a1, a0, 26 286774ba84SManolis Tsamis; RV32I-NEXT: slli a0, a0, 20 29*9122c523SPengcheng Wang; RV32I-NEXT: srli a1, a1, 28 306774ba84SManolis Tsamis; RV32I-NEXT: srli a0, a0, 25 316774ba84SManolis Tsamis; RV32I-NEXT: mul a0, a1, a0 326774ba84SManolis Tsamis; RV32I-NEXT: add a0, a0, a2 336774ba84SManolis Tsamis; RV32I-NEXT: ret 346774ba84SManolis Tsamis; 356774ba84SManolis Tsamis; RV32ZBB-LABEL: f: 366774ba84SManolis Tsamis; RV32ZBB: # %bb.0: # %entry 376774ba84SManolis Tsamis; RV32ZBB-NEXT: mul a0, a1, a0 386774ba84SManolis Tsamis; RV32ZBB-NEXT: slli a1, a0, 26 396774ba84SManolis Tsamis; RV32ZBB-NEXT: slli a0, a0, 20 40*9122c523SPengcheng Wang; RV32ZBB-NEXT: srli a1, a1, 28 416774ba84SManolis Tsamis; RV32ZBB-NEXT: srli a0, a0, 25 426774ba84SManolis Tsamis; RV32ZBB-NEXT: mul a0, a1, a0 436774ba84SManolis Tsamis; RV32ZBB-NEXT: add a0, a0, a2 446774ba84SManolis Tsamis; RV32ZBB-NEXT: ret 456774ba84SManolis Tsamis; 466774ba84SManolis Tsamis; RV32XTHEADBB-LABEL: f: 476774ba84SManolis Tsamis; RV32XTHEADBB: # %bb.0: # %entry 486774ba84SManolis Tsamis; RV32XTHEADBB-NEXT: mul a0, a1, a0 4910b7cd66SPhilipp Tomsich; RV32XTHEADBB-NEXT: th.extu a1, a0, 5, 2 5010b7cd66SPhilipp Tomsich; RV32XTHEADBB-NEXT: th.extu a0, a0, 11, 5 516774ba84SManolis Tsamis; RV32XTHEADBB-NEXT: mul a0, a1, a0 526774ba84SManolis Tsamis; RV32XTHEADBB-NEXT: add a0, a0, a2 536774ba84SManolis Tsamis; RV32XTHEADBB-NEXT: ret 546774ba84SManolis Tsamis; 556774ba84SManolis Tsamis; RV32XTHEADMAC-LABEL: f: 566774ba84SManolis Tsamis; RV32XTHEADMAC: # %bb.0: # %entry 576774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: mul a0, a1, a0 586774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: slli a1, a0, 26 596774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: slli a0, a0, 20 60*9122c523SPengcheng Wang; RV32XTHEADMAC-NEXT: srli a1, a1, 28 616774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: srli a0, a0, 25 626774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: th.mulah a2, a1, a0 636774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: mv a0, a2 646774ba84SManolis Tsamis; RV32XTHEADMAC-NEXT: ret 656774ba84SManolis Tsamis; 666774ba84SManolis Tsamis; RV32XTHEAD-LABEL: f: 676774ba84SManolis Tsamis; RV32XTHEAD: # %bb.0: # %entry 686774ba84SManolis Tsamis; RV32XTHEAD-NEXT: mul a0, a1, a0 6910b7cd66SPhilipp Tomsich; RV32XTHEAD-NEXT: th.extu a1, a0, 5, 2 7010b7cd66SPhilipp Tomsich; RV32XTHEAD-NEXT: th.extu a0, a0, 11, 5 716774ba84SManolis Tsamis; RV32XTHEAD-NEXT: th.mulah a2, a1, a0 726774ba84SManolis Tsamis; RV32XTHEAD-NEXT: mv a0, a2 736774ba84SManolis Tsamis; RV32XTHEAD-NEXT: ret 746774ba84SManolis Tsamis; 756774ba84SManolis Tsamis; RV64I-LABEL: f: 766774ba84SManolis Tsamis; RV64I: # %bb.0: # %entry 774063369fSCraig Topper; RV64I-NEXT: mul a0, a1, a0 786774ba84SManolis Tsamis; RV64I-NEXT: slli a1, a0, 58 796774ba84SManolis Tsamis; RV64I-NEXT: slli a0, a0, 52 80*9122c523SPengcheng Wang; RV64I-NEXT: srli a1, a1, 60 816774ba84SManolis Tsamis; RV64I-NEXT: srli a0, a0, 57 824063369fSCraig Topper; RV64I-NEXT: mul a0, a1, a0 836774ba84SManolis Tsamis; RV64I-NEXT: addw a0, a0, a2 846774ba84SManolis Tsamis; RV64I-NEXT: ret 856774ba84SManolis Tsamis; 866774ba84SManolis Tsamis; RV64ZBB-LABEL: f: 876774ba84SManolis Tsamis; RV64ZBB: # %bb.0: # %entry 884063369fSCraig Topper; RV64ZBB-NEXT: mul a0, a1, a0 896774ba84SManolis Tsamis; RV64ZBB-NEXT: slli a1, a0, 58 906774ba84SManolis Tsamis; RV64ZBB-NEXT: slli a0, a0, 52 91*9122c523SPengcheng Wang; RV64ZBB-NEXT: srli a1, a1, 60 926774ba84SManolis Tsamis; RV64ZBB-NEXT: srli a0, a0, 57 934063369fSCraig Topper; RV64ZBB-NEXT: mul a0, a1, a0 946774ba84SManolis Tsamis; RV64ZBB-NEXT: addw a0, a0, a2 956774ba84SManolis Tsamis; RV64ZBB-NEXT: ret 966774ba84SManolis Tsamis; 976774ba84SManolis Tsamis; RV64XTHEADMAC-LABEL: f: 986774ba84SManolis Tsamis; RV64XTHEADMAC: # %bb.0: # %entry 994063369fSCraig Topper; RV64XTHEADMAC-NEXT: mul a0, a1, a0 1006774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: slli a1, a0, 58 1016774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: slli a0, a0, 52 102*9122c523SPengcheng Wang; RV64XTHEADMAC-NEXT: srli a1, a1, 60 1036774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: srli a0, a0, 57 1046774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: th.mulah a2, a1, a0 1056774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: mv a0, a2 1066774ba84SManolis Tsamis; RV64XTHEADMAC-NEXT: ret 1076774ba84SManolis Tsamis; 1086774ba84SManolis Tsamis; RV64XTHEADBB-LABEL: f: 1096774ba84SManolis Tsamis; RV64XTHEADBB: # %bb.0: # %entry 11010b7cd66SPhilipp Tomsich; RV64XTHEADBB-NEXT: mul a0, a1, a0 11110b7cd66SPhilipp Tomsich; RV64XTHEADBB-NEXT: th.extu a1, a0, 5, 2 11210b7cd66SPhilipp Tomsich; RV64XTHEADBB-NEXT: th.extu a0, a0, 11, 5 1134063369fSCraig Topper; RV64XTHEADBB-NEXT: mul a0, a1, a0 1146774ba84SManolis Tsamis; RV64XTHEADBB-NEXT: addw a0, a0, a2 1156774ba84SManolis Tsamis; RV64XTHEADBB-NEXT: ret 1166774ba84SManolis Tsamis; 1176774ba84SManolis Tsamis; RV64XTHEAD-LABEL: f: 1186774ba84SManolis Tsamis; RV64XTHEAD: # %bb.0: # %entry 11910b7cd66SPhilipp Tomsich; RV64XTHEAD-NEXT: mul a0, a1, a0 12010b7cd66SPhilipp Tomsich; RV64XTHEAD-NEXT: th.extu a1, a0, 5, 2 12110b7cd66SPhilipp Tomsich; RV64XTHEAD-NEXT: th.extu a0, a0, 11, 5 1226774ba84SManolis Tsamis; RV64XTHEAD-NEXT: th.mulah a2, a1, a0 1236774ba84SManolis Tsamis; RV64XTHEAD-NEXT: mv a0, a2 1246774ba84SManolis Tsamis; RV64XTHEAD-NEXT: ret 1256774ba84SManolis Tsamisentry: 1266774ba84SManolis Tsamis %mul = mul nsw i32 %B, %A 1276774ba84SManolis Tsamis %0 = lshr i32 %mul, 2 1286774ba84SManolis Tsamis %and = and i32 %0, 15 1296774ba84SManolis Tsamis %1 = lshr i32 %mul, 5 1306774ba84SManolis Tsamis %and2 = and i32 %1, 127 1316774ba84SManolis Tsamis %mul3 = mul nuw nsw i32 %and, %and2 1326774ba84SManolis Tsamis %add = add i32 %mul3, %C 1336774ba84SManolis Tsamis ret i32 %add 1346774ba84SManolis Tsamis} 135