diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index c011c792bff..b9b665fc1ea 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -6684,12 +6684,6 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst, return Error(Operands[Op]->getStartLoc(), "branch target out of range"); break; } - case ARM::tCBZ: - case ARM::tCBNZ: { - if (!static_cast(*Operands[2]).isUnsignedOffset<6, 1>()) - return Error(Operands[2]->getStartLoc(), "branch target out of range"); - break; - } case ARM::MOVi16: case ARM::t2MOVi16: case ARM::t2MOVTi16: diff --git a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp index 5ac2d65a89e..26f96ab77fe 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -578,11 +578,6 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCFixup &Fixup, uint64_t Value, // Offset by 4, and don't encode the low two bits. return ((Value - 4) >> 2) & 0xff; case ARM::fixup_arm_thumb_cb: { - // CB instructions can only branch to offsets in [0, 126] in multiples of 2 - if (Ctx && ((int64_t)Value < 0 || Value > 0x3e || Value & 1)) { - Ctx->reportError(Fixup.getLoc(), "out of range pc-relative fixup value"); - return 0; - } // Offset by 4 and don't encode the lower bit, which is always 0. // FIXME: diagnose if no Thumb2 uint32_t Binary = (Value - 4) >> 1; diff --git a/test/MC/ARM/thumb-cb-negative-offsets.s b/test/MC/ARM/thumb-cb-negative-offsets.s deleted file mode 100644 index cd70126ea95..00000000000 --- a/test/MC/ARM/thumb-cb-negative-offsets.s +++ /dev/null @@ -1,19 +0,0 @@ -@ RUN: not llvm-mc -triple thumbv7m-none-eabi -filetype=obj -o /dev/null %s 2>&1 | FileCheck %s -@ RUN: not llvm-mc -triple thumbv8m.base-none-eabi -filetype=obj -o /dev/null %s 2>&1 | FileCheck %s - -label0: - .word 4 - -@ CHECK: out of range pc-relative fixup value - cbz r0, label0 -@ CHECK: out of range pc-relative fixup value - cbnz r0, label0 - -@ CHECK: out of range pc-relative fixup value - cbz r0, label1 -@ CHECK: out of range pc-relative fixup value - cbnz r0, label1 - - .space 1000 -label1: - .word 4 diff --git a/test/MC/ARM/thumb-diagnostics.s b/test/MC/ARM/thumb-diagnostics.s index 65d8ed6f073..5dcac90a901 100644 --- a/test/MC/ARM/thumb-diagnostics.s +++ b/test/MC/ARM/thumb-diagnostics.s @@ -234,23 +234,6 @@ error: invalid operand for instruction @ CHECK-ERRORS: error: branch target out of range @ CHECK-ERRORS: error: branch target out of range -@------------------------------------------------------------------------------ -@ CBZ/CBNZ - out of range immediates for branches -@------------------------------------------------------------------------------ - - cbz r0, #-2 - cbz r0, #0 - cbz r0, #17 - cbnz r0, #126 - cbnz r0, #128 - -@ CHECK-ERRORS-V7M: error: branch target out of range -@ CHECK-ERRORS-V7M: error: invalid operand for instruction -@ CHECK-ERRORS-V7M: error: branch target out of range -@ CHECK-ERRORS-V8: error: branch target out of range -@ CHECK-ERRORS-V8: error: invalid operand for instruction -@ CHECK-ERRORS-V8: error: branch target out of range - @------------------------------------------------------------------------------ @ SEV/WFE/WFI/YIELD - are not supported pre v6M or v6T2 @------------------------------------------------------------------------------