Skip to content

Commit 3da9615

Browse files
committed
Merge branch 'main' into i154669
# Conflicts: # clang/test/CodeGenHLSL/resources/res-array-local-multi-dim.hlsl # clang/test/CodeGenHLSL/resources/res-array-local1.hlsl # clang/test/CodeGenHLSL/resources/res-array-local3.hlsl
2 parents 307ef1a + 94b164c commit 3da9615

File tree

2,107 files changed

+196732
-76410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,107 files changed

+196732
-76410
lines changed

.ci/monolithic-windows.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ start-group "ninja"
5656
# Targets are not escaped as they are passed as separate arguments.
5757
ninja -C "${BUILD_DIR}" -k 0 ${targets} |& tee ninja.log
5858

59-
start-group "ninja runtimes"
60-
61-
ninja -C "${BUILD_DIR}" -k 0 ${runtimes_targets} |& tee ninja_runtimes.log
59+
if [[ "${runtime_targets}" != "" ]]; then
60+
start-group "ninja runtimes"
61+
62+
ninja -C "${BUILD_DIR}" -k 0 ${runtimes_targets} |& tee ninja_runtimes.log
63+
fi

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
/runtimes/ @llvm/reviewers-libcxx
1818

1919
/llvm/lib/Analysis/BasicAliasAnalysis.cpp @nikic
20+
/llvm/lib/Analysis/HashRecognize.cpp @artagnon @pfusik
2021
/llvm/lib/Analysis/InstructionSimplify.cpp @nikic
2122
/llvm/lib/Analysis/LazyValueInfo.cpp @nikic
2223
/llvm/lib/Analysis/ScalarEvolution.cpp @nikic

bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2517,10 +2517,8 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
25172517
createInstrIncMemory(const MCSymbol *Target, MCContext *Ctx, bool IsLeaf,
25182518
unsigned CodePointerSize) const override {
25192519
unsigned int I = 0;
2520-
InstructionListType Instrs(IsLeaf ? 12 : 10);
2520+
InstructionListType Instrs(10);
25212521

2522-
if (IsLeaf)
2523-
createStackPointerIncrement(Instrs[I++], 128);
25242522
createPushRegisters(Instrs[I++], AArch64::X0, AArch64::X1);
25252523
getSystemFlag(Instrs[I++], AArch64::X1);
25262524
InstructionListType Addr = materializeAddress(Target, Ctx, AArch64::X0);
@@ -2535,8 +2533,6 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
25352533
loadReg(Instrs[I++], AArch64::X2, AArch64::SP);
25362534
setSystemFlag(Instrs[I++], AArch64::X1);
25372535
createPopRegisters(Instrs[I++], AArch64::X0, AArch64::X1);
2538-
if (IsLeaf)
2539-
createStackPointerDecrement(Instrs[I++], 128);
25402536
return Instrs;
25412537
}
25422538

bolt/runtime/instr.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,9 +714,11 @@ static char *getBinaryPath() {
714714
uint32_t Ret = __readlink(FindBuf, TargetPath, sizeof(TargetPath));
715715
assert(Ret != -1 && Ret != BufSize, "readlink error");
716716
TargetPath[Ret] = '\0';
717+
__close(FDdir);
717718
return TargetPath;
718719
}
719720
}
721+
__close(FDdir);
720722
return nullptr;
721723
}
722724

clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class ReplaceAutoPtrCheck : public ClangTidyCheck {
4242
public:
4343
ReplaceAutoPtrCheck(StringRef Name, ClangTidyContext *Context);
4444
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
45-
return LangOpts.CPlusPlus;
45+
return LangOpts.CPlusPlus11;
4646
}
4747
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
4848
void registerMatchers(ast_matchers::MatchFinder *Finder) override;

