mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[silcodemotion] For now stash a pointer to EnumCaseDataflowContext in each of the block states that we are tracking.
In a subsequent commit, I will change this to use a trailing objects implementation so we can just use pointer arithmetic to find the offset. But for now I am going for simplicity since this is a bug fix. rdar://36032876
This commit is contained in:
@@ -118,6 +118,7 @@ using EnumBBCaseList =
|
||||
/// Class that performs enum tag state dataflow on the given BB.
|
||||
class BBEnumTagDataflowState
|
||||
: public SILInstructionVisitor<BBEnumTagDataflowState, bool> {
|
||||
EnumCaseDataflowContext *Context;
|
||||
NullablePtr<SILBasicBlock> BB;
|
||||
|
||||
using ValueToCaseSmallBlotMapVectorTy =
|
||||
@@ -137,11 +138,7 @@ public:
|
||||
LLVM_ATTRIBUTE_DEPRECATED(void dump() const LLVM_ATTRIBUTE_USED,
|
||||
"only for use within the debugger");
|
||||
|
||||
bool init(SILBasicBlock *NewBB) {
|
||||
assert(NewBB && "NewBB should not be null");
|
||||
BB = NewBB;
|
||||
return true;
|
||||
}
|
||||
bool init(EnumCaseDataflowContext &Context, SILBasicBlock *NewBB);
|
||||
|
||||
SILBasicBlock *getBB() { return BB.get(); }
|
||||
|
||||
@@ -200,7 +197,7 @@ public:
|
||||
BBToStateVec.resize(PO->size());
|
||||
unsigned RPOIdx = 0;
|
||||
for (SILBasicBlock *BB : PO->getReversePostOrder()) {
|
||||
BBToStateVec[RPOIdx].init(BB);
|
||||
BBToStateVec[RPOIdx].init(*this, BB);
|
||||
++RPOIdx;
|
||||
}
|
||||
}
|
||||
@@ -757,6 +754,14 @@ void BBEnumTagDataflowState::dump() const {
|
||||
#endif
|
||||
}
|
||||
|
||||
bool BBEnumTagDataflowState::init(EnumCaseDataflowContext &NewContext,
|
||||
SILBasicBlock *NewBB) {
|
||||
assert(NewBB && "NewBB should not be null");
|
||||
Context = &NewContext;
|
||||
BB = NewBB;
|
||||
return true;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Generic Sinking Code
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Reference in New Issue
Block a user