[llvm] [RISCV] Add missing COPY code motion when folding vmerge into mask (PR #176077)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 14 22:27:50 PST 2026
================
@@ -181,3 +181,41 @@ body: |
%mask:vmv0 = COPY $v0
PseudoVSE8_V_M1 %copy, $noreg, %avl, 5 /* e8 */
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %copy, %mask, %avl, 5 /* e32 */
+...
+---
+name: true_copy_code_motion
+body: |
+ ; CHECK-LABEL: name: true_copy_code_motion
+ ; CHECK: bb.0:
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
+ ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vrm8nov0 = IMPLICIT_DEF
+ ; CHECK-NEXT: PseudoBR %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1:
+ ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vmv0 = IMPLICIT_DEF
+ ; CHECK-NEXT: early-clobber %7:vrm8nov0 = PseudoVZEXT_VF8_M8_MASK undef [[DEF1]], killed undef [[DEF]], [[DEF2]], 16, 6 /* e64 */, 1 /* ta, mu */
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:vrm8nov0 = COPY %7
+ ; CHECK-NEXT: %a123:vrm8 = COPY [[COPY]]
+ ; CHECK-NEXT: %b123:vrm8nov0 = COPY %a123
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vrm8 = COPY killed %7
+ ; CHECK-NEXT: PseudoRET
+ bb.0:
+ successors: %bb.1
+
+ %326:vr = IMPLICIT_DEF
+ %327:vrm8nov0 = IMPLICIT_DEF
+ PseudoBR %bb.1
+
+ bb.1:
+
+ early-clobber %102:vrm8 = PseudoVZEXT_VF8_M8 undef $noreg, killed undef %326, 16, 6 /* e64 */, 3 /* ta, ma */
+ %123:vrm8nov0 = COPY %102
+ %a123:vrm8 = COPY %123
+ %b123:vrm8nov0 = COPY %a123
+ %124:vmv0 = IMPLICIT_DEF
+ %121:vrm8nov0 = PseudoVMERGE_VVM_M8 undef $noreg, killed undef %327, killed undef %b123, undef %124, 16, 6 /* e64 */
+ %125:vrm8 = COPY killed %121
----------------
lukel97 wrote:
Nit, can you remove the early-clobber/killed/undef flags and just use $noreg for the operands other than the mask?
https://github.com/llvm/llvm-project/pull/176077
More information about the llvm-commits
mailing list