private void computeWeight() {
			weight = 0.0F;

			final Iterator iter = defs.iterator();

			// Look at all(?) of the definitions of the IGNode
			while (iter.hasNext()) {
				final LocalExpr def = (LocalExpr) iter.next();

				weight += blockWeight(def.block());

				final Iterator uses = def.uses().iterator();

				// If the variable is used as an operand to a PhiJoinStmt,
				// find the predacessor block to the PhiJoinStmt in which the
				// variable occurs and add the weight of that block to the
				// running total weight.
				while (uses.hasNext()) {
					final LocalExpr use = (LocalExpr) uses.next();

					if (use.parent() instanceof PhiJoinStmt) {
						final PhiJoinStmt phi = (PhiJoinStmt) use.parent();

						final Iterator preds = cfg.preds(phi.block())
								.iterator();

						while (preds.hasNext()) {
							final Block pred = (Block) preds.next();
							final Expr op = phi.operandAt(pred);

							if (use == op) {
								weight += blockWeight(pred);
								break;
							}
						}

					} else if (use.parent() instanceof PhiCatchStmt) {
						// If the variable is used in a PhiCatchStmt, add the
						// weight of the block in which the variable is defined
						// to
						// the running total.
						weight += blockWeight(use.def().block());

					} else {
						// Just add in the weight of the block in which the
						// variable is used.
						weight += blockWeight(use.block());
					}
				}
			}
		}