Starting Point

void vsum(vec_ptr v, int *dest) {
	int i;
	*dest = 0;
	for (i = 0; i < vec_len(v); i++) {
		int val;
		get_vec_element(v, i, &val);
		*dest += val;
	}
}

Letting the Compiler Do Its Job (vsum1)

Manual High-Level Optimizations

Manual Loop Invariant Code Motion

Manual Inlining + LICM (vsum3)

Reducing Memory References (vsum4)