void TR_LocalLiveRangeReduction::populatePotentialDeps(TR_TreeRefInfo *treeRefInfo,TR::Node *node) { TR::ILOpCode &opCode = node->getOpCode(); if (node->getOpCode().hasSymbolReference()) { TR::SymbolReference *symRef = node->getSymbolReference(); int32_t symRefNum = symRef->getReferenceNumber(); //set defSym - all symbols that might be written if (opCode.isCall() || opCode.isResolveCheck()|| opCode.isStore() || node->mightHaveVolatileSymbolReference()) { bool isCallDirect = false; if (node->getOpCode().isCallDirect()) isCallDirect = true; if (!symRef->getUseDefAliases(isCallDirect).isZero(comp())) { TR::SparseBitVector useDefAliases(comp()->allocator()); symRef->getUseDefAliases(isCallDirect).getAliases(useDefAliases); TR::SparseBitVector::Cursor aliasCursor(useDefAliases); for (aliasCursor.SetToFirstOne(); aliasCursor.Valid(); aliasCursor.SetToNextOne()) { int32_t nextAlias = aliasCursor; treeRefInfo->getDefSym()->set(nextAlias); } } if (opCode.isStore()) treeRefInfo->getDefSym()->set(symRefNum); } //set useSym - all symbols that are used if (opCode.canRaiseException()) { TR::SparseBitVector useAliases(comp()->allocator()); symRef->getUseonlyAliases().getAliases(useAliases); { TR::SparseBitVector::Cursor aliasesCursor(useAliases); for (aliasesCursor.SetToFirstOne(); aliasesCursor.Valid(); aliasesCursor.SetToNextOne()) { int32_t nextAlias = aliasesCursor; treeRefInfo->getUseSym()->set(nextAlias); } } } if (opCode.isLoadVar() || (opCode.getOpCodeValue() == TR::loadaddr)) { treeRefInfo->getUseSym()->set(symRefNum); } } for (int32_t i = 0; i < node->getNumChildren(); i++) { TR::Node *child = node->getChild(i); //don't recurse over references (nodes which are not the first reference) // if (child->getReferenceCount()==1 || treeRefInfo->getFirstRefNodesList()->find(child)) populatePotentialDeps(treeRefInfo,child ); } return; }
const Cursor& Cursor::fromType(Cursor::Type type) { switch (type) { case Cursor::Pointer: return pointerCursor(); case Cursor::Cross: return crossCursor(); case Cursor::Hand: return handCursor(); case Cursor::IBeam: return iBeamCursor(); case Cursor::Wait: return waitCursor(); case Cursor::Help: return helpCursor(); case Cursor::EastResize: return eastResizeCursor(); case Cursor::NorthResize: return northResizeCursor(); case Cursor::NorthEastResize: return northEastResizeCursor(); case Cursor::NorthWestResize: return northWestResizeCursor(); case Cursor::SouthResize: return southResizeCursor(); case Cursor::SouthEastResize: return southEastResizeCursor(); case Cursor::SouthWestResize: return southWestResizeCursor(); case Cursor::WestResize: return westResizeCursor(); case Cursor::NorthSouthResize: return northSouthResizeCursor(); case Cursor::EastWestResize: return eastWestResizeCursor(); case Cursor::NorthEastSouthWestResize: return northEastSouthWestResizeCursor(); case Cursor::NorthWestSouthEastResize: return northWestSouthEastResizeCursor(); case Cursor::ColumnResize: return columnResizeCursor(); case Cursor::RowResize: return rowResizeCursor(); case Cursor::MiddlePanning: return middlePanningCursor(); case Cursor::EastPanning: return eastPanningCursor(); case Cursor::NorthPanning: return northPanningCursor(); case Cursor::NorthEastPanning: return northEastPanningCursor(); case Cursor::NorthWestPanning: return northWestPanningCursor(); case Cursor::SouthPanning: return southPanningCursor(); case Cursor::SouthEastPanning: return southEastPanningCursor(); case Cursor::SouthWestPanning: return southWestPanningCursor(); case Cursor::WestPanning: return westPanningCursor(); case Cursor::Move: return moveCursor(); case Cursor::VerticalText: return verticalTextCursor(); case Cursor::Cell: return cellCursor(); case Cursor::ContextMenu: return contextMenuCursor(); case Cursor::Alias: return aliasCursor(); case Cursor::Progress: return progressCursor(); case Cursor::NoDrop: return noDropCursor(); case Cursor::Copy: return copyCursor(); case Cursor::None: return noneCursor(); case Cursor::NotAllowed: return notAllowedCursor(); case Cursor::ZoomIn: return zoomInCursor(); case Cursor::ZoomOut: return zoomOutCursor(); case Cursor::Grab: return grabCursor(); case Cursor::Grabbing: return grabbingCursor(); case Cursor::Custom: ASSERT_NOT_REACHED(); } return pointerCursor(); }