I'm not sure why this should be a problem, it just shows attention to performance in my opinion.
Either you keep adding intrisics to the compiler, or outsource it to an external Assembler.
Even managed languages have bytecode Assemblers available.
Also I'd like to know what you would consider an appropriate amount of assembly code.
Optimized C libraries like compressors or security have assembly implementations as well. I'm not sure why using assembler should be considered a signal of a defect rather than a proof of optimization. There's really nothing wrong in using assembly to write a bytes.Index version optimized for AVX2.
Well, actually, they could, it's just not worth pattern matching because it occurs so infrequently.
"but history has shown that things like autovectorization are too fragile and can't be relied upon."
Errr, i'd say the opposite. History has shown that good autovectorizing compilers can come pretty damn close to whatever you want.
Usually the only issue is that they may insert too many runtime checks, and that's easily solvable.
The large majority of performance-sensitive libraries I know of rely on carefully written native code (C, C++), with a mixture of assembly and/or intrinsics. This, to me, is a failure to concretize autovectorization from textbooks into an industry-accepted solution.
Intrinsics.
There's basically zero benefit to coding this stuff in assembly. Many standard libraries prefer intrinsics, because there's basically zero benefit to writing this stuff in assembly and many drawbacks from an optimization perspective.