forked from OSchip/llvm-project
ARM sched model: Add branch thumb2 instructions
llvm-svn: 183264
This commit is contained in:
parent
bdb5687468
commit
17359d9ba2
|
@ -3280,7 +3280,7 @@ let isBranch = 1, isTerminator = 1, isBarrier = 1 in {
|
|||
let isPredicable = 1 in
|
||||
def t2B : T2I<(outs), (ins uncondbrtarget:$target), IIC_Br,
|
||||
"b", ".w\t$target",
|
||||
[(br bb:$target)]> {
|
||||
[(br bb:$target)]>, Sched<[WriteBr]> {
|
||||
let Inst{31-27} = 0b11110;
|
||||
let Inst{15-14} = 0b10;
|
||||
let Inst{12} = 1;
|
||||
|
@ -3298,17 +3298,20 @@ let isNotDuplicable = 1, isIndirectBranch = 1 in {
|
|||
def t2BR_JT : t2PseudoInst<(outs),
|
||||
(ins GPR:$target, GPR:$index, i32imm:$jt, i32imm:$id),
|
||||
0, IIC_Br,
|
||||
[(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]>;
|
||||
[(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]>,
|
||||
Sched<[WriteBr]>;
|
||||
|
||||
// FIXME: Add a non-pc based case that can be predicated.
|
||||
def t2TBB_JT : t2PseudoInst<(outs),
|
||||
(ins GPR:$index, i32imm:$jt, i32imm:$id), 0, IIC_Br, []>;
|
||||
(ins GPR:$index, i32imm:$jt, i32imm:$id), 0, IIC_Br, []>,
|
||||
Sched<[WriteBr]>;
|
||||
|
||||
def t2TBH_JT : t2PseudoInst<(outs),
|
||||
(ins GPR:$index, i32imm:$jt, i32imm:$id), 0, IIC_Br, []>;
|
||||
(ins GPR:$index, i32imm:$jt, i32imm:$id), 0, IIC_Br, []>,
|
||||
Sched<[WriteBr]>;
|
||||
|
||||
def t2TBB : T2I<(outs), (ins addrmode_tbb:$addr), IIC_Br,
|
||||
"tbb", "\t$addr", []> {
|
||||
"tbb", "\t$addr", []>, Sched<[WriteBrTbl]> {
|
||||
bits<4> Rn;
|
||||
bits<4> Rm;
|
||||
let Inst{31-20} = 0b111010001101;
|
||||
|
@ -3321,7 +3324,7 @@ def t2TBB : T2I<(outs), (ins addrmode_tbb:$addr), IIC_Br,
|
|||
}
|
||||
|
||||
def t2TBH : T2I<(outs), (ins addrmode_tbh:$addr), IIC_Br,
|
||||
"tbh", "\t$addr", []> {
|
||||
"tbh", "\t$addr", []>, Sched<[WriteBrTbl]> {
|
||||
bits<4> Rn;
|
||||
bits<4> Rm;
|
||||
let Inst{31-20} = 0b111010001101;
|
||||
|
@ -3341,7 +3344,7 @@ def t2TBH : T2I<(outs), (ins addrmode_tbh:$addr), IIC_Br,
|
|||
let isBranch = 1, isTerminator = 1 in
|
||||
def t2Bcc : T2I<(outs), (ins brtarget:$target), IIC_Br,
|
||||
"b", ".w\t$target",
|
||||
[/*(ARMbrcond bb:$target, imm:$cc)*/]> {
|
||||
[/*(ARMbrcond bb:$target, imm:$cc)*/]>, Sched<[WriteBr]> {
|
||||
let Inst{31-27} = 0b11110;
|
||||
let Inst{15-14} = 0b10;
|
||||
let Inst{12} = 0;
|
||||
|
@ -3368,7 +3371,7 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
|||
(ins uncondbrtarget:$dst, pred:$p),
|
||||
4, IIC_Br, [],
|
||||
(t2B uncondbrtarget:$dst, pred:$p)>,
|
||||
Requires<[IsThumb2, IsIOS]>;
|
||||
Requires<[IsThumb2, IsIOS]>, Sched<[WriteBr]>;
|
||||
}
|
||||
|
||||
// IT block
|
||||
|
@ -3390,7 +3393,8 @@ def t2IT : Thumb2XI<(outs), (ins it_pred:$cc, it_mask:$mask),
|
|||
|
||||
// Branch and Exchange Jazelle -- for disassembly only
|
||||
// Rm = Inst{19-16}
|
||||
def t2BXJ : T2I<(outs), (ins rGPR:$func), NoItinerary, "bxj", "\t$func", []> {
|
||||
def t2BXJ : T2I<(outs), (ins rGPR:$func), NoItinerary, "bxj", "\t$func", []>,
|
||||
Sched<[WriteBr]> {
|
||||
bits<4> func;
|
||||
let Inst{31-27} = 0b11110;
|
||||
let Inst{26} = 0;
|
||||
|
@ -3404,7 +3408,7 @@ let isBranch = 1, isTerminator = 1 in {
|
|||
def tCBZ : T1I<(outs), (ins tGPR:$Rn, t_cbtarget:$target), IIC_Br,
|
||||
"cbz\t$Rn, $target", []>,
|
||||
T1Misc<{0,0,?,1,?,?,?}>,
|
||||
Requires<[IsThumb2]> {
|
||||
Requires<[IsThumb2]>, Sched<[WriteBr]> {
|
||||
// A8.6.27
|
||||
bits<6> target;
|
||||
bits<3> Rn;
|
||||
|
@ -3416,7 +3420,7 @@ let isBranch = 1, isTerminator = 1 in {
|
|||
def tCBNZ : T1I<(outs), (ins tGPR:$Rn, t_cbtarget:$target), IIC_Br,
|
||||
"cbnz\t$Rn, $target", []>,
|
||||
T1Misc<{1,0,?,1,?,?,?}>,
|
||||
Requires<[IsThumb2]> {
|
||||
Requires<[IsThumb2]>, Sched<[WriteBr]> {
|
||||
// A8.6.27
|
||||
bits<6> target;
|
||||
bits<3> Rn;
|
||||
|
|
Loading…
Reference in New Issue