I found the SymbolDCE::computeLiveness choose to use a pretty small length of worklist :
LogicalResult SymbolDCE::computeLiveness(Operation *symbolTableOp,
SymbolTableCollection &symbolTable,
bool symbolTableIsHidden,
DenseSet<Operation *> &liveSymbols) {
// A worklist of live operations to propagate uses from.
SmallVector<Operation *, 16> worklist;
i don’t kown why use this fixed-threshold of SmallVector. In real mlir dialects, somehow i think we always have a large number of operations in a block?