[LLVMbugs] [Bug 4843] New: TwoAddressInstructionPass crashes with multiple tied destination registers

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Aug 31 16:06:27 PDT 2009


http://llvm.org/bugs/show_bug.cgi?id=4843

           Summary: TwoAddressInstructionPass crashes with multiple tied
                    destination registers
           Product: libraries
           Version: trunk
          Platform: Macintosh
        OS/Version: MacOS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Backend: ARM
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: bob.wilson at apple.com
                CC: asl at math.spbu.ru, llvmbugs at cs.uiuc.edu


The TwoAddressInstructionPass has problems with instructions that define
multiple registers, where each destination register is tied to a different
source register.  There are several problems here, but most notably when the
tied source operands are the same register, the TwoAddressInstructionPass may
have to insert multiple copies to get that register copied to the tied
destinations.

The following testcase will demonstrate the problem:

define <4 x i16> @v2regbug(<4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %B
        %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32><i32
0, i32 0, i32 1, i32 1>
        ret <4 x i16> %tmp2
}

Assertion failed: (Removed && "Register is not used by this instruction!"),
function removeVirtualRegisterKilled, file
/Users/bwilson/local/llvm/llvm/include/llvm/CodeGen/LiveVariables.h, line 211.
0   llc               0x00b01fdc PrintStackTrace(void*) + 45
1   llc               0x00b025e4 SignalHandler(int) + 410
2   libSystem.B.dylib 0x98115bfb _sigtramp + 43
3   libSystem.B.dylib 0xffffffff _sigtramp + 1743692847
4   libSystem.B.dylib 0x981a3ba5 raise + 26
5   libSystem.B.dylib 0x981b9c5c abort + 93
6   libSystem.B.dylib 0x981a6804 __pthread_markcancel + 0
7   llc               0x0090452b
llvm::LiveVariables::removeVirtualRegisterKilled(unsigned int,
llvm::MachineInstr*) + 277
8   llc               0x00903b2f (anonymous
namespace)::TwoAddressInstructionPass::runOnMachineFunction(llvm::MachineFunction&)
+ 5591
9   llc               0x00850fe7
llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 77
10  llc               0x00a8377b
llvm::FPPassManager::runOnFunction(llvm::Function&) + 297
11  llc               0x00a83cae
llvm::FunctionPassManagerImpl::run(llvm::Function&) + 112
12  llc               0x00a83e7a
llvm::FunctionPassManager::run(llvm::Function&) + 130
13  llc               0x0002f710 main + 3579
14  llc               0x0002e289 start + 53
15  llc               0x00000003 start + 4294778287


-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list