[PATCH] D149288: [X86] Introduce a large data threshold for the medium code model
James Y Knight via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 15 10:39:33 PDT 2023
jyknight added a comment.
`large-data-threshold` is ABI, and needs to have a default value which is the same as GCC, 65535. (And users should be discouraged from changing it.)
In many common cases you can get away with using different values in different object files, because cross-object references are going via PLT/GOT when the compiler doesn't know the definition is in-DSO. But that's definitely not a 100% solution -- e.g. `__attribute__((visibility("hidden")))` or ODR-data defined in a -fPIE object is known to be defined in-DSO, so will use a pc-relative reference.
================
Comment at: llvm/lib/Target/TargetMachine.cpp:50
+ const DataLayout &DL = GV->getParent()->getDataLayout();
+ return DL.getTypeSizeInBits(GV->getValueType()) / 8 >= LargeDataThreshold;
+ }
----------------
W also must handle unknown-sized objects as large here.
E.g. `clang -mcmodel=medium -fPIC` on
```
__attribute__((visibility("hidden"))) extern int x[];
int bar(void) { return x[0]; }
```
must refer to x via GOTOFF not pc-relative, because it _could_ be defined as large.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149288/new/
https://reviews.llvm.org/D149288
More information about the llvm-commits
mailing list