From 969b9fe379c333bd5065d387da7b43ed90e001de Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Fri, 25 Jun 2010 00:49:43 +0000 Subject: [PATCH] Fix a case where an earlyclobber operand of an asm is reused as an input. PR 4118. Testcase is too big, as usual with bugs in this area, but there's one in the PR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106816 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/VirtRegRewriter.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/CodeGen/VirtRegRewriter.cpp b/lib/CodeGen/VirtRegRewriter.cpp index 361d35e8a89..6370d8fa5cb 100644 --- a/lib/CodeGen/VirtRegRewriter.cpp +++ b/lib/CodeGen/VirtRegRewriter.cpp @@ -2033,6 +2033,21 @@ LocalRewriter::RewriteMBB(LiveIntervals *LIs, CanReuse = !ReusedOperands.isClobbered(PhysReg) && Spills.canClobberPhysReg(PhysReg); } + // If this is an asm, and PhysReg is used elsewhere as an earlyclobber + // operand, we can't also use it as an input. (Outputs always come + // before inputs, so we can stop looking at i.) + if (MI.getOpcode()==TargetOpcode::INLINEASM) { + for (unsigned k=0; kgetPhys(VirtReg); assert(DesignatedReg && "Must map virtreg to physreg!"); -- 2.34.1