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

             Bug #: 14356
           Summary: ARM setExecutionDomain causes "Bad machine code: Using
                    an undefined physical register"
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]
    Classification: Unclassified


Created attachment 9549
  --> http://llvm.org/bugs/attachment.cgi?id=9549
read_arch.ll

The attached test case (read_arch.ll) is from CINT2000/175.vpr. Reproduce the
assert with:
llc read_arch.ll -verify-machineinstrs -march=thumb -mcpu=cortex-a9

The problem is that ARM's setExecuction marks the high half of the D register
as an implicit use (%S1<imp-use>). S1 is actually clobbered by the previous
call, so this is incorrect w.r.t. liveness. It looks to me like it should be
marked <undef> instead, but I may be missing something. I'd like the original
author to fix it.

In isolation this doesn't look like a terrible bug. However it can currently
lead to assertions inside the PostRAscheduler which runs after ExecutionDomain.
So even though the attached test requires -verify-machineinstr, it is a real
bug that can show up in default clang invocation.

Ideally, no late passes would rely on implicit operands for precise liveness,
but in the near term, this bug still needs to be fixed.

-- 
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to