[PATCH] D131957: Add a baseline test for DXXXXX
Alexander Richardson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 16 05:02:00 PDT 2022
arichardson created this revision.
Herald added subscribers: atanasyan, jrtc27, sdardis.
Herald added a project: All.
arichardson requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This test shows that the save of MIPS $zero to a callee-saved register
is not elided by the machine-cp pass.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131957
Files:
llvm/test/CodeGen/AArch64/avoid-zero-copy.mir
llvm/test/CodeGen/Mips/avoid-zero-copy.mir
Index: llvm/test/CodeGen/Mips/avoid-zero-copy.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/Mips/avoid-zero-copy.mir
@@ -0,0 +1,45 @@
+# Check that we can remove the redundant save of constant registers such as $zero
+# RUN: llc -mtriple=mips64-unknown-freebsd %s -start-before=machine-cp -o - | FileCheck %s --check-prefix ASM
+# RUN: llc -mtriple=mips64-unknown-freebsd %s -verify-machineinstrs -run-pass=machine-cp -o - | FileCheck %s
+--- |
+ target triple = "mips64-unknown-freebsd"
+ define i32 @a() nounwind {
+ ; ASM-LABEL: a:
+ ; ASM: # %bb.0:
+ ; ASM-NEXT: daddiu $sp, $sp, -16
+ ; ASM-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
+ ; ASM-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
+ ; ASM-NEXT: move $16, $zero
+ ; ASM-NEXT: jalr $25
+ ; ASM-NEXT: move $4, $zero
+ ; ASM-NEXT: move $4, $16
+ ; ASM-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
+ ; ASM-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
+ ; ASM-NEXT: jr $ra
+ ; ASM-NEXT: daddiu $sp, $sp, 16
+ ret i32 0
+ }
+...
+---
+name: a
+body: |
+ bb.0 (%ir-block.0):
+ liveins: $a0_64, $t9_64, $ra_64, $fp_64, $gp_64
+ ; CHECK-LABEL: name: a
+ ; CHECK: liveins: $a0_64, $t9_64, $ra_64, $fp_64, $gp_64
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
+ ; CHECK-NEXT: renamable $s0_64 = COPY $zero_64
+ ; CHECK-NEXT: $a0_64 = COPY $zero_64
+ ; CHECK-NEXT: JALR64Pseudo $t9_64, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit $gp_64, implicit-def $sp, implicit-def $v0
+ ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
+ ; CHECK-NEXT: $a0_64 = COPY killed renamable $s0_64
+ ; CHECK-NEXT: PseudoReturn64 undef $ra_64, implicit $v0_64, implicit killed $a0_64
+ ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
+ renamable $s0_64 = COPY $zero_64
+ $a0_64 = COPY renamable $s0_64
+ JALR64Pseudo $t9_64, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit $gp_64, implicit-def $sp, implicit-def $v0
+ ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
+ $a0_64 = COPY killed renamable $s0_64
+ PseudoReturn64 undef $ra_64, implicit $v0_64, implicit killed $a0_64
+...
Index: llvm/test/CodeGen/AArch64/avoid-zero-copy.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AArch64/avoid-zero-copy.mir
@@ -0,0 +1,40 @@
+# Check that we can remove the redundant save of constant registers such as $wzr
+# RUN: llc -mtriple=aarch64-unknown-linux %s -start-before=machine-cp -o - | FileCheck %s --check-prefix ASM
+# RUN: llc -mtriple=aarch64-unknown-linux %s -run-pass=machine-cp -o - | FileCheck %s
+--- |
+ target triple = "aarch64-unknown-linux"
+ declare i32 @bar(i32) nounwind
+ define i32 @foo() nounwind {
+ ; ASM-LABEL: foo:
+ ; ASM: // %bb.0:
+ ; ASM-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
+ ; ASM-NEXT: mov w0, wzr
+ ; ASM-NEXT: mov w19, wzr
+ ; ASM-NEXT: bl bar
+ ; ASM-NEXT: mov w0, w19
+ ; ASM-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
+ ; ASM-NEXT: ret
+ call i32 @bar(i32 0)
+ ret i32 0
+ }
+...
+---
+name: foo
+body: |
+ bb.0 (%ir-block.0):
+ ; CHECK-LABEL: name: foo
+ ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
+ ; CHECK-NEXT: renamable $w19 = COPY $wzr
+ ; CHECK-NEXT: $w0 = COPY $wzr
+ ; CHECK-NEXT: BL @bar, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
+ ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
+ ; CHECK-NEXT: $w0 = COPY killed renamable $w19
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
+ renamable $w19 = COPY $wzr
+ $w0 = COPY renamable $w19
+ BL @bar, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
+ ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
+ $w0 = COPY killed renamable $w19
+ RET_ReallyLR implicit $w0
+...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131957.452960.patch
Type: text/x-patch
Size: 4209 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220816/155038de/attachment.bin>
More information about the llvm-commits
mailing list