From 6a98c4a1602591c942f01dceb3aa29ffd4cf1e5b Mon Sep 17 00:00:00 2001 From: Jack Styles Date: Mon, 14 Oct 2024 12:31:50 +0100 Subject: [PATCH] =?UTF-8?q?Revert=20"[llvm][ARM]=20Add=20Addend=20Checks?= =?UTF-8?q?=20for=20MOVT=20and=20MOVW=20instructions.=E2=80=A6=20(#112184)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … (#111970)" I was made aware of breakages in Windows/ARM, so reverting while I investigate. This reverts commit f3aebe623b49b7ae14d0f0996999114aac052e4b. --- llvm/docs/ReleaseNotes.md | 5 ----- .../Target/ARM/MCTargetDesc/ARMAsmBackend.cpp | 10 ---------- llvm/test/MC/ARM/Windows/mov32t-range.s | 6 +++--- llvm/test/MC/ARM/arm-movt-movw-range-fail.s | 13 ------------- llvm/test/MC/ARM/arm-movt-movw-range-pass.s | 13 ------------- llvm/test/MC/ARM/macho-movwt.s | 16 ++++++++-------- llvm/test/MC/MachO/ARM/thumb2-movw-fixup.s | 10 +++++----- 7 files changed, 16 insertions(+), 57 deletions(-) delete mode 100644 llvm/test/MC/ARM/arm-movt-movw-range-fail.s delete mode 100644 llvm/test/MC/ARM/arm-movt-movw-range-pass.s diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index 6e37852b4574e..dcdd7a25c7fbe 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -125,11 +125,6 @@ Changes to the ARM Backend the required alignment space with a sequence of `0x0` bytes (the requested fill value) rather than NOPs. -* When using the `MOVT` or `MOVW` instructions, the Assembler will now check to - ensure that any addend that is used is within a 16-bit signed value range. If the - addend falls outside of this range, the LLVM backend will emit an error like so - `Relocation Not In Range`. - Changes to the AVR Backend -------------------------- diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp index eb8cb178d6d21..1223210a76f6e 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -34,7 +34,6 @@ #include "llvm/Support/EndianStream.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" -#include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -447,15 +446,6 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm, const MCSubtargetInfo* STI) const { unsigned Kind = Fixup.getKind(); - // For MOVW/MOVT Instructions, the fixup value must already be 16-bit aligned. - if ((Kind == ARM::fixup_arm_movw_lo16 || Kind == ARM::fixup_arm_movt_hi16 || - Kind == ARM::fixup_t2_movw_lo16 || Kind == ARM::fixup_t2_movt_hi16) && - (static_cast(Value) < minIntN(16) || - static_cast(Value) > maxIntN(16))) { - Ctx.reportError(Fixup.getLoc(), "Relocation Not In Range"); - return 0; - } - // MachO tries to make .o files that look vaguely pre-linked, so for MOVW/MOVT // and .word relocations they put the Thumb bit into the addend if possible. // Other relocation types don't want this bit though (branches couldn't encode diff --git a/llvm/test/MC/ARM/Windows/mov32t-range.s b/llvm/test/MC/ARM/Windows/mov32t-range.s index 386893a078de4..7e16105cddc6f 100644 --- a/llvm/test/MC/ARM/Windows/mov32t-range.s +++ b/llvm/test/MC/ARM/Windows/mov32t-range.s @@ -21,7 +21,7 @@ truncation: .section .rdata,"rd" .Lbuffer: - .zero 32767 + .zero 65536 .Lerange: .asciz "-erange" @@ -32,6 +32,6 @@ truncation: @ CHECK-RELOCATIONS: } @ CHECK-RELOCATIONS: ] -@ CHECK-ENCODING: 0: f647 70ff -@ CHECK-ENCODING-NEXT: 4: f2c0 0000 +@ CHECK-ENCODING: 0: f240 0000 +@ CHECK-ENCODING-NEXT: 4: f2c0 0001 diff --git a/llvm/test/MC/ARM/arm-movt-movw-range-fail.s b/llvm/test/MC/ARM/arm-movt-movw-range-fail.s deleted file mode 100644 index 2961b9bfcb64d..0000000000000 --- a/llvm/test/MC/ARM/arm-movt-movw-range-fail.s +++ /dev/null @@ -1,13 +0,0 @@ -@RUN: not llvm-mc -triple armv7-eabi -filetype obj -o - %s 2>&1 | FileCheck %s - - .global v - .text - movw r1, #:lower16:v + -65536 - movt r1, #:upper16:v + 65536 - -@CHECK: error: Relocation Not In Range -@CHECK: movw r1, #:lower16:v + -65536 -@CHECK: ^ -@CHECK: error: Relocation Not In Range -@CHECK: movt r1, #:upper16:v + 65536 -@CHECK: ^ diff --git a/llvm/test/MC/ARM/arm-movt-movw-range-pass.s b/llvm/test/MC/ARM/arm-movt-movw-range-pass.s deleted file mode 100644 index 41f19565a46c4..0000000000000 --- a/llvm/test/MC/ARM/arm-movt-movw-range-pass.s +++ /dev/null @@ -1,13 +0,0 @@ -@RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s 2>&1 | FileCheck %s - - .global v - .text - movw r1, #:lower16:v + -20000 - movt r1, #:upper16:v + 20000 - -@CHECK-NOT: error: Relocation Not In Range -@CHECK-NOT: movw r1, #:lower16:v + -20000 -@CHECK-NOT: ^ -@CHECK-NOT: error: Relocation Not In Range -@CHECK-NOT: movt r1, #:upper16:v + 20000 -@CHECK-NOT: ^ diff --git a/llvm/test/MC/ARM/macho-movwt.s b/llvm/test/MC/ARM/macho-movwt.s index b2c0587ca7fe5..6f067cd86dc15 100644 --- a/llvm/test/MC/ARM/macho-movwt.s +++ b/llvm/test/MC/ARM/macho-movwt.s @@ -8,8 +8,8 @@ movw r0, :lower16:_x+4 movt r0, :upper16:_x+4 - movw r0, :lower16:_x+0x1000 - movt r0, :upper16:_x+0x1000 + movw r0, :lower16:_x+0x10000 + movt r0, :upper16:_x+0x10000 .arm movw r0, :lower16:_x @@ -18,8 +18,8 @@ movw r0, :lower16:_x+4 movt r0, :upper16:_x+4 - movw r0, :lower16:_x+0x1000 - movt r0, :upper16:_x+0x1000 + movw r0, :lower16:_x+0x10000 + movt r0, :upper16:_x+0x10000 @ Enter the bizarre world of MachO relocations. First, they're in reverse order @ to the actual instructions @@ -30,10 +30,10 @@ @ Third column identifies ARM/Thumb & HI/LO. @ CHECK: 0x2C 0 1 1 ARM_RELOC_HALF 0 _x -@ CHECK: 0x1000 0 1 0 ARM_RELOC_PAIR 0 - +@ CHECK: 0x0 0 1 0 ARM_RELOC_PAIR 0 - @ CHECK: 0x28 0 0 1 ARM_RELOC_HALF 0 _x -@ CHECK: 0x0 0 0 0 ARM_RELOC_PAIR 0 - +@ CHECK: 0x1 0 0 0 ARM_RELOC_PAIR 0 - @ CHECK: 0x24 0 1 1 ARM_RELOC_HALF 0 _x @ CHECK: 0x4 0 1 0 ARM_RELOC_PAIR 0 - @@ -48,10 +48,10 @@ @ CHECK: 0x0 0 0 0 ARM_RELOC_PAIR 0 - @ CHECK: 0x14 0 3 1 ARM_RELOC_HALF 0 _x -@ CHECK: 0x1000 0 3 0 ARM_RELOC_PAIR 0 - +@ CHECK: 0x0 0 3 0 ARM_RELOC_PAIR 0 - @ CHECK: 0x10 0 2 1 ARM_RELOC_HALF 0 _x -@ CHECK: 0x0 0 2 0 ARM_RELOC_PAIR 0 - +@ CHECK: 0x1 0 2 0 ARM_RELOC_PAIR 0 - @ CHECK: 0xC 0 3 1 ARM_RELOC_HALF 0 _x @ CHECK: 0x4 0 3 0 ARM_RELOC_PAIR 0 - diff --git a/llvm/test/MC/MachO/ARM/thumb2-movw-fixup.s b/llvm/test/MC/MachO/ARM/thumb2-movw-fixup.s index 0d6f38325b1d3..18182d1affb06 100644 --- a/llvm/test/MC/MachO/ARM/thumb2-movw-fixup.s +++ b/llvm/test/MC/MachO/ARM/thumb2-movw-fixup.s @@ -11,7 +11,7 @@ movt r2, :upper16:L1 movw r12, :lower16:L2 movt r12, :upper16:L2 - .space 16382 + .space 70000 .data L1: .long 0 @@ -30,7 +30,7 @@ L2: .long 0 @ CHECK: Section: __data (2) @ CHECK: } @ CHECK: Relocation { -@ CHECK: Offset: 0x4012 +@ CHECK: Offset: 0x1184 @ CHECK: PCRel: 0 @ CHECK: Length: 3 @ CHECK: Type: ARM_RELOC_PAIR (1) @@ -44,7 +44,7 @@ L2: .long 0 @ CHECK: Section: __data (2) @ CHECK: } @ CHECK: Relocation { -@ CHECK: Offset: 0x0 +@ CHECK: Offset: 0x1 @ CHECK: PCRel: 0 @ CHECK: Length: 2 @ CHECK: Type: ARM_RELOC_PAIR (1) @@ -58,7 +58,7 @@ L2: .long 0 @ CHECK: Section: __data (2) @ CHECK: } @ CHECK: Relocation { -@ CHECK: Offset: 0x400E +@ CHECK: Offset: 0x1180 @ CHECK: PCRel: 0 @ CHECK: Length: 3 @ CHECK: Type: ARM_RELOC_PAIR (1) @@ -72,7 +72,7 @@ L2: .long 0 @ CHECK: Section: __data (2) @ CHECK: } @ CHECK: Relocation { -@ CHECK: Offset: 0x0 +@ CHECK: Offset: 0x1 @ CHECK: PCRel: 0 @ CHECK: Length: 2 @ CHECK: Type: ARM_RELOC_PAIR (1)