patch: alpha haifa abort

Richard Henderson rth@cygnus.com
Sat Jan 3 11:28:00 GMT 1998


[ Ref http://www.cygnus.com/ml/egcs-bugs/0404.html for the test case. ]

The problem is with these two instructions:

(insn/i 123 64 66 (parallel[ 
            (set (reg/v:DI 17 $17)
                (asm_operands ("insbl  %3,3,%1         # %1 = dd000000
	zapnot %3,2,%2         # %2 = 0000cc00
	sll    %2,8,%2         # %2 = 00cc0000
	or     %2,%1,%1        # %1 = ddcc0000
	zapnot %3,4,%2         # %2 = 00bb0000
	extbl  %3,3,%0         # %0 = 000000aa
	srl    %2,8,%2         # %2 = 0000bb00") ("=r") 0[ 
                        (subreg:SI (reg:DI 0 $0) 0)
                    ] 
                    [ 
                        (asm_input:SI ("r"))
                    ]  ("../../../0404.c") 189))
            (set (reg/v:DI 3 $3)
                (asm_operands ("insbl  %3,3,%1         # %1 = dd000000
	zapnot %3,2,%2         # %2 = 0000cc00
	sll    %2,8,%2         # %2 = 00cc0000
	or     %2,%1,%1        # %1 = ddcc0000
	zapnot %3,4,%2         # %2 = 00bb0000
	extbl  %3,3,%0         # %0 = 000000aa
	srl    %2,8,%2         # %2 = 0000bb00") ("=&r") 1[ 
                        (subreg:SI (reg:DI 0 $0) 0)
                    ] 
                    [ 
                        (asm_input:SI ("r"))
                    ]  ("../../../0404.c") 189))
            (set (reg/v:DI 2 $2)
                (asm_operands ("insbl  %3,3,%1         # %1 = dd000000
	zapnot %3,2,%2         # %2 = 0000cc00
	sll    %2,8,%2         # %2 = 00cc0000
	or     %2,%1,%1        # %1 = ddcc0000
	zapnot %3,4,%2         # %2 = 00bb0000
	extbl  %3,3,%0         # %0 = 000000aa
	srl    %2,8,%2         # %2 = 0000bb00") ("=&r") 2[ 
                        (subreg:SI (reg:DI 0 $0) 0)
                    ] 
                    [ 
                        (asm_input:SI ("r"))
                    ]  ("../../../0404.c") 189))
        ] ) -1 (insn_list:REG_DEP_ANTI 50 (insn_list:REG_DEP_OUTPUT 62 (insn_list 119 (nil))))
    (expr_list:REG_DEAD (reg:DI 0 $0)
        (nil)))

(insn/i 124 138 132 (set (subreg:DI (reg:SI 17 $17) 0)
        (plus:DI (reg/v:DI 17 $17)
            (reg/v:DI 2 $2))) 7 {adddi3} (insn_list:REG_DEP_ANTI 50 (insn_list:REG_DEP_OUTPUT 62 (insn_list 123 (insn_list 123 (nil)))))
    (expr_list:REG_DEAD (reg/v:DI 17 $17)
        (expr_list:REG_DEAD (reg/v:DI 2 $2)
            (nil))))

Note the double dependance 124 has on 123.

As an asside, anyone know of a way I might be able to protect
asm blocks from interblock scheduling?  Not critical, but it
would happen to be better in this case.


r~


More information about the Gcc mailing list