Skip to content

Commit 6096327

Browse files
committed
[X86] Add printElementBroadcast constant comments helper. NFC.
Pull out helper instead of repeating switch cases.
1 parent 09bd2cb commit 6096327

File tree

1 file changed

+65
-70
lines changed

1 file changed

+65
-70
lines changed

llvm/lib/Target/X86/X86MCInstLower.cpp

Lines changed: 65 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,6 +1634,28 @@ static void printLaneBroadcast(const MachineInstr *MI, MCStreamer &OutStreamer,
16341634
}
16351635
}
16361636

1637+
static void printElementBroadcast(const MachineInstr *MI,
1638+
MCStreamer &OutStreamer, int NumElts,
1639+
int EltBits) {
1640+
assert(MI->getNumOperands() >= (1 + X86::AddrNumOperands) &&
1641+
"Unexpected number of operands!");
1642+
if (auto *C =
1643+
X86::getConstantFromPool(*MI, MI->getOperand(1 + X86::AddrDisp))) {
1644+
std::string Comment;
1645+
raw_string_ostream CS(Comment);
1646+
const MachineOperand &DstOp = MI->getOperand(0);
1647+
CS << X86ATTInstPrinter::getRegisterName(DstOp.getReg()) << " = ";
1648+
CS << "[";
1649+
for (int i = 0; i != NumElts; ++i) {
1650+
if (i != 0)
1651+
CS << ",";
1652+
printConstant(C, EltBits, CS);
1653+
}
1654+
CS << "]";
1655+
OutStreamer.AddComment(CS.str());
1656+
}
1657+
}
1658+
16371659
void X86AsmPrinter::EmitSEHInstruction(const MachineInstr *MI) {
16381660
assert(MF->hasWinCFI() && "SEH_ instruction in function without WinCFI?");
16391661
assert((getSubtarget().isOSWindows() || TM.getTargetTriple().isUEFI()) &&
@@ -1992,90 +2014,63 @@ static void addConstantComments(const MachineInstr *MI,
19922014
printLaneBroadcast(MI, OutStreamer, 2, 256);
19932015
break;
19942016

2017+
// For broadcast loads from a constant pool to a vector register, repeatedly
2018+
// print the constant loaded.
19952019
case X86::MOVDDUPrm:
19962020
case X86::VMOVDDUPrm:
19972021
case X86::VMOVDDUPZ128rm:
1998-
case X86::VBROADCASTSSrm:
1999-
case X86::VBROADCASTSSYrm:
2000-
case X86::VBROADCASTSSZ128rm:
2001-
case X86::VBROADCASTSSZ256rm:
2002-
case X86::VBROADCASTSSZrm:
2022+
case X86::VPBROADCASTQrm:
2023+
case X86::VPBROADCASTQZ128rm:
2024+
printElementBroadcast(MI, OutStreamer, 2, 64);
2025+
break;
20032026
case X86::VBROADCASTSDYrm:
20042027
case X86::VBROADCASTSDZ256rm:
2028+
case X86::VPBROADCASTQYrm:
2029+
case X86::VPBROADCASTQZ256rm:
2030+
printElementBroadcast(MI, OutStreamer, 4, 64);
2031+
break;
20052032
case X86::VBROADCASTSDZrm:
2006-
case X86::VPBROADCASTBrm:
2007-
case X86::VPBROADCASTBYrm:
2008-
case X86::VPBROADCASTBZ128rm:
2009-
case X86::VPBROADCASTBZ256rm:
2010-
case X86::VPBROADCASTBZrm:
2033+
case X86::VPBROADCASTQZrm:
2034+
printElementBroadcast(MI, OutStreamer, 8, 64);
2035+
break;
2036+
case X86::VBROADCASTSSrm:
2037+
case X86::VBROADCASTSSZ128rm:
20112038
case X86::VPBROADCASTDrm:
2012-
case X86::VPBROADCASTDYrm:
20132039
case X86::VPBROADCASTDZ128rm:
2040+
printElementBroadcast(MI, OutStreamer, 4, 32);
2041+
break;
2042+
case X86::VBROADCASTSSYrm:
2043+
case X86::VBROADCASTSSZ256rm:
2044+
case X86::VPBROADCASTDYrm:
20142045
case X86::VPBROADCASTDZ256rm:
2046+
printElementBroadcast(MI, OutStreamer, 8, 32);
2047+
break;
2048+
case X86::VBROADCASTSSZrm:
20152049
case X86::VPBROADCASTDZrm:
2016-
case X86::VPBROADCASTQrm:
2017-
case X86::VPBROADCASTQYrm:
2018-
case X86::VPBROADCASTQZ128rm:
2019-
case X86::VPBROADCASTQZ256rm:
2020-
case X86::VPBROADCASTQZrm:
2050+
printElementBroadcast(MI, OutStreamer, 16, 32);
2051+
break;
20212052
case X86::VPBROADCASTWrm:
2022-
case X86::VPBROADCASTWYrm:
20232053
case X86::VPBROADCASTWZ128rm:
2054+
printElementBroadcast(MI, OutStreamer, 8, 16);
2055+
break;
2056+
case X86::VPBROADCASTWYrm:
20242057
case X86::VPBROADCASTWZ256rm:
2058+
printElementBroadcast(MI, OutStreamer, 16, 16);
2059+
break;
20252060
case X86::VPBROADCASTWZrm:
2026-
assert(MI->getNumOperands() >= (1 + X86::AddrNumOperands) &&
2027-
"Unexpected number of operands!");
2028-
if (auto *C =
2029-
X86::getConstantFromPool(*MI, MI->getOperand(1 + X86::AddrDisp))) {
2030-
int NumElts, EltBits;
2031-
switch (MI->getOpcode()) {
2032-
default: llvm_unreachable("Invalid opcode");
2033-
case X86::MOVDDUPrm: NumElts = 2; EltBits = 64; break;
2034-
case X86::VMOVDDUPrm: NumElts = 2; EltBits = 64; break;
2035-
case X86::VMOVDDUPZ128rm: NumElts = 2; EltBits = 64; break;
2036-
case X86::VBROADCASTSSrm: NumElts = 4; EltBits = 32; break;
2037-
case X86::VBROADCASTSSYrm: NumElts = 8; EltBits = 32; break;
2038-
case X86::VBROADCASTSSZ128rm: NumElts = 4; EltBits = 32; break;
2039-
case X86::VBROADCASTSSZ256rm: NumElts = 8; EltBits = 32; break;
2040-
case X86::VBROADCASTSSZrm: NumElts = 16; EltBits = 32; break;
2041-
case X86::VBROADCASTSDYrm: NumElts = 4; EltBits = 64; break;
2042-
case X86::VBROADCASTSDZ256rm: NumElts = 4; EltBits = 64; break;
2043-
case X86::VBROADCASTSDZrm: NumElts = 8; EltBits = 64; break;
2044-
case X86::VPBROADCASTBrm: NumElts = 16; EltBits = 8; break;
2045-
case X86::VPBROADCASTBYrm: NumElts = 32; EltBits = 8; break;
2046-
case X86::VPBROADCASTBZ128rm: NumElts = 16; EltBits = 8; break;
2047-
case X86::VPBROADCASTBZ256rm: NumElts = 32; EltBits = 8; break;
2048-
case X86::VPBROADCASTBZrm: NumElts = 64; EltBits = 8; break;
2049-
case X86::VPBROADCASTDrm: NumElts = 4; EltBits = 32; break;
2050-
case X86::VPBROADCASTDYrm: NumElts = 8; EltBits = 32; break;
2051-
case X86::VPBROADCASTDZ128rm: NumElts = 4; EltBits = 32; break;
2052-
case X86::VPBROADCASTDZ256rm: NumElts = 8; EltBits = 32; break;
2053-
case X86::VPBROADCASTDZrm: NumElts = 16; EltBits = 32; break;
2054-
case X86::VPBROADCASTQrm: NumElts = 2; EltBits = 64; break;
2055-
case X86::VPBROADCASTQYrm: NumElts = 4; EltBits = 64; break;
2056-
case X86::VPBROADCASTQZ128rm: NumElts = 2; EltBits = 64; break;
2057-
case X86::VPBROADCASTQZ256rm: NumElts = 4; EltBits = 64; break;
2058-
case X86::VPBROADCASTQZrm: NumElts = 8; EltBits = 64; break;
2059-
case X86::VPBROADCASTWrm: NumElts = 8; EltBits = 16; break;
2060-
case X86::VPBROADCASTWYrm: NumElts = 16; EltBits = 16; break;
2061-
case X86::VPBROADCASTWZ128rm: NumElts = 8; EltBits = 16; break;
2062-
case X86::VPBROADCASTWZ256rm: NumElts = 16; EltBits = 16; break;
2063-
case X86::VPBROADCASTWZrm: NumElts = 32; EltBits = 16; break;
2064-
}
2065-
2066-
std::string Comment;
2067-
raw_string_ostream CS(Comment);
2068-
const MachineOperand &DstOp = MI->getOperand(0);
2069-
CS << X86ATTInstPrinter::getRegisterName(DstOp.getReg()) << " = ";
2070-
CS << "[";
2071-
for (int i = 0; i != NumElts; ++i) {
2072-
if (i != 0)
2073-
CS << ",";
2074-
printConstant(C, EltBits, CS);
2075-
}
2076-
CS << "]";
2077-
OutStreamer.AddComment(CS.str());
2078-
}
2061+
printElementBroadcast(MI, OutStreamer, 32, 16);
2062+
break;
2063+
case X86::VPBROADCASTBrm:
2064+
case X86::VPBROADCASTBZ128rm:
2065+
printElementBroadcast(MI, OutStreamer, 16, 8);
2066+
break;
2067+
case X86::VPBROADCASTBYrm:
2068+
case X86::VPBROADCASTBZ256rm:
2069+
printElementBroadcast(MI, OutStreamer, 32, 8);
2070+
break;
2071+
case X86::VPBROADCASTBZrm:
2072+
printElementBroadcast(MI, OutStreamer, 64, 8);
2073+
break;
20792074
}
20802075
}
20812076

0 commit comments

Comments
 (0)