This PR adds support for the SPV_KHR_linkonce_odr extension and modifies existing negative test with a positive check for the extension and proper linkage type in case when the extension is enabled. SPV_KHR_linkonce_odr adds a "LinkOnceODR" linkage type, allowing proper translation of, for example, C++ templates classes merging during linking from different modules and supporting any other cases when a global variable/function must be merged with equivalent global variable(s)/function(s) from other modules during the linking process.
18 lines
641 B
LLVM
18 lines
641 B
LLVM
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown --spirv-extensions=SPV_KHR_linkonce_odr %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV-EXT
|
|
; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-extensions=SPV_KHR_linkonce_odr %s -o - -filetype=obj | spirv-val %}
|
|
|
|
; CHECK-SPIRV-EXT: Capability Linkage
|
|
; CHECK-SPIRV-EXT: Extension "SPV_KHR_linkonce_odr"
|
|
; CHECK-SPIRV-EXT-DAG: OpDecorate %[[#]] LinkageAttributes "square" LinkOnceODR
|
|
|
|
define spir_kernel void @k() {
|
|
entry:
|
|
%call = call spir_func i32 @square(i32 2)
|
|
ret void
|
|
}
|
|
|
|
define linkonce_odr dso_local spir_func i32 @square(i32 %in) {
|
|
entry:
|
|
ret i32 %in
|
|
}
|