Index: lib/CodeGen/RegUsageInfoCollector.cpp =================================================================== --- lib/CodeGen/RegUsageInfoCollector.cpp +++ 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(); 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 = Index: test/CodeGen/X86/ipra-reg-alias.ll =================================================================== --- /dev/null +++ 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 +} +