[PATCH] D25804: Fix 24560: assembler does not share constant pool for same constants

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 24 03:14:51 PDT 2016

rengolin added a comment.

In https://reviews.llvm.org/D25804#575584, @weimingz wrote:

> Regarding the out-of-range test, give a test like:
> foo1:
>  PUSH {r4-r6,lr}
>  LDR r7, =0x80808080
>  .space 0x1000
>  LDR r7, =0x80808080
> Existing llvm-mc gives "error: out of range pc-relative fixup value". Similarly, gnu-as gives "Error: invalid literal constant: pool needs to be closer"
>  Is our case, if the first LDR is valid (within the range), then following LDR to the same constant should be valid as well since we always put CP at the end.

I think this makes sense.

The side effects of the caching are of *removing* constants, not adding them, so if anything, the range of the original load should be shorter, not longer. The number of instructions are also the same, so overall, this should never increase the code/data in any way.

Also, whatever relocation didn't work before (negative, wrong range, wrong relocation), will keep not working, but that's nothing to do with the patch itself.




More information about the llvm-commits mailing list