Evan Cheng da55c4ffb7 Fix PR3149. If an early clobber def is a physical register and it is tied to an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this.
172     %ECX<def> = MOV32rr %reg1039<kill>
180     INLINEASM <es:subl $5,$1
        sbbl $3,$0>, 10, %EAX<def>, 14, %ECX<earlyclobber,def>, 9, %EAX<kill>,
36, <fi#0>, 1, %reg0, 0, 9, %ECX<kill>, 36, <fi#1>, 1, %reg0, 0
188     %EAX<def> = MOV32rr %EAX<kill>
196     %ECX<def> = MOV32rr %ECX<kill>
204     %ECX<def> = MOV32rr %ECX<kill>
212     %EAX<def> = MOV32rr %EAX<kill>
220     %EAX<def> = MOV32rr %EAX
228     %reg1039<def> = MOV32rr %ECX<kill>

The early clobber operand ties ECX input to the ECX def.

The live interval of ECX is represented as this:
%reg20,inf = [46,47:1)[174,230:0)  0@174-(230) 1@46-(47)

The right way to represent this is something like
%reg20,inf = [46,47:2)[174,182:1)[181:230:0)  0@174-(182) 1@181-230 @2@46-(47)

Of course that won't work since that means overlapping live ranges defined by two val#.

The workaround for now is to add a bit to val# which says the val# is redefined by a early clobber def somewhere. This prevents the move at 228 from being optimized away by SimpleRegisterCoalescing::AdjustCopiesBackFrom.

llvm-svn: 61259
2008-12-19 20:58:01 +00:00
..
2008-03-09 00:32:10 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2007-04-16 17:36:08 +00:00
2007-01-30 16:16:01 +00:00
2007-04-16 17:36:08 +00:00
2007-04-16 17:36:08 +00:00
2007-03-30 20:41:18 +00:00
2007-07-19 23:13:04 +00:00
2007-07-05 23:00:50 +00:00
2008-04-24 20:01:58 +00:00
2008-05-01 18:41:09 +00:00
2008-12-19 10:55:56 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2007-07-19 23:13:04 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2007-07-19 23:13:04 +00:00
2008-03-25 04:26:08 +00:00
2008-08-30 00:54:31 +00:00
2008-08-30 00:54:31 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-10-15 18:27:15 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2007-05-14 22:04:16 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-03-25 04:26:08 +00:00
2008-02-19 08:07:33 +00:00
2007-05-09 19:20:37 +00:00
2007-04-16 15:15:52 +00:00
2007-04-30 05:11:58 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2008-02-19 08:07:33 +00:00
2008-03-13 22:13:53 +00:00
2008-03-22 22:27:01 +00:00
2008-03-02 17:56:29 +00:00
2007-04-17 21:12:26 +00:00
2007-04-17 19:03:02 +00:00
2007-07-19 23:13:04 +00:00
2008-02-19 08:07:33 +00:00
2007-07-30 07:52:03 +00:00