[llvm] d11afe1 - SystemZ: Handle gr128 to fp128 copies in copyPhysReg (#90861)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 08:46:47 PDT 2024
Author: Matt Arsenault
Date: 2024-05-02T17:46:43+02:00
New Revision: d11afe1c743924f309e41c5e5d497d6a6f5c17d6
URL: https://github.com/llvm/llvm-project/commit/d11afe1c743924f309e41c5e5d497d6a6f5c17d6
DIFF: https://github.com/llvm/llvm-project/commit/d11afe1c743924f309e41c5e5d497d6a6f5c17d6.diff
LOG: SystemZ: Handle gr128 to fp128 copies in copyPhysReg (#90861)
Added:
llvm/test/CodeGen/SystemZ/copy-phys-reg-gr128-to-fp128.mir
Modified:
llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp b/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
index b3517fb0ea77f5..8176eba74b7387 100644
--- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
@@ -856,6 +856,22 @@ void SystemZInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
return;
}
+ if (SystemZ::FP128BitRegClass.contains(DestReg) &&
+ SystemZ::GR128BitRegClass.contains(SrcReg)) {
+ MCRegister DestRegHi = RI.getSubReg(DestReg, SystemZ::subreg_h64);
+ MCRegister DestRegLo = RI.getSubReg(DestReg, SystemZ::subreg_l64);
+ MCRegister SrcRegHi = RI.getSubReg(SrcReg, SystemZ::subreg_h64);
+ MCRegister SrcRegLo = RI.getSubReg(SrcReg, SystemZ::subreg_l64);
+
+ BuildMI(MBB, MBBI, DL, get(SystemZ::LDGR), DestRegHi)
+ .addReg(SrcRegHi)
+ .addReg(DestReg, RegState::ImplicitDefine);
+
+ BuildMI(MBB, MBBI, DL, get(SystemZ::LDGR), DestRegLo)
+ .addReg(SrcRegLo, getKillRegState(KillSrc));
+ return;
+ }
+
// Move CC value from a GR32.
if (DestReg == SystemZ::CC) {
unsigned Opcode =
diff --git a/llvm/test/CodeGen/SystemZ/copy-phys-reg-gr128-to-fp128.mir b/llvm/test/CodeGen/SystemZ/copy-phys-reg-gr128-to-fp128.mir
new file mode 100644
index 00000000000000..2fa0e585f74288
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/copy-phys-reg-gr128-to-fp128.mir
@@ -0,0 +1,49 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
+# RUN: llc -mtriple=s390x-ibm-linux -mcpu=z13 -run-pass=postrapseudos -verify-machineinstrs -o - %s | FileCheck %s
+
+---
+name: copy_gr128_to_fp128__r0q_to_f0q
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $r0q
+ ; CHECK-LABEL: name: copy_gr128_to_fp128__r0q_to_f0q
+ ; CHECK: liveins: $r0q
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $f0d = LDGR $r0d, implicit-def $f0q
+ ; CHECK-NEXT: $f2d = LDGR $r1d
+ ; CHECK-NEXT: Return implicit $f0q
+ $f0q = COPY $r0q
+ Return implicit $f0q
+...
+
+---
+name: copy_gr128_to_fp128__r0q_to_f0q_killed
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $r0q
+ ; CHECK-LABEL: name: copy_gr128_to_fp128__r0q_to_f0q_killed
+ ; CHECK: liveins: $r0q
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $f0d = LDGR $r0d, implicit-def $f0q
+ ; CHECK-NEXT: $f2d = LDGR killed $r1d
+ ; CHECK-NEXT: Return implicit $f0q
+ $f0q = COPY killed $r0q
+ Return implicit $f0q
+...
+
+---
+name: copy_gr128_to_fp128__r0q_to_f0q_undef
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $r0q
+ ; CHECK-LABEL: name: copy_gr128_to_fp128__r0q_to_f0q_undef
+ ; CHECK: liveins: $r0q
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $f0q = KILL undef $r0q
+ ; CHECK-NEXT: Return implicit $f0q
+ $f0q = COPY undef $r0q
+ Return implicit $f0q
+...
More information about the llvm-commits
mailing list