Skip to content

JIT: SVE Cleanup - Simplify emitIns_Mov code when emitting RMW intrinsics #104841

@TIHan

Description

@TIHan

In hwintrinsiccodegenarm64.cpp, we see the following code which handles RMW intrinsics:

                if (targetReg != op2Reg)
                {
                    assert(targetReg != op1Reg);
                    GetEmitter()->emitIns_Mov(INS_sve_mov, emitTypeSize(node), targetReg, op2Reg, /* canSkip */ true);
                }

It can be simplified to just:

                assert(targetReg != op1Reg);
                GetEmitter()->emitIns_Mov(INS_sve_mov, emitTypeSize(node), targetReg, op2Reg, /* canSkip */ true);

Because emitIns_Mov will not emit a mov if targetReg == op2Reg.

There are similar ones as well that are not INS_sve_mov related, such as:

                if (targetReg != op2Reg)
                {
                    assert(targetReg != op1Reg);
                    assert(targetReg != op3Reg);
                    GetEmitter()->emitIns_Mov(INS_mov, emitTypeSize(node), targetReg, op2Reg,
                                              /* canSkip */ true);
                }

which can be:

                assert(targetReg != op1Reg);
                assert(targetReg != op3Reg);
                GetEmitter()->emitIns_Mov(INS_mov, emitTypeSize(node), targetReg, op2Reg,
                                          /* canSkip */ true);

As a consideration, not part of this issue, but perhaps adding a new function emitIns_MovIfNeeded that simply wraps emitIns_Mov with the canSkip set to true would be clearer.

Metadata

Metadata

Assignees

Labels

Priority:3Work that is nice to havearch-arm64area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIarm-sveWork related to arm64 SVE/SVE2 supportin-prThere is an active PR which will close this issue when it is merged

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions