kito-cheng created this revision. kito-cheng added reviewers: asb, craig.topper, luismarques. Herald added subscribers: jobnoorman, 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, arichardson. Herald added a project: All. kito-cheng requested review of this revision. Herald added subscribers: cfe-commits, pcwang-thead, eopXD, MaskRay. Herald added a project: clang.
Our downstream toolchain release got some issue is we set the default triple by creating symbolic link of clang like `riscv64-unknown-elf-clang`, and has lots of multi-lib config including rv32's config. However when we trying to set arch by a 32 bit CPU like generic-rv32 but got error message below: error: unsupported argument 'generic-rv32' to option '-mcpu=' `generic-rv32` is listed in the output of `-mcpu=help`, that might be confusing for user since help message say supported. So let clang driver also consider -mcpu option during computing the target triple to archvie that. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D148124 Files: clang/lib/Driver/Driver.cpp clang/test/Driver/riscv-arch.c clang/test/Driver/riscv-cpus.c Index: clang/test/Driver/riscv-cpus.c =================================================================== --- clang/test/Driver/riscv-cpus.c +++ clang/test/Driver/riscv-cpus.c @@ -174,6 +174,3 @@ // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=generic-rv32 -march=rv64i | FileCheck -check-prefix=MISMATCH-ARCH %s // MISMATCH-ARCH: cpu 'generic-rv32' does not support rv64 - -// RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=generic-rv64 | FileCheck -check-prefix=MISMATCH-MCPU %s -// MISMATCH-MCPU: error: cpu 'generic-rv64' does not support rv32 Index: clang/test/Driver/riscv-arch.c =================================================================== --- clang/test/Driver/riscv-arch.c +++ clang/test/Driver/riscv-arch.c @@ -382,12 +382,20 @@ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s // RUN: %clang --target=riscv64-unknown-elf -march=rv32i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s +// RUN: %clang --target=riscv32-unknown-elf -mcpu=generic-rv32 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s +// RUN: %clang --target=riscv64-unknown-elf -mcpu=generic-rv32 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s // RV32-TARGET: "-triple" "riscv32-unknown-unknown-elf" // RUN: %clang --target=riscv32-unknown-elf -march=rv64i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s // RUN: %clang --target=riscv64-unknown-elf -march=rv64i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s +// RUN: %clang --target=riscv32-unknown-elf -mcpu=generic-rv64 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s +// RUN: %clang --target=riscv64-unknown-elf -mcpu=generic-rv64 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s // RV64-TARGET: "-triple" "riscv64-unknown-unknown-elf" // RUN: %clang --target=riscv32-unknown-elf -march=rv32ifzfh01p0 -### %s \ Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -12,6 +12,7 @@ #include "ToolChains/AMDGPUOpenMP.h" #include "ToolChains/AVR.h" #include "ToolChains/Ananas.h" +#include "ToolChains/Arch/RISCV.h" #include "ToolChains/BareMetal.h" #include "ToolChains/CSKYToolChain.h" #include "ToolChains/Clang.h" @@ -689,8 +690,9 @@ // If target is RISC-V adjust the target triple according to // provided architecture name if (Target.isRISCV()) { - if ((A = Args.getLastArg(options::OPT_march_EQ))) { - StringRef ArchName = A->getValue(); + if (Args.hasArg(options::OPT_march_EQ) || + Args.hasArg(options::OPT_mcpu_EQ)) { + StringRef ArchName = tools::riscv::getRISCVArch(Args, Target); if (ArchName.startswith_insensitive("rv32")) Target.setArch(llvm::Triple::riscv32); else if (ArchName.startswith_insensitive("rv64"))
Index: clang/test/Driver/riscv-cpus.c =================================================================== --- clang/test/Driver/riscv-cpus.c +++ clang/test/Driver/riscv-cpus.c @@ -174,6 +174,3 @@ // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=generic-rv32 -march=rv64i | FileCheck -check-prefix=MISMATCH-ARCH %s // MISMATCH-ARCH: cpu 'generic-rv32' does not support rv64 - -// RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=generic-rv64 | FileCheck -check-prefix=MISMATCH-MCPU %s -// MISMATCH-MCPU: error: cpu 'generic-rv64' does not support rv32 Index: clang/test/Driver/riscv-arch.c =================================================================== --- clang/test/Driver/riscv-arch.c +++ clang/test/Driver/riscv-arch.c @@ -382,12 +382,20 @@ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s // RUN: %clang --target=riscv64-unknown-elf -march=rv32i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s +// RUN: %clang --target=riscv32-unknown-elf -mcpu=generic-rv32 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s +// RUN: %clang --target=riscv64-unknown-elf -mcpu=generic-rv32 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-TARGET %s // RV32-TARGET: "-triple" "riscv32-unknown-unknown-elf" // RUN: %clang --target=riscv32-unknown-elf -march=rv64i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s // RUN: %clang --target=riscv64-unknown-elf -march=rv64i -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s +// RUN: %clang --target=riscv32-unknown-elf -mcpu=generic-rv64 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s +// RUN: %clang --target=riscv64-unknown-elf -mcpu=generic-rv64 -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64-TARGET %s // RV64-TARGET: "-triple" "riscv64-unknown-unknown-elf" // RUN: %clang --target=riscv32-unknown-elf -march=rv32ifzfh01p0 -### %s \ Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -12,6 +12,7 @@ #include "ToolChains/AMDGPUOpenMP.h" #include "ToolChains/AVR.h" #include "ToolChains/Ananas.h" +#include "ToolChains/Arch/RISCV.h" #include "ToolChains/BareMetal.h" #include "ToolChains/CSKYToolChain.h" #include "ToolChains/Clang.h" @@ -689,8 +690,9 @@ // If target is RISC-V adjust the target triple according to // provided architecture name if (Target.isRISCV()) { - if ((A = Args.getLastArg(options::OPT_march_EQ))) { - StringRef ArchName = A->getValue(); + if (Args.hasArg(options::OPT_march_EQ) || + Args.hasArg(options::OPT_mcpu_EQ)) { + StringRef ArchName = tools::riscv::getRISCVArch(Args, Target); if (ArchName.startswith_insensitive("rv32")) Target.setArch(llvm::Triple::riscv32); else if (ArchName.startswith_insensitive("rv64"))
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits