llvm-6502/lib
Bill Wendling 869d60d39d Machine sink could potentially sink instructions into a block where the physical
registers it defines then interfere with an existing preg live range.

For instance, if we had something like these machine instructions:

BB#0
  ... = imul ... EFLAGS<imp-def,dead>
  test ..., EFLAGS<imp-def>
  jcc BB#2 EFLAGS<imp-use>

BB#1
  ... ; fallthrough to BB#2

BB#2
  ... ; No code that defines EFLAGS
  jcc ... EFLAGS<imp-use>

Machine sink will come along, see that imul implicitly defines EFLAGS, but
because it's "dead", it assumes that it can move imul into BB#2. But when it
does, imul's "dead" imp-def of EFLAGS is raised from the dead (a zombie) and
messes up the condition code for the jump (and pretty much anything else which
relies upon it being correct).

The solution is to know which pregs are live going into a basic block. However,
that information isn't calculated at this point. Nor does the LiveVariables pass
take into account non-allocatable physical registers. In lieu of this, we do a
*very* conservative pass through the basic block to determine if a preg is live
coming out of it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105387 91177308-0d34-0410-b5e6-96231b3b80d8
2010-06-03 07:54:20 +00:00
..
Analysis Fix the noalias checking so that it doesn't worry about 2010-06-01 20:51:40 +00:00
Archive Eliminate some unnessary Path::exists() calls. 2010-05-27 20:51:54 +00:00
AsmParser Eliminate the restriction that the array size in an alloca must be i32. 2010-05-28 01:14:11 +00:00
Bitcode Speedup bitcode writer. Do not walk all values for all functions to emit function local metadata. In one testcase, probably worst case scenario, the 70x speed up is seen. 2010-06-02 23:05:04 +00:00
CodeGen Machine sink could potentially sink instructions into a block where the physical 2010-06-03 07:54:20 +00:00
CompilerDriver Print a space after the colon. 2010-05-20 21:11:37 +00:00
ExecutionEngine improve portability to systems that don't have powf/modf (e.g. solaris 9) 2010-05-15 17:10:24 +00:00
Linker Add basic error checking to MemoryBuffer::getSTDIN. 2010-05-27 17:31:51 +00:00
MC Don't call flush() at a library level which isn't checking for errors 2010-06-01 16:31:34 +00:00
Support Minor code simplification. 2010-05-28 16:50:23 +00:00
System Factor out the handler work from SignalHandler into a helper function, 2010-05-27 23:11:55 +00:00
Target Add first pass at darwin tls compiler support. 2010-06-03 04:07:48 +00:00
Transforms Remove unused code 2010-06-01 21:56:30 +00:00
VMCore Split the logic behind CastInst::isNoopCast into a separate static function, 2010-05-28 21:41:37 +00:00
Makefile