Add "isBarrier = 1" to return instructions.

Patch by Sylvere Teissier.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83135 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Grosbach 2009-09-30 01:35:11 +00:00
parent 0a13e566ab
commit c732adf3a1
3 changed files with 5 additions and 5 deletions

View File

@ -618,7 +618,7 @@ def LEApcrelJT : AXI1<0x0, (outs GPR:$dst),
// Control Flow Instructions. // Control Flow Instructions.
// //
let isReturn = 1, isTerminator = 1 in let isReturn = 1, isTerminator = 1, isBarrier = 1 in
def BX_RET : AI<(outs), (ins), BrMiscFrm, IIC_Br, def BX_RET : AI<(outs), (ins), BrMiscFrm, IIC_Br,
"bx", " lr", [(ARMretflag)]> { "bx", " lr", [(ARMretflag)]> {
let Inst{7-4} = 0b0001; let Inst{7-4} = 0b0001;
@ -630,7 +630,7 @@ let isReturn = 1, isTerminator = 1 in
// FIXME: $dst1 should be a def. But the extra ops must be in the end of the // FIXME: $dst1 should be a def. But the extra ops must be in the end of the
// operand list. // operand list.
// FIXME: Should pc be an implicit operand like PICADD, etc? // FIXME: Should pc be an implicit operand like PICADD, etc?
let isReturn = 1, isTerminator = 1, mayLoad = 1 in let isReturn = 1, isTerminator = 1, isBarrier = 1, mayLoad = 1 in
def LDM_RET : AXI4ld<(outs), def LDM_RET : AXI4ld<(outs),
(ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops), (ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops),
LdStMulFrm, IIC_Br, "ldm${p}${addr:submode} $addr, $dst1", LdStMulFrm, IIC_Br, "ldm${p}${addr:submode} $addr, $dst1",

View File

@ -174,14 +174,14 @@ def tANDsp : PseudoInst<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
// Control Flow Instructions. // Control Flow Instructions.
// //
let isReturn = 1, isTerminator = 1 in { let isReturn = 1, isTerminator = 1, isBarrier = 1 in {
def tBX_RET : TI<(outs), (ins), IIC_Br, "bx lr", [(ARMretflag)]>; def tBX_RET : TI<(outs), (ins), IIC_Br, "bx lr", [(ARMretflag)]>;
// Alternative return instruction used by vararg functions. // Alternative return instruction used by vararg functions.
def tBX_RET_vararg : TI<(outs), (ins tGPR:$target), IIC_Br, "bx $target", []>; def tBX_RET_vararg : TI<(outs), (ins tGPR:$target), IIC_Br, "bx $target", []>;
} }
// FIXME: remove when we have a way to marking a MI with these properties. // FIXME: remove when we have a way to marking a MI with these properties.
let isReturn = 1, isTerminator = 1, mayLoad = 1 in let isReturn = 1, isTerminator = 1, isBarrier = 1, mayLoad = 1 in
def tPOP_RET : T1I<(outs), (ins pred:$p, reglist:$dst1, variable_ops), IIC_Br, def tPOP_RET : T1I<(outs), (ins pred:$p, reglist:$dst1, variable_ops), IIC_Br,
"pop${p} $dst1", []>; "pop${p} $dst1", []>;

View File

@ -1072,7 +1072,7 @@ let Defs =
// FIXME: $dst1 should be a def. But the extra ops must be in the end of the // FIXME: $dst1 should be a def. But the extra ops must be in the end of the
// operand list. // operand list.
// FIXME: Should pc be an implicit operand like PICADD, etc? // FIXME: Should pc be an implicit operand like PICADD, etc?
let isReturn = 1, isTerminator = 1, mayLoad = 1 in let isReturn = 1, isTerminator = 1, isBarrier = 1, mayLoad = 1 in
def t2LDM_RET : T2XI<(outs), def t2LDM_RET : T2XI<(outs),
(ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops), (ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops),
IIC_Br, "ldm${addr:submode}${p}${addr:wide} $addr, $dst1", IIC_Br, "ldm${addr:submode}${p}${addr:wide} $addr, $dst1",