clang-tools-extra/clang-tidy/modernize/UseAutoCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class UseAutoCheck : public ClangTidyCheck {
1717
public:
1818
UseAutoCheck(StringRef Name, ClangTidyContext *Context);
1919
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
20-
return LangOpts.CPlusPlus;
20+
return LangOpts.CPlusPlus11;
2121
}
2222
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
2323
void registerMatchers(ast_matchers::MatchFinder *Finder) override;

clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class UseEqualsDeleteCheck : public ClangTidyCheck {
2323
public:
2424
UseEqualsDeleteCheck(StringRef Name, ClangTidyContext *Context);
2525
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
26-
return LangOpts.CPlusPlus;
26+
return LangOpts.CPlusPlus11;
2727
}
2828
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
2929
void registerMatchers(ast_matchers::MatchFinder *Finder) override;

clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ class UseNullptrCheck : public ClangTidyCheck {
1717
public:
1818
UseNullptrCheck(StringRef Name, ClangTidyContext *Context);
1919
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
20-
// FIXME this should be CPlusPlus11 but that causes test cases to
21-
// erroneously fail.
22-
return LangOpts.CPlusPlus || LangOpts.C23;
20+
return LangOpts.CPlusPlus11 || LangOpts.C23;
2321
}
2422
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
2523
void registerMatchers(ast_matchers::MatchFinder *Finder) override;

clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct IntegerLiteralCheck {
2929
// integer (wb), and can be a complex number ('i', 'j'). In MS compatibility
3030
// mode, suffixes like i32 are supported.
3131
static constexpr llvm::StringLiteral Suffixes =
32-
llvm::StringLiteral("uUlLzZwWbBiIjJ");
32+
llvm::StringLiteral("uUlLzZwWiIjJ");
3333
};
3434

3535
struct FloatingLiteralCheck {

clang-tools-extra/clangd/ModulesBuilder.cpp

Lines changed: 105 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,13 @@ class FailedPrerequisiteModules : public PrerequisiteModules {
103103
}
104104
};
105105

106-
struct ModuleFile {
106+
/// Represents a reference to a module file (*.pcm).
107+
class ModuleFile {
108+
protected:
107109
ModuleFile(StringRef ModuleName, PathRef ModuleFilePath)
108110
: ModuleName(ModuleName.str()), ModuleFilePath(ModuleFilePath.str()) {}
109111

112+
public:
110113
ModuleFile() = delete;
111114

112115
ModuleFile(const ModuleFile &) = delete;
@@ -128,21 +131,58 @@ struct ModuleFile {
128131
new (this) ModuleFile(std::move(Other));
129132
return *this;
130133
}
131-
132-
~ModuleFile() {
133-
if (!ModuleFilePath.empty() && !DebugModulesBuilder)
134-
llvm::sys::fs::remove(ModuleFilePath);
135-
}
134+
virtual ~ModuleFile() = default;
136135

137136
StringRef getModuleName() const { return ModuleName; }
138137

139138
StringRef getModuleFilePath() const { return ModuleFilePath; }
140139

141-
private:
140+
protected:
142141
std::string ModuleName;
143142
std::string ModuleFilePath;
144143
};
145144

145+
/// Represents a prebuilt module file which is not owned by us.
146+
class PrebuiltModuleFile : public ModuleFile {
147+
private:
148+
// private class to make sure the class can only be constructed by member
149+
// functions.
150+
struct CtorTag {};
151+
152+
public:
153+
PrebuiltModuleFile(StringRef ModuleName, PathRef ModuleFilePath, CtorTag)
154+
: ModuleFile(ModuleName, ModuleFilePath) {}
155+
156+
static std::shared_ptr<PrebuiltModuleFile> make(StringRef ModuleName,
157+
PathRef ModuleFilePath) {
158+
return std::make_shared<PrebuiltModuleFile>(ModuleName, ModuleFilePath,
159+
CtorTag{});
160+
}
161+
};
162+
163+
/// Represents a module file built by us. We're responsible to remove it.
164+
class BuiltModuleFile : public ModuleFile {
165+
private:
166+
// private class to make sure the class can only be constructed by member
167+
// functions.
168+
struct CtorTag {};
169+
170+
public:
171+
BuiltModuleFile(StringRef ModuleName, PathRef ModuleFilePath, CtorTag)
172+
: ModuleFile(ModuleName, ModuleFilePath) {}
173+
174+
static std::shared_ptr<BuiltModuleFile> make(StringRef ModuleName,
175+
PathRef ModuleFilePath) {
176+
return std::make_shared<BuiltModuleFile>(ModuleName, ModuleFilePath,
177+
CtorTag{});
178+
}
179+
180+
virtual ~BuiltModuleFile() {
181+
if (!ModuleFilePath.empty() && !DebugModulesBuilder)
182+
llvm::sys::fs::remove(ModuleFilePath);
183+
}
184+
};
185+
146186
// ReusablePrerequisiteModules - stands for PrerequisiteModules for which all
147187
// the required modules are built successfully. All the module files
148188
// are owned by the modules builder.
@@ -171,9 +211,9 @@ class ReusablePrerequisiteModules : public PrerequisiteModules {
171211
std::string getAsString() const {
172212
std::string Result;
173213
llvm::raw_string_ostream OS(Result);
174-
for (const auto &ModuleFile : RequiredModules) {
175-
OS << "-fmodule-file=" << ModuleFile->getModuleName() << "="
176-
<< ModuleFile->getModuleFilePath() << " ";
214+
for (const auto &MF : RequiredModules) {
215+
OS << "-fmodule-file=" << MF->getModuleName() << "="
216+
<< MF->getModuleFilePath() << " ";
177217
}
178218
return Result;
179219
}
@@ -185,9 +225,9 @@ class ReusablePrerequisiteModules : public PrerequisiteModules {
185225
return BuiltModuleNames.contains(ModuleName);
186226
}
187227

188-
void addModuleFile(std::shared_ptr<const ModuleFile> ModuleFile) {
189-
BuiltModuleNames.insert(ModuleFile->getModuleName());
190-
RequiredModules.emplace_back(std::move(ModuleFile));
228+
void addModuleFile(std::shared_ptr<const ModuleFile> MF) {
229+
BuiltModuleNames.insert(MF->getModuleName());
230+
RequiredModules.emplace_back(std::move(MF));
191231
}
192232

193233
private:
@@ -265,7 +305,7 @@ bool IsModuleFilesUpToDate(
265305

266306
/// Build a module file for module with `ModuleName`. The information of built
267307
/// module file are stored in \param BuiltModuleFiles.
268-
llvm::Expected<ModuleFile>
308+
llvm::Expected<std::shared_ptr<BuiltModuleFile>>
269309
buildModuleFile(llvm::StringRef ModuleName, PathRef ModuleUnitFileName,
270310
const GlobalCompilationDatabase &CDB, const ThreadsafeFS &TFS,
271311
const ReusablePrerequisiteModules &BuiltModuleFiles) {
@@ -340,7 +380,7 @@ buildModuleFile(llvm::StringRef ModuleName, PathRef ModuleUnitFileName,
340380
ModuleUnitFileName));
341381
}
342382

343-
return ModuleFile{ModuleName, Inputs.CompileCommand.Output};
383+
return BuiltModuleFile::make(ModuleName, Inputs.CompileCommand.Output);
344384
}
345385

346386
bool ReusablePrerequisiteModules::canReuse(
@@ -509,10 +549,51 @@ class ModulesBuilder::ModulesBuilderImpl {
509549
ReusablePrerequisiteModules &BuiltModuleFiles);
510550

511551
private:
552+
/// Try to get prebuilt module files from the compilation database.
553+
void getPrebuiltModuleFile(StringRef ModuleName, PathRef ModuleUnitFileName,
554+
const ThreadsafeFS &TFS,
555+
ReusablePrerequisiteModules &BuiltModuleFiles);
556+
512557
ModuleFileCache Cache;
513558
ModuleNameToSourceCache ProjectModulesCache;
514559
};
515560

561+
void ModulesBuilder::ModulesBuilderImpl::getPrebuiltModuleFile(
562+
StringRef ModuleName, PathRef ModuleUnitFileName, const ThreadsafeFS &TFS,
563+
ReusablePrerequisiteModules &BuiltModuleFiles) {
564+
auto Cmd = getCDB().getCompileCommand(ModuleUnitFileName);
565+
if (!Cmd)
566+
return;
567+
568+
ParseInputs Inputs;
569+
Inputs.TFS = &TFS;
570+
Inputs.CompileCommand = std::move(*Cmd);
571+
572+
IgnoreDiagnostics IgnoreDiags;
573+
auto CI = buildCompilerInvocation(Inputs, IgnoreDiags);
574+
if (!CI)
575+
return;
576+
577+
// We don't need to check if the module files are in ModuleCache or adding
578+
// them to the module cache. As even if the module files are in the module
579+
// cache, we still need to validate them. And it looks not helpful to add them
580+
// to the module cache, since we may always try to get the prebuilt module
581+
// files before building the module files by ourselves.
582+
for (auto &[ModuleName, ModuleFilePath] :
583+
CI->getHeaderSearchOpts().PrebuiltModuleFiles) {
584+
if (BuiltModuleFiles.isModuleUnitBuilt(ModuleName))
585+
continue;
586+
587+
if (IsModuleFileUpToDate(ModuleFilePath, BuiltModuleFiles,
588+
TFS.view(std::nullopt))) {
589+
log("Reusing prebuilt module file {0} of module {1} for {2}",
590+
ModuleFilePath, ModuleName, ModuleUnitFileName);
591+
BuiltModuleFiles.addModuleFile(
592+
PrebuiltModuleFile::make(ModuleName, ModuleFilePath));
593+
}
594+
}
595+
}
596+
516597
llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
517598
PathRef RequiredSource, StringRef ModuleName, const ThreadsafeFS &TFS,
518599
CachingProjectModules &MDB, ReusablePrerequisiteModules &BuiltModuleFiles) {
@@ -532,6 +613,11 @@ llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
532613
return llvm::createStringError(
533614
llvm::formatv("Don't get the module unit for module {0}", ModuleName));
534615

616+
/// Try to get prebuilt module files from the compilation database first. This
617+
/// helps to avoid building the module files that are already built by the
618+
/// compiler.
619+
getPrebuiltModuleFile(ModuleName, ModuleUnitFileName, TFS, BuiltModuleFiles);
620+
535621
// Get Required modules in topological order.
536622
auto ReqModuleNames = getAllRequiredModules(RequiredSource, MDB, ModuleName);
537623
for (llvm::StringRef ReqModuleName : ReqModuleNames) {
@@ -551,15 +637,14 @@ llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
551637

552638
std::string ReqFileName =
553639
MDB.getSourceForModuleName(ReqModuleName, RequiredSource);
554-
llvm::Expected<ModuleFile> MF = buildModuleFile(
640+
llvm::Expected<std::shared_ptr<BuiltModuleFile>> MF = buildModuleFile(
555641
ReqModuleName, ReqFileName, getCDB(), TFS, BuiltModuleFiles);
556642
if (llvm::Error Err = MF.takeError())
557643
return Err;
558644

559-
log("Built module {0} to {1}", ReqModuleName, MF->getModuleFilePath());
560-
auto BuiltModuleFile = std::make_shared<const ModuleFile>(std::move(*MF));
561-
Cache.add(ReqModuleName, BuiltModuleFile);
562-
BuiltModuleFiles.addModuleFile(std::move(BuiltModuleFile));
645+
log("Built module {0} to {1}", ReqModuleName, (*MF)->getModuleFilePath());
646+
Cache.add(ReqModuleName, *MF);
647+
BuiltModuleFiles.addModuleFile(std::move(*MF));
563648
}
564649

565650
return llvm::Error::success();

0 commit comments

Comments
 (0)