mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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:
parent
0a13e566ab
commit
c732adf3a1
@ -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",
|
||||||
|
@ -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", []>;
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
Loading…
Reference in New Issue
Block a user