Skip to content

Commit 592d72b

Browse files
Concrete SIMD.init(repeating:) and SIMD.init(lowHalf:highHalf:) optimizations (#81766)
WIP to add more overloads to optimize SIMD codegen on concrete types. Here we do: - init(repeating:) - init(lowHalf:highHalf:) These are always inlined, even in debug, since LLVM knows how to lower them to one or two instructions on the targets that we care about.
1 parent 746414b commit 592d72b

12 files changed

+865
-378
lines changed

Runtimes/Core/core/CMakeLists.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,16 +264,24 @@ if(SwiftCore_ENABLE_COMMANDLINE_SUPPORT)
264264
endif()
265265

266266
if(SwiftCore_ENABLE_VECTOR_TYPES)
267-
gyb_expand(SIMDConcreteOperations.swift.gyb
268-
SIMDConcreteOperations.swift
267+
gyb_expand(SIMDFloatConcreteOperations.swift.gyb
268+
SIMDFloatConcreteOperations.swift
269+
FLAGS "-DCMAKE_SIZEOF_VOID_P=${SwiftCore_SIZEOF_POINTER}")
270+
gyb_expand(SIMDIntegerConcreteOperations.swift.gyb
271+
SIMDIntegerConcreteOperations.swift
272+
FLAGS "-DCMAKE_SIZEOF_VOID_P=${SwiftCore_SIZEOF_POINTER}")
273+
gyb_expand(SIMDMaskConcreteOperations.swift.gyb
274+
SIMDMaskConcreteOperations.swift
269275
FLAGS "-DCMAKE_SIZEOF_VOID_P=${SwiftCore_SIZEOF_POINTER}")
270276
gyb_expand(SIMDVectorTypes.swift.gyb
271277
SIMDVectorTypes.swift
272278
FLAGS "-DCMAKE_SIZEOF_VOID_P=${SwiftCore_SIZEOF_POINTER}")
273279

274280
target_sources(swiftCore PRIVATE
275281
SIMDVector.swift
276-
"${CMAKE_CURRENT_BINARY_DIR}/SIMDConcreteOperations.swift"
282+
"${CMAKE_CURRENT_BINARY_DIR}/SIMDFloatConcreteOperations.swift"
283+
"${CMAKE_CURRENT_BINARY_DIR}/SIMDIntegerConcreteOperations.swift"
284+
"${CMAKE_CURRENT_BINARY_DIR}/SIMDMaskConcreteOperations.swift"
277285
"${CMAKE_CURRENT_BINARY_DIR}/SIMDVectorTypes.swift")
278286
endif()
279287

stdlib/public/core/CMakeLists.txt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,21 @@ split_embedded_sources(
268268
)
269269

270270
if(SWIFT_STDLIB_ENABLE_VECTOR_TYPES)
271+
split_embedded_sources(
272+
OUT_LIST_EMBEDDED SWIFTLIB_EMBEDDED_VECTOR_GYB_SOURCES
273+
OUT_LIST_NORMAL SWIFTLIB_VECTOR_GYB_SOURCES
274+
275+
EMBEDDED SIMDIntegerConcreteOperations.swift.gyb
276+
EMBEDDED SIMDFloatConcreteOperations.swift.gyb
277+
EMBEDDED SIMDMaskConcreteOperations.swift.gyb
278+
EMBEDDED SIMDVectorTypes.swift.gyb
279+
)
280+
271281
list(APPEND SWIFTLIB_SOURCES SIMDVector.swift)
272-
list(APPEND SWIFTLIB_GYB_SOURCES SIMDConcreteOperations.swift.gyb SIMDVectorTypes.swift.gyb)
282+
list(APPEND SWIFTLIB_GYB_SOURCES ${SWIFTLIB_VECTOR_GYB_SOURCES})
273283

274284
list(APPEND SWIFTLIB_EMBEDDED_SOURCES SIMDVector.swift)
275-
list(APPEND SWIFTLIB_EMBEDDED_GYB_SOURCES SIMDConcreteOperations.swift.gyb SIMDVectorTypes.swift.gyb)
285+
list(APPEND SWIFTLIB_EMBEDDED_GYB_SOURCES ${SWIFTLIB_EMBEDDED_VECTOR_GYB_SOURCES})
276286
endif()
277287

278288
# Freestanding and Linux/Android builds both have failures to resolve.

stdlib/public/core/GroupInfo.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,12 @@
182182
"FloatingPointTypes.swift",
183183
"FloatingPointRandom.swift"],
184184
"Vector": [
185-
"SIMDConcreteOperations.swift",
185+
"SIMDIntegerConcreteOperations.swift",
186+
"SIMDFloatConcreteOperations.swift",
187+
"SIMDMaskConcreteOperations.swift",
186188
"SIMDVector.swift",
187-
"SIMDVectorTypes.swift"]}
189+
"SIMDVectorTypes.swift"
190+
]}
188191
],
189192
"Optional": [
190193
"Optional.swift"

0 commit comments

Comments
 (0)