Split LLVM targets into subfolders to support CMake filtering. (#2960)

Follow-up to https://github.com/google/iree/pull/2759.

Splitting `iree/compiler/Dialect/HAL/Target/LLVM` into
- `iree/compiler/Dialect/HAL/Target/LLVM` (common code)
- `iree/compiler/Dialect/HAL/Target/LLVM/AOT`
- `iree/compiler/Dialect/HAL/Target/LLVM/IR`

So we can filter from builds using logic like

```
if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
  return()
endif()
```

with both targets in the same directory we'd need to use if/else wrapping, which is messier to handle (but not terribly so) in bazel_to_cmake.
diff --git a/bindings/python/pyiree/compiler/BUILD b/bindings/python/pyiree/compiler/BUILD
index d8550d7..dca46ed 100644
--- a/bindings/python/pyiree/compiler/BUILD
+++ b/bindings/python/pyiree/compiler/BUILD
@@ -42,8 +42,8 @@
 
     # Targets.
     "//iree/compiler/Dialect/HAL/Target/VMLA",
-    "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMAOT",
-    "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMIR",
+    "//iree/compiler/Dialect/HAL/Target/LLVM/AOT:LLVMAOT",
+    "//iree/compiler/Dialect/HAL/Target/LLVM/IR:LLVMIR",
     "//iree/compiler/Dialect/HAL/Target/VulkanSPIRV",
     "//iree/compiler/Dialect/VM/Target:init_targets",
     "//iree/compiler/Dialect/VM/Target/Bytecode",
diff --git a/bindings/python/pyiree/compiler/CMakeLists.txt b/bindings/python/pyiree/compiler/CMakeLists.txt
index d8ed6c1..b47cb6f 100644
--- a/bindings/python/pyiree/compiler/CMakeLists.txt
+++ b/bindings/python/pyiree/compiler/CMakeLists.txt
@@ -53,8 +53,8 @@
     iree::compiler::Dialect::VM::Transforms
     # Targets. Adopted from the Bazel variable COMPILER::DEPS.
     iree::compiler::Dialect::HAL::Target::VMLA
-    iree::compiler::Dialect::HAL::Target::LLVM::LLVMAOT
-    iree::compiler::Dialect::HAL::Target::LLVM::LLVMIR
+    iree::compiler::Dialect::HAL::Target::LLVM::AOT::LLVMAOT
+    iree::compiler::Dialect::HAL::Target::LLVM::IR::LLVMIR
     iree::compiler::Dialect::HAL::Target::VulkanSPIRV
     iree::compiler::Dialect::VM::Target::Bytecode
     iree::compiler::Dialect::VM::Target::init_targets
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/AOT/BUILD b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/BUILD
new file mode 100644
index 0000000..f5c32e1
--- /dev/null
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/BUILD
@@ -0,0 +1,72 @@
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("//iree:build_defs.oss.bzl", "iree_cmake_extra_content", "platform_trampoline_deps")
+
+package(
+    default_visibility = ["//visibility:public"],
+    features = ["layering_check"],
+    licenses = ["notice"],  # Apache 2.0
+)
+
+# TODO(scotttodd): filter on IREE_TARGET_BACKEND_DYLIB-LLVM-AOT when it exists
+iree_cmake_extra_content(
+    content = """
+if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
+  return()
+endif()
+""",
+)
+
+cc_library(
+    name = "LLVMAOT",
+    srcs = [
+        "LLVMAOTTarget.cpp",
+    ],
+    hdrs = [
+        "LLVMAOTTarget.h",
+    ],
+    deps = [
+        ":LLVMAOTTargetLinker",
+        "//iree/compiler/Conversion/LinalgToLLVM",
+        "//iree/compiler/Dialect/HAL/Target",
+        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMIRPasses",
+        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMTargetOptions",
+        "//iree/schemas:dylib_executable_def_cc_fbs",
+        "@llvm-project//llvm:AArch64AsmParser",
+        "@llvm-project//llvm:AArch64CodeGen",
+        "@llvm-project//llvm:ARMAsmParser",
+        "@llvm-project//llvm:ARMCodeGen",
+        "@llvm-project//llvm:Core",
+        "@llvm-project//llvm:Support",
+        "@llvm-project//llvm:X86AsmParser",
+        "@llvm-project//llvm:X86CodeGen",
+        "@llvm-project//mlir:TargetLLVMIR",
+    ],
+)
+
+cc_library(
+    name = "LLVMAOTTargetLinker",
+    hdrs = ["LLVMAOTTargetLinker.h"],
+    deps = platform_trampoline_deps("LLVMAOTTargetLinker", "compiler/Dialect/HAL/Target/LLVM/AOT"),
+)
+
+cc_library(
+    name = "LLVMAOTTargetLinker_hdrs",
+    hdrs = ["LLVMAOTTargetLinker.h"],
+    deps = [
+        "//iree/base:status",
+        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMTargetOptions",
+    ],
+)
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/AOT/CMakeLists.txt b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/CMakeLists.txt
new file mode 100644
index 0000000..bf21b5e
--- /dev/null
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/CMakeLists.txt
@@ -0,0 +1,66 @@
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
+  return()
+endif()
+
+iree_add_all_subdirs()
+
+iree_cc_library(
+  NAME
+    LLVMAOT
+  HDRS
+    "LLVMAOTTarget.h"
+  SRCS
+    "LLVMAOTTarget.cpp"
+  DEPS
+    ::LLVMAOTTargetLinker
+    LLVMAArch64AsmParser
+    LLVMAArch64CodeGen
+    LLVMARMAsmParser
+    LLVMARMCodeGen
+    LLVMCore
+    LLVMSupport
+    LLVMX86AsmParser
+    LLVMX86CodeGen
+    MLIRTargetLLVMIR
+    iree::compiler::Conversion::LinalgToLLVM
+    iree::compiler::Dialect::HAL::Target
+    iree::compiler::Dialect::HAL::Target::LLVM::LLVMIRPasses
+    iree::compiler::Dialect::HAL::Target::LLVM::LLVMTargetOptions
+    iree::schemas::dylib_executable_def_cc_fbs
+  PUBLIC
+)
+
+iree_cc_library(
+  NAME
+    LLVMAOTTargetLinker
+  HDRS
+    "LLVMAOTTargetLinker.h"
+  DEPS
+    iree::compiler::Dialect::HAL::Target::LLVM::AOT::internal::LLVMAOTTargetLinker_internal
+  PUBLIC
+)
+
+iree_cc_library(
+  NAME
+    LLVMAOTTargetLinker_hdrs
+  HDRS
+    "LLVMAOTTargetLinker.h"
+  DEPS
+    iree::base::status
+    iree::compiler::Dialect::HAL::Target::LLVM::LLVMTargetOptions
+  PUBLIC
+)
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.cpp
similarity index 97%
rename from iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.cpp
index a55db32..9849d76 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.cpp
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.h"
 
 #include <cstdlib>
 
 #include "iree/compiler/Conversion/LinalgToLLVM/Passes.h"
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTargetLinker.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTargetLinker.h"
 #include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRPasses.h"
 #include "iree/compiler/Dialect/HAL/Target/TargetRegistry.h"
 #include "iree/schemas/dylib_executable_def_generated.h"
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.h b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.h
similarity index 82%
rename from iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.h
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.h
index 305d543..5df2217 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.h
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.h
@@ -13,8 +13,8 @@
 // limitations under the License.
 //
 
-#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_H_
-#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_H_
+#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGET_H_
+#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGET_H_
 
 #include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMTargetOptions.h"
 
@@ -32,4 +32,4 @@
 }  // namespace iree_compiler
 }  // namespace mlir
 
-#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_H_
+#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGET_H_
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTargetLinker.h b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTargetLinker.h
similarity index 84%
rename from iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTargetLinker.h
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTargetLinker.h
index 669f17c..d6d5220 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTargetLinker.h
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTargetLinker.h
@@ -13,8 +13,8 @@
 // limitations under the License.
 //
 
-#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_LINKER_H_
-#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_LINKER_H_
+#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGETLINKER_H_
+#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGETLINKER_H_
 
 #include <string>
 
@@ -38,4 +38,4 @@
 }  // namespace iree_compiler
 }  // namespace mlir
 
-#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_TARGET_LINKER_H_
+#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_AOT_LLVMAOTTARGETLINKER_H_
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/internal/BUILD b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/BUILD
similarity index 91%
rename from iree/compiler/Dialect/HAL/Target/LLVM/internal/BUILD
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/BUILD
index 19c3372..6dadc26 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/internal/BUILD
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/BUILD
@@ -23,7 +23,7 @@
     srcs = ["LLVMAOTTargetLinker.cpp"],
     deps = [
         "//iree/base:status",
-        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMAOTTargetLinker_hdrs",
+        "//iree/compiler/Dialect/HAL/Target/LLVM/AOT:LLVMAOTTargetLinker_hdrs",
         "@llvm-project//llvm:Support",
     ],
 )
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/CMakeLists.txt
similarity index 90%
rename from iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/CMakeLists.txt
index b91dae5..01cb459 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/CMakeLists.txt
@@ -22,6 +22,6 @@
   DEPS
     LLVMSupport
     iree::base::status
