Author: phosek Date: Wed Feb 13 09:28:47 2019 New Revision: 353957 URL: http://llvm.org/viewvc/llvm-project?rev=353957&view=rev Log: [AArch64] Support reserving arbitrary general purpose registers
This is a follow up to D48580 and D48581 which allows reserving arbitrary general purpose registers with the exception of registers with special purpose (X8, X16-X18, X29, X30) and registers used by LLVM (X0, X19). This change also generalizes some of the existing logic to rely entirely on values generated from tablegen. Differential Revision: https://reviews.llvm.org/D56305 Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/ToolChains/Arch/AArch64.cpp cfe/trunk/test/Driver/aarch64-fixed-x-register.c Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=353957&r1=353956&r2=353957&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Wed Feb 13 09:28:47 2019 @@ -2134,7 +2134,7 @@ def mfix_cortex_a53_835769 : Flag<["-"], def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">, Group<m_aarch64_Features_Group>, HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">; -foreach i = {1-7,18,20} in +foreach i = {1-7,9-15,18,20-28} in def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_aarch64_Features_Group>, HelpText<"Reserve the "#i#" register (AArch64 only)">; Modified: cfe/trunk/lib/Driver/ToolChains/Arch/AArch64.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/AArch64.cpp?rev=353957&r1=353956&r2=353957&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Arch/AArch64.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/AArch64.cpp Wed Feb 13 09:28:47 2019 @@ -334,12 +334,54 @@ fp16_fml_fallthrough: if (Args.hasArg(options::OPT_ffixed_x7)) Features.push_back("+reserve-x7"); + if (Args.hasArg(options::OPT_ffixed_x9)) + Features.push_back("+reserve-x9"); + + if (Args.hasArg(options::OPT_ffixed_x10)) + Features.push_back("+reserve-x10"); + + if (Args.hasArg(options::OPT_ffixed_x11)) + Features.push_back("+reserve-x11"); + + if (Args.hasArg(options::OPT_ffixed_x12)) + Features.push_back("+reserve-x12"); + + if (Args.hasArg(options::OPT_ffixed_x13)) + Features.push_back("+reserve-x13"); + + if (Args.hasArg(options::OPT_ffixed_x14)) + Features.push_back("+reserve-x14"); + + if (Args.hasArg(options::OPT_ffixed_x15)) + Features.push_back("+reserve-x15"); + if (Args.hasArg(options::OPT_ffixed_x18)) Features.push_back("+reserve-x18"); if (Args.hasArg(options::OPT_ffixed_x20)) Features.push_back("+reserve-x20"); + if (Args.hasArg(options::OPT_ffixed_x21)) + Features.push_back("+reserve-x21"); + + if (Args.hasArg(options::OPT_ffixed_x22)) + Features.push_back("+reserve-x22"); + + if (Args.hasArg(options::OPT_ffixed_x23)) + Features.push_back("+reserve-x23"); + + if (Args.hasArg(options::OPT_ffixed_x24)) + Features.push_back("+reserve-x24"); + + if (Args.hasArg(options::OPT_ffixed_x26)) + Features.push_back("+reserve-x26"); + + if (Args.hasArg(options::OPT_ffixed_x27)) + Features.push_back("+reserve-x27"); + + if (Args.hasArg(options::OPT_ffixed_x28)) + Features.push_back("+reserve-x28"); + if (Args.hasArg(options::OPT_fcall_saved_x8)) Features.push_back("+call-saved-x8"); Modified: cfe/trunk/test/Driver/aarch64-fixed-x-register.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-fixed-x-register.c?rev=353957&r1=353956&r2=353957&view=diff ============================================================================== --- cfe/trunk/test/Driver/aarch64-fixed-x-register.c (original) +++ cfe/trunk/test/Driver/aarch64-fixed-x-register.c Wed Feb 13 09:28:47 2019 @@ -26,6 +26,34 @@ // RUN: FileCheck --check-prefix=CHECK-FIXED-X7 < %t %s // CHECK-FIXED-X7: "-target-feature" "+reserve-x7" +// RUN: %clang -target aarch64-none-gnu -ffixed-x9 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X9 < %t %s +// CHECK-FIXED-X9: "-target-feature" "+reserve-x9" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x10 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X10 < %t %s +// CHECK-FIXED-X10: "-target-feature" "+reserve-x10" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x11 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X11 < %t %s +// CHECK-FIXED-X11: "-target-feature" "+reserve-x11" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x12 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X12 < %t %s +// CHECK-FIXED-X12: "-target-feature" "+reserve-x12" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x13 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X13 < %t %s +// CHECK-FIXED-X13: "-target-feature" "+reserve-x13" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x14 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X14 < %t %s +// CHECK-FIXED-X14: "-target-feature" "+reserve-x14" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x15 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X15 < %t %s +// CHECK-FIXED-X15: "-target-feature" "+reserve-x15" + // RUN: %clang -target aarch64-none-gnu -ffixed-x18 -### %s 2> %t // RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s // CHECK-FIXED-X18: "-target-feature" "+reserve-x18" @@ -34,6 +62,38 @@ // RUN: FileCheck --check-prefix=CHECK-FIXED-X20 < %t %s // CHECK-FIXED-X20: "-target-feature" "+reserve-x20" +// RUN: %clang -target aarch64-none-gnu -ffixed-x21 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X21 < %t %s +// CHECK-FIXED-X21: "-target-feature" "+reserve-x21" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x22 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X22 < %t %s +// CHECK-FIXED-X22: "-target-feature" "+reserve-x22" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x23 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X23 < %t %s +// CHECK-FIXED-X23: "-target-feature" "+reserve-x23" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x24 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X24 < %t %s +// CHECK-FIXED-X24: "-target-feature" "+reserve-x24" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x25 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X25 < %t %s +// CHECK-FIXED-X25: "-target-feature" "+reserve-x25" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x26 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X26 < %t %s +// CHECK-FIXED-X26: "-target-feature" "+reserve-x26" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x27 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X27 < %t %s +// CHECK-FIXED-X27: "-target-feature" "+reserve-x27" + +// RUN: %clang -target aarch64-none-gnu -ffixed-x28 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X28 < %t %s +// CHECK-FIXED-X28: "-target-feature" "+reserve-x28" + // Test multiple of reserve-x# options together. // RUN: %clang -target aarch64-none-gnu \ // RUN: -ffixed-x1 \ @@ -55,8 +115,23 @@ // RUN: -ffixed-x5 \ // RUN: -ffixed-x6 \ // RUN: -ffixed-x7 \ +// RUN: -ffixed-x9 \ +// RUN: -ffixed-x10 \ +// RUN: -ffixed-x11 \ +// RUN: -ffixed-x12 \ +// RUN: -ffixed-x13 \ +// RUN: -ffixed-x14 \ +// RUN: -ffixed-x15 \ // RUN: -ffixed-x18 \ // RUN: -ffixed-x20 \ +// RUN: -ffixed-x21 \ +// RUN: -ffixed-x22 \ +// RUN: -ffixed-x23 \ +// RUN: -ffixed-x24 \ +// RUN: -ffixed-x25 \ +// RUN: -ffixed-x26 \ +// RUN: -ffixed-x27 \ +// RUN: -ffixed-x28 \ // RUN: -### %s 2> %t // RUN: FileCheck \ // RUN: --check-prefix=CHECK-FIXED-X1 \ @@ -66,6 +141,21 @@ // RUN: --check-prefix=CHECK-FIXED-X5 \ // RUN: --check-prefix=CHECK-FIXED-X6 \ // RUN: --check-prefix=CHECK-FIXED-X7 \ +// RUN: --check-prefix=CHECK-FIXED-X9 \ +// RUN: --check-prefix=CHECK-FIXED-X10 \ +// RUN: --check-prefix=CHECK-FIXED-X11 \ +// RUN: --check-prefix=CHECK-FIXED-X12 \ +// RUN: --check-prefix=CHECK-FIXED-X13 \ +// RUN: --check-prefix=CHECK-FIXED-X14 \ +// RUN: --check-prefix=CHECK-FIXED-X15 \ // RUN: --check-prefix=CHECK-FIXED-X18 \ // RUN: --check-prefix=CHECK-FIXED-X20 \ +// RUN: --check-prefix=CHECK-FIXED-X21 \ +// RUN: --check-prefix=CHECK-FIXED-X22 \ +// RUN: --check-prefix=CHECK-FIXED-X23 \ +// RUN: --check-prefix=CHECK-FIXED-X24 \ +// RUN: --check-prefix=CHECK-FIXED-X25 \ +// RUN: --check-prefix=CHECK-FIXED-X26 \ +// RUN: --check-prefix=CHECK-FIXED-X27 \ +// RUN: --check-prefix=CHECK-FIXED-X28 \ // RUN: < %t %s _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits