[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