И constant propagation для объекта справа, и анализировать operator= объекта слева, чтобы были заполнены все поля, и именно копированием (либо простым, либо заинлайненным, сводящимся к простому)
а заглянуть что там генерируется memset-ом не судьба? Ну или почитать. Не в курсе, что memmove/memset — это уже давно intrinsic функции в компиляторах?
в цикле, наверное? То есть то, что это одна инструкция — это не важно по факту. Т.к. инструкции не-sse кода, обнуляющего память, тоже декодируются и помещаются в кеш инструкций целиком. Конвейер — не узкое место и в случае sse и в случае без sse.
пишут, что доступ к данным, которые уже есть в L1 кеше, быстрее с AVX (чуть медленнее с SSE). Но при заполнении больших буферов, я так понимаю, разницы со строковой инструкцией уже нет