Constructing SVector with a loop

On 1.12, no effects are needed:

julia> function SFibA(::Val{S}) where S
           values = MVector{S, Int}(undef)
           @inbounds for i in 1:S
               values[i] = (i == 1 || i == 2) ? 1 : values[i-1] + values[i-2]
           end
           SVector{S}(values)
       end
SFibA (generic function with 1 method)

julia> @code_llvm debuginfo=:none SFibA(Val(4))
; Function Signature: SFibA(Base.Val{4})
define void @julia_SFibA_5700(ptr noalias nocapture noundef nonnull sret([1 x [4 x i64]]) align 8 dereferenceable(32) %sret_return) #0 {
L61.3:
  store <4 x i64> <i64 1, i64 1, i64 2, i64 3>, ptr %sret_return, align 8
  ret void
}

Looks like it works up to size 12:

julia> @code_llvm debuginfo=:none SFibA(Val(12))
; Function Signature: SFibA(Base.Val{12})
define void @julia_SFibA_5928(ptr noalias nocapture noundef nonnull sret([1 x [12 x i64]]) align 8 dereferenceable(96) %sret_return) #0 {
L61.11:
  store <4 x i64> <i64 1, i64 1, i64 2, i64 3>, ptr %sret_return, align 8
  %"new::SArray.sroa.0.sroa.5.0.sret_return.sroa_idx" = getelementptr inbounds i8, ptr %sret_return, i64 32
  store <4 x i64> <i64 5, i64 8, i64 13, i64 21>, ptr %"new::SArray.sroa.0.sroa.5.0.sret_return.sroa_idx", align 8
  %"new::SArray.sroa.0.sroa.9.0.sret_return.sroa_idx" = getelementptr inbounds i8, ptr %sret_return, i64 64
  store <4 x i64> <i64 34, i64 55, i64 89, i64 144>, ptr %"new::SArray.sroa.0.sroa.9.0.sret_return.sroa_idx", align 8
  ret void
}