1212// ===----------------------------------------------------------------------===//
1313
1414#include " SPIRVDuplicatesTracker.h"
15+ #include " SPIRVInstrInfo.h"
1516
1617#define DEBUG_TYPE " build-dep-graph"
1718
1819using namespace llvm ;
1920
2021template <typename T>
2122void SPIRVGeneralDuplicatesTracker::prebuildReg2Entry (
22- SPIRVDuplicatesTracker<T> &DT, SPIRVReg2EntryTy &Reg2Entry) {
23+ SPIRVDuplicatesTracker<T> &DT, SPIRVReg2EntryTy &Reg2Entry,
24+ const SPIRVInstrInfo *TII) {
2325 for (auto &TPair : DT.getAllUses ()) {
2426 for (auto &RegPair : TPair.second ) {
2527 const MachineFunction *MF = RegPair.first ;
2628 Register R = RegPair.second ;
2729 MachineInstr *MI = MF->getRegInfo ().getUniqueVRegDef (R);
28- if (!MI)
30+ if (!MI || (TPair. second . getIsConst () && !TII-> isConstantInstr (*MI)) )
2931 continue ;
3032 Reg2Entry[&MI->getOperand (0 )] = &TPair.second ;
3133 }
3234 }
3335}
3436
3537void SPIRVGeneralDuplicatesTracker::buildDepsGraph (
36- std::vector<SPIRV::DTSortableEntry *> &Graph,
38+ std::vector<SPIRV::DTSortableEntry *> &Graph, const SPIRVInstrInfo *TII,
3739 MachineModuleInfo *MMI = nullptr ) {
3840 SPIRVReg2EntryTy Reg2Entry;
39- prebuildReg2Entry (TT, Reg2Entry);
40- prebuildReg2Entry (CT, Reg2Entry);
41- prebuildReg2Entry (GT, Reg2Entry);
42- prebuildReg2Entry (FT, Reg2Entry);
43- prebuildReg2Entry (AT, Reg2Entry);
44- prebuildReg2Entry (MT, Reg2Entry);
45- prebuildReg2Entry (ST, Reg2Entry);
41+ prebuildReg2Entry (TT, Reg2Entry, TII );
42+ prebuildReg2Entry (CT, Reg2Entry, TII );
43+ prebuildReg2Entry (GT, Reg2Entry, TII );
44+ prebuildReg2Entry (FT, Reg2Entry, TII );
45+ prebuildReg2Entry (AT, Reg2Entry, TII );
46+ prebuildReg2Entry (MT, Reg2Entry, TII );
47+ prebuildReg2Entry (ST, Reg2Entry, TII );
4648
4749 for (auto &Op2E : Reg2Entry) {
4850 SPIRV::DTSortableEntry *E = Op2E.second ;
@@ -65,20 +67,19 @@ void SPIRVGeneralDuplicatesTracker::buildDepsGraph(
6567 if (MI->getOpcode () == SPIRV::OpConstantFunctionPointerINTEL && i == 2 )
6668 continue ;
6769 MachineOperand *RegOp = &VRegDef->getOperand (0 );
68- LLVM_DEBUG ({
69- if (Reg2Entry.count (RegOp) == 0 &&
70- (MI->getOpcode () != SPIRV::OpVariable || i != 3 )) {
71- dbgs () << " Unexpected pattern while building a dependency "
72- " graph.\n Instruction: " ;
73- MI->print (dbgs ());
74- dbgs () << " Operand: " ;
75- Op.print (dbgs ());
76- dbgs () << " \n Operand definition: " ;
77- VRegDef->print (dbgs ());
78- }
79- });
80- assert ((MI->getOpcode () == SPIRV::OpVariable && i == 3 ) ||
81- Reg2Entry.count (RegOp));
70+ if (Reg2Entry.count (RegOp) == 0 &&
71+ (MI->getOpcode () != SPIRV::OpVariable || i != 3 )) {
72+ std::string DiagMsg;
73+ raw_string_ostream OS (DiagMsg);
74+ OS << " Unexpected pattern while building a dependency "
75+ " graph.\n Instruction: " ;
76+ MI->print (OS);
77+ OS << " Operand: " ;
78+ Op.print (OS);
79+ OS << " \n Operand definition: " ;
80+ VRegDef->print (OS);
81+ report_fatal_error (DiagMsg.c_str ());
82+ }
8283 if (Reg2Entry.count (RegOp))
8384 E->addDep (Reg2Entry[RegOp]);
8485 }
0 commit comments