07f7c00208
This patch adds the support required for using the __riscv_save and __riscv_restore libcalls to implement a size-optimization for prologue and epilogue code, whereby the spill and restore code of callee-saved registers is implemented by common functions to reduce code duplication. Logic is also included to ensure that if both this optimization and shrink wrapping are enabled then the prologue and epilogue code can be safely inserted into the basic blocks chosen by shrink wrapping. Differential Revision: https://reviews.llvm.org/D62686
34 lines
1.5 KiB
C
34 lines
1.5 KiB
C
// RUN: %clang -target riscv32-unknown-elf -### %s -fsyntax-only 2>&1 | FileCheck %s
|
|
// RUN: %clang -target riscv64-unknown-elf -### %s -fsyntax-only 2>&1 | FileCheck %s
|
|
|
|
// CHECK: fno-signed-char
|
|
|
|
// RUN: %clang -target riscv32-unknown-elf -### %s 2>&1 | FileCheck %s -check-prefix=DEFAULT
|
|
|
|
// RUN: %clang -target riscv32-unknown-elf -### %s -mrelax 2>&1 | FileCheck %s -check-prefix=RELAX
|
|
// RUN: %clang -target riscv32-unknown-elf -### %s -mno-relax 2>&1 | FileCheck %s -check-prefix=NO-RELAX
|
|
|
|
// RELAX: "-target-feature" "+relax"
|
|
// NO-RELAX: "-target-feature" "-relax"
|
|
// DEFAULT: "-target-feature" "+relax"
|
|
// DEFAULT-NOT: "-target-feature" "-relax"
|
|
|
|
// RUN: %clang -target riscv32-unknown-elf -### %s -msave-restore 2>&1 | FileCheck %s -check-prefix=SAVE-RESTORE
|
|
// RUN: %clang -target riscv32-unknown-elf -### %s -mno-save-restore 2>&1 | FileCheck %s -check-prefix=NO-SAVE-RESTORE
|
|
|
|
// SAVE-RESTORE: "-target-feature" "+save-restore"
|
|
// NO-SAVE-RESTORE: "-target-feature" "-save-restore"
|
|
// DEFAULT: "-target-feature" "-save-restore"
|
|
// DEFAULT-NOT: "-target-feature" "+save-restore"
|
|
|
|
// RUN: %clang -target riscv32-linux -### %s -fsyntax-only 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=DEFAULT-LINUX
|
|
// RUN: %clang -target riscv64-linux -### %s -fsyntax-only 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=DEFAULT-LINUX
|
|
|
|
// DEFAULT-LINUX: "-target-feature" "+m"
|
|
// DEFAULT-LINUX-SAME: "-target-feature" "+a"
|
|
// DEFAULT-LINUX-SAME: "-target-feature" "+f"
|
|
// DEFAULT-LINUX-SAME: "-target-feature" "+d"
|
|
// DEFAULT-LINUX-SAME: "-target-feature" "+c"
|