# Codeowners for IREE Github Repository.
# The listed owners will automatically be added as reviewers to PRs that modify
# paths matching the specified patterns.
# Refer to https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# for syntax of this file (tl;dr: syntax is like .gitignore. Last matching rule
# takes precedence).
# Because of the precedence, rules for directories are listed topologically.
# @ghost is used to make a pattern have no owners. It is a sentinel GitHub user
# that takes the place of deleted users.

# Default to members of the IREE TSC
* @AGindinson @devtbi @jschuhmacher @schuermans-roofline

# Third-Party Code
/.gitmodules @AGindinson @jschuhmacher @schuermans-roofline
/third_party/ @AGindinson @jschuhmacher @schuermans-roofline
# Except for routinely-updated submodules
/third_party/llvm-project @AGindinson @schuermans-roofline
/third_party/stablehlo @jschuhmacher @maxbartel
/third_party/torch-mlir @AGindinson @maxbartel @ziereis

# Bindings
/runtime/bindings/python/ @devtbi @Manewing @schuermans-roofline @stellaraccident
/runtime/bindings/tflite/ @AGindinson @benvanik @maxbartel

# Experimental
# It's experimental, but we still don't want any old directory added here.
/experimental/ @benvanik @jschuhmacher @maxbartel @stellaraccident

# Infra Top-Level Directories
/.github/ @AGindinson @kuhar @schuermans-roofline
/build_tools/ @AGindinson @jschuhmacher @schuermans-roofline
/build_tools/python_deploy/ @chrsmcgrr @maxbartel @stellaraccident
/build_tools/scripts/ @AGindinson @Manewing @schuermans-roofline
/build_tools/third_party/ @AGindinson @devtbi @stellaraccident

# Other Top-Level Directories
/docs/ @AGindinson @devtbi @jschuhmacher @schuermans-roofline
/tools/ @benvanik @devtbi @schuermans-roofline

# Tests
/tests/external/iree-test-suites @AGindinson @jschuhmacher @roberto-laudani @ziereis

# Compiler
/compiler/plugins/ @jschuhmacher @Manewing @schuermans-roofline
/compiler/plugins/input @AGindinson @jschuhmacher @maxbartel
/compiler/plugins/target @devtbi @egebeysel @jschuhmacher @Manewing
/compiler/src/ @AGindinson @benvanik @jschuhmacher
/compiler/src/iree/compiler/API/ @benvanik @jschuhmacher @maxbartel @schuermans-roofline
/compiler/src/iree/compiler/Codegen/ @AGindinson @egebeysel @phemashekar
/compiler/src/iree/compiler/Codegen/Common @AGindinson @egebeysel @phemashekar
/compiler/src/iree/compiler/Codegen/**/*Vector* @Groverkss @hanhanW @sommerlukas
/compiler/src/iree/compiler/Codegen/Common/GPU @AGindinson @egebeysel @ziereis
/compiler/src/iree/compiler/Codegen/Dialect/CPU @AGindinson @egebeysel @Manewing @hanhanW
/compiler/src/iree/compiler/Codegen/Dialect/GPU @AGindinson @egebeysel @Groverkss @krzysz00
/compiler/src/iree/compiler/Codegen/LLVMCPU/ @AGindinson @egebeysel @Manewing @phemashekar @ziereis
/compiler/src/iree/compiler/Codegen/LLVMGPU/ @AGindinson @egebeysel @Groverkss @krzysz00 @ziereis
/compiler/src/iree/compiler/Codegen/SPIRV/ @AGindinson @devtbi @egebeysel
/compiler/src/iree/compiler/ConstEval/ @AGindinson @jschuhmacher @MaheshRavishankar
/compiler/src/iree/compiler/Dialect/Encoding/ @egebeysel @hanhanW @jschuhmacher @phemashekar
/compiler/src/iree/compiler/Dialect/Flow/ @devtbi @jschuhmacher @Manewing @mbknust @ziereis
/compiler/src/iree/compiler/Dialect/LinalgExt/ @AGindinson @egebeysel @jschuhmacher @ziereis
/compiler/src/iree/compiler/Dialect/Stream/ @benvanik @devtbi @Manewing @ziereis
/compiler/src/iree/compiler/Dialect/TensorExt/ @devtbi @egebeysel @ziereis
/compiler/src/iree/compiler/Dialect/Vulkan/ @AGindinson @devtbi
/compiler/src/iree/compiler/DispatchCreation/ @AGindinson @egebeysel @phemashekar @ziereis
/compiler/src/iree/compiler/GlobalOptimization/ @AGindinson @egebeysel @Manewing @phemashekar @ziereis
/compiler/src/iree/compiler/InputConversion/ @AGindinson @jschuhmacher @Manewing
/compiler/src/iree/compiler/Pipelines/ @benvanik @jschuhmacher @Manewing
/compiler/src/iree/compiler/Preprocessing/ @AGindinson @egebeysel @Manewing @phemashekar @ziereis

# Compiler Plugins
/compiler/plugins/input/StableHLO/ @jschuhmacher @maxbartel
/compiler/plugins/input/Torch/ @AGindinson @rsuderman @ziereis @zjgarvey
/compiler/plugins/input/TOSA/ @AGindinson @chrsmcgrr @jschuhmacher @Manewing
/compiler/plugins/target/ROCM/ @jtuyls @krzysz00 @kuhar @Yu-Zhewen

# Runtime
/runtime/src/ @benvanik @devtbi @Manewing @schuermans-roofline
/runtime/src/iree/builtins/ukernel @egebeysel @jschuhmacher @phemashekar
/runtime/src/iree/hal/drivers/amdgpu/ @benvanik @krzysz00 @kuhar
/runtime/src/iree/hal/drivers/cuda/ @antiagainst @devtbi
/runtime/src/iree/hal/drivers/hip/ @AWoloszyn @krzysz00
/runtime/src/iree/hal/drivers/metal/ @antiagainst @devtbi
/runtime/src/iree/hal/drivers/vulkan/ @AGindinson @benvanik @devtbi
