Hi!

I am seeing multiple assembler errors with error message "Error:
conditional branch out of range" for customer code.

The root cause of the bug is that conditional branches are generated
whose branch target ends up being too far away to be encoded in the
instruction.  It appears that there was an attempt to fix this issue
in the below change:

commit 050af05b9761f1979f11c151519e7244d5becd7c
Author: thopre01 <thopre01@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Aug 27 10:08:54 2015 +0000

    2015-08-27  Ramana Radhakrishnan
<[ramana.radhakrish...@arm.com|mailto:ramana.radhakrish...@arm.com]>
                Andre Vieira
<[andre.simoesdiasvie...@arm.com|mailto:andre.simoesdiasvie...@arm.com]>

        gcc/
        * config/aarch64/[aarch64.md|http://aarch64.md/] (*condjump):
Handle functions > 1 MiB.
        (*cb<optab><mode>1): Likewise.
        (*tb<optab><mode>1): Likewise.
        (*cb<optab><mode>1): Likewise.
        * config/aarch64/[iterators.md|http://iterators.md/] (inv_cb):
New code attribute.
        (inv_tb): Likewise.
        * config/aarch64/aarch64.c (aarch64_gen_far_branch): New.
        * config/aarch64/aarch64-protos.h (aarch64_gen_far_branch): New.

        gcc/testsuite/
        * gcc.target/aarch64/long_branch_1.c: New test.

However, as per GCC Internal documentation, only special attribute
"length" should use PC and match_dup while defining an attribute. I
verified by looking at code in final pass, and realised that
get_attribute_length does not map directly to the functions generated
from the definition of attribute length in RTL patterns, but computes
the lengths in shorten_branches and uses insn_current_length as
intermediate function.

The far_branch attribute defined similar to attribute length expects
same values to be returned by (minus (match_dup 2) (pc)) which is
incorrect.

I am looking at TARGET_MACHINE_DEPENDENT_REORG macro instead like few
other architectures, to emit far branches.

Is that approach acceptable?

PS: I am waiting for customer's approval for attaching the test case.

-- 
- Thanks and regards,
  Sameera D.

Reply via email to