diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 9e4d099b2e4d0..741a62e18f3ce 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1178,7 +1178,7 @@ class TargetInfo : public TransferrableTargetInfo, } /// Returns a string of target-specific clobbers, in LLVM format. - virtual const char *getClobbers() const = 0; + virtual std::string_view getClobbers() const = 0; /// Returns true if NaN encoding is IEEE 754-2008. /// Only MIPS allows a different encoding. diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 1711e16b46cdc..67ba5f6b35145 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -1295,7 +1295,7 @@ bool AArch64TargetInfo::validateConstraintModifier( } } -const char *AArch64TargetInfo::getClobbers() const { return ""; } +std::string_view AArch64TargetInfo::getClobbers() const { return ""; } int AArch64TargetInfo::getEHDataRegisterNumber(unsigned RegNo) const { if (RegNo == 0) diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index c973efc21bde2..967a888f6b6f8 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -192,7 +192,7 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo { bool validateConstraintModifier(StringRef Constraint, char Modifier, unsigned Size, std::string &SuggestedModifier) const override; - const char *getClobbers() const override; + std::string_view getClobbers() const override; StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index ab8482b3df9a6..0c65fa6c64463 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -117,7 +117,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { bool hasBFloat16Type() const override { return isAMDGCN(getTriple()); } const char *getBFloat16Mangling() const override { return "u6__bf16"; }; - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override; diff --git a/clang/lib/Basic/Targets/ARC.h b/clang/lib/Basic/Targets/ARC.h index 60435ff824c52..fcbfdd6eec586 100644 --- a/clang/lib/Basic/Targets/ARC.h +++ b/clang/lib/Basic/Targets/ARC.h @@ -48,7 +48,7 @@ class LLVM_LIBRARY_VISIBILITY ARCTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { static const char *const GCCRegNames[] = { diff --git a/clang/lib/Basic/Targets/ARM.cpp b/clang/lib/Basic/Targets/ARM.cpp index a0ffbcf78001e..588357c83bfa8 100644 --- a/clang/lib/Basic/Targets/ARM.cpp +++ b/clang/lib/Basic/Targets/ARM.cpp @@ -1244,7 +1244,7 @@ bool ARMTargetInfo::validateConstraintModifier( return true; } -const char *ARMTargetInfo::getClobbers() const { +std::string_view ARMTargetInfo::getClobbers() const { // FIXME: Is this really right? return ""; } diff --git a/clang/lib/Basic/Targets/ARM.h b/clang/lib/Basic/Targets/ARM.h index a9956193cb4a6..b1aa2794c7e4c 100644 --- a/clang/lib/Basic/Targets/ARM.h +++ b/clang/lib/Basic/Targets/ARM.h @@ -181,7 +181,7 @@ class LLVM_LIBRARY_VISIBILITY ARMTargetInfo : public TargetInfo { bool validateConstraintModifier(StringRef Constraint, char Modifier, unsigned Size, std::string &SuggestedModifier) const override; - const char *getClobbers() const override; + std::string_view getClobbers() const override; StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { diff --git a/clang/lib/Basic/Targets/AVR.h b/clang/lib/Basic/Targets/AVR.h index e5d683a27c6d5..854a51d78c393 100644 --- a/clang/lib/Basic/Targets/AVR.h +++ b/clang/lib/Basic/Targets/AVR.h @@ -69,7 +69,7 @@ class LLVM_LIBRARY_VISIBILITY AVRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { static const char *const GCCRegNames[] = { diff --git a/clang/lib/Basic/Targets/BPF.h b/clang/lib/Basic/Targets/BPF.h index d16f1d39fcab4..8a9227bca34c6 100644 --- a/clang/lib/Basic/Targets/BPF.h +++ b/clang/lib/Basic/Targets/BPF.h @@ -60,7 +60,7 @@ class LLVM_LIBRARY_VISIBILITY BPFTargetInfo : public TargetInfo { ArrayRef getTargetBuiltins() const override; - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; diff --git a/clang/lib/Basic/Targets/CSKY.h b/clang/lib/Basic/Targets/CSKY.h index 2346408f0f943..11404e37db368 100644 --- a/clang/lib/Basic/Targets/CSKY.h +++ b/clang/lib/Basic/Targets/CSKY.h @@ -82,7 +82,7 @@ class LLVM_LIBRARY_VISIBILITY CSKYTargetInfo : public TargetInfo { bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &info) const override; - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override; diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h index cb8fad2a29066..acfcc8c47ba95 100644 --- a/clang/lib/Basic/Targets/DirectX.h +++ b/clang/lib/Basic/Targets/DirectX.h @@ -77,7 +77,7 @@ class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo { return std::nullopt; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { return std::nullopt; diff --git a/clang/lib/Basic/Targets/Hexagon.h b/clang/lib/Basic/Targets/Hexagon.h index 18df2fc337e6d..cdb47dbae7999 100644 --- a/clang/lib/Basic/Targets/Hexagon.h +++ b/clang/lib/Basic/Targets/Hexagon.h @@ -112,7 +112,7 @@ class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo { ArrayRef getGCCRegAliases() const override; - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } static const char *getHexagonCPUSuffix(StringRef Name); diff --git a/clang/lib/Basic/Targets/Lanai.h b/clang/lib/Basic/Targets/Lanai.h index 2b97f498a1854..144cbc7de9893 100644 --- a/clang/lib/Basic/Targets/Lanai.h +++ b/clang/lib/Basic/Targets/Lanai.h @@ -87,7 +87,7 @@ class LLVM_LIBRARY_VISIBILITY LanaiTargetInfo : public TargetInfo { return false; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } bool hasBitIntType() const override { return true; } }; diff --git a/clang/lib/Basic/Targets/Le64.h b/clang/lib/Basic/Targets/Le64.h index 60b6295853b5d..45f6a4e9dd75d 100644 --- a/clang/lib/Basic/Targets/Le64.h +++ b/clang/lib/Basic/Targets/Le64.h @@ -41,7 +41,7 @@ class LLVM_LIBRARY_VISIBILITY Le64TargetInfo : public TargetInfo { return TargetInfo::PNaClABIBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { return std::nullopt; diff --git a/clang/lib/Basic/Targets/LoongArch.h b/clang/lib/Basic/Targets/LoongArch.h index 9711b8018ea27..52c4ce4253689 100644 --- a/clang/lib/Basic/Targets/LoongArch.h +++ b/clang/lib/Basic/Targets/LoongArch.h @@ -51,7 +51,7 @@ class LLVM_LIBRARY_VISIBILITY LoongArchTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override; diff --git a/clang/lib/Basic/Targets/M68k.cpp b/clang/lib/Basic/Targets/M68k.cpp index c83c5389e3b9d..437ad7253a31c 100644 --- a/clang/lib/Basic/Targets/M68k.cpp +++ b/clang/lib/Basic/Targets/M68k.cpp @@ -236,7 +236,7 @@ std::string M68kTargetInfo::convertConstraint(const char *&Constraint) const { return std::string(1, *Constraint); } -const char *M68kTargetInfo::getClobbers() const { +std::string_view M68kTargetInfo::getClobbers() const { // FIXME: Is this really right? return ""; } diff --git a/clang/lib/Basic/Targets/M68k.h b/clang/lib/Basic/Targets/M68k.h index 0d1b37632634a..dea9b59334919 100644 --- a/clang/lib/Basic/Targets/M68k.h +++ b/clang/lib/Basic/Targets/M68k.h @@ -49,7 +49,7 @@ class LLVM_LIBRARY_VISIBILITY M68kTargetInfo : public TargetInfo { bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &info) const override; std::optional handleAsmEscapedChar(char EscChar) const override; - const char *getClobbers() const override; + std::string_view getClobbers() const override; BuiltinVaListKind getBuiltinVaListKind() const override; bool setCPU(const std::string &Name) override; }; diff --git a/clang/lib/Basic/Targets/MSP430.h b/clang/lib/Basic/Targets/MSP430.h index f60c574cab713..25639b8c1e0ad 100644 --- a/clang/lib/Basic/Targets/MSP430.h +++ b/clang/lib/Basic/Targets/MSP430.h @@ -87,7 +87,7 @@ class LLVM_LIBRARY_VISIBILITY MSP430TargetInfo : public TargetInfo { return false; } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // FIXME: Is this really right? return ""; } diff --git a/clang/lib/Basic/Targets/Mips.h b/clang/lib/Basic/Targets/Mips.h index e368b9d01a375..7ecbd8633cb34 100644 --- a/clang/lib/Basic/Targets/Mips.h +++ b/clang/lib/Basic/Targets/Mips.h @@ -278,7 +278,7 @@ class LLVM_LIBRARY_VISIBILITY MipsTargetInfo : public TargetInfo { return TargetInfo::convertConstraint(Constraint); } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // In GCC, $1 is not widely used in generated code (it's used only in a few // specific situations), so there is no real need for users to add it to // the clobbers list if they want to use it in their inline assembly code. diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 47f61f249ace1..d3c013963064e 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -109,7 +109,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { } } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // FIXME: Is this really right? return ""; } diff --git a/clang/lib/Basic/Targets/PNaCl.h b/clang/lib/Basic/Targets/PNaCl.h index 361ef795ec5a0..595c4d83b1d1c 100644 --- a/clang/lib/Basic/Targets/PNaCl.h +++ b/clang/lib/Basic/Targets/PNaCl.h @@ -69,7 +69,7 @@ class LLVM_LIBRARY_VISIBILITY PNaClTargetInfo : public TargetInfo { return false; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } bool hasBitIntType() const override { return true; } }; diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h index 8564fc0346406..bc06e7978ac3b 100644 --- a/clang/lib/Basic/Targets/PPC.h +++ b/clang/lib/Basic/Targets/PPC.h @@ -330,7 +330,7 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetInfo : public TargetInfo { return R; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } int getEHDataRegisterNumber(unsigned RegNo) const override { if (RegNo == 0) return 3; diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h index d0e94d477a5b8..f8240e7f09483 100644 --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -60,7 +60,7 @@ class RISCVTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 3135c660cf8a0..a7ea03e7a5dd3 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -164,7 +164,7 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return std::nullopt; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { return std::nullopt; diff --git a/clang/lib/Basic/Targets/Sparc.h b/clang/lib/Basic/Targets/Sparc.h index 51e07e7d0030e..214fef88e1dcd 100644 --- a/clang/lib/Basic/Targets/Sparc.h +++ b/clang/lib/Basic/Targets/Sparc.h @@ -77,7 +77,7 @@ class LLVM_LIBRARY_VISIBILITY SparcTargetInfo : public TargetInfo { } return false; } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // FIXME: Implement! return ""; } diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h index 3df4284d4c4f4..e8c0831a3e76e 100644 --- a/clang/lib/Basic/Targets/SystemZ.h +++ b/clang/lib/Basic/Targets/SystemZ.h @@ -106,7 +106,7 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo { return TargetInfo::convertConstraint(Constraint); } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // FIXME: Is this really right? return ""; } diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index 202554a336ab5..dcf684fe6dbc0 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -99,7 +99,7 @@ class LLVM_LIBRARY_VISIBILITY TCETargetInfo : public TargetInfo { return std::nullopt; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; diff --git a/clang/lib/Basic/Targets/VE.h b/clang/lib/Basic/Targets/VE.h index c0b79fbde1a37..ea9a092cad809 100644 --- a/clang/lib/Basic/Targets/VE.h +++ b/clang/lib/Basic/Targets/VE.h @@ -69,7 +69,7 @@ class LLVM_LIBRARY_VISIBILITY VETargetInfo : public TargetInfo { } } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { static const char *const GCCRegNames[] = { diff --git a/clang/lib/Basic/Targets/WebAssembly.h b/clang/lib/Basic/Targets/WebAssembly.h index 81e3d2b648419..9484898fe1c57 100644 --- a/clang/lib/Basic/Targets/WebAssembly.h +++ b/clang/lib/Basic/Targets/WebAssembly.h @@ -130,7 +130,7 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : public TargetInfo { return false; } - const char *getClobbers() const final { return ""; } + std::string_view getClobbers() const final { return ""; } bool isCLZForZeroUndef() const final { return false; } diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 6cefda7fa49f6..844218596ef79 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -262,7 +262,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public TargetInfo { StringRef Constraint, unsigned Size) const; std::string convertConstraint(const char *&Constraint) const override; - const char *getClobbers() const override { + std::string_view getClobbers() const override { return "~{dirflag},~{fpsr},~{flags}"; } diff --git a/clang/lib/Basic/Targets/XCore.h b/clang/lib/Basic/Targets/XCore.h index 33eed507a53a4..a58d3e8acf479 100644 --- a/clang/lib/Basic/Targets/XCore.h +++ b/clang/lib/Basic/Targets/XCore.h @@ -49,7 +49,7 @@ class LLVM_LIBRARY_VISIBILITY XCoreTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + std::string_view getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { static const char *const GCCRegNames[] = { diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index ec1698c4117b8..803ad398c449e 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -939,7 +939,7 @@ static llvm::Value *EmitX86BitTestIntrinsic(CodeGenFunction &CGF, // Build the constraints. FIXME: We should support immediates when possible. std::string Constraints = "={@ccc},r,r,~{cc},~{memory}"; - std::string MachineClobbers = CGF.getTarget().getClobbers(); + std::string_view MachineClobbers = CGF.getTarget().getClobbers(); if (!MachineClobbers.empty()) { Constraints += ','; Constraints += MachineClobbers; @@ -1082,7 +1082,7 @@ static llvm::Value *emitPPCLoadReserveIntrinsic(CodeGenFunction &CGF, AsmOS << "$0, ${1:y}"; std::string Constraints = "=r,*Z,~{memory}"; - std::string MachineClobbers = CGF.getTarget().getClobbers(); + std::string_view MachineClobbers = CGF.getTarget().getClobbers(); if (!MachineClobbers.empty()) { Constraints += ','; Constraints += MachineClobbers; diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index af8edbf87f94c..dcbcba6aed7f4 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -2779,7 +2779,7 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) { "unwind clobber can't be used with asm goto"); // Add machine specific clobbers - std::string MachineClobbers = getTarget().getClobbers(); + std::string_view MachineClobbers = getTarget().getClobbers(); if (!MachineClobbers.empty()) { if (!Constraints.empty()) Constraints += ',';