[PATCH] D24018: AMDGPU: Use copy instead of mov during frame lowering

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 29 18:59:34 PDT 2016


arsenm created this revision.
arsenm added a reviewer: tstellarAMD.
arsenm added a subscriber: llvm-commits.
Herald added subscribers: wdng, arsenm.

This occurs before RA pseudos are expanded. It's less code to emit the copy.

https://reviews.llvm.org/D24018

Files:
  lib/Target/AMDGPU/SIFrameLowering.cpp

Index: lib/Target/AMDGPU/SIFrameLowering.cpp
===================================================================
--- lib/Target/AMDGPU/SIFrameLowering.cpp
+++ lib/Target/AMDGPU/SIFrameLowering.cpp
@@ -65,7 +65,7 @@
 
   // Copy the size in bytes.
   unsigned FlatScrInitHi = TRI->getSubReg(FlatScratchInitReg, AMDGPU::sub1);
-  BuildMI(MBB, I, DL, TII->get(AMDGPU::S_MOV_B32), AMDGPU::FLAT_SCR_LO)
+  BuildMI(MBB, I, DL, TII->get(AMDGPU::COPY), AMDGPU::FLAT_SCR_LO)
     .addReg(FlatScrInitHi, RegState::Kill);
 
   unsigned FlatScrInitLo = TRI->getSubReg(FlatScratchInitReg, AMDGPU::sub0);
@@ -256,15 +256,14 @@
     OtherBB.addLiveIn(ScratchWaveOffsetReg);
   }
 
-  const MCInstrDesc &SMovB32 = TII->get(AMDGPU::S_MOV_B32);
   DebugLoc DL;
   MachineBasicBlock::iterator I = MBB.begin();
 
   if (PreloadedScratchWaveOffsetReg != ScratchWaveOffsetReg) {
     // Make sure we emit the copy for the offset first. We may have chosen to
     // copy the buffer resource into a register that aliases the input offset
     // register.
-    BuildMI(MBB, I, DL, SMovB32, ScratchWaveOffsetReg)
+    BuildMI(MBB, I, DL, TII->get(AMDGPU::COPY), ScratchWaveOffsetReg)
       .addReg(PreloadedScratchWaveOffsetReg, RegState::Kill);
   }
 
@@ -274,19 +273,11 @@
       !TRI->isSubRegisterEq(PreloadedPrivateBufferReg, ScratchRsrcReg) &&
       !TRI->isSubRegisterEq(PreloadedPrivateBufferReg, ScratchWaveOffsetReg));
 
-    unsigned Rsrc01 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub0_sub1);
-    unsigned Rsrc23 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub2_sub3);
-
-    unsigned Lo = TRI->getSubReg(PreloadedPrivateBufferReg, AMDGPU::sub0_sub1);
-    unsigned Hi = TRI->getSubReg(PreloadedPrivateBufferReg, AMDGPU::sub2_sub3);
-
-    const MCInstrDesc &SMovB64 = TII->get(AMDGPU::S_MOV_B64);
-
-    BuildMI(MBB, I, DL, SMovB64, Rsrc01)
-      .addReg(Lo, RegState::Kill);
-    BuildMI(MBB, I, DL, SMovB64, Rsrc23)
-      .addReg(Hi, RegState::Kill);
+    BuildMI(MBB, I, DL, TII->get(AMDGPU::COPY), ScratchRsrcReg)
+      .addReg(PreloadedPrivateBufferReg, RegState::Kill);
   } else {
+    const MCInstrDesc &SMovB32 = TII->get(AMDGPU::S_MOV_B32);
+
     unsigned Rsrc0 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub0);
     unsigned Rsrc1 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub1);
     unsigned Rsrc2 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub2);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24018.69641.patch
Type: text/x-patch
Size: 2349 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160830/6cec1968/attachment.bin>


More information about the llvm-commits mailing list