Skip to content
  1. Jan 17, 2013
  2. Jan 16, 2013
  3. Jan 14, 2013
    • Bill Schmidt's avatar
      This patch addresses an incorrect transformation in the DAG combiner. · d006c693
      Bill Schmidt authored
      The included test case is derived from one of the GCC compatibility tests.
      The problem arises after the selection DAG has been converted to type-legalized
      form.  The combiner first sees a 64-bit load that can be converted into a
      pre-increment form.  The original load feeds into a SRL that isolates the
      upper 32 bits of the loaded doubleword.  This looks like an opportunity for
      DAGCombiner::ReduceLoadWidth() to replace the 64-bit load with a 32-bit load.
      
      However, this transformation is not valid, as the replacement load is not
      a pre-increment load.  The pre-increment load produces an extra result,
      which feeds a subsequent add instruction.  The replacement load only has
      one result value, and this value is propagated to all uses of the pre-
      increment load, including the add.  Because the add is looking for the
      second result value as its operand, it ends up attempting to add a constant
      to a token chain, resulting in a crash.
      
      So the patch simply disables this transformation for any load with more than
      two result values.
      
      llvm-svn: 172480
      d006c693
  4. Jan 12, 2013
  5. Jan 11, 2013
  6. Jan 10, 2013
  7. Jan 09, 2013
  8. Jan 08, 2013
Loading