-    iree::compiler::Dialect::HAL::Target::LLVM::LLVMAOTTargetLinker_hdrs
+    iree::compiler::Dialect::HAL::Target::LLVM::AOT::LLVMAOTTargetLinker_hdrs
   PUBLIC
 )
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/internal/LLVMAOTTargetLinker.cpp b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/LLVMAOTTargetLinker.cpp
similarity index 97%
rename from iree/compiler/Dialect/HAL/Target/LLVM/internal/LLVMAOTTargetLinker.cpp
rename to iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/LLVMAOTTargetLinker.cpp
index 65d8e22..8acd2d6 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/internal/LLVMAOTTargetLinker.cpp
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/AOT/internal/LLVMAOTTargetLinker.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTargetLinker.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTargetLinker.h"
 
 #include "iree/base/status.h"
 #include "llvm/Support/ToolOutputFile.h"
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/BUILD b/iree/compiler/Dialect/HAL/Target/LLVM/BUILD
index e0cbfb9..7c0a843 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/BUILD
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//iree:build_defs.oss.bzl", "iree_cmake_extra_content", "platform_trampoline_deps")
+load("//iree:build_defs.oss.bzl", "iree_cmake_extra_content")
 
 package(
     default_visibility = ["//visibility:public"],
@@ -20,8 +20,7 @@
     licenses = ["notice"],  # Apache 2.0
 )
 
-# TODO(scotttodd): add 'common', 'JIT', 'AOT' subfolders to filter on
-#     IREE_TARGET_BACKEND_[DYLIB-LLVM-AOT|LLVM-IR]
+# TODO(scotttodd): also return if IREE_TARGET_BACKEND_DYLIB-LLVM-AOT is false
 iree_cmake_extra_content(
     content = """
 if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
@@ -31,55 +30,6 @@
 )
 
 cc_library(
-    name = "LLVMIR",
-    srcs = [
-        "LLVMIRTarget.cpp",
-    ],
-    hdrs = [
-        "LLVMIRTarget.h",
-    ],
-    deps = [
-        ":LLVMIRPasses",
-        ":LLVMTargetOptions",
-        "//iree/compiler/Conversion/LinalgToLLVM",
-        "//iree/compiler/Dialect/HAL/Target",
-        "//iree/schemas:llvmir_executable_def_cc_fbs",
-        "@llvm-project//llvm:Core",
-        "@llvm-project//llvm:Support",
-        # TODO(ataei): Link with native target dep.
-        "@llvm-project//llvm:X86CodeGen",
-        "@llvm-project//mlir:TargetLLVMIR",
-    ],
-)
-
-cc_library(
-    name = "LLVMAOT",
-    srcs = [
-        "LLVMAOTTarget.cpp",
-    ],
-    hdrs = [
-        "LLVMAOTTarget.h",
-    ],
-    deps = [
-        ":LLVMAOTTargetLinker",
-        ":LLVMIRPasses",
-        ":LLVMTargetOptions",
-        "//iree/compiler/Conversion/LinalgToLLVM",
-        "//iree/compiler/Dialect/HAL/Target",
-        "//iree/schemas:dylib_executable_def_cc_fbs",
-        "@llvm-project//llvm:AArch64AsmParser",
-        "@llvm-project//llvm:AArch64CodeGen",
-        "@llvm-project//llvm:ARMAsmParser",
-        "@llvm-project//llvm:ARMCodeGen",
-        "@llvm-project//llvm:Core",
-        "@llvm-project//llvm:Support",
-        "@llvm-project//llvm:X86AsmParser",
-        "@llvm-project//llvm:X86CodeGen",
-        "@llvm-project//mlir:TargetLLVMIR",
-    ],
-)
-
-cc_library(
     name = "LLVMIRPasses",
     srcs = [
         "LLVMIRPasses.cpp",
@@ -111,18 +61,3 @@
         "@llvm-project//llvm:Target",
     ],
 )
-
-cc_library(
-    name = "LLVMAOTTargetLinker",
-    hdrs = ["LLVMAOTTargetLinker.h"],
-    deps = platform_trampoline_deps("LLVMAOTTargetLinker", "compiler/Dialect/HAL/Target/LLVM"),
-)
-
-cc_library(
-    name = "LLVMAOTTargetLinker_hdrs",
-    hdrs = ["LLVMAOTTargetLinker.h"],
-    deps = [
-        ":LLVMTargetOptions",
-        "//iree/base:status",
-    ],
-)
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/CMakeLists.txt b/iree/compiler/Dialect/HAL/Target/LLVM/CMakeLists.txt
index 8a1d4e5..43b2e50 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/CMakeLists.txt
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/CMakeLists.txt
@@ -20,52 +20,6 @@
 
 iree_cc_library(
   NAME
-    LLVMIR
-  HDRS
-    "LLVMIRTarget.h"
-  SRCS
-    "LLVMIRTarget.cpp"
-  DEPS
-    ::LLVMIRPasses
-    ::LLVMTargetOptions
-    LLVMCore
-    LLVMSupport
-    LLVMX86CodeGen
-    MLIRTargetLLVMIR
-    iree::compiler::Conversion::LinalgToLLVM
-    iree::compiler::Dialect::HAL::Target
-    iree::schemas::llvmir_executable_def_cc_fbs
-  PUBLIC
-)
-
-iree_cc_library(
-  NAME
-    LLVMAOT
-  HDRS
-    "LLVMAOTTarget.h"
-  SRCS
-    "LLVMAOTTarget.cpp"
-  DEPS
-    ::LLVMAOTTargetLinker
-    ::LLVMIRPasses
-    ::LLVMTargetOptions
-    LLVMAArch64AsmParser
-    LLVMAArch64CodeGen
-    LLVMARMAsmParser
-    LLVMARMCodeGen
-    LLVMCore
-    LLVMSupport
-    LLVMX86AsmParser
-    LLVMX86CodeGen
-    MLIRTargetLLVMIR
-    iree::compiler::Conversion::LinalgToLLVM
-    iree::compiler::Dialect::HAL::Target
-    iree::schemas::dylib_executable_def_cc_fbs
-  PUBLIC
-)
-
-iree_cc_library(
-  NAME
     LLVMIRPasses
   HDRS
     "LLVMIRPasses.h"
@@ -94,24 +48,3 @@
     LLVMTarget
   PUBLIC
 )
-
-iree_cc_library(
-  NAME
-    LLVMAOTTargetLinker
-  HDRS
-    "LLVMAOTTargetLinker.h"
-  DEPS
-    iree::compiler::Dialect::HAL::Target::LLVM::internal::LLVMAOTTargetLinker_internal
-  PUBLIC
-)
-
-iree_cc_library(
-  NAME
-    LLVMAOTTargetLinker_hdrs
-  HDRS
-    "LLVMAOTTargetLinker.h"
-  DEPS
-    ::LLVMTargetOptions
-    iree::base::status
-  PUBLIC
-)
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/IR/BUILD b/iree/compiler/Dialect/HAL/Target/LLVM/IR/BUILD
new file mode 100644
index 0000000..bbb82b0
--- /dev/null
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/IR/BUILD
@@ -0,0 +1,51 @@
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("//iree:build_defs.oss.bzl", "iree_cmake_extra_content")
+
+package(
+    default_visibility = ["//visibility:public"],
+    features = ["layering_check"],
+    licenses = ["notice"],  # Apache 2.0
+)
+
+iree_cmake_extra_content(
+    content = """
+if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
+  return()
+endif()
+""",
+)
+
+cc_library(
+    name = "LLVMIR",
+    srcs = [
+        "LLVMIRTarget.cpp",
+    ],
+    hdrs = [
+        "LLVMIRTarget.h",
+    ],
+    deps = [
+        "//iree/compiler/Conversion/LinalgToLLVM",
+        "//iree/compiler/Dialect/HAL/Target",
+        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMIRPasses",
+        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMTargetOptions",
+        "//iree/schemas:llvmir_executable_def_cc_fbs",
+        "@llvm-project//llvm:Core",
+        "@llvm-project//llvm:Support",
+        # TODO(ataei): Link with native target dep.
+        "@llvm-project//llvm:X86CodeGen",
+        "@llvm-project//mlir:TargetLLVMIR",
+    ],
+)
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt b/iree/compiler/Dialect/HAL/Target/LLVM/IR/CMakeLists.txt
similarity index 60%
copy from iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt
copy to iree/compiler/Dialect/HAL/Target/LLVM/IR/CMakeLists.txt
index b91dae5..6b1604f 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/internal/CMakeLists.txt
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/IR/CMakeLists.txt
@@ -12,16 +12,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+if(NOT ${IREE_TARGET_BACKEND_LLVM-IR})
+  return()
+endif()
+
 iree_add_all_subdirs()
 
 iree_cc_library(
   NAME
-    LLVMAOTTargetLinker_internal
+    LLVMIR
+  HDRS
+    "LLVMIRTarget.h"
   SRCS
-    "LLVMAOTTargetLinker.cpp"
+    "LLVMIRTarget.cpp"
   DEPS
+    LLVMCore
     LLVMSupport
-    iree::base::status
-    iree::compiler::Dialect::HAL::Target::LLVM::LLVMAOTTargetLinker_hdrs
+    LLVMX86CodeGen
+    MLIRTargetLLVMIR
+    iree::compiler::Conversion::LinalgToLLVM
+    iree::compiler::Dialect::HAL::Target
+    iree::compiler::Dialect::HAL::Target::LLVM::LLVMIRPasses
+    iree::compiler::Dialect::HAL::Target::LLVM::LLVMTargetOptions
+    iree::schemas::llvmir_executable_def_cc_fbs
   PUBLIC
 )
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.cpp b/iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.cpp
similarity index 98%
rename from iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.cpp
rename to iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.cpp
index 5bf71c4..87f32fd 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.h"
 
 #include "iree/compiler/Conversion/LinalgToLLVM/Passes.h"
 #include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRPasses.h"
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.h b/iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.h
similarity index 82%
rename from iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.h
rename to iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.h
index 6a561be..46db6a9 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.h
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.h
@@ -13,8 +13,8 @@
 // limitations under the License.
 //
 
-#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_TARGET_H_
-#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_TARGET_H_
+#ifndef IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_LLVMIRTARGET_H_
+#define IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_LLVMIRTARGET_H_
 
 #include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMTargetOptions.h"
 
@@ -32,4 +32,4 @@
 }  // namespace iree_compiler
 }  // namespace mlir
 
-#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_TARGET_H_
+#endif  // IREE_COMPILER_DIALECT_HAL_TARGET_LLVM_IR_LLVMIRTARGET_H_
diff --git a/iree/tools/BUILD b/iree/tools/BUILD
index f4792fe..c27bdf6 100644
--- a/iree/tools/BUILD
+++ b/iree/tools/BUILD
@@ -148,8 +148,8 @@
         "-DIREE_HAVE_VULKANSPIRV_TARGET",
     ],
     deps = [
-        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMAOT",
-        "//iree/compiler/Dialect/HAL/Target/LLVM:LLVMIR",
+        "//iree/compiler/Dialect/HAL/Target/LLVM/AOT:LLVMAOT",
+        "//iree/compiler/Dialect/HAL/Target/LLVM/IR:LLVMIR",
         "//iree/compiler/Dialect/HAL/Target/VMLA",
         "//iree/compiler/Dialect/HAL/Target/VulkanSPIRV",
     ],
diff --git a/iree/tools/CMakeLists.txt b/iree/tools/CMakeLists.txt
index 6918aa8..f3a33a5 100644
--- a/iree/tools/CMakeLists.txt
+++ b/iree/tools/CMakeLists.txt
@@ -21,9 +21,9 @@
 set(IREE_COMPILER_TARGET_COPTS "")
 # TODO(#2645): Move LLVMAOT target under DYLIB-LLVM-AOT flag
 if(${IREE_TARGET_BACKEND_LLVM-IR})
-  list(APPEND IREE_COMPILER_TARGETS iree::compiler::Dialect::HAL::Target::LLVM::LLVMAOT)
+  list(APPEND IREE_COMPILER_TARGETS iree::compiler::Dialect::HAL::Target::LLVM::AOT::LLVMAOT)
   list(APPEND IREE_COMPILER_TARGET_COPTS "-DIREE_HAVE_LLVMAOT_TARGET")
-  list(APPEND IREE_COMPILER_TARGETS iree::compiler::Dialect::HAL::Target::LLVM::LLVMIR)
+  list(APPEND IREE_COMPILER_TARGETS iree::compiler::Dialect::HAL::Target::LLVM::IR::LLVMIR)
   list(APPEND IREE_COMPILER_TARGET_COPTS "-DIREE_HAVE_LLVMIR_TARGET")
 endif()
 if(${IREE_TARGET_BACKEND_VMLA})
diff --git a/iree/tools/init_targets.cc b/iree/tools/init_targets.cc
index c0b4c4f..99df72c 100644
--- a/iree/tools/init_targets.cc
+++ b/iree/tools/init_targets.cc
@@ -15,10 +15,10 @@
 #include "iree/tools/init_targets.h"
 
 #ifdef IREE_HAVE_LLVMAOT_TARGET
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/AOT/LLVMAOTTarget.h"
 #endif
 #ifdef IREE_HAVE_LLVMIR_TARGET
-#include "iree/compiler/Dialect/HAL/Target/LLVM/LLVMIRTarget.h"
+#include "iree/compiler/Dialect/HAL/Target/LLVM/IR/LLVMIRTarget.h"
 #endif
 #ifdef IREE_HAVE_VMLA_TARGET
 #include "iree/compiler/Dialect/HAL/Target/VMLA/VMLATarget.h"