diff options
Diffstat (limited to 'llvm/lib/Target/ARM/ARMInstrInfo.td')
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstrInfo.td | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td index 87e368594d1..a28ec77031b 100644 --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -37,6 +37,8 @@ class InstARM<dag ops, string asmstr, list<dag> pattern> : Instruction { let Pattern = pattern; } +def brtarget : Operand<OtherVT>; + def SDT_ARMCallSeq : SDTypeProfile<0, 1, [ SDTCisVT<0, i32> ]>; def callseq_start : SDNode<"ISD::CALLSEQ_START", SDT_ARMCallSeq, [SDNPHasChain, SDNPOutFlag]>; @@ -50,6 +52,9 @@ def retflag : SDNode<"ARMISD::RET_FLAG", SDTRet, [SDNPHasChain, SDNPOptInFlag]>; def armselect : SDNode<"ARMISD::SELECT", SDTIntBinOp, [SDNPInFlag, SDNPOutFlag]>; +def SDTarmbr : SDTypeProfile<0, 1, [SDTCisVT<0, OtherVT>]>; +def armbr : SDNode<"ARMISD::BR", SDTarmbr, [SDNPHasChain, SDNPInFlag]>; + def SDTVoidBinOp : SDTypeProfile<0, 2, [SDTCisSameAs<0, 1>]>; def armcmp : SDNode<"ARMISD::CMP", SDTVoidBinOp, [SDNPOutFlag]>; @@ -107,6 +112,10 @@ let isTwoAddress = 1 in { [(set IntRegs:$dst, (armselect IntRegs:$true, IntRegs:$false))]>; } +def bne : InstARM<(ops brtarget:$dst), + "bne $dst", + [(armbr bb:$dst)]>; + def cmp : InstARM<(ops IntRegs:$a, IntRegs:$b), "cmp $a, $b", [(armcmp IntRegs:$a, IntRegs:$b)]>; |