xref: /llvm-project/llvm/test/CodeGen/RISCV/bitextract-mac.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
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