diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index b8932b1d56a20..ab4bdd0930136 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -108,8 +108,8 @@ void addCygMingDefines(const LangOptions &Opts, MacroBuilder &Builder) { // Driver code //===----------------------------------------------------------------------===// -TargetInfo *AllocateTarget(const llvm::Triple &Triple, - const TargetOptions &Opts) { +std::unique_ptr AllocateTarget(const llvm::Triple &Triple, + const TargetOptions &Opts) { llvm::Triple::OSType os = Triple.getOS(); switch (Triple.getArch()) { @@ -117,159 +117,171 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, return nullptr; case llvm::Triple::arc: - return new ARCTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::xcore: - return new XCoreTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::hexagon: if (os == llvm::Triple::Linux && Triple.getEnvironment() == llvm::Triple::Musl) - return new LinuxTargetInfo(Triple, Opts); - return new HexagonTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::lanai: - return new LanaiTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::aarch64_32: if (Triple.isOSDarwin()) - return new DarwinAArch64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); return nullptr; case llvm::Triple::aarch64: if (Triple.isOSDarwin()) - return new DarwinAArch64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); switch (os) { case llvm::Triple::CloudABI: - return new CloudABITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::OpenHOS: - return new OHOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); } case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Win32: switch (Triple.getEnvironment()) { case llvm::Triple::GNU: - return new MinGWARM64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::MSVC: default: // Assume MSVC for unknown environments - return new MicrosoftARM64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } default: - return new AArch64leTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::aarch64_be: switch (os) { case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new AArch64beTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::arm: case llvm::Triple::thumb: if (Triple.isOSBinFormatMachO()) - return new DarwinARMTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); switch (os) { case llvm::Triple::CloudABI: - return new CloudABITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenHOS: - return new OHOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); } case llvm::Triple::LiteOS: - return new OHOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::Win32: switch (Triple.getEnvironment()) { case llvm::Triple::Cygnus: - return new CygwinARMTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::GNU: - return new MinGWARMTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::Itanium: - return new ItaniumWindowsARMleTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::MSVC: default: // Assume MSVC for unknown environments - return new MicrosoftARMleTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } default: - return new ARMleTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (Triple.isOSDarwin()) - return new DarwinARMTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new ARMbeTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::avr: - return new AVRTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::bpfeb: case llvm::Triple::bpfel: - return new BPFTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::msp430: - return new MSP430TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::mips: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new MipsTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::mipsel: @@ -277,372 +289,404 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Linux: switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenHOS: - return new OHOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); } case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new MipsTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::mips64: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new MipsTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::mips64el: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new MipsTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::m68k: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new M68kTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::le32: switch (os) { case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: return nullptr; } case llvm::Triple::le64: - return new Le64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::ppc: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::AIX: - return new AIXPPC32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); default: - return new PPC32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::ppcle: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new PPC32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::ppc64: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::Lv2: - return new PS3PPUTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::AIX: - return new AIXPPC64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); default: - return new PPC64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::ppc64le: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new PPC64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::nvptx: - return new NVPTXTargetInfo(Triple, Opts, /*TargetPointerWidth=*/32); + return std::make_unique(Triple, Opts, + /*TargetPointerWidth=*/32); case llvm::Triple::nvptx64: - return new NVPTXTargetInfo(Triple, Opts, /*TargetPointerWidth=*/64); + return std::make_unique(Triple, Opts, + /*TargetPointerWidth=*/64); case llvm::Triple::amdgcn: case llvm::Triple::r600: - return new AMDGPUTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::riscv32: // TODO: add cases for NetBSD, RTEMS once tested. switch (os) { case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new RISCV32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::riscv64: // TODO: add cases for NetBSD, RTEMS once tested. switch (os) { case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::OpenHOS: - return new OHOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); } default: - return new RISCV64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::sparc: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::Solaris: - return new SolarisTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new SparcV8TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } // The 'sparcel' architecture copies all the above cases except for Solaris. case llvm::Triple::sparcel: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::RTEMS: - return new RTEMSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new SparcV8elTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::sparcv9: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::Solaris: - return new SolarisTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::OpenBSD: - return new OpenBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new SparcV9TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::systemz: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::ZOS: - return new ZOSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new SystemZTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::tce: - return new TCETargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::tcele: - return new TCELETargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::x86: if (Triple.isOSDarwin()) - return new DarwinI386TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); switch (os) { case llvm::Triple::Ananas: - return new AnanasTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::CloudABI: - return new CloudABITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: { switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Android: - return new AndroidX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } } case llvm::Triple::DragonFly: - return new DragonFlyBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDI386TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDI386TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::KFreeBSD: - return new KFreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Minix: - return new MinixTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::Solaris: - return new SolarisTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Win32: { switch (Triple.getEnvironment()) { case llvm::Triple::Cygnus: - return new CygwinX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::GNU: - return new MinGWX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::Itanium: case llvm::Triple::MSVC: default: // Assume MSVC for unknown environments - return new MicrosoftX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } } case llvm::Triple::Haiku: - return new HaikuX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::RTEMS: - return new RTEMSX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::ELFIAMCU: - return new MCUX86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::Hurd: - return new HurdTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new X86_32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::x86_64: if (Triple.isOSDarwin() || Triple.isOSBinFormatMachO()) - return new DarwinX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); switch (os) { case llvm::Triple::Ananas: - return new AnanasTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::CloudABI: - return new CloudABITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Linux: { switch (Triple.getEnvironment()) { default: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Android: - return new AndroidX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::OpenHOS: - return new OHOSX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } } case llvm::Triple::DragonFly: - return new DragonFlyBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::NetBSD: - return new NetBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::OpenBSD: - return new OpenBSDX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::FreeBSD: - return new FreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::KFreeBSD: - return new KFreeBSDTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Solaris: - return new SolarisTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Win32: { switch (Triple.getEnvironment()) { case llvm::Triple::Cygnus: - return new CygwinX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::GNU: - return new MinGWX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::MSVC: default: // Assume MSVC for unknown environments - return new MicrosoftX86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } } case llvm::Triple::Haiku: - return new HaikuTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::NaCl: - return new NaClTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::PS4: - return new PS4OSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::PS5: - return new PS5OSTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new X86_64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::spir: { if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; - return new SPIR32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::spir64: { if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; - return new SPIR64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::spirv32: { if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; - return new SPIRV32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::spirv64: { if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; - return new SPIRV64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::wasm32: if (Triple.getSubArch() != llvm::Triple::NoSubArch || @@ -651,11 +695,14 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, return nullptr; switch (os) { case llvm::Triple::WASI: - return new WASITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Emscripten: - return new EmscriptenTargetInfo(Triple, Opts); + return std::make_unique>( + Triple, Opts); case llvm::Triple::UnknownOS: - return new WebAssemblyOSTargetInfo(Triple, Opts); + return std::make_unique>( + Triple, Opts); default: return nullptr; } @@ -666,45 +713,52 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, return nullptr; switch (os) { case llvm::Triple::WASI: - return new WASITargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::Emscripten: - return new EmscriptenTargetInfo(Triple, Opts); + return std::make_unique>( + Triple, Opts); case llvm::Triple::UnknownOS: - return new WebAssemblyOSTargetInfo(Triple, Opts); + return std::make_unique>( + Triple, Opts); default: return nullptr; } case llvm::Triple::dxil: - return new DirectXTargetInfo(Triple,Opts); + return std::make_unique(Triple, Opts); case llvm::Triple::renderscript32: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::renderscript64: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); case llvm::Triple::ve: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); case llvm::Triple::csky: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, Opts); default: - return new CSKYTargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new LoongArch32TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + return std::make_unique>(Triple, + Opts); default: - return new LoongArch64TargetInfo(Triple, Opts); + return std::make_unique(Triple, Opts); } } } @@ -720,7 +774,7 @@ TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, llvm::Triple Triple(Opts->Triple); // Construct the target - std::unique_ptr Target(AllocateTarget(Triple, *Opts)); + std::unique_ptr Target = AllocateTarget(Triple, *Opts); if (!Target) { Diags.Report(diag::err_target_unknown_triple) << Triple.str(); return nullptr; diff --git a/clang/lib/Basic/Targets.h b/clang/lib/Basic/Targets.h index a063204e69e67..b4d2486b5d2b1 100644 --- a/clang/lib/Basic/Targets.h +++ b/clang/lib/Basic/Targets.h @@ -24,8 +24,8 @@ namespace clang { namespace targets { LLVM_LIBRARY_VISIBILITY -clang::TargetInfo *AllocateTarget(const llvm::Triple &Triple, - const clang::TargetOptions &Opts); +std::unique_ptr +AllocateTarget(const llvm::Triple &Triple, const clang::TargetOptions &Opts); /// DefineStd - Define a macro name and standard variants. For example if /// MacroName is "unix", then this will define "__unix", "__unix__", and "unix" diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp index 7f4c5d83d8bd7..5eaa21e1a8f6a 100644 --- a/clang/lib/Basic/Targets/NVPTX.cpp +++ b/clang/lib/Basic/Targets/NVPTX.cpp @@ -73,7 +73,7 @@ NVPTXTargetInfo::NVPTXTargetInfo(const llvm::Triple &Triple, // types. llvm::Triple HostTriple(Opts.HostTriple); if (!HostTriple.isNVPTX()) - HostTarget.reset(AllocateTarget(llvm::Triple(Opts.HostTriple), Opts)); + HostTarget = AllocateTarget(llvm::Triple(Opts.HostTriple), Opts); // If no host target, make some guesses about the data layout and return. if (!HostTarget) { diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 5913719858346..3135c660cf8a0 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -111,7 +111,7 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { llvm::Triple HostTriple(Opts.HostTriple); if (!HostTriple.isSPIR() && !HostTriple.isSPIRV() && HostTriple.getArch() != llvm::Triple::UnknownArch) { - HostTarget.reset(AllocateTarget(llvm::Triple(Opts.HostTriple), Opts)); + HostTarget = AllocateTarget(llvm::Triple(Opts.HostTriple), Opts); // Copy properties from host target. BoolWidth = HostTarget->getBoolWidth();