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