[PATCH] D22400: Fix RegMask calculation for alias registers

Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 20 20:58:15 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL276235: IPRA: Fix RegMask calculation for alias registers (authored by matze).

Changed prior to commit:
  https://reviews.llvm.org/D22400?vs=64090&id=64815#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D22400

Files:
  llvm/trunk/lib/CodeGen/RegUsageInfoCollector.cpp
  llvm/trunk/test/CodeGen/X86/ipra-reg-alias.ll

Index: llvm/trunk/test/CodeGen/X86/ipra-reg-alias.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/ipra-reg-alias.ll
+++ llvm/trunk/test/CodeGen/X86/ipra-reg-alias.ll
@@ -0,0 +1,12 @@
+; RUN: llc -enable-ipra -print-regusage -o /dev/null 2>&1 < %s | FileCheck %s
+target triple = "x86_64--"
+
+define i8 @main(i8 %X) {
+  %inc = add i8 %X, 1
+  %inc2 = mul i8 %inc, 5
+; Here only CL is clobbred so CH should not be clobbred, but CX, ECX and RCX
+; should be clobbered.
+; CHECK: main Clobbered Registers: AH AL AX CL CX EAX ECX EFLAGS RAX RCX
+  ret i8 %inc2
+}
+
Index: llvm/trunk/lib/CodeGen/RegUsageInfoCollector.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/RegUsageInfoCollector.cpp
+++ llvm/trunk/lib/CodeGen/RegUsageInfoCollector.cpp
@@ -57,10 +57,6 @@
   bool runOnMachineFunction(MachineFunction &MF) override;
 
   static char ID;
-
-private:
-  void markRegClobbered(const TargetRegisterInfo *TRI, uint32_t *RegMask,
-                        unsigned PReg);
 };
 } // end of anonymous namespace
 
@@ -76,13 +72,6 @@
   return new RegUsageInfoCollector();
 }
 
-void RegUsageInfoCollector::markRegClobbered(const TargetRegisterInfo *TRI,
-                                             uint32_t *RegMask, unsigned PReg) {
-  // If PReg is clobbered then all of its alias are also clobbered.
-  for (MCRegAliasIterator AI(PReg, TRI, true); AI.isValid(); ++AI)
-    RegMask[*AI / 32] &= ~(1u << *AI % 32);
-}
-
 void RegUsageInfoCollector::getAnalysisUsage(AnalysisUsage &AU) const {
   AU.addRequired<PhysicalRegisterUsageInfo>();
   AU.setPreservesAll();
@@ -116,7 +105,7 @@
 
   for (unsigned PReg = 1, PRegE = TRI->getNumRegs(); PReg < PRegE; ++PReg)
     if (MRI->isPhysRegModified(PReg, true))
-      markRegClobbered(TRI, &RegMask[0], PReg);
+      RegMask[PReg / 32] &= ~(1u << PReg % 32);
 
   if (!TargetFrameLowering::isSafeForNoCSROpt(F)) {
     const uint32_t *CallPreservedMask =


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22400.64815.patch
Type: text/x-patch
Size: 2008 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160721/9cef23b5/attachment.bin>


More information about the llvm-commits mailing list