summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2013-06-24 11:02:19 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2013-06-24 11:02:19 +0000
commit813942a0cf8e0605002c5fa364372a8a61634cc4 (patch)
tree6c9ff9cfa8f5c5efb695a56ae58886bc6efb5923
parent7e66f5c1b4a166d823e0452d1a1bc0f822d04201 (diff)
downloadllvm-813942a0cf8e0605002c5fa364372a8a61634cc4.tar.gz
llvm-813942a0cf8e0605002c5fa364372a8a61634cc4.tar.bz2
llvm-813942a0cf8e0605002c5fa364372a8a61634cc4.tar.xz
[PowerPC] Support b(cond)l in the asm parser
This patch adds support for the conditional variants of bl. The pattern is currently used by the asm parser only. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184719 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/PowerPC/PPCInstrInfo.td9
-rw-r--r--test/MC/PowerPC/ppc64-encoding-ext.s96
2 files changed, 81 insertions, 24 deletions
diff --git a/lib/Target/PowerPC/PPCInstrInfo.td b/lib/Target/PowerPC/PPCInstrInfo.td
index 534327056b..8f896ad7a2 100644
--- a/lib/Target/PowerPC/PPCInstrInfo.td
+++ b/lib/Target/PowerPC/PPCInstrInfo.td
@@ -916,6 +916,10 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR] in {
"bl $func", BrB, []>; // See Pat patterns below.
def BLA : IForm<18, 1, 1, (outs), (ins aaddr:$func),
"bla $func", BrB, [(PPCcall (i32 imm:$func))]>;
+
+ let isCodeGenOnly = 1 in
+ def BCCL : BForm<16, 0, 1, (outs), (ins pred:$cond, condbrtarget:$dst),
+ "b${cond:cc}l ${cond:reg}, $dst">;
}
let Uses = [CTR, RM] in {
def BCTRL : XLForm_2_ext<19, 528, 20, 0, 1, (outs), (ins),
@@ -2191,6 +2195,11 @@ multiclass BranchExtendedMnemonic<string name, int bibo> {
def : InstAlias<"b"#name#"ctr",
(BCCTR bibo, CR0)>;
+ def : InstAlias<"b"#name#"l $cc, $dst",
+ (BCCL bibo, crrc:$cc, condbrtarget:$dst)>;
+ def : InstAlias<"b"#name#"l $dst",
+ (BCCL bibo, CR0, condbrtarget:$dst)>;
+
def : InstAlias<"b"#name#"lrl $cc",
(BCLRL bibo, crrc:$cc)>;
def : InstAlias<"b"#name#"lrl",
diff --git a/test/MC/PowerPC/ppc64-encoding-ext.s b/test/MC/PowerPC/ppc64-encoding-ext.s
index 3c45c60f1f..31525c7771 100644
--- a/test/MC/PowerPC/ppc64-encoding-ext.s
+++ b/test/MC/PowerPC/ppc64-encoding-ext.s
@@ -134,8 +134,12 @@
bltctr 2
# CHECK: bltctr 0 # encoding: [0x4d,0x80,0x04,0x20]
bltctr
-# FIXME: bltl 2, target
-# FIXME: bltl target
+# CHECK: bltl 2, target # encoding: [0x41,0x88,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bltl 2, target
+# CHECK: bltl 0, target # encoding: [0x41,0x80,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bltl target
# FIXME: bltla 2, target
# FIXME: bltla target
# CHECK: bltlrl 2 # encoding: [0x4d,0x88,0x00,0x21]
@@ -163,8 +167,12 @@
blectr 2
# CHECK: blectr 0 # encoding: [0x4c,0x81,0x04,0x20]
blectr
-# FIXME: blel 2, target
-# FIXME: blel target
+# CHECK: blel 2, target # encoding: [0x40,0x89,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ blel 2, target
+# CHECK: blel 0, target # encoding: [0x40,0x81,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ blel target
# FIXME: blela 2, target
# FIXME: blela target
# CHECK: blelrl 2 # encoding: [0x4c,0x89,0x00,0x21]
@@ -192,8 +200,12 @@
beqctr 2
# CHECK: beqctr 0 # encoding: [0x4d,0x82,0x04,0x20]
beqctr
-# FIXME: beql 2, target
-# FIXME: beql target
+# CHECK: beql 2, target # encoding: [0x41,0x8a,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ beql 2, target
+# CHECK: beql 0, target # encoding: [0x41,0x82,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ beql target
# FIXME: beqla 2, target
# FIXME: beqla target
# CHECK: beqlrl 2 # encoding: [0x4d,0x8a,0x00,0x21]
@@ -221,8 +233,12 @@
bgectr 2
# CHECK: bgectr 0 # encoding: [0x4c,0x80,0x04,0x20]
bgectr
-# FIXME: bgel 2, target
-# FIXME: bgel target
+# CHECK: bgel 2, target # encoding: [0x40,0x88,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bgel 2, target
+# CHECK: bgel 0, target # encoding: [0x40,0x80,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bgel target
# FIXME: bgela 2, target
# FIXME: bgela target
# CHECK: bgelrl 2 # encoding: [0x4c,0x88,0x00,0x21]
@@ -250,8 +266,12 @@
bgtctr 2
# CHECK: bgtctr 0 # encoding: [0x4d,0x81,0x04,0x20]
bgtctr
-# FIXME: bgtl 2, target
-# FIXME: bgtl target
+# CHECK: bgtl 2, target # encoding: [0x41,0x89,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bgtl 2, target
+# CHECK: bgtl 0, target # encoding: [0x41,0x81,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bgtl target
# FIXME: bgtla 2, target
# FIXME: bgtla target
# CHECK: bgtlrl 2 # encoding: [0x4d,0x89,0x00,0x21]
@@ -279,8 +299,12 @@
bnlctr 2
# CHECK: bgectr 0 # encoding: [0x4c,0x80,0x04,0x20]
bnlctr
-# FIXME: bnll 2, target
-# FIXME: bnll target
+# CHECK: bgel 2, target # encoding: [0x40,0x88,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnll 2, target
+# CHECK: bgel 0, target # encoding: [0x40,0x80,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnll target
# FIXME: bnlla 2, target
# FIXME: bnlla target
# CHECK: bgelrl 2 # encoding: [0x4c,0x88,0x00,0x21]
@@ -308,8 +332,12 @@
bnectr 2
# CHECK: bnectr 0 # encoding: [0x4c,0x82,0x04,0x20]
bnectr
-# FIXME: bnel 2, target
-# FIXME: bnel target
+# CHECK: bnel 2, target # encoding: [0x40,0x8a,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnel 2, target
+# CHECK: bnel 0, target # encoding: [0x40,0x82,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnel target
# FIXME: bnela 2, target
# FIXME: bnela target
# CHECK: bnelrl 2 # encoding: [0x4c,0x8a,0x00,0x21]
@@ -337,8 +365,12 @@
bngctr 2
# CHECK: blectr 0 # encoding: [0x4c,0x81,0x04,0x20]
bngctr
-# FIXME: bngl 2, target
-# FIXME: bngl target
+# CHECK: blel 2, target # encoding: [0x40,0x89,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bngl 2, target
+# CHECK: blel 0, target # encoding: [0x40,0x81,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bngl target
# FIXME: bngla 2, target
# FIXME: bngla target
# CHECK: blelrl 2 # encoding: [0x4c,0x89,0x00,0x21]
@@ -366,8 +398,12 @@
bsoctr 2
# CHECK: bunctr 0 # encoding: [0x4d,0x83,0x04,0x20]
bsoctr
-# FIXME: bsol 2, target
-# FIXME: bsol target
+# CHECK: bunl 2, target # encoding: [0x41,0x8b,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bsol 2, target
+# CHECK: bunl 0, target # encoding: [0x41,0x83,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bsol target
# FIXME: bsola 2, target
# FIXME: bsola target
# CHECK: bunlrl 2 # encoding: [0x4d,0x8b,0x00,0x21]
@@ -395,8 +431,12 @@
bnsctr 2
# CHECK: bnuctr 0 # encoding: [0x4c,0x83,0x04,0x20]
bnsctr
-# FIXME: bnsl 2, target
-# FIXME: bnsl target
+# CHECK: bnul 2, target # encoding: [0x40,0x8b,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnsl 2, target
+# CHECK: bnul 0, target # encoding: [0x40,0x83,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnsl target
# FIXME: bnsla 2, target
# FIXME: bnsla target
# CHECK: bnulrl 2 # encoding: [0x4c,0x8b,0x00,0x21]
@@ -424,8 +464,12 @@
bunctr 2
# CHECK: bunctr 0 # encoding: [0x4d,0x83,0x04,0x20]
bunctr
-# FIXME: bunl 2, target
-# FIXME: bunl target
+# CHECK: bunl 2, target # encoding: [0x41,0x8b,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bunl 2, target
+# CHECK: bunl 0, target # encoding: [0x41,0x83,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bunl target
# FIXME: bunla 2, target
# FIXME: bunla target
# CHECK: bunlrl 2 # encoding: [0x4d,0x8b,0x00,0x21]
@@ -453,8 +497,12 @@
bnuctr 2
# CHECK: bnuctr 0 # encoding: [0x4c,0x83,0x04,0x20]
bnuctr
-# FIXME: bnul 2, target
-# FIXME: bnul target
+# CHECK: bnul 2, target # encoding: [0x40,0x8b,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnul 2, target
+# CHECK: bnul 0, target # encoding: [0x40,0x83,A,0bAAAAAA01]
+# CHECK-NEXT: # fixup A - offset: 0, value: target, kind: fixup_ppc_brcond14
+ bnul target
# FIXME: bnula 2, target
# FIXME: bnula target
# CHECK: bnulrl 2 # encoding: [0x4c,0x8b,0x00,0x21]