Skip to content

Commit ad704ff

Browse files
authored
[X86][NF] Switch the order of Inst and &Target.getInstruction(NewRec) (llvm#130739)
Because Inst is ordered by Instruction ID.
1 parent 65ade6d commit ad704ff

File tree

3 files changed

+51
-33
lines changed

3 files changed

+51
-33
lines changed

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3304,10 +3304,28 @@ static unsigned getNewOpcFromTable(ArrayRef<X86TableEntry> Table,
33043304
return (I == Table.end() || I->OldOpc != Opc) ? 0U : I->NewOpc;
33053305
}
33063306
unsigned X86::getNFVariant(unsigned Opc) {
3307+
#if defined(EXPENSIVE_CHECKS) && !defined(NDEBUG)
3308+
// Make sure the tables are sorted.
3309+
static std::atomic<bool> NFTableChecked(false);
3310+
if (!NFTableChecked.load(std::memory_order_relaxed)) {
3311+
assert(llvm::is_sorted(X86NFTransformTable) &&
3312+
"X86NFTransformTable is not sorted!");
3313+
NFTableChecked.store(true, std::memory_order_relaxed);
3314+
}
3315+
#endif
33073316
return getNewOpcFromTable(X86NFTransformTable, Opc);
33083317
}
33093318

33103319
unsigned X86::getNonNDVariant(unsigned Opc) {
3320+
#if defined(EXPENSIVE_CHECKS) && !defined(NDEBUG)
3321+
// Make sure the tables are sorted.
3322+
static std::atomic<bool> NDTableChecked(false);
3323+
if (!NDTableChecked.load(std::memory_order_relaxed)) {
3324+
assert(llvm::is_sorted(X86ND2NonNDTable) &&
3325+
"X86ND2NonNDTableis not sorted!");
3326+
NDTableChecked.store(true, std::memory_order_relaxed);
3327+
}
3328+
#endif
33113329
return getNewOpcFromTable(X86ND2NonNDTable, Opc);
33123330
}
33133331

llvm/test/TableGen/x86-instr-mapping.inc

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,29 +1575,29 @@ static bool checkPredicate(unsigned Opc, const X86Subtarget *Subtarget) {
15751575

15761576
#ifdef GET_X86_NF_TRANSFORM_TABLE
15771577
static const X86TableEntry X86NFTransformTable[] = {
1578+
{ X86::ADD16mi, X86::ADD16mi_NF },
15781579
{ X86::ADD16mi8, X86::ADD16mi8_NF },
15791580
{ X86::ADD16mi8_ND, X86::ADD16mi8_NF_ND },
1580-
{ X86::ADD16mi, X86::ADD16mi_NF },
15811581
{ X86::ADD16mi_ND, X86::ADD16mi_NF_ND },
15821582
{ X86::ADD16mr, X86::ADD16mr_NF },
15831583
{ X86::ADD16mr_ND, X86::ADD16mr_NF_ND },
1584+
{ X86::ADD16ri, X86::ADD16ri_NF },
15841585
{ X86::ADD16ri8, X86::ADD16ri8_NF },
15851586
{ X86::ADD16ri8_ND, X86::ADD16ri8_NF_ND },
1586-
{ X86::ADD16ri, X86::ADD16ri_NF },
15871587
{ X86::ADD16ri_ND, X86::ADD16ri_NF_ND },
15881588
{ X86::ADD16rm, X86::ADD16rm_NF },
15891589
{ X86::ADD16rm_ND, X86::ADD16rm_NF_ND },
15901590
{ X86::ADD16rr, X86::ADD16rr_NF },
15911591
{ X86::ADD16rr_ND, X86::ADD16rr_NF_ND },
1592+
{ X86::ADD32mi, X86::ADD32mi_NF },
15921593
{ X86::ADD32mi8, X86::ADD32mi8_NF },
15931594
{ X86::ADD32mi8_ND, X86::ADD32mi8_NF_ND },
1594-
{ X86::ADD32mi, X86::ADD32mi_NF },
15951595
{ X86::ADD32mi_ND, X86::ADD32mi_NF_ND },
15961596
{ X86::ADD32mr, X86::ADD32mr_NF },
15971597
{ X86::ADD32mr_ND, X86::ADD32mr_NF_ND },
1598+
{ X86::ADD32ri, X86::ADD32ri_NF },
15981599
{ X86::ADD32ri8, X86::ADD32ri8_NF },
15991600
{ X86::ADD32ri8_ND, X86::ADD32ri8_NF_ND },
1600-
{ X86::ADD32ri, X86::ADD32ri_NF },
16011601
{ X86::ADD32ri_ND, X86::ADD32ri_NF_ND },
16021602
{ X86::ADD32rm, X86::ADD32rm_NF },
16031603
{ X86::ADD32rm_ND, X86::ADD32rm_NF_ND },
@@ -1627,29 +1627,29 @@ static const X86TableEntry X86NFTransformTable[] = {
16271627
{ X86::ADD8rm_ND, X86::ADD8rm_NF_ND },
16281628
{ X86::ADD8rr, X86::ADD8rr_NF },
16291629
{ X86::ADD8rr_ND, X86::ADD8rr_NF_ND },
1630+
{ X86::AND16mi, X86::AND16mi_NF },
16301631
{ X86::AND16mi8, X86::AND16mi8_NF },
16311632
{ X86::AND16mi8_ND, X86::AND16mi8_NF_ND },
1632-
{ X86::AND16mi, X86::AND16mi_NF },
16331633
{ X86::AND16mi_ND, X86::AND16mi_NF_ND },
16341634
{ X86::AND16mr, X86::AND16mr_NF },
16351635
{ X86::AND16mr_ND, X86::AND16mr_NF_ND },
1636+
{ X86::AND16ri, X86::AND16ri_NF },
16361637
{ X86::AND16ri8, X86::AND16ri8_NF },
16371638
{ X86::AND16ri8_ND, X86::AND16ri8_NF_ND },
1638-
{ X86::AND16ri, X86::AND16ri_NF },
16391639
{ X86::AND16ri_ND, X86::AND16ri_NF_ND },
16401640
{ X86::AND16rm, X86::AND16rm_NF },
16411641
{ X86::AND16rm_ND, X86::AND16rm_NF_ND },
16421642
{ X86::AND16rr, X86::AND16rr_NF },
16431643
{ X86::AND16rr_ND, X86::AND16rr_NF_ND },
1644+
{ X86::AND32mi, X86::AND32mi_NF },
16441645
{ X86::AND32mi8, X86::AND32mi8_NF },
16451646
{ X86::AND32mi8_ND, X86::AND32mi8_NF_ND },
1646-
{ X86::AND32mi, X86::AND32mi_NF },
16471647
{ X86::AND32mi_ND, X86::AND32mi_NF_ND },
16481648
{ X86::AND32mr, X86::AND32mr_NF },
16491649
{ X86::AND32mr_ND, X86::AND32mr_NF_ND },
1650+
{ X86::AND32ri, X86::AND32ri_NF },
16501651
{ X86::AND32ri8, X86::AND32ri8_NF },
16511652
{ X86::AND32ri8_ND, X86::AND32ri8_NF_ND },
1652-
{ X86::AND32ri, X86::AND32ri_NF },
16531653
{ X86::AND32ri_ND, X86::AND32ri_NF_ND },
16541654
{ X86::AND32rm, X86::AND32rm_NF },
16551655
{ X86::AND32rm_ND, X86::AND32rm_NF_ND },
@@ -1739,22 +1739,22 @@ static const X86TableEntry X86NFTransformTable[] = {
17391739
{ X86::IMUL16r, X86::IMUL16r_NF },
17401740
{ X86::IMUL16rm, X86::IMUL16rm_NF },
17411741
{ X86::IMUL16rm_ND, X86::IMUL16rm_NF_ND },
1742-
{ X86::IMUL16rmi8, X86::IMUL16rmi8_NF },
17431742
{ X86::IMUL16rmi, X86::IMUL16rmi_NF },
1743+
{ X86::IMUL16rmi8, X86::IMUL16rmi8_NF },
17441744
{ X86::IMUL16rr, X86::IMUL16rr_NF },
17451745
{ X86::IMUL16rr_ND, X86::IMUL16rr_NF_ND },
1746-
{ X86::IMUL16rri8, X86::IMUL16rri8_NF },
17471746
{ X86::IMUL16rri, X86::IMUL16rri_NF },
1747+
{ X86::IMUL16rri8, X86::IMUL16rri8_NF },
17481748
{ X86::IMUL32m, X86::IMUL32m_NF },
17491749
{ X86::IMUL32r, X86::IMUL32r_NF },
17501750
{ X86::IMUL32rm, X86::IMUL32rm_NF },
17511751
{ X86::IMUL32rm_ND, X86::IMUL32rm_NF_ND },
1752-
{ X86::IMUL32rmi8, X86::IMUL32rmi8_NF },
17531752
{ X86::IMUL32rmi, X86::IMUL32rmi_NF },
1753+
{ X86::IMUL32rmi8, X86::IMUL32rmi8_NF },
17541754
{ X86::IMUL32rr, X86::IMUL32rr_NF },
17551755
{ X86::IMUL32rr_ND, X86::IMUL32rr_NF_ND },
1756-
{ X86::IMUL32rri8, X86::IMUL32rri8_NF },
17571756
{ X86::IMUL32rri, X86::IMUL32rri_NF },
1757+
{ X86::IMUL32rri8, X86::IMUL32rri8_NF },
17581758
{ X86::IMUL64m, X86::IMUL64m_NF },
17591759
{ X86::IMUL64r, X86::IMUL64r_NF },
17601760
{ X86::IMUL64rm, X86::IMUL64rm_NF },
@@ -1813,29 +1813,29 @@ static const X86TableEntry X86NFTransformTable[] = {
18131813
{ X86::NEG8m_ND, X86::NEG8m_NF_ND },
18141814
{ X86::NEG8r, X86::NEG8r_NF },
18151815
{ X86::NEG8r_ND, X86::NEG8r_NF_ND },
1816+
{ X86::OR16mi, X86::OR16mi_NF },
18161817
{ X86::OR16mi8, X86::OR16mi8_NF },
18171818
{ X86::OR16mi8_ND, X86::OR16mi8_NF_ND },
1818-
{ X86::OR16mi, X86::OR16mi_NF },
18191819
{ X86::OR16mi_ND, X86::OR16mi_NF_ND },
18201820
{ X86::OR16mr, X86::OR16mr_NF },
18211821
{ X86::OR16mr_ND, X86::OR16mr_NF_ND },
1822+
{ X86::OR16ri, X86::OR16ri_NF },
18221823
{ X86::OR16ri8, X86::OR16ri8_NF },
18231824
{ X86::OR16ri8_ND, X86::OR16ri8_NF_ND },
1824-
{ X86::OR16ri, X86::OR16ri_NF },
18251825
{ X86::OR16ri_ND, X86::OR16ri_NF_ND },
18261826
{ X86::OR16rm, X86::OR16rm_NF },
18271827
{ X86::OR16rm_ND, X86::OR16rm_NF_ND },
18281828
{ X86::OR16rr, X86::OR16rr_NF },
18291829
{ X86::OR16rr_ND, X86::OR16rr_NF_ND },
1830+
{ X86::OR32mi, X86::OR32mi_NF },
18301831
{ X86::OR32mi8, X86::OR32mi8_NF },
18311832
{ X86::OR32mi8_ND, X86::OR32mi8_NF_ND },
1832-
{ X86::OR32mi, X86::OR32mi_NF },
18331833
{ X86::OR32mi_ND, X86::OR32mi_NF_ND },
18341834
{ X86::OR32mr, X86::OR32mr_NF },
18351835
{ X86::OR32mr_ND, X86::OR32mr_NF_ND },
1836+
{ X86::OR32ri, X86::OR32ri_NF },
18361837
{ X86::OR32ri8, X86::OR32ri8_NF },
18371838
{ X86::OR32ri8_ND, X86::OR32ri8_NF_ND },
1838-
{ X86::OR32ri, X86::OR32ri_NF },
18391839
{ X86::OR32ri_ND, X86::OR32ri_NF_ND },
18401840
{ X86::OR32rm, X86::OR32rm_NF },
18411841
{ X86::OR32rm_ND, X86::OR32rm_NF_ND },
@@ -2159,29 +2159,29 @@ static const X86TableEntry X86NFTransformTable[] = {
21592159
{ X86::SHRD64rrCL_ND, X86::SHRD64rrCL_NF_ND },
21602160
{ X86::SHRD64rri8, X86::SHRD64rri8_NF },
21612161
{ X86::SHRD64rri8_ND, X86::SHRD64rri8_NF_ND },
2162+
{ X86::SUB16mi, X86::SUB16mi_NF },
21622163
{ X86::SUB16mi8, X86::SUB16mi8_NF },
21632164
{ X86::SUB16mi8_ND, X86::SUB16mi8_NF_ND },
2164-
{ X86::SUB16mi, X86::SUB16mi_NF },
21652165
{ X86::SUB16mi_ND, X86::SUB16mi_NF_ND },
21662166
{ X86::SUB16mr, X86::SUB16mr_NF },
21672167
{ X86::SUB16mr_ND, X86::SUB16mr_NF_ND },
2168+
{ X86::SUB16ri, X86::SUB16ri_NF },
21682169
{ X86::SUB16ri8, X86::SUB16ri8_NF },
21692170
{ X86::SUB16ri8_ND, X86::SUB16ri8_NF_ND },
2170-
{ X86::SUB16ri, X86::SUB16ri_NF },
21712171
{ X86::SUB16ri_ND, X86::SUB16ri_NF_ND },
21722172
{ X86::SUB16rm, X86::SUB16rm_NF },
21732173
{ X86::SUB16rm_ND, X86::SUB16rm_NF_ND },
21742174
{ X86::SUB16rr, X86::SUB16rr_NF },
21752175
{ X86::SUB16rr_ND, X86::SUB16rr_NF_ND },
2176+
{ X86::SUB32mi, X86::SUB32mi_NF },
21762177
{ X86::SUB32mi8, X86::SUB32mi8_NF },
21772178
{ X86::SUB32mi8_ND, X86::SUB32mi8_NF_ND },
2178-
{ X86::SUB32mi, X86::SUB32mi_NF },
21792179
{ X86::SUB32mi_ND, X86::SUB32mi_NF_ND },
21802180
{ X86::SUB32mr, X86::SUB32mr_NF },
21812181
{ X86::SUB32mr_ND, X86::SUB32mr_NF_ND },
2182+
{ X86::SUB32ri, X86::SUB32ri_NF },
21822183
{ X86::SUB32ri8, X86::SUB32ri8_NF },
21832184
{ X86::SUB32ri8_ND, X86::SUB32ri8_NF_ND },
2184-
{ X86::SUB32ri, X86::SUB32ri_NF },
21852185
{ X86::SUB32ri_ND, X86::SUB32ri_NF_ND },
21862186
{ X86::SUB32rm, X86::SUB32rm_NF },
21872187
{ X86::SUB32rm_ND, X86::SUB32rm_NF_ND },
@@ -2217,29 +2217,29 @@ static const X86TableEntry X86NFTransformTable[] = {
22172217
{ X86::TZCNT32rr, X86::TZCNT32rr_NF },
22182218
{ X86::TZCNT64rm, X86::TZCNT64rm_NF },
22192219
{ X86::TZCNT64rr, X86::TZCNT64rr_NF },
2220+
{ X86::XOR16mi, X86::XOR16mi_NF },
22202221
{ X86::XOR16mi8, X86::XOR16mi8_NF },
22212222
{ X86::XOR16mi8_ND, X86::XOR16mi8_NF_ND },
2222-
{ X86::XOR16mi, X86::XOR16mi_NF },
22232223
{ X86::XOR16mi_ND, X86::XOR16mi_NF_ND },
22242224
{ X86::XOR16mr, X86::XOR16mr_NF },
22252225
{ X86::XOR16mr_ND, X86::XOR16mr_NF_ND },
2226+
{ X86::XOR16ri, X86::XOR16ri_NF },
22262227
{ X86::XOR16ri8, X86::XOR16ri8_NF },
22272228
{ X86::XOR16ri8_ND, X86::XOR16ri8_NF_ND },
2228-
{ X86::XOR16ri, X86::XOR16ri_NF },
22292229
{ X86::XOR16ri_ND, X86::XOR16ri_NF_ND },
22302230
{ X86::XOR16rm, X86::XOR16rm_NF },
22312231
{ X86::XOR16rm_ND, X86::XOR16rm_NF_ND },
22322232
{ X86::XOR16rr, X86::XOR16rr_NF },
22332233
{ X86::XOR16rr_ND, X86::XOR16rr_NF_ND },
2234+
{ X86::XOR32mi, X86::XOR32mi_NF },
22342235
{ X86::XOR32mi8, X86::XOR32mi8_NF },
22352236
{ X86::XOR32mi8_ND, X86::XOR32mi8_NF_ND },
2236-
{ X86::XOR32mi, X86::XOR32mi_NF },
22372237
{ X86::XOR32mi_ND, X86::XOR32mi_NF_ND },
22382238
{ X86::XOR32mr, X86::XOR32mr_NF },
22392239
{ X86::XOR32mr_ND, X86::XOR32mr_NF_ND },
2240+
{ X86::XOR32ri, X86::XOR32ri_NF },
22402241
{ X86::XOR32ri8, X86::XOR32ri8_NF },
22412242
{ X86::XOR32ri8_ND, X86::XOR32ri8_NF_ND },
2242-
{ X86::XOR32ri, X86::XOR32ri_NF },
22432243
{ X86::XOR32ri_ND, X86::XOR32ri_NF_ND },
22442244
{ X86::XOR32rm, X86::XOR32rm_NF },
22452245
{ X86::XOR32rm_ND, X86::XOR32rm_NF_ND },

llvm/utils/TableGen/X86InstrMappingEmitter.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -275,26 +275,26 @@ void X86InstrMappingEmitter::emitNFTransformTable(
275275
const Record *Rec = Inst->TheDef;
276276
if (!isInteresting(Rec))
277277
continue;
278-
std::string Name = Rec->getName().str();
279-
auto Pos = Name.find("_NF");
280-
if (Pos == std::string::npos)
278+
StringRef Name = Rec->getName();
279+
if (Name.contains("_NF"))
281280
continue;
282281

283-
if (auto *NewRec = Records.getDef(Name.erase(Pos, 3))) {
282+
if (auto *NewRec = Name.consume_back("_ND")
283+
? Records.getDef(Name.str() + "_NF_ND")
284+
: Records.getDef(Name.str() + "_NF")) {
284285
#ifndef NDEBUG
285286
auto ClobberEFLAGS = [](const Record *R) {
286287
return llvm::any_of(
287288
R->getValueAsListOfDefs("Defs"),
288289
[](const Record *Def) { return Def->getName() == "EFLAGS"; });
289290
};
290-
if (ClobberEFLAGS(Rec))
291+
if (ClobberEFLAGS(NewRec))
291292
report_fatal_error("EFLAGS should not be clobbered by " +
292-
Rec->getName());
293-
if (!ClobberEFLAGS(NewRec))
294-
report_fatal_error("EFLAGS should be clobbered by " +
295293
NewRec->getName());
294+
if (!ClobberEFLAGS(Rec))
295+
report_fatal_error("EFLAGS should be clobbered by " + Rec->getName());
296296
#endif
297-
Table.emplace_back(&Target.getInstruction(NewRec), Inst);
297+
Table.emplace_back(Inst, &Target.getInstruction(NewRec));
298298
}
299299
}
300300
printTable(Table, "X86NFTransformTable", "GET_X86_NF_TRANSFORM_TABLE", OS);

0 commit comments

Comments
 (0)