Skip to content

Commit aa7bb56

Browse files
committed
fixup! resolve comment
1 parent e10520a commit aa7bb56

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMatInt.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ static void generateInstSeqImpl(int64_t Val, const MCSubtargetInfo &STI,
8282
if (STI.hasFeature(RISCV::FeatureStdExtP)) {
8383
// Check if the immediate is packed i8 or i10
8484
int32_t Bit63To32 = Val >> 32;
85-
int32_t Bit31To0 = Val & 0xFFFFFFFF;
85+
int32_t Bit31To0 = Val;
8686
int16_t Bit31To16 = Bit31To0 >> 16;
87-
int16_t Bit15To0 = Bit31To0 & 0xFFFF;
87+
int16_t Bit15To0 = Bit31To0;
8888
int8_t Bit15To8 = Bit15To0 >> 8;
89-
int8_t Bit7To0 = Bit15To0 & 0xFF;
89+
int8_t Bit7To0 = Bit15To0;
9090
if (Bit63To32 == Bit31To0) {
9191
if (IsRV64 && isInt<10>(Bit63To32)) {
9292
Res.emplace_back(RISCV::PLI_W, Bit63To32);

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,18 @@ static unsigned getSegInstNF(unsigned Intrinsic) {
991991
}
992992
}
993993

994+
static bool isApplicableToPLI(int Val) {
995+
// Check if the immediate is packed i8 or i10
996+
int16_t Bit31To16 = Val >> 16;
997+
int16_t Bit15To0 = Val;
998+
int8_t Bit15To8 = Bit15To0 >> 8;
999+
int8_t Bit7To0 = Val;
1000+
if (Bit31To16 != Bit15To0)
1001+
return false;
1002+
1003+
return isInt<10>(Bit31To16) || Bit15To8 == Bit7To0;
1004+
}
1005+
9941006
void RISCVDAGToDAGISel::Select(SDNode *Node) {
9951007
// If we have a custom node, we have already selected.
9961008
if (Node->isMachineOpcode()) {
@@ -1034,12 +1046,12 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) {
10341046
if (!isInt<32>(Imm) && isUInt<32>(Imm) && hasAllWUsers(Node))
10351047
Imm = SignExtend64<32>(Imm);
10361048

1037-
if (hasAllWUsers(Node) && Subtarget->hasStdExtP() &&
1038-
Subtarget->enablePExtCodeGen()) {
1049+
if (hasAllWUsers(Node) && isApplicableToPLI(Imm) &&
1050+
Subtarget->hasStdExtP() && Subtarget->enablePExtCodeGen()) {
10391051
// If its 4 packed 8 bit integer or 2 packed signed integer, we can simply
10401052
// copy lower 32 bits to higher 32 bits to make it able to rematerialize
10411053
// to PLI_B or PLI_H
1042-
Imm = (Imm << 32) | (Imm & 0xFFFFFFFF);
1054+
Imm = ((uint64_t)Imm << 32) | (Imm & 0xFFFFFFFF);
10431055
}
10441056

10451057
ReplaceNode(Node, selectImm(CurDAG, DL, VT, Imm, *Subtarget).getNode());

0 commit comments

Comments
 (0)