Skip to content

Commit c016fc9

Browse files
committed
[SYCL] Use the system installed vc-intrinsics if available (intel#18206)
For all external dependencies, we should try using the system installed one first and only download the repo if we can't find it. Apply that for vc-intrinics first, I manually tested this with both static and shared library builds. --------- Signed-off-by: Sarnie, Nick <[email protected]>
1 parent 3310487 commit c016fc9

File tree

2 files changed

+164
-25
lines changed

2 files changed

+164
-25
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# Lowering of SYCL ESIMD kernels depends on vc-intrinsics
2+
# NOTE: could have been added earlier from llvm/projects
3+
if (NOT TARGET LLVMGenXIntrinsics)
4+
if(NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR AND NOT LLVMGenXIntrinsics_INCLUDE_DIR)
5+
find_package(LLVMGenXIntrinsics QUIET)
6+
endif()
7+
8+
if (NOT LLVMGenXIntrinsics_FOUND)
9+
if (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
10+
find_path(LLVMGenXIntrinsics_INCLUDE_DIR GenXIntrinsics/include PATHS ${CMAKE_PREFIX_PATH})
11+
12+
if (NOT LLVMGenXIntrinsics_INCLUDE_DIR)
13+
set(LLVMGenXIntrinsics_GIT_REPO https://github.com/intel/vc-intrinsics.git)
14+
# Date: Mar 7, 2025
15+
+ # Update Triple usage after 979c275097
16+
+ set(LLVMGenXIntrinsics_GIT_TAG 9e1935aedc2101deaab45b2f69f4b43ccf6f2b52)
17+
18+
# Date: Mar 7, 2025
19+
# Update Triple usage after 979c275097
20+
set(LLVMGenXIntrinsics_GIT_TAG 9e1935aedc2101deaab45b2f69f4b43ccf6f2b52)
21+
22+
message(STATUS "vc-intrinsics repo is missing. Will try to download it from ${LLVMGenXIntrinsics_GIT_REPO}")
23+
include(FetchContent)
24+
FetchContent_Declare(vc-intrinsics
25+
GIT_REPOSITORY ${LLVMGenXIntrinsics_GIT_REPO}
26+
GIT_TAG ${LLVMGenXIntrinsics_GIT_TAG}
27+
)
28+
FetchContent_MakeAvailable(vc-intrinsics)
29+
FetchContent_GetProperties(vc-intrinsics)
30+
31+
set(LLVMGenXIntrinsics_SOURCE_DIR ${vc-intrinsics_SOURCE_DIR})
32+
set(LLVMGenXIntrinsics_BINARY_DIR ${vc-intrinsics_BINARY_DIR})
33+
else()
34+
message(STATUS "vc-intrinsics found in system at ${LLVMGenXIntrinsics_INCLUDE_DIR}")
35+
set(LLVMGenXIntrinsics_SOURCE_DIR ${LLVMGenXIntrinsics_INCLUDE_DIR}/..)
36+
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
37+
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
38+
endif()
39+
else (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
40+
# -DLLVMGenXIntrinsics_SOURCE_DIR is provided
41+
message(STATUS "vc-intrinsics are added manually ${LLVMGenXIntrinsics_SOURCE_DIR}")
42+
43+
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
44+
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
45+
endif (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
46+
target_include_directories(LLVMGenXIntrinsics
47+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_SOURCE_DIR}/GenXIntrinsics/include>
48+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_BINARY_DIR}/GenXIntrinsics/include>
49+
)
50+
endif()
51+
endif (NOT TARGET LLVMGenXIntrinsics)
52+
53+
set_property(GLOBAL PROPERTY LLVMGenXIntrinsics_SOURCE_PROP ${LLVMGenXIntrinsics_SOURCE_DIR})
54+
set_property(GLOBAL PROPERTY LLVMGenXIntrinsics_BINARY_PROP ${LLVMGenXIntrinsics_BINARY_DIR})
55+
56+
add_llvm_component_library(LLVMSYCLLowerIR
57+
ESIMD/ESIMDOptimizeVecArgCallConv.cpp
58+
ESIMD/ESIMDUtils.cpp
59+
ESIMD/ESIMDVerifier.cpp
60+
ESIMD/ESIMDRemoveHostCode.cpp
61+
ESIMD/ESIMDRemoveOptnoneNoinline.cpp
62+
ESIMD/LowerESIMD.cpp
63+
ESIMD/LowerESIMDKernelAttrs.cpp
64+
RecordSYCLAspectNames.cpp
65+
CleanupSYCLMetadata.cpp
66+
CompileTimePropertiesPass.cpp
67+
DeviceGlobals.cpp
68+
ESIMD/LowerESIMDVLoadVStore.cpp
69+
ESIMD/LowerESIMDSlmReservation.cpp
70+
HostPipes.cpp
71+
LowerInvokeSimd.cpp
72+
LowerWGLocalMemory.cpp
73+
LowerWGScope.cpp
74+
MutatePrintfAddrspace.cpp
75+
SpecConstants.cpp
76+
SYCLAddOptLevelAttribute.cpp
77+
SYCLConditionalCallOnDevice.cpp
78+
SYCLCreateNVVMAnnotations.cpp
79+
SYCLDeviceLibReqMask.cpp
80+
SYCLDeviceRequirements.cpp
81+
SYCLKernelParamOptInfo.cpp
82+
SYCLJointMatrixTransform.cpp
83+
SYCLOptimizeBackToBackBarrier.cpp
84+
SYCLPropagateAspectsUsage.cpp
85+
SYCLPropagateJointMatrixUsage.cpp
86+
SYCLVirtualFunctionsAnalysis.cpp
87+
SYCLUtils.cpp
88+
89+
LocalAccessorToSharedMemory.cpp
90+
GlobalOffset.cpp
91+
TargetHelpers.cpp
92+
93+
SanitizerKernelMetadata.cpp
94+
95+
ADDITIONAL_HEADER_DIRS
96+
${LLVM_MAIN_INCLUDE_DIR}/llvm/SYCLLowerIR
97+
${LLVM_MAIN_SRC_DIR}/projects/vc-intrinsics/GenXIntrinsics/include
98+
${LLVM_BINARY_DIR}/projects/vc-intrinsics/GenXIntrinsics/include
99+
100+
DEPENDS
101+
intrinsics_gen
102+
LLVMGenXIntrinsics
103+
LLVMDemangle
104+
LLVMTransformUtils
105+
DeviceConfigFile
106+
107+
LINK_LIBS
108+
LLVMGenXIntrinsics
109+
LLVMDemangle
110+
LLVMTargetParser
111+
LLVMTransformUtils
112+
113+
LINK_COMPONENTS
114+
Analysis
115+
BitWriter
116+
Core
117+
Demangle
118+
IRPrinter
119+
Support
120+
ipo
121+
)
122+
123+
target_include_directories(LLVMSYCLLowerIR
124+
PRIVATE ${LLVM_MAIN_SRC_DIR}/projects/vc-intrinsics/GenXIntrinsics/include
125+
PRIVATE ${LLVM_BINARY_DIR}/projects/vc-intrinsics/GenXIntrinsics/include)

llvm/lib/SYCLLowerIR/CMakeLists.txt

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,50 @@
11
# Lowering of SYCL ESIMD kernels depends on vc-intrinsics
22
# NOTE: could have been added earlier from llvm/projects
33
if (NOT TARGET LLVMGenXIntrinsics)
4-
if (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
5-
set(LLVMGenXIntrinsics_GIT_REPO https://github.com/intel/vc-intrinsics.git)
4+
if(NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR AND NOT LLVMGenXIntrinsics_INCLUDE_DIR)
5+
find_package(LLVMGenXIntrinsics QUIET)
6+
endif()
67

7-
# Date: Jul 25, 2024
8-
# Support MMX removal in LLVM upstream
9-
set(LLVMGenXIntrinsics_GIT_TAG 4e51b2467104a257c22788e343dafbdde72e28bb)
8+
if (NOT LLVMGenXIntrinsics_FOUND)
9+
if (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
10+
find_path(LLVMGenXIntrinsics_INCLUDE_DIR GenXIntrinsics/include PATHS ${CMAKE_PREFIX_PATH})
1011

11-
message(STATUS "vc-intrinsics repo is missing. Will try to download it from ${LLVMGenXIntrinsics_GIT_REPO}")
12-
include(FetchContent)
13-
FetchContent_Declare(vc-intrinsics
14-
GIT_REPOSITORY ${LLVMGenXIntrinsics_GIT_REPO}
15-
GIT_TAG ${LLVMGenXIntrinsics_GIT_TAG}
16-
)
17-
FetchContent_MakeAvailable(vc-intrinsics)
18-
FetchContent_GetProperties(vc-intrinsics)
12+
if (NOT LLVMGenXIntrinsics_INCLUDE_DIR)
13+
set(LLVMGenXIntrinsics_GIT_REPO https://github.com/intel/vc-intrinsics.git)
1914

20-
set(LLVMGenXIntrinsics_SOURCE_DIR ${vc-intrinsics_SOURCE_DIR})
21-
set(LLVMGenXIntrinsics_BINARY_DIR ${vc-intrinsics_BINARY_DIR})
22-
else (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
23-
# -DLLVMGenXIntrinsics_SOURCE_DIR is provided
24-
message(STATUS "vc-intrinsics are added manually ${LLVMGenXIntrinsics_SOURCE_DIR}")
15+
# Date: Jul 25, 2024
16+
# Support MMX removal in LLVM upstream
17+
set(LLVMGenXIntrinsics_GIT_TAG 4e51b2467104a257c22788e343dafbdde72e28bb)
2518

26-
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
27-
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
28-
endif (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
19+
message(STATUS "vc-intrinsics repo is missing. Will try to download it from ${LLVMGenXIntrinsics_GIT_REPO}")
20+
include(FetchContent)
21+
FetchContent_Declare(vc-intrinsics
22+
GIT_REPOSITORY ${LLVMGenXIntrinsics_GIT_REPO}
23+
GIT_TAG ${LLVMGenXIntrinsics_GIT_TAG}
24+
)
25+
FetchContent_MakeAvailable(vc-intrinsics)
26+
FetchContent_GetProperties(vc-intrinsics)
2927

30-
target_include_directories(LLVMGenXIntrinsics
31-
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_SOURCE_DIR}/GenXIntrinsics/include>
32-
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_BINARY_DIR}/GenXIntrinsics/include>
33-
)
28+
set(LLVMGenXIntrinsics_SOURCE_DIR ${vc-intrinsics_SOURCE_DIR})
29+
set(LLVMGenXIntrinsics_BINARY_DIR ${vc-intrinsics_BINARY_DIR})
30+
else()
31+
message(STATUS "vc-intrinsics found in system at ${LLVMGenXIntrinsics_INCLUDE_DIR}")
32+
set(LLVMGenXIntrinsics_SOURCE_DIR ${LLVMGenXIntrinsics_INCLUDE_DIR}/..)
33+
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
34+
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
35+
endif()
36+
else (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
37+
# -DLLVMGenXIntrinsics_SOURCE_DIR is provided
38+
message(STATUS "vc-intrinsics are added manually ${LLVMGenXIntrinsics_SOURCE_DIR}")
39+
40+
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
41+
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
42+
endif (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
43+
target_include_directories(LLVMGenXIntrinsics
44+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_SOURCE_DIR}/GenXIntrinsics/include>
45+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_BINARY_DIR}/GenXIntrinsics/include>
46+
)
47+
endif()
3448
endif (NOT TARGET LLVMGenXIntrinsics)
3549

3650
set_property(GLOBAL PROPERTY LLVMGenXIntrinsics_SOURCE_PROP ${LLVMGenXIntrinsics_SOURCE_DIR})

0 commit comments

Comments
 (0)