Stoorx updated this revision to Diff 515707. Stoorx added a comment. Rebase & upload with context
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D148799/new/ https://reviews.llvm.org/D148799 Files: clang/include/clang/Basic/TargetInfo.h clang/lib/Basic/Targets/AArch64.cpp clang/lib/Basic/Targets/AArch64.h clang/lib/Basic/Targets/AMDGPU.h clang/lib/Basic/Targets/ARC.h clang/lib/Basic/Targets/ARM.cpp clang/lib/Basic/Targets/ARM.h clang/lib/Basic/Targets/AVR.h clang/lib/Basic/Targets/BPF.h clang/lib/Basic/Targets/CSKY.h clang/lib/Basic/Targets/DirectX.h clang/lib/Basic/Targets/Hexagon.h clang/lib/Basic/Targets/Lanai.h clang/lib/Basic/Targets/Le64.h clang/lib/Basic/Targets/LoongArch.h clang/lib/Basic/Targets/M68k.cpp clang/lib/Basic/Targets/M68k.h clang/lib/Basic/Targets/MSP430.h clang/lib/Basic/Targets/Mips.h clang/lib/Basic/Targets/NVPTX.h clang/lib/Basic/Targets/PNaCl.h clang/lib/Basic/Targets/PPC.h clang/lib/Basic/Targets/RISCV.h clang/lib/Basic/Targets/SPIR.h clang/lib/Basic/Targets/Sparc.h clang/lib/Basic/Targets/SystemZ.h clang/lib/Basic/Targets/TCE.h clang/lib/Basic/Targets/VE.h clang/lib/Basic/Targets/WebAssembly.h clang/lib/Basic/Targets/X86.h clang/lib/Basic/Targets/XCore.h clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGStmt.cpp
Index: clang/lib/CodeGen/CGStmt.cpp =================================================================== --- clang/lib/CodeGen/CGStmt.cpp +++ clang/lib/CodeGen/CGStmt.cpp @@ -2779,7 +2779,8 @@ "unwind clobber can't be used with asm goto"); // Add machine specific clobbers - std::string MachineClobbers = getTarget().getClobbers(); + std::string MachineClobbers = + static_cast<std::string>(getTarget().getClobbers()); if (!MachineClobbers.empty()) { if (!Constraints.empty()) Constraints += ','; Index: clang/lib/CodeGen/CGBuiltin.cpp =================================================================== --- clang/lib/CodeGen/CGBuiltin.cpp +++ clang/lib/CodeGen/CGBuiltin.cpp @@ -939,7 +939,8 @@ // 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 MachineClobbers = + static_cast<std::string>(CGF.getTarget().getClobbers()); if (!MachineClobbers.empty()) { Constraints += ','; Constraints += MachineClobbers; @@ -1082,7 +1083,8 @@ AsmOS << "$0, ${1:y}"; std::string Constraints = "=r,*Z,~{memory}"; - std::string MachineClobbers = CGF.getTarget().getClobbers(); + std::string MachineClobbers = + static_cast<std::string>(CGF.getTarget().getClobbers()); if (!MachineClobbers.empty()) { Constraints += ','; Constraints += MachineClobbers; Index: clang/lib/Basic/Targets/XCore.h =================================================================== --- clang/lib/Basic/Targets/XCore.h +++ clang/lib/Basic/Targets/XCore.h @@ -49,7 +49,9 @@ return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { static const char *const GCCRegNames[] = { Index: clang/lib/Basic/Targets/X86.h =================================================================== --- clang/lib/Basic/Targets/X86.h +++ clang/lib/Basic/Targets/X86.h @@ -262,8 +262,8 @@ StringRef Constraint, unsigned Size) const; std::string convertConstraint(const char *&Constraint) const override; - const char *getClobbers() const override { - return "~{dirflag},~{fpsr},~{flags}"; + const StringRef getClobbers() const override { + return llvm::StringLiteral("~{dirflag},~{fpsr},~{flags}"); } StringRef getConstraintRegister(StringRef Constraint, Index: clang/lib/Basic/Targets/WebAssembly.h =================================================================== --- clang/lib/Basic/Targets/WebAssembly.h +++ clang/lib/Basic/Targets/WebAssembly.h @@ -130,7 +130,7 @@ return false; } - const char *getClobbers() const final { return ""; } + const StringRef getClobbers() const final { return llvm::StringLiteral(""); } bool isCLZForZeroUndef() const final { return false; } Index: clang/lib/Basic/Targets/VE.h =================================================================== --- clang/lib/Basic/Targets/VE.h +++ clang/lib/Basic/Targets/VE.h @@ -69,7 +69,9 @@ } } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { static const char *const GCCRegNames[] = { Index: clang/lib/Basic/Targets/TCE.h =================================================================== --- clang/lib/Basic/Targets/TCE.h +++ clang/lib/Basic/Targets/TCE.h @@ -99,7 +99,9 @@ return std::nullopt; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; Index: clang/lib/Basic/Targets/SystemZ.h =================================================================== --- clang/lib/Basic/Targets/SystemZ.h +++ clang/lib/Basic/Targets/SystemZ.h @@ -106,9 +106,9 @@ return TargetInfo::convertConstraint(Constraint); } - const char *getClobbers() const override { + const StringRef getClobbers() const override { // FIXME: Is this really right? - return ""; + return llvm::StringLiteral(""); } BuiltinVaListKind getBuiltinVaListKind() const override { Index: clang/lib/Basic/Targets/Sparc.h =================================================================== --- clang/lib/Basic/Targets/Sparc.h +++ clang/lib/Basic/Targets/Sparc.h @@ -77,9 +77,9 @@ } return false; } - const char *getClobbers() const override { + const StringRef getClobbers() const override { // FIXME: Implement! - return ""; + return llvm::StringLiteral(""); } // No Sparc V7 for now, the backend doesn't support it anyway. Index: clang/lib/Basic/Targets/SPIR.h =================================================================== --- clang/lib/Basic/Targets/SPIR.h +++ clang/lib/Basic/Targets/SPIR.h @@ -164,7 +164,9 @@ return std::nullopt; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { return std::nullopt; Index: clang/lib/Basic/Targets/RISCV.h =================================================================== --- clang/lib/Basic/Targets/RISCV.h +++ clang/lib/Basic/Targets/RISCV.h @@ -60,7 +60,9 @@ return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { Index: clang/lib/Basic/Targets/PPC.h =================================================================== --- clang/lib/Basic/Targets/PPC.h +++ clang/lib/Basic/Targets/PPC.h @@ -330,7 +330,9 @@ return R; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } int getEHDataRegisterNumber(unsigned RegNo) const override { if (RegNo == 0) return 3; Index: clang/lib/Basic/Targets/PNaCl.h =================================================================== --- clang/lib/Basic/Targets/PNaCl.h +++ clang/lib/Basic/Targets/PNaCl.h @@ -69,7 +69,9 @@ return false; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } bool hasBitIntType() const override { return true; } }; Index: clang/lib/Basic/Targets/NVPTX.h =================================================================== --- clang/lib/Basic/Targets/NVPTX.h +++ clang/lib/Basic/Targets/NVPTX.h @@ -109,9 +109,9 @@ } } - const char *getClobbers() const override { + const StringRef getClobbers() const override { // FIXME: Is this really right? - return ""; + return llvm::StringLiteral(""); } BuiltinVaListKind getBuiltinVaListKind() const override { Index: clang/lib/Basic/Targets/Mips.h =================================================================== --- clang/lib/Basic/Targets/Mips.h +++ clang/lib/Basic/Targets/Mips.h @@ -278,7 +278,7 @@ return TargetInfo::convertConstraint(Constraint); } - const char *getClobbers() const override { + const StringRef 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. @@ -300,7 +300,7 @@ // FIXME: We should automatically clobber $1 only for inline assembly code // which actually uses it. This would allow LLVM to use $1 for inline // assembly operands if the user's assembly code doesn't use it. - return "~{$1}"; + return llvm::StringLiteral("~{$1}"); } bool handleTargetFeatures(std::vector<std::string> &Features, Index: clang/lib/Basic/Targets/MSP430.h =================================================================== --- clang/lib/Basic/Targets/MSP430.h +++ clang/lib/Basic/Targets/MSP430.h @@ -87,9 +87,9 @@ return false; } - const char *getClobbers() const override { + const StringRef getClobbers() const override { // FIXME: Is this really right? - return ""; + return llvm::StringLiteral(""); } BuiltinVaListKind getBuiltinVaListKind() const override { Index: clang/lib/Basic/Targets/M68k.h =================================================================== --- clang/lib/Basic/Targets/M68k.h +++ clang/lib/Basic/Targets/M68k.h @@ -49,7 +49,7 @@ bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &info) const override; std::optional<std::string> handleAsmEscapedChar(char EscChar) const override; - const char *getClobbers() const override; + const StringRef getClobbers() const override; BuiltinVaListKind getBuiltinVaListKind() const override; bool setCPU(const std::string &Name) override; }; Index: clang/lib/Basic/Targets/M68k.cpp =================================================================== --- clang/lib/Basic/Targets/M68k.cpp +++ clang/lib/Basic/Targets/M68k.cpp @@ -236,9 +236,9 @@ return std::string(1, *Constraint); } -const char *M68kTargetInfo::getClobbers() const { +const StringRef M68kTargetInfo::getClobbers() const { // FIXME: Is this really right? - return ""; + return llvm::StringLiteral(""); } TargetInfo::BuiltinVaListKind M68kTargetInfo::getBuiltinVaListKind() const { Index: clang/lib/Basic/Targets/LoongArch.h =================================================================== --- clang/lib/Basic/Targets/LoongArch.h +++ clang/lib/Basic/Targets/LoongArch.h @@ -51,7 +51,9 @@ return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override; Index: clang/lib/Basic/Targets/Le64.h =================================================================== --- clang/lib/Basic/Targets/Le64.h +++ clang/lib/Basic/Targets/Le64.h @@ -41,7 +41,9 @@ return TargetInfo::PNaClABIBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { return std::nullopt; Index: clang/lib/Basic/Targets/Lanai.h =================================================================== --- clang/lib/Basic/Targets/Lanai.h +++ clang/lib/Basic/Targets/Lanai.h @@ -87,7 +87,9 @@ return false; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } bool hasBitIntType() const override { return true; } }; Index: clang/lib/Basic/Targets/Hexagon.h =================================================================== --- clang/lib/Basic/Targets/Hexagon.h +++ clang/lib/Basic/Targets/Hexagon.h @@ -112,7 +112,9 @@ ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override; - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } static const char *getHexagonCPUSuffix(StringRef Name); Index: clang/lib/Basic/Targets/DirectX.h =================================================================== --- clang/lib/Basic/Targets/DirectX.h +++ clang/lib/Basic/Targets/DirectX.h @@ -77,7 +77,9 @@ return std::nullopt; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { return std::nullopt; Index: clang/lib/Basic/Targets/CSKY.h =================================================================== --- clang/lib/Basic/Targets/CSKY.h +++ clang/lib/Basic/Targets/CSKY.h @@ -82,7 +82,9 @@ bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &info) const override; - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override; Index: clang/lib/Basic/Targets/BPF.h =================================================================== --- clang/lib/Basic/Targets/BPF.h +++ clang/lib/Basic/Targets/BPF.h @@ -60,7 +60,9 @@ ArrayRef<Builtin::Info> getTargetBuiltins() const override; - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; Index: clang/lib/Basic/Targets/AVR.h =================================================================== --- clang/lib/Basic/Targets/AVR.h +++ clang/lib/Basic/Targets/AVR.h @@ -69,7 +69,9 @@ return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { static const char *const GCCRegNames[] = { Index: clang/lib/Basic/Targets/ARM.h =================================================================== --- clang/lib/Basic/Targets/ARM.h +++ clang/lib/Basic/Targets/ARM.h @@ -181,7 +181,7 @@ bool validateConstraintModifier(StringRef Constraint, char Modifier, unsigned Size, std::string &SuggestedModifier) const override; - const char *getClobbers() const override; + const StringRef getClobbers() const override; StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { Index: clang/lib/Basic/Targets/ARM.cpp =================================================================== --- clang/lib/Basic/Targets/ARM.cpp +++ clang/lib/Basic/Targets/ARM.cpp @@ -1244,9 +1244,9 @@ return true; } -const char *ARMTargetInfo::getClobbers() const { +const StringRef ARMTargetInfo::getClobbers() const { // FIXME: Is this really right? - return ""; + return llvm::StringLiteral(""); } TargetInfo::CallingConvCheckResult Index: clang/lib/Basic/Targets/ARC.h =================================================================== --- clang/lib/Basic/Targets/ARC.h +++ clang/lib/Basic/Targets/ARC.h @@ -48,7 +48,9 @@ return TargetInfo::VoidPtrBuiltinVaList; } - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override { static const char *const GCCRegNames[] = { Index: clang/lib/Basic/Targets/AMDGPU.h =================================================================== --- clang/lib/Basic/Targets/AMDGPU.h +++ clang/lib/Basic/Targets/AMDGPU.h @@ -117,7 +117,9 @@ bool hasBFloat16Type() const override { return isAMDGCN(getTriple()); } const char *getBFloat16Mangling() const override { return "u6__bf16"; }; - const char *getClobbers() const override { return ""; } + const StringRef getClobbers() const override { + return llvm::StringLiteral(""); + } ArrayRef<const char *> getGCCRegNames() const override; Index: clang/lib/Basic/Targets/AArch64.h =================================================================== --- clang/lib/Basic/Targets/AArch64.h +++ clang/lib/Basic/Targets/AArch64.h @@ -192,7 +192,7 @@ bool validateConstraintModifier(StringRef Constraint, char Modifier, unsigned Size, std::string &SuggestedModifier) const override; - const char *getClobbers() const override; + const StringRef getClobbers() const override; StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override { Index: clang/lib/Basic/Targets/AArch64.cpp =================================================================== --- clang/lib/Basic/Targets/AArch64.cpp +++ clang/lib/Basic/Targets/AArch64.cpp @@ -1295,7 +1295,9 @@ } } -const char *AArch64TargetInfo::getClobbers() const { return ""; } +const StringRef AArch64TargetInfo::getClobbers() const { + return llvm::StringLiteral(""); +} int AArch64TargetInfo::getEHDataRegisterNumber(unsigned RegNo) const { if (RegNo == 0) Index: clang/include/clang/Basic/TargetInfo.h =================================================================== --- clang/include/clang/Basic/TargetInfo.h +++ clang/include/clang/Basic/TargetInfo.h @@ -1178,7 +1178,7 @@ } /// Returns a string of target-specific clobbers, in LLVM format. - virtual const char *getClobbers() const = 0; + virtual const StringRef getClobbers() const = 0; /// Returns true if NaN encoding is IEEE 754-2008. /// Only MIPS allows a different encoding. @@ -1196,9 +1196,9 @@ return std::nullopt; } - const char *getDataLayoutString() const { + const std::string &getDataLayoutString() const { assert(!DataLayoutString.empty() && "Uninitialized DataLayout!"); - return DataLayoutString.c_str(); + return DataLayoutString; } struct GCCRegAlias {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits