D57497 added -msmall-data-limit= as an alias for -G and defaulted it to 8 for -fno-pic/-fpie. The behavior is already different from GCC in a few ways: * GCC doesn't accept -G. * GCC -fpie doesn't seem to use -msmall-data-limit=. * GCC emits .srodata.cst* that we don't use (#82214). Writable contents caused confusion (https://bugs.chromium.org/p/llvm/issues/detail?id=61) In addition, * claiming `-shared` means we don't get a desired `-Wunused-command-line-argument` for `clang --target=riscv64-linux-gnu -fpic -c -shared a.c`. * -mcmodel=large doesn't work for RISC-V yet, so the special case is strange. * It's quite unusual to emit a warning when an option (unrelated to relocation model) is used with -fpic. * We don't want future configurations (Android) to continue adding customization to `SetRISCVSmallDataLimit`. I believe the extra code just doesn't pull its weight and should be cleaned up. This patch also changes the default to 0. GP relaxation users are encouraged to specify these customization options explicitly. Pull Request: https://github.com/llvm/llvm-project/pull/83093
47 lines
2.3 KiB
C
47 lines
2.3 KiB
C
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-DEFAULT
|
|
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -G4 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-G4
|
|
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -msmall-data-limit=0 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-S0
|
|
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -msmall-data-limit=2 -G4 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-S2G4
|
|
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -msmall-data-threshold=16 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-T16
|
|
// RUN: %clang --target=riscv32-unknown-elf %s -S -emit-llvm -fpic -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV32-PIC
|
|
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-DEFAULT
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -G4 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-G4
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -msmall-data-limit=0 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-S0
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -msmall-data-limit=2 -G4 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-S2G4
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -msmall-data-threshold=16 -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-T16
|
|
// RUN: %clang --target=riscv64-unknown-elf %s -S -emit-llvm -fpic -o - \
|
|
// RUN: | FileCheck %s -check-prefix=RV64-PIC
|
|
|
|
void test(void) {}
|
|
|
|
// RV32-DEFAULT: !{i32 8, !"SmallDataLimit", i32 0}
|
|
// RV32-G4: !{i32 8, !"SmallDataLimit", i32 4}
|
|
// RV32-S0: !{i32 8, !"SmallDataLimit", i32 0}
|
|
// RV32-S2G4: !{i32 8, !"SmallDataLimit", i32 4}
|
|
// RV32-T16: !{i32 8, !"SmallDataLimit", i32 16}
|
|
// RV32-PIC: !{i32 8, !"SmallDataLimit", i32 0}
|
|
|
|
// RV64-DEFAULT: !{i32 8, !"SmallDataLimit", i32 0}
|
|
// RV64-G4: !{i32 8, !"SmallDataLimit", i32 4}
|
|
// RV64-S0: !{i32 8, !"SmallDataLimit", i32 0}
|
|
// RV64-S2G4: !{i32 8, !"SmallDataLimit", i32 4}
|
|
// RV64-T16: !{i32 8, !"SmallDataLimit", i32 16}
|
|
// RV64-PIC: !{i32 8, !"SmallDataLimit", i32 0}
|
|
// RV64-LARGE: !{i32 8, !"SmallDataLimit", i32 0}
|
|
|
|
// The value will be passed by module flag instead of target feature.
|
|
// RV32-S0-NOT: +small-data-limit=
|
|
// RV64-S0-NOT: +small-data-limit=
|