A live analysis problem on gcc4.2.3

袁立威 xzfkiller@gmail.com
Wed Apr 16 09:32:00 GMT 2008


I use propagate_one_insn to get the current insn's live in. But it
seems wrong when propagate.
Before propagate one insn, there is no reg111 in live out and current
insn def the reg111, how can reg111

appear in live in after propagate???

My flag to propagate is:
  flags = PROP_DEATH_NOTES;
  flags &= ~(PROP_SCAN_DEAD_CODE | PROP_SCAN_DEAD_STORES
		 | PROP_KILL_DEAD_CODE);

This is the dump:

current insn:
(insn/f 43 42 44 2 (set (reg/f:DI 111 r35)
        (reg/f:DI 12 r12)) -1 (nil)
    (nil))

before propagate, insn live in:
first = 0x600000000011b0b0 current = 0x600000000011b0b0 indx = 0
    0x600000000011b0b0 next = 0x600000000011b0d8 prev = (nil) indx = 0
        bits = { 0 1 12 }
    0x600000000011b0d8 next = (nil) prev = 0x600000000011b0b0 indx = 2
        bits = { 320 328 }

before propagate, insn live out:
first = 0x600000000011b000 current = 0x600000000011b000 indx = 0
    0x600000000011b000 next = 0x600000000011b028 prev = (nil) indx = 0
        bits = { 0 1 12 }
    0x600000000011b028 next = (nil) prev = 0x600000000011b000 indx = 2
        bits = { 320 328 }

after propagate, insn live in:
first = 0x600000000011b0b0 current = 0x600000000011b0b0 indx = 0
    0x600000000011b0b0 next = 0x600000000011b0d8 prev = (nil) indx = 0
        bits = { 0 1 12 111 }
    0x600000000011b0d8 next = (nil) prev = 0x600000000011b0b0 indx = 2
        bits = { 320 328 }

after propagate, insn live out:
first = 0x600000000011b000 current = 0x600000000011b000 indx = 0
    0x600000000011b000 next = 0x600000000011b028 prev = (nil) indx = 0
        bits = { 0 1 12 }
    0x600000000011b028 next = (nil) prev = 0x600000000011b000 indx = 2
        bits = { 320 328 }



More information about the Gcc mailing list