Optimization must not change the observable behavior of the code. The <Xyz as Clone>::clone() function may have side effects like interacting with the file system or the stdio. Same applies if the Xyz has a Drop impl with side effect. Eliminating execution of code with side effect change the observable behavior of the code.
If clone gets inlined, and the compiler can tell that there are no side effects when cloning (e.g. xyz is just a bunch of integers) then redundant work should be optimized out.