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

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions