This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: conflict matrix vs reload

  In message <>you write:
  > Mostly right.  Except that the initialized / uninitialized property is a
  > property that depends on the path that the program took to reach the place
  > where a pseudo dies.  So you have to consider the possibility that each
  > pseudo is initialized - but not at the same point of time.
You're missing the entire point.  Sigh.  See below.

  > consider this rtl fragment:
  > (2 1 3 (set (reg:SI 42) (and:SI (reg:SI 43) (reg:SI 44)))
  >  ...
  >  (expr_list:REG_DEAD (reg:SI 44)))
  > (3 2 4 (set (reg:SI 45) (and:SI (not:SI (reg:SI 43)) (reg:SI 46)))
  >  ...
  >  (expr_list:REG_DEAD (reg:SI 43) (expr_list:REG_DEAD (reg:SI 46))))
  > (4 3 5 (set (reg:SI 47) (or:SI (reg:SI 42) (reg:SI 45)))
  >  ...
  >  (expr_list:REG_DEAD (reg:SI 42) (expr_list:REG_DEAD (reg:SI 45))))
  > Now assume that there are two paths to insn 2; on coming from one path,
  > (reg:SI 43) is ~0, (reg:SI 44) is initialized, and (reg:SI 46) is
  > uninitialized; on coming from the other path, (reg:SI 43) is 0, (reg:SI 44)
  > is uninitialized, and (reg:SI 46) is initialized.
But those registers would be considered live on both paths.  Thus, on path
A when we initialize reg44, we would create a conflict with reg46 because
reg46 was live at the point where reg44 was set.

Similarly on the path where we initialized reg46 we would have created a
conflict with reg44 because reg44 was live.

Go back to my original message, it discussed these precise issues.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]