Skip to content

Commit ce8fd32

Browse files
authored
Merge branch 'main' into mlir-scf2gpu-affineapply-crash
2 parents 599a5be + c6a79a5 commit ce8fd32

File tree

615 files changed

+51579
-48406
lines changed

Some content is hidden

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

615 files changed

+51579
-48406
lines changed

.github/workflows/build-metrics-container.yml

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,39 +21,19 @@ jobs:
2121
build-metrics-container:
2222
if: github.repository_owner == 'llvm'
2323
runs-on: ubuntu-24.04
24-
outputs:
25-
container-name: ${{ steps.vars.outputs.container-name }}
26-
container-name-tag: ${{ steps.vars.outputs.container-name-tag }}
27-
container-filename: ${{ steps.vars.outputs.container-filename }}
2824
steps:
2925
- name: Checkout LLVM
3026
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3127
with:
32-
sparse-checkout: .ci/metrics/
33-
- name: Write Variables
34-
id: vars
35-
run: |
36-
tag=`date +%s`
37-
container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/metrics"
38-
echo "container-name=$container_name" >> $GITHUB_OUTPUT
39-
echo "container-name-tag=$container_name:$tag" >> $GITHUB_OUTPUT
40-
echo "container-filename=$(echo $container_name:$tag | sed -e 's/\//-/g' -e 's/:/-/g').tar" >> $GITHUB_OUTPUT
28+
sparse-checkout: |
29+
.ci/metrics/
30+
.github/actions/build-container
4131
- name: Build Container
42-
working-directory: ./.ci/metrics
43-
run: |
44-
podman build -t ${{ steps.vars.outputs.container-name-tag }} -f Dockerfile .
45-
# Save the container so we have it in case the push fails. This also
46-
# allows us to separate the push step into a different job so we can
47-
# maintain minimal permissions while building the container.
48-
- name: Save Container Image
49-
run: |
50-
podman save ${{ steps.vars.outputs.container-name-tag }} > ${{ steps.vars.outputs.container-filename }}
51-
- name: Upload Container Image
52-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
32+
uses: ./.github/actions/build-container
5333
with:
54-
name: container
55-
path: ${{ steps.vars.outputs.container-filename }}
56-
retention-days: 14
34+
container-name: metrics
35+
context: .ci/metrics
36+
dockerfile: .ci/metrics/Dockerfile
5737

5838
push-metrics-container:
5939
if: github.event_name == 'push'
@@ -65,14 +45,12 @@ jobs:
6545
env:
6646
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6747
steps:
68-
- name: Download Container
69-
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
48+
- name: Checkout LLVM
49+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
50+
with:
51+
sparse-checkout: |
52+
.github/actions/push-container
53+
54+
- uses: ./.github/actions/push-container
7055
with:
71-
name: container
72-
- name: Push Container
73-
run: |
74-
podman load -i ${{ needs.build-metrics-container.outputs.container-filename }}
75-
podman tag ${{ needs.build-metrics-container.outputs.container-name-tag }} ${{ needs.build-metrics-container.outputs.container-name }}:latest
76-
podman login -u ${{ github.actor }} -p $GITHUB_TOKEN ghcr.io
77-
podman push ${{ needs.build-metrics-container.outputs.container-name-tag }}
78-
podman push ${{ needs.build-metrics-container.outputs.container-name }}:latest
56+
token: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/commit-access-review.py

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -170,80 +170,6 @@ def get_num_commits(gh: github.Github, user: str, start_date: datetime.datetime)
170170
return count
171171

172172

173-
def is_new_committer_query_repo(
174-
gh: github.Github, user: str, start_date: datetime.datetime
175-
) -> bool:
176-
"""
177-
Determine if ``user`` is a new committer. A new committer can keep their
178-
commit access even if they don't meet the criteria.
179-
"""
180-
variables = {
181-
"user": user,
182-
}
183-
184-
user_query = """
185-
query ($user: String!) {
186-
user(login: $user) {
187-
id
188-
}
189-
}
190-
"""
191-
192-
res_header, res_data = gh._Github__requester.graphql_query(
193-
query=user_query, variables=variables
194-
)
195-
data = res_data["data"]
196-
variables["owner"] = "llvm"
197-
variables["user_id"] = data["user"]["id"]
198-
variables["start_date"] = start_date.strftime("%Y-%m-%dT%H:%M:%S")
199-
200-
query = """
201-
query ($owner: String!, $user_id: ID!){
202-
organization(login: $owner) {
203-
repository(name: "llvm-project") {
204-
ref(qualifiedName: "main") {
205-
target {
206-
... on Commit {
207-
history(author: {id: $user_id }, first: 5) {
208-
nodes {
209-
committedDate
210-
}
211-
}
212-
}
213-
}
214-
}
215-
}
216-
}
217-
}
218-
"""
219-
220-
res_header, res_data = gh._Github__requester.graphql_query(
221-
query=query, variables=variables
222-
)
223-
data = res_data["data"]
224-
repo = data["organization"]["repository"]
225-
commits = repo["ref"]["target"]["history"]["nodes"]
226-
if len(commits) == 0:
227-
return True
228-
committed_date = commits[-1]["committedDate"]
229-
if datetime.datetime.strptime(committed_date, "%Y-%m-%dT%H:%M:%SZ") < start_date:
230-
return False
231-
return True
232-
233-
234-
def is_new_committer(
235-
gh: github.Github, user: str, start_date: datetime.datetime
236-
) -> bool:
237-
"""
238-
Wrapper around is_new_commiter_query_repo to handle exceptions.
239-
"""
240-
try:
241-
return is_new_committer_query_repo(gh, user, start_date)
242-
except:
243-
pass
244-
return True
245-
246-
247173
def get_review_count(
248174
gh: github.Github, user: str, start_date: datetime.datetime
249175
) -> int:
@@ -383,13 +309,6 @@ def main():
383309

384310
print("After Commits:", len(triage_list), "triagers")
385311

386-
# Step 4 check for new committers
387-
for user in list(triage_list.keys()):
388-
print("Checking", user)
389-
if is_new_committer(gh, user, one_year_ago):
390-
print("Removing new committer: ", user)
391-
del triage_list[user]
392-
393312
print("Complete:", len(triage_list), "triagers")
394313

395314
with open("triagers.log", "w") as triagers_log:

.github/workflows/containers/github-action-ci-windows/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ RUN powershell -Command \
9090
RUN git config --system core.longpaths true & \
9191
git config --global core.autocrlf false
9292
93-
ARG RUNNER_VERSION=2.329.0
93+
ARG RUNNER_VERSION=2.330.0
9494
ENV RUNNER_VERSION=$RUNNER_VERSION
9595
9696
RUN powershell -Command \

.github/workflows/containers/github-action-ci/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ WORKDIR /home/gha
9999

100100
FROM ci-container AS ci-container-agent
101101

102-
ENV GITHUB_RUNNER_VERSION=2.329.0
102+
ENV GITHUB_RUNNER_VERSION=2.330.0
103103

104104
RUN mkdir actions-runner && \
105105
cd actions-runner && \

.github/workflows/hlsl-test-all.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,6 @@ jobs:
5252
repository: llvm/offload-golden-images
5353
ref: main
5454
path: golden-images
55-
- name: Setup Windows
56-
if: runner.os == 'Windows'
57-
uses: llvm/actions/setup-windows@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main
58-
with:
59-
arch: amd64
6055
- name: Build DXC
6156
run: |
6257
cd DXC

.github/workflows/libclang-abi-tests.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ jobs:
101101
ref: ${{ github.sha }}
102102
repo: ${{ github.repository }}
103103
steps:
104-
- name: Install Ninja
105-
uses: llvm/actions/install-ninja@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main
106104
- name: Download source code
107105
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
108106
with:

clang-tools-extra/clang-doc/Generators.cpp

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,15 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "Generators.h"
10+
#include "support/File.h"
11+
#include "llvm/Support/TimeProfiler.h"
1012

1113
LLVM_INSTANTIATE_REGISTRY(clang::doc::GeneratorRegistry)
1214

15+
using namespace llvm;
16+
using namespace llvm::json;
17+
using namespace llvm::mustache;
18+
1319
namespace clang {
1420
namespace doc {
1521

@@ -42,6 +48,136 @@ std::string getTagType(TagTypeKind AS) {
4248
llvm_unreachable("Unknown TagTypeKind");
4349
}
4450

51+
Error createFileOpenError(StringRef FileName, std::error_code EC) {
52+
return createFileError("cannot open file " + FileName, EC);
53+
}
54+
55+
Error MustacheGenerator::setupTemplate(
56+
std::unique_ptr<MustacheTemplateFile> &Template, StringRef TemplatePath,
57+
std::vector<std::pair<StringRef, StringRef>> Partials) {
58+
auto T = MustacheTemplateFile::createMustacheFile(TemplatePath);
59+
if (Error Err = T.takeError())
60+
return Err;
61+
Template = std::move(T.get());
62+
for (const auto &[Name, FileName] : Partials)
63+
if (auto Err = Template->registerPartialFile(Name, FileName))
64+
return Err;
65+
return Error::success();
66+
}
67+
68+
Error MustacheGenerator::generateDocumentation(
69+
StringRef RootDir, StringMap<std::unique_ptr<doc::Info>> Infos,
70+
const clang::doc::ClangDocContext &CDCtx, std::string DirName) {
71+
{
72+
llvm::TimeTraceScope TS("Setup Templates");
73+
if (auto Err = setupTemplateFiles(CDCtx))
74+
return Err;
75+
}
76+
77+
{
78+
llvm::TimeTraceScope TS("Generate JSON for Mustache");
79+
if (auto JSONGenerator = findGeneratorByName("json")) {
80+
if (Error Err = JSONGenerator.get()->generateDocumentation(
81+
RootDir, std::move(Infos), CDCtx))
82+
return Err;
83+
} else
84+
return JSONGenerator.takeError();
85+
}
86+
87+
SmallString<128> JSONPath;
88+
sys::path::native(RootDir.str() + "/json", JSONPath);
89+
90+
{
91+
llvm::TimeTraceScope TS("Iterate JSON files");
92+
std::error_code EC;
93+
sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC);
94+
std::vector<json::Value> JSONFiles;
95+
JSONFiles.reserve(Infos.size());
96+
if (EC)
97+
return createStringError("Failed to create directory iterator.");
98+
99+
SmallString<128> DocsDirPath(RootDir.str() + '/' + DirName);
100+
sys::path::native(DocsDirPath);
101+
if (auto EC = sys::fs::create_directories(DocsDirPath))
102+
return createFileError(DocsDirPath, EC);
103+
while (JSONIter != sys::fs::recursive_directory_iterator()) {
104+
// create the same directory structure in the docs format dir
105+
if (JSONIter->type() == sys::fs::file_type::directory_file) {
106+
SmallString<128> DocsClonedPath(JSONIter->path());
107+
sys::path::replace_path_prefix(DocsClonedPath, JSONPath, DocsDirPath);
108+
if (auto EC = sys::fs::create_directories(DocsClonedPath)) {
109+
return createFileError(DocsClonedPath, EC);
110+
}
111+
}
112+
113+
if (EC)
114+
return createFileError("Failed to iterate: " + JSONIter->path(), EC);
115+
116+
auto Path = StringRef(JSONIter->path());
117+
if (!Path.ends_with(".json")) {
118+
JSONIter.increment(EC);
119+
continue;
120+
}
121+
122+
auto File = MemoryBuffer::getFile(Path);
123+
if (EC = File.getError(); EC) {
124+
// TODO: Buffer errors to report later, look into using Clang
125+
// diagnostics.
126+
llvm::errs() << "Failed to open file: " << Path << " " << EC.message()
127+
<< '\n';
128+
}
129+
130+
auto Parsed = json::parse((*File)->getBuffer());
131+
if (!Parsed)
132+
return Parsed.takeError();
133+
auto ValidJSON = Parsed.get();
134+
135+
std::error_code FileErr;
136+
SmallString<128> DocsFilePath(JSONIter->path());
137+
sys::path::replace_path_prefix(DocsFilePath, JSONPath, DocsDirPath);
138+
sys::path::replace_extension(DocsFilePath, DirName);
139+
raw_fd_ostream InfoOS(DocsFilePath, FileErr, sys::fs::OF_None);
140+
if (FileErr)
141+
return createFileOpenError(Path, FileErr);
142+
143+
auto RelativeRootPath = getRelativePathToRoot(DocsFilePath, DocsDirPath);
144+
auto InfoTypeStr =
145+
getInfoTypeStr(Parsed->getAsObject(), sys::path::stem(DocsFilePath));
146+
if (!InfoTypeStr)
147+
return InfoTypeStr.takeError();
148+
if (Error Err = generateDocForJSON(*Parsed, InfoOS, CDCtx,
149+
InfoTypeStr.get(), RelativeRootPath))
150+
return Err;
151+
JSONIter.increment(EC);
152+
}
153+
}
154+
155+
return Error::success();
156+
}
157+
158+
Expected<std::string> MustacheGenerator::getInfoTypeStr(Object *Info,
159+
StringRef Filename) {
160+
auto StrValue = (*Info)["InfoType"];
161+
if (StrValue.kind() != json::Value::Kind::String)
162+
return createStringError("JSON file '%s' does not contain key: 'InfoType'.",
163+
Filename.str().c_str());
164+
auto ObjTypeStr = StrValue.getAsString();
165+
if (!ObjTypeStr.has_value())
166+
return createStringError(
167+
"JSON file '%s' does not contain 'InfoType' field as a string.",
168+
Filename.str().c_str());
169+
return ObjTypeStr.value().str();
170+
}
171+
172+
SmallString<128>
173+
MustacheGenerator::getRelativePathToRoot(StringRef PathToFile,
174+
StringRef DocsRootPath) {
175+
SmallString<128> PathVec(PathToFile);
176+
// Remove filename, or else the relative path will have an extra "../"
177+
sys::path::remove_filename(PathVec);
178+
return computeRelativePath(DocsRootPath, PathVec);
179+
}
180+
45181
llvm::Error Generator::createResources(ClangDocContext &CDCtx) {
46182
return llvm::Error::success();
47183
}

0 commit comments

Comments
 (0)