Expr phiRelatedFind(Expr a) {
		final ArrayList stack = new ArrayList();

		while (a != null) {
			Object p = phiRelated.get(a);

			if ((p == a) || (p == null)) {
				// Path compression.
				final Iterator iter = stack.iterator();

				while (iter.hasNext()) {
					p = iter.next();

					if (p != a) {
						phiRelated.put(p, a);
					}
				}

				return a;
			}

			stack.add(a);
			a = (Expr) p;
		}

		return null;
	}