Because throw has a ton of complicated crap in it that gets put into the function body. When you lock it behind a @noinline function, the optimizer can ignore it, and the function body itself doesn’t take as much room in the instruction cache (because the function contains less instructions).
4 Likes