What confuses me is that there's a difference between how `size(x, 1)` and `length(x)` are optimized for vectors, even though it seems like they should be subject to the same caveats. If I have:

```julia
julia> f(x) = for i = 1:size(x, 1); @inbounds x[i] += length(x); end

julia> g(x) = for i = 1:size(x, 1); @inbounds x[i] += size(x, 1); end
```

then LLVM vectorizes `f(x)` but not `g(x)`.