@@ -1634,6 +1634,28 @@ static void printLaneBroadcast(const MachineInstr *MI, MCStreamer &OutStreamer,
1634
1634
}
1635
1635
}
1636
1636
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
+
1637
1659
void X86AsmPrinter::EmitSEHInstruction (const MachineInstr *MI) {
1638
1660
assert (MF->hasWinCFI () && " SEH_ instruction in function without WinCFI?" );
1639
1661
assert ((getSubtarget ().isOSWindows () || TM.getTargetTriple ().isUEFI ()) &&
@@ -1992,90 +2014,63 @@ static void addConstantComments(const MachineInstr *MI,
1992
2014
printLaneBroadcast (MI, OutStreamer, 2 , 256 );
1993
2015
break ;
1994
2016
2017
+ // For broadcast loads from a constant pool to a vector register, repeatedly
2018
+ // print the constant loaded.
1995
2019
case X86::MOVDDUPrm:
1996
2020
case X86::VMOVDDUPrm:
1997
2021
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 ;
2003
2026
case X86::VBROADCASTSDYrm:
2004
2027
case X86::VBROADCASTSDZ256rm:
2028
+ case X86::VPBROADCASTQYrm:
2029
+ case X86::VPBROADCASTQZ256rm:
2030
+ printElementBroadcast (MI, OutStreamer, 4 , 64 );
2031
+ break ;
2005
2032
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 :
2011
2038
case X86::VPBROADCASTDrm:
2012
- case X86::VPBROADCASTDYrm:
2013
2039
case X86::VPBROADCASTDZ128rm:
2040
+ printElementBroadcast (MI, OutStreamer, 4 , 32 );
2041
+ break ;
2042
+ case X86::VBROADCASTSSYrm:
2043
+ case X86::VBROADCASTSSZ256rm:
2044
+ case X86::VPBROADCASTDYrm:
2014
2045
case X86::VPBROADCASTDZ256rm:
2046
+ printElementBroadcast (MI, OutStreamer, 8 , 32 );
2047
+ break ;
2048
+ case X86::VBROADCASTSSZrm:
2015
2049
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 ;
2021
2052
case X86::VPBROADCASTWrm:
2022
- case X86::VPBROADCASTWYrm:
2023
2053
case X86::VPBROADCASTWZ128rm:
2054
+ printElementBroadcast (MI, OutStreamer, 8 , 16 );
2055
+ break ;
2056
+ case X86::VPBROADCASTWYrm:
2024
2057
case X86::VPBROADCASTWZ256rm:
2058
+ printElementBroadcast (MI, OutStreamer, 16 , 16 );
2059
+ break ;
2025
2060
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 ;
2079
2074
}
2080
2075
}
2081
2076
0 commit comments