craig.topper created this revision. craig.topper added reviewers: reames, asb, luismarques, kito-cheng. Herald added subscribers: luke, VincentWu, vkmr, frasercrmck, evandro, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, niosHD, sabuasal, simoncook, johnrusso, rbar, hiraditya, arichardson. Herald added a project: All. craig.topper requested review of this revision. Herald added subscribers: cfe-commits, pcwang-thead, eopXD, MaskRay. Herald added projects: clang, LLVM.
I believe this implies relationship was is documented in the current spec but may have been less clear in an older spec. We used to report an error so I think it should be ok to change this. Only someone expecting the error should be impacted. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145125 Files: clang/test/Driver/riscv-arch.c llvm/lib/Support/RISCVISAInfo.cpp Index: llvm/lib/Support/RISCVISAInfo.cpp =================================================================== --- llvm/lib/Support/RISCVISAInfo.cpp +++ llvm/lib/Support/RISCVISAInfo.cpp @@ -839,14 +839,6 @@ errc::invalid_argument, "standard user-level extension 'e' requires 'rv32'"); - // It's illegal to specify the 'd' (double-precision floating point) - // extension without also specifying the 'f' (single precision - // floating-point) extension. - // TODO: This has been removed in later specs, which specify that D implies F - if (HasD && !HasF) - return createStringError(errc::invalid_argument, - "d requires f extension to also be specified"); - if (HasZve32f && !HasF && !HasZfinx) return createStringError( errc::invalid_argument, @@ -876,6 +868,7 @@ return Error::success(); } +static const char *ImpliedExtsD[] = {"f"}; static const char *ImpliedExtsV[] = {"zvl128b", "zve64d", "f", "d"}; static const char *ImpliedExtsZfhmin[] = {"f"}; static const char *ImpliedExtsZfh[] = {"f"}; @@ -920,6 +913,7 @@ // Note: The table needs to be sorted by name. static constexpr ImpliedExtsEntry ImpliedExts[] = { + {{"d"}, {ImpliedExtsD}}, {{"v"}, {ImpliedExtsV}}, {{"xtheadvdot"}, {ImpliedExtsXTHeadVdot}}, {{"zcb"}, {ImpliedExtsZcb}}, Index: clang/test/Driver/riscv-arch.c =================================================================== --- clang/test/Driver/riscv-arch.c +++ clang/test/Driver/riscv-arch.c @@ -150,7 +150,7 @@ // RUN: %clang --target=riscv32-unknown-elf -march=rv32id -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32ID %s -// RV32ID: error: invalid arch name 'rv32id' +// RV32ID: "-target-feature" "+f" "-target-feature" "+d" // RUN: %clang --target=riscv32-unknown-elf -march=rv32l -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32L %s @@ -178,7 +178,7 @@ // RUN: %clang --target=riscv64-unknown-elf -march=rv64id -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64ID %s -// RV64ID: error: invalid arch name 'rv64id' +// RV64ID: "-target-feature" "+f" "-target-feature" "+d" // RUN: %clang --target=riscv64-unknown-elf -march=rv64l -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64L %s @@ -228,11 +228,6 @@ // RV64-EER: error: invalid arch name 'rv64e', // RV64-EER: standard user-level extension 'e' requires 'rv32' -// RUN: %clang --target=riscv32-unknown-elf -march=rv32id -### %s \ -// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-DER %s -// RV32-DER: error: invalid arch name 'rv32id', -// RV32-DER: d requires f extension to also be specified - // RUN: %clang --target=riscv32-unknown-elf -march=rv32izve32f -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-ZVE32F-ER %s // RV32-ZVE32F-ER: error: invalid arch name 'rv32izve32f',
Index: llvm/lib/Support/RISCVISAInfo.cpp =================================================================== --- llvm/lib/Support/RISCVISAInfo.cpp +++ llvm/lib/Support/RISCVISAInfo.cpp @@ -839,14 +839,6 @@ errc::invalid_argument, "standard user-level extension 'e' requires 'rv32'"); - // It's illegal to specify the 'd' (double-precision floating point) - // extension without also specifying the 'f' (single precision - // floating-point) extension. - // TODO: This has been removed in later specs, which specify that D implies F - if (HasD && !HasF) - return createStringError(errc::invalid_argument, - "d requires f extension to also be specified"); - if (HasZve32f && !HasF && !HasZfinx) return createStringError( errc::invalid_argument, @@ -876,6 +868,7 @@ return Error::success(); } +static const char *ImpliedExtsD[] = {"f"}; static const char *ImpliedExtsV[] = {"zvl128b", "zve64d", "f", "d"}; static const char *ImpliedExtsZfhmin[] = {"f"}; static const char *ImpliedExtsZfh[] = {"f"}; @@ -920,6 +913,7 @@ // Note: The table needs to be sorted by name. static constexpr ImpliedExtsEntry ImpliedExts[] = { + {{"d"}, {ImpliedExtsD}}, {{"v"}, {ImpliedExtsV}}, {{"xtheadvdot"}, {ImpliedExtsXTHeadVdot}}, {{"zcb"}, {ImpliedExtsZcb}}, Index: clang/test/Driver/riscv-arch.c =================================================================== --- clang/test/Driver/riscv-arch.c +++ clang/test/Driver/riscv-arch.c @@ -150,7 +150,7 @@ // RUN: %clang --target=riscv32-unknown-elf -march=rv32id -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32ID %s -// RV32ID: error: invalid arch name 'rv32id' +// RV32ID: "-target-feature" "+f" "-target-feature" "+d" // RUN: %clang --target=riscv32-unknown-elf -march=rv32l -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32L %s @@ -178,7 +178,7 @@ // RUN: %clang --target=riscv64-unknown-elf -march=rv64id -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64ID %s -// RV64ID: error: invalid arch name 'rv64id' +// RV64ID: "-target-feature" "+f" "-target-feature" "+d" // RUN: %clang --target=riscv64-unknown-elf -march=rv64l -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64L %s @@ -228,11 +228,6 @@ // RV64-EER: error: invalid arch name 'rv64e', // RV64-EER: standard user-level extension 'e' requires 'rv32' -// RUN: %clang --target=riscv32-unknown-elf -march=rv32id -### %s \ -// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-DER %s -// RV32-DER: error: invalid arch name 'rv32id', -// RV32-DER: d requires f extension to also be specified - // RUN: %clang --target=riscv32-unknown-elf -march=rv32izve32f -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-ZVE32F-ER %s // RV32-ZVE32F-ER: error: invalid arch name 'rv32izve32f',
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits