LLVM/project db816fellvm/lib/MC MCDXContainerWriter.cpp, llvm/lib/Target/DirectX DXContainerPDB.cpp DXContainerGlobals.cpp

[DirectX][Driver] Add /Qpdb_in_private flag support (#204903)

In DXC, when `/Qpdb_in_private` flag is specified, debug info PDB is
emitted into PRIV part of the output DXContainer (as well as into
separate PDB file, if its name is specified with `/Fd`).

This patch reimplements similar behavior in llc and Clang.

MC is modified to be able to emit PRIV part.

Depends on https://github.com/llvm/llvm-project/pull/204166.
DeltaFile
+83-0llvm/unittests/MC/DXContainerWriterTest.cpp
+42-4llvm/lib/Target/DirectX/DXContainerPDB.cpp
+20-14llvm/lib/Target/DirectX/DXContainerGlobals.cpp
+33-0llvm/test/CodeGen/DirectX/ContainerData/PdbInPrivate.test
+17-5llvm/lib/MC/MCDXContainerWriter.cpp
+18-0llvm/test/CodeGen/DirectX/ContainerData/PdbInPrivate.ll
+213-238 files not shown
+267-2314 files

LLVM/project 009e841flang/include/flang/Optimizer/Transforms Passes.td, flang/lib/Optimizer/Transforms/CUDA CUFAddConstructor.cpp

[flang][cuda] Add option for allocator registration function to CUFAddConstructor (#211098)

This allows to register different allocators when needed.
DeltaFile
+7-3flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
+8-0flang/test/Fir/CUDA/cuda-constructor.f90
+4-0flang/include/flang/Optimizer/Transforms/Passes.td
+19-33 files

LLVM/project ded4902llvm/test/tools/dsymutil/AArch64 pseudo-probe.test, llvm/tools/dsymutil MachOUtils.cpp

Revert "[dsymutil] Add support for pseudo probes (#186877)" (#206789)

This reverts commit bc3386c1b9a5bff82ce4baaf4254fc4268f69ff4.

Let's back this out in favor of emitting pseudoprobe data in favor of
emitting in the `__LLVM` segment, and let `dsymutil` collect the debug
map objects and merge them into the final sections.
DeltaFile
+0-319llvm/test/tools/dsymutil/AArch64/pseudo-probe.test
+7-65llvm/tools/dsymutil/MachOUtils.cpp
+7-3842 files

LLVM/project 8dc94a5clang/test/CIR/CodeGenBuiltins/X86 avx512vlbw-builtins.c

[CIR] Fix avx512vlbw builtin test run lines (#211063)

The avx512vlbw-builtins.c test was using the now-nonexistant avx10.1-512
target feature in several of its run lines. Because the feature no
longer exists with that spelling it was being silently ignored.
Apparently it isn't needed for the test upstream because the test has
been passing, but I received reports from a downstream user that the
test was failing for them.

There was a recent change to more strictly enforce always-inlining if
target features didn't match. I suspect that this downstream project has
a different version of some intrinsic header files so that it requires
"avx10.1" (the correct spelling of the feature).

This change updates the test run lines to use the correct feature
spelling.
DeltaFile
+4-4clang/test/CIR/CodeGenBuiltins/X86/avx512vlbw-builtins.c
+4-41 files

LLVM/project 680989dllvm/lib/Target/PowerPC PPCMIPeephole.cpp, llvm/test/CodeGen/PowerPC peephole-elim-extsw-subreg-input.mir

PPC: Fold 64-bit zero-extending word load feeding extsw subregister

A gprc LWZ/LWZX feeding EXTSW_32_64 is rewritten into a sign-extending
LWA/LWAX load. Extend the same fold to the 64-bit zero-extending word
loads LWZ8/LWZX8 when the EXTSW_32_64 reads their sub_32 subregister,
producing a single LWA/LWAX instead of a redundant lwz+extsw pair.

Co-authored-by: Claude (Claude Opus 4.8, claude-opus-4-8) <noreply at anthropic.com>
DeltaFile
+17-18llvm/test/CodeGen/PowerPC/peephole-elim-extsw-subreg-input.mir
+11-3llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+28-212 files

LLVM/project 73930c0llvm/test/CodeGen/PowerPC peephole-elim-extsw-subreg-input.mir

PPC: Add MIR examples for missed extsw+word-load fold on subregister input

A gprc LWZ/LWZX feeding EXTSW_32_64 folds into a sign-extending LWA/LWAX
load. The equivalent 64-bit zero-extending word loads (LWZ8/LWZX8) whose
sub_32 feeds EXTSW_32_64 are not folded, leaving a redundant lwz+extsw
(or lwzx+extsw) pair. Add MIR examples documenting the missed fold.

Co-authored-by: Claude (Claude Opus 4.8, claude-opus-4-8) <noreply at anthropic.com>
DeltaFile
+152-6llvm/test/CodeGen/PowerPC/peephole-elim-extsw-subreg-input.mir
+152-61 files

LLVM/project 67fd3ecllvm/lib/Target/PowerPC PPCMIPeephole.cpp

Remove NarrowSubReg check
DeltaFile
+1-2llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+1-21 files

LLVM/project add357bllvm/lib/Target/PowerPC PPCMIPeephole.cpp, llvm/test/CodeGen/PowerPC peephole-elim-extsw-subreg-input.mir

PPC: Fix extsw elimination when the input reads a subregister

The EXTSW_32_64 sign-extend elimination previously assumed its input
was a full register value. It would then try using that value as the
source of the new (unnecessary) INSERT_SUBREG.

The new test would then hit this verifier error:

```
bb.0:
  liveins: $x3
  %0:g8rc = COPY killed $x3
  %1:g8rc = RLDICL killed %0:g8rc, 0, 33
  %3:g8rc = IMPLICIT_DEF
  %2:g8rc = INSERT_SUBREG %3:g8rc(tied-def 0), %1:g8rc, %subreg.sub_32
  $x3 = COPY killed %2:g8rc
  BLR8 implicit $lr8, implicit $rm, implicit killed $x3

*** Bad machine code: INSERT_SUBREG expected inserted value to have equal or lesser size than the subreg it was inserted into ***

    [8 lines not shown]
DeltaFile
+27-12llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+30-0llvm/test/CodeGen/PowerPC/peephole-elim-extsw-subreg-input.mir
+57-122 files

LLVM/project 2a12ed5llvm/lib/Target/PowerPC PPCInstrInfo.cpp

Add assert
DeltaFile
+9-4llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
+9-41 files

LLVM/project e7ca336llvm/lib/Target/PowerPC PPCInstrInfo.cpp, llvm/test/CodeGen/PowerPC sext_elimination.mir

PPC: Fix EXTSW elimination promoting a subregister operand

promoteInstr32To64ForElimEXTSW copies operands from the 32-bit
instruction verbatim into its promoted 64-bit form. When an operand
reads the sub_32 subregister of a 64-bit register, the promoted
instruction (which takes a full register) ended up with an illegal
subregister use and failed the machine verifier.

Drop the sub_32 subregister and use the original full register, which
provides the low 32 bits the promoted instruction operates on. This
avoids  verifier error regressions in a future change.

Co-Authored-By: Claude <noreply at anthropic.com> (Claude Opus 4.8, claude-opus-4-8)
DeltaFile
+41-1llvm/test/CodeGen/PowerPC/sext_elimination.mir
+7-0llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
+48-12 files

LLVM/project 6404386flang/lib/Semantics check-omp-variant.cpp, flang/test/Semantics/OpenMP metadirective-default-none.f90

Diagnose nested FIRSTPRIVATE under DEFAULT(NONE)

A variable listed as FIRSTPRIVATE on a nested TASK is also referenced by the
enclosing construct. If that construct has DEFAULT(NONE), the variable must be
listed in one of its data-sharing clauses.

The metadirective loop checker incorrectly treated nested FIRSTPRIVATE like
PRIVATE and skipped the diagnostic. Exempt only nested PRIVATE variables and
add a regression test.

Assisted with codex.
DeltaFile
+13-0flang/test/Semantics/OpenMP/metadirective-default-none.f90
+3-5flang/lib/Semantics/check-omp-variant.cpp
+16-52 files

LLVM/project f1685cb.github/workflows issue-release-workflow.yml

workflows/issue-release-workflow: Allow multiple URLs in /cherry-pick commands. (#211050)

f0ae26c9 allowed specifying multiple commits to /cherry-pick, but that
only works for plain commit hashes; it doesn't work for the URL form.
Adjust the regex to allow multiple URLs.
DeltaFile
+1-1.github/workflows/issue-release-workflow.yml
+1-11 files

LLVM/project f297c09flang/lib/Semantics check-omp-variant.cpp check-omp-structure.h, flang/test/Semantics/OpenMP metadirective-default-none.f90

[flang][OpenMP] Check DEFAULT(NONE) on metadirective loop variants

Flang does not enforce `DEFAULT(NONE)` for variables referenced in a loop
associated with a standalone METADIRECTIVE. Consequently, it accepts invalid
programs when a potentially selectable loop variant specifies DEFAULT(NONE) but
omits a referenced variable from its data-sharing clauses. This change checks the
associated loop for each potentially selectable `DEFAULT(NONE)` variant and
diagnoses missing data-sharing attributes as it does for ordinary OpenMP loop
constructs.

Standalone metadirectives and their associated loops are separate parse-tree
nodes. For example:

```fortran
!$omp metadirective &
!$omp& when(implementation={vendor(llvm)}: &
!$omp& parallel do default(none) shared(n, a)) default(nothing)
do i = 1, n
  a(i) = x

    [23 lines not shown]
DeltaFile
+224-0flang/test/Semantics/OpenMP/metadirective-default-none.f90
+166-1flang/lib/Semantics/check-omp-variant.cpp
+4-0flang/lib/Semantics/check-omp-structure.h
+394-13 files

LLVM/project e8b684allvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 loop-invariant-gather-inst-count.ll rgb_phi.ll

[SLP]Make the instruction-count check loop-aware

Raw getNum{Scalar,Vector}Insts() counted one-time, LICM-hoisted
broadcasts/buildvectors against the loop body, rejecting profitable loop
trees (508.namd_r). Weight each entry by its loop-nest trip
count and drop nest-invariant ones; flat code is unchanged (scale 1).

Fixes #207572

Original Pull Request: https://github.com/llvm/llvm-project/pull/210074

Recommit after revert in bf42992272b66002ffe2a814c916a6b74e477ada

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/211096
DeltaFile
+64-64llvm/test/Transforms/SLPVectorizer/X86/loop-invariant-gather-inst-count.ll
+71-41llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+9-9llvm/test/Transforms/SLPVectorizer/X86/rgb_phi.ll
+8-7llvm/test/Transforms/SLPVectorizer/X86/phi-removed-on-operand-vectorization.ll
+5-5llvm/test/Transforms/SLPVectorizer/X86/deleted-instructions-clear.ll
+157-1265 files

LLVM/project 5697319llvm/lib/Target/NVPTX NVPTXISelDAGToDAG.cpp NVPTXAsmPrinter.cpp, llvm/test/CodeGen/NVPTX jump-table.ll switch-loop-header.mir

[NVPTX] Simplify BRX emission avoiding pseduo-instruction chain (#209952)

This is much more idiomatic and simpler as well and avoids a series of
instructions which would cause syntax errors if somehow something were
scheduled between them.
DeltaFile
+0-38llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp
+14-14llvm/test/CodeGen/NVPTX/jump-table.ll
+25-0llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+12-13llvm/lib/Target/NVPTX/NVPTXInstrInfo.td
+2-16llvm/test/CodeGen/NVPTX/switch-loop-header.mir
+9-9llvm/test/CodeGen/NVPTX/switch.ll
+62-902 files not shown
+65-918 files

LLVM/project f8d1769flang/lib/Lower/OpenMP OpenMP.cpp DataSharingProcessor.cpp, flang/test/Lower/OpenMP metadirective-loop.f90 metadirective-implementation.f90

[flang][OpenMP] Lower DO and SIMD variants in metadirectives

Lower DO, SIMD, and DO SIMD replacement directives selected by a
metadirective. Support standalone and begin/end forms with static or runtime
selection.

A standalone metadirective and its associated loop are represented as sibling
PFT evaluations. For example:

```fortran
!$omp metadirective &
!$omp& when(user={condition(flag)}: do) &
!$omp& otherwise(nothing)
do i = 1, n
  a(i) = i
end do
```

has the following evaluation shape:

    [54 lines not shown]
DeltaFile
+432-6flang/lib/Lower/OpenMP/OpenMP.cpp
+416-0flang/test/Lower/OpenMP/metadirective-loop.f90
+69-8flang/lib/Lower/OpenMP/DataSharingProcessor.cpp
+74-0flang/test/Lower/OpenMP/Todo/metadirective-loop-unstructured.f90
+59-0flang/test/Lower/OpenMP/Todo/metadirective-loop-enclosing-data-environment.f90
+46-1flang/test/Lower/OpenMP/metadirective-implementation.f90
+1,096-1512 files not shown
+1,278-2818 files

LLVM/project 400d236clang/lib/CIR/Lowering/DirectToLLVM LowerToLLVM.cpp, clang/test/Sema builtins-elementwise-math.c

Merge branch 'main' into revert-192515-revert-175677-toolchain_stack_flags
DeltaFile
+648-0flang/test/Lower/OpenMP/collapse-imperfect-nest.f90
+94-338llvm/lib/Analysis/BranchProbabilityInfo.cpp
+160-160clang/test/Sema/builtins-elementwise-math.c
+264-0llvm/test/Transforms/SLPVectorizer/X86/masked-blended-loads.ll
+216-4flang/lib/Lower/OpenMP/OpenMP.cpp
+159-18clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+1,541-520174 files not shown
+3,395-1,281180 files

LLVM/project 5df4aa1flang/test/Fir/OpenACC acc-declare-gpu-module-insertion.fir, mlir/include/mlir/Dialect/OpenACC/Transforms Passes.td

[flang][acc] Emit unified declare globals as extern. (#210757)

Emit external device symbols for OpenACC declare create and copyin
globals in -gpu=mem:unified; preserve device definitions for
device_resident globals.
DeltaFile
+23-0flang/test/Fir/OpenACC/acc-declare-gpu-module-insertion.fir
+19-2mlir/lib/Dialect/OpenACC/Transforms/ACCDeclareGPUModuleInsertion.cpp
+4-0mlir/include/mlir/Dialect/OpenACC/Transforms/Passes.td
+46-23 files

LLVM/project 6752777llvm/lib/Target/AMDGPU AMDGPU.td DSInstructions.td, llvm/test/TableGen asm-matcher-ambiguous-matchables.td asm-matcher-exclusive-pred-self.td

[TableGen][AMDGPU][AsmParser] Catch and fix ambiguous instructions

Declares mutually exclusive assembler predicates and teaches
TableGen to use that knowledge to report matchables that are
indistinguishable to the asm parser.

The instruction changes are effectively NFCI, mostly removing
genuine duplicates and fixing predicates.

Prepared using Claude.

https://github.com/llvm/llvm-project/issues/69256
DeltaFile
+91-28llvm/utils/TableGen/AsmMatcherEmitter.cpp
+98-0llvm/lib/Target/AMDGPU/AMDGPU.td
+56-0llvm/test/TableGen/asm-matcher-ambiguous-matchables.td
+20-6llvm/lib/Target/AMDGPU/DSInstructions.td
+17-9llvm/lib/Target/AMDGPU/VOP2Instructions.td
+24-0llvm/test/TableGen/asm-matcher-exclusive-pred-self.td
+306-434 files not shown
+340-5310 files

LLVM/project 5b6ebc2flang/include/flang/Evaluate characteristics.h, flang/lib/Evaluate characteristics.cpp

[flang][cuda][openacc] Support CUDA calls to ACC routines (#210165)

Enable CUDA device procedures to call !$acc routine procedures.

- Treat ACC routines as device-callable during CUDA semantic checking.
- Apply implicit-device dummy argument handling to ACC routines called
from CUDA device code.
- Defer CUDA cloning of ACC routines until ACC lowering materializes and
moves the specialized routine into the GPU module.
- Add a CUF device-function transform regression test.
DeltaFile
+20-0flang/test/Fir/CUDA/cuda-device-func-transform.mlir
+10-6flang/lib/Semantics/check-call.cpp
+5-0flang/lib/Evaluate/characteristics.cpp
+5-0flang/lib/Optimizer/Transforms/CUDA/CUFDeviceFuncTransform.cpp
+3-0flang/lib/Semantics/check-cuda.cpp
+2-0flang/include/flang/Evaluate/characteristics.h
+45-66 files

LLVM/project e328d6e.github/workflows libcxx-pr-benchmark.yml

[libc++] Use github-script instead of pygithub for benchmark jobs, and report failure (#211074)

Switch GitHub API interactions to use actions/github-script instead of
pygithub, as is done in other Github workflows in the repository. This
is simpler and it also resolves the issue that if setting up the Python
virtual environment fails, there's no way to communicate the issue back
since doing so would require pygithub.

As a drive-by, also report the failure when a step in the libc++ PR
benchmark job fails, instead of leaving a "Running benchmarks in ..."
comment indefinitely.

Assisted by Claude

Fixes #210985
DeltaFile
+78-60.github/workflows/libcxx-pr-benchmark.yml
+78-601 files

LLVM/project 16e009fllvm/lib/Transforms/Scalar ConstraintElimination.cpp, llvm/test/Transforms/ConstraintElimination induction-condition-in-loop-exit-postinc.ll monotonic-int-phis-signed.ll

[ConstraintElim] Derive signed facts for post-increment inductions. (#210079)

Extend logic added in https://github.com/llvm/llvm-project/pull/209199
to also derive signed facts.

To do so, we keep track of whether LowerBound = Start + Step overflows
signed/unsigned. Code that previously bailed out if we were handling a
post-increment induction has been updated to use the computed
LowerBound, if it does not signed-wrap.

Alive2 Proof: https://alive2.llvm.org/ce/z/frskVt

PR: https://github.com/llvm/llvm-project/pull/210079
DeltaFile
+54-6llvm/test/Transforms/ConstraintElimination/induction-condition-in-loop-exit-postinc.ll
+23-22llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+1-2llvm/test/Transforms/ConstraintElimination/monotonic-int-phis-signed.ll
+78-303 files

LLVM/project 82ecd00mlir/test/CAPI rewrite.c

pre-increment
DeltaFile
+5-5mlir/test/CAPI/rewrite.c
+5-51 files

LLVM/project 6d2f3d6mlir/include/mlir-c Rewrite.h, mlir/lib/CAPI/Transforms Rewrite.cpp

[mlir-c] Add 1:N TypeConverter conversion and materialization bindings

Builds on the source/target materialization C bindings:

- Target materialization callbacks now receive `originalType` (split from the
  previously-shared source/target callback typedef), exposing a documented C++
  capability that was otherwise unreachable from C.
- 1:N type conversion: `mlirTypeConverterAdd1ToNConversion` plus an opaque
  results accumulator (`MlirTypeConverterConversionResults` /
  `mlirTypeConverterConversionResultsAppend`). A declining callback's appended
  types are rolled back so the driver's "try the next conversion" invariant
  holds.
- 1:N target materialization: `mlirTypeConverterAdd1ToNTargetMaterialization`,
  whose callback fills a caller-allocated `outputs` buffer. A success that
  leaves any output null is treated as a decline rather than handing the driver
  a null-containing result.
- `mlirConversionPatternRewriterReplaceOpWithMultiple` for 1:N value
  replacement, which can drive a source materialization with nInputs > 1.
- An optional `matchAndRewrite1ToN` callback on `MlirConversionPatternCallbacks`

    [9 lines not shown]
DeltaFile
+706-1mlir/test/CAPI/rewrite.c
+163-14mlir/lib/CAPI/Transforms/Rewrite.cpp
+107-5mlir/include/mlir-c/Rewrite.h
+976-203 files

LLVM/project d768291mlir/test/CAPI rewrite.c

[mlir-c] Test the failure path of the 1:N type conversion callback

Adds a test that registers a 1:N conversion function returning
MlirTypeConverterConversionStatusFailure. Because it is tried before the
i32 -> (i16, i16) conversion, the failure must abort the whole conversion
(rather than falling back), leaving the IR unchanged -- the behavior that a
plain decline would not produce.
DeltaFile
+87-0mlir/test/CAPI/rewrite.c
+87-01 files

LLVM/project aa7fd45mlir/lib/Bindings/Python Rewrite.cpp

[mlir-c] Value-initialize MlirConversionPatternCallbacks in Python bindings

The Python conversion-pattern binding left the struct default-initialized,
so the newly-added optional matchAndRewrite1ToN field held an indeterminate
pointer. The driver's null check then read garbage and jumped into it,
segfaulting mlir/test/python/rewrite.py. Value-initialize the struct so
optional callbacks default to null.
DeltaFile
+3-1mlir/lib/Bindings/Python/Rewrite.cpp
+3-11 files

LLVM/project 75cb33dmlir/test/CAPI rewrite.c

[mlir-c] Fix -Wmissing-field-initializers in rewrite.c test

The new matchAndRewrite1ToN field left three existing
MlirConversionPatternCallbacks initializers under-initialized, which
fails the CI build under -Werror=-Wmissing-field-initializers.
DeltaFile
+4-3mlir/test/CAPI/rewrite.c
+4-31 files

LLVM/project 4705440mlir/include/mlir-c Rewrite.h, mlir/lib/CAPI/Transforms Rewrite.cpp

cleanup comments
DeltaFile
+2-18mlir/include/mlir-c/Rewrite.h
+0-12mlir/lib/CAPI/Transforms/Rewrite.cpp
+2-302 files

LLVM/project 4c716e5mlir/include/mlir-c Rewrite.h, mlir/lib/Bindings/Python Rewrite.cpp

[mlir-c] Use a tri-state status enum for the type conversion callback

MlirTypeConverterConversionCallback returned MlirLogicalResult and used a
null convertedType as a second failure sentinel, which could only express
success or "try another conversion" -- and conflated the C++ decline
(std::nullopt) and hard-failure (failure()) states.

Introduce MlirTypeConverterConversionStatus (Success/Failure/Declined) and
return it from the callback instead, mapping the three states to success(),
failure(), and std::nullopt respectively. Update the Python binding and the
C API test callback accordingly.

Add a C API unit test (testTypeConverterConversionStatus) exercising all
three status values through mlirTypeConverterConvertType.
DeltaFile
+72-6mlir/test/CAPI/rewrite.c
+23-6mlir/include/mlir-c/Rewrite.h
+16-7mlir/lib/CAPI/Transforms/Rewrite.cpp
+3-3mlir/lib/Bindings/Python/Rewrite.cpp
+114-224 files

LLVM/project e39a2d1flang/lib/Lower/OpenMP OpenMP.cpp DataSharingProcessor.cpp, flang/test/Lower/OpenMP metadirective-loop.f90 metadirective-implementation.f90

[flang][OpenMP] Lower DO and SIMD variants in metadirectives

Lower DO, SIMD, and DO SIMD replacement directives selected by a
metadirective. Support standalone and begin/end forms with static or runtime
selection.

A standalone metadirective and its associated loop are represented as sibling
PFT evaluations. For example:

```fortran
!$omp metadirective &
!$omp& when(user={condition(flag)}: do) &
!$omp& otherwise(nothing)
do i = 1, n
  a(i) = i
end do
```

has the following evaluation shape:

    [45 lines not shown]
DeltaFile
+432-6flang/lib/Lower/OpenMP/OpenMP.cpp
+416-0flang/test/Lower/OpenMP/metadirective-loop.f90
+69-8flang/lib/Lower/OpenMP/DataSharingProcessor.cpp
+74-0flang/test/Lower/OpenMP/Todo/metadirective-loop-unstructured.f90
+59-0flang/test/Lower/OpenMP/Todo/metadirective-loop-enclosing-data-environment.f90
+46-1flang/test/Lower/OpenMP/metadirective-implementation.f90
+1,096-1512 files not shown
+1,278-2818 files