A lots of SVE instructions require the dst register to be the same with first source register to save encodings. For example `add z18.b, p0/m, z18.b, z17.b`. In order to meet this requirement, and save the value of the source register, we have to insert a `mov` instruction before this kind of instructions. For example:
```
mov z16.b, z18.b // save the value of z18
add z16.b, p0/m, z16.b, z17.b
```
This `mov` may be inserted manually or via Register allocator.
The `mov` instruction can be optimized as an SVE `movprfx` instruction for better performance. For the above example, it becomes:
```
movprfx z16, z18
add z16.b, p0/m, z16.b, z17.b
```
The above two instructions will be fused as if one instruction in hardware, like:
```
add z16.b, p0/m, z18.b, z17.b
```
```
mov z16.b, z18.b // save the value of z18
add z16.b, p0/m, z16.b, z17.b
```
This `mov` may be inserted manually or via Register allocator.
The `mov` instruction can be optimized as an SVE `movprfx` instruction for better performance. For the above example, it becomes:
```
movprfx z16, z18
add z16.b, p0/m, z16.b, z17.b
```
The above two instructions will be fused as if one instruction in hardware, like:
```
add z16.b, p0/m, z18.b, z17.b
```