summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2016-08-24 21:21:29 +0000
committerTim Northover <tnorthover@apple.com>2016-08-24 21:21:29 +0000
commit9c3633f516fbc995abc46f4d0684d0a0411ccaca (patch)
tree2cf8a3203e2dad0d56c81243e720507e1025333e
parent8e7ea9ddb5bab4724216ce824b924d5349b6a703 (diff)
downloadbcm5719-llvm-9c3633f516fbc995abc46f4d0684d0a0411ccaca.tar.gz
bcm5719-llvm-9c3633f516fbc995abc46f4d0684d0a0411ccaca.zip
ARM: don't diagnose cbz/cbnz to Thumb functions.
A branch-distance to a Thumb function shouldn't be forced to be odd for CBZ/CBNZ instructions because (assuming it's within range), it's going to be a valid, even offset. llvm-svn: 279665
-rw-r--r--llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp3
-rw-r--r--llvm/test/MC/ARM/thumb-cb-offsets.s (renamed from llvm/test/MC/ARM/thumb-cb-negative-offsets.s)7
-rw-r--r--llvm/test/MC/ARM/thumb-cb-thumbfunc.s8
3 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index 64c51806b20..5342669f3d8 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -710,7 +710,8 @@ void ARMAsmBackend::processFixupValue(const MCAssembler &Asm,
(unsigned)Fixup.getKind() != ARM::fixup_arm_adr_pcrel_12 &&
(unsigned)Fixup.getKind() != ARM::fixup_thumb_adr_pcrel_10 &&
(unsigned)Fixup.getKind() != ARM::fixup_t2_adr_pcrel_12 &&
- (unsigned)Fixup.getKind() != ARM::fixup_arm_thumb_cp) {
+ (unsigned)Fixup.getKind() != ARM::fixup_arm_thumb_cp &&
+ (unsigned)Fixup.getKind() != ARM::fixup_arm_thumb_cb) {
if (Sym) {
if (Asm.isThumbFunc(Sym))
Value |= 1;
diff --git a/llvm/test/MC/ARM/thumb-cb-negative-offsets.s b/llvm/test/MC/ARM/thumb-cb-offsets.s
index 8abff68de14..3a70d4479fd 100644
--- a/llvm/test/MC/ARM/thumb-cb-negative-offsets.s
+++ b/llvm/test/MC/ARM/thumb-cb-offsets.s
@@ -24,6 +24,13 @@ label1:
label2:
nop
+@ CHECK: out of range pc-relative fixup value
+ cbz r0, label4
+ .space 33
+label4:
+ nop
+
+ .align 2
@ CHECK-NOT: label3
cbnz r0, label3
.space 128
diff --git a/llvm/test/MC/ARM/thumb-cb-thumbfunc.s b/llvm/test/MC/ARM/thumb-cb-thumbfunc.s
new file mode 100644
index 00000000000..12995f2a449
--- /dev/null
+++ b/llvm/test/MC/ARM/thumb-cb-thumbfunc.s
@@ -0,0 +1,8 @@
+@ RUN: llvm-mc -triple thumbv7-apple-macho -filetype=obj -o %t %s
+@ RUN: llvm-objdump -d -triple thumbv7 %t | FileCheck %s
+
+@ CHECK: cbnz r0, #0
+ .thumb_func label4
+ cbnz r0, label4
+ .space 2
+label4:
OpenPOWER on IntegriCloud