Skip to content

Commit 355c822

Browse files
author
Andrew Lamzed-Short
authored
[SYCL] Separate CompileTimePropertiesPass from sycl-post-link tool (#7527)
Extracted the `CompileTimeProperties` pass from the `sycl-post-link` tool up into the `llvm` directory with the rest of the passes and added it as a step in the code generation pipeline. Moving this into a more generalised location will allow for new tools to be developed that require its logic. Due to a dependency on `DeviceGlobals`, that also had to be moved and includes adjusted in `sycl-post-link` tool. This pass can be invoked via opt as well for testing. Several `sycl-post-link` tests had to be transferred to `llvm/test/SYCLLowerIR` with some being modified as well to account for the change. Some tests had to be split across the two directories so as to maintain coverage. Particular tests that focused on the result of running the pass over some iput bytecode and testing the result have been turned into their own tests under the `llvm/test/SYCLLowerIR/CompileTimePropertiesPass` test directory.
1 parent b5d5aad commit 355c822

22 files changed

+200
-158
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include "llvm/Passes/PassBuilder.h"
4747
#include "llvm/Passes/PassPlugin.h"
4848
#include "llvm/Passes/StandardInstrumentations.h"
49+
#include "llvm/SYCLLowerIR/CompileTimePropertiesPass.h"
4950
#include "llvm/SYCLLowerIR/ESIMD/ESIMDVerifier.h"
5051
#include "llvm/SYCLLowerIR/LowerWGLocalMemory.h"
5152
#include "llvm/SYCLLowerIR/MutatePrintfAddrspace.h"
@@ -1053,6 +1054,9 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10531054
// Allocate static local memory in SYCL kernel scope for each allocation
10541055
// call.
10551056
MPM.addPass(SYCLLowerWGLocalMemoryPass());
1057+
1058+
// Process properties and annotations
1059+
MPM.addPass(CompileTimePropertiesPass());
10561060
}
10571061
}
10581062

clang/test/CodeGenSYCL/kernel-early-optimization-pipeline.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,8 @@
99
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -mdebug-pass Structure -emit-llvm -fno-sycl-early-optimizations -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-NEWPM-NOEARLYOPT
1010
// CHECK-NEWPM-NOEARLYOPT-NOT: ConstantMergePass
1111
// CHECK-NEWPM-NOEARLYOPT: SYCLMutatePrintfAddrspacePass
12+
13+
// Checks that the compile time properties pass is added into the compilation pipeline
14+
//
15+
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -mdebug-pass Structure -emit-llvm -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-COMPTIMEPROPS
16+
// CHECK-COMPTIMEPROPS: Running pass: CompileTimePropertiesPass on [module]

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
#include "llvm/IR/SafepointIRVerifier.h"
8181
#include "llvm/IR/Verifier.h"
8282
#include "llvm/IRPrinter/IRPrintingPasses.h"
83+
#include "llvm/SYCLLowerIR/CompileTimePropertiesPass.h"
8384
#include "llvm/SYCLLowerIR/ESIMD/ESIMDVerifier.h"
8485
#include "llvm/SYCLLowerIR/ESIMD/LowerESIMD.h"
8586
#include "llvm/SYCLLowerIR/LowerInvokeSimd.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ MODULE_PASS("deadargelim-sycl", DeadArgumentEliminationSYCLPass())
138138
MODULE_PASS("sycllowerwglocalmemory", SYCLLowerWGLocalMemoryPass())
139139
MODULE_PASS("lower-esimd-kernel-attrs", SYCLFixupESIMDKernelWrapperMDPass())
140140
MODULE_PASS("sycl-propagate-aspects-usage", SYCLPropagateAspectsUsagePass())
141+
MODULE_PASS("compile-time-properties", CompileTimePropertiesPass())
141142
#undef MODULE_PASS
142143

143144
#ifndef MODULE_PASS_WITH_PARAMS

llvm/lib/SYCLLowerIR/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ add_llvm_component_library(LLVMSYCLLowerIR
5252
ESIMD/ESIMDVerifier.cpp
5353
ESIMD/LowerESIMD.cpp
5454
ESIMD/LowerESIMDKernelAttrs.cpp
55+
CompileTimePropertiesPass.cpp
56+
DeviceGlobals.cpp
5557
ESIMD/LowerESIMDVecArg.cpp
5658
ESIMD/LowerESIMDVLoadVStore.cpp
5759
ESIMD/LowerESIMDSlmReservation.cpp

llvm/tools/sycl-post-link/CompileTimePropertiesPass.cpp renamed to llvm/lib/SYCLLowerIR/CompileTimePropertiesPass.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
// See comments in the header.
99
//===----------------------------------------------------------------------===//
1010

11-
#include "CompileTimePropertiesPass.h"
12-
#include "DeviceGlobals.h"
11+
#include "llvm/SYCLLowerIR/CompileTimePropertiesPass.h"
12+
#include "llvm/SYCLLowerIR/DeviceGlobals.h"
1313

1414
#include "llvm/ADT/APInt.h"
1515
#include "llvm/ADT/StringMap.h"

llvm/tools/sycl-post-link/DeviceGlobals.cpp renamed to llvm/lib/SYCLLowerIR/DeviceGlobals.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
// See comments in the header.
99
//===----------------------------------------------------------------------===//
1010

11-
#include "DeviceGlobals.h"
12-
#include "CompileTimePropertiesPass.h"
11+
#include "llvm/SYCLLowerIR/DeviceGlobals.h"
12+
#include "llvm/SYCLLowerIR/CompileTimePropertiesPass.h"
1313

1414
#include "llvm/ADT/STLExtras.h"
1515
#include "llvm/ADT/StringRef.h"
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
; RUN: opt -passes=compile-time-properties %s -S | FileCheck %s --check-prefix CHECK-IR
2+
3+
; This test is intended to check that DeviceGlobalPass adds all the required
4+
; metadata nodes to every device global variable as well as the required
5+
; properties in the 'SYCL/device globals' property set and handles the
6+
; 'sycl-device-image-scope' attribute written in any allowed form.
7+
8+
source_filename = "test_global_variable.cpp"
9+
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
10+
target triple = "spir64-unknown-unknown"
11+
12+
%"class.cl::sycl::ext::oneapi::device_global.0" = type { i32 addrspace(4)* }
13+
%"class.cl::sycl::ext::oneapi::device_global.1" = type { i8 }
14+
%class.anon.0 = type { i8 }
15+
16+
@_ZL7dg_int1 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8 #0
17+
; CHECK-IR: @_ZL7dg_int1 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8, !spirv.Decorations ![[#MN0:]]
18+
@_ZL7dg_int2 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8 #1
19+
; CHECK-IR: @_ZL7dg_int2 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8, !spirv.Decorations ![[#MN4:]]
20+
@_ZL8dg_bool3 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.1" zeroinitializer, align 1 #2
21+
; CHECK-IR: @_ZL8dg_bool3 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.1" zeroinitializer, align 1, !spirv.Decorations ![[#MN8:]]
22+
@_ZL8dg_bool4 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.1" zeroinitializer, align 1 #3
23+
; CHECK-IR: @_ZL8dg_bool4 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.1" zeroinitializer, align 1, !spirv.Decorations ![[#MN10:]]
24+
@_ZL7no_dg_int1 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8 #6
25+
; CHECK-IR: @_ZL7no_dg_int1 = internal addrspace(1) constant %"class.cl::sycl::ext::oneapi::device_global.0" zeroinitializer, align 8, !spirv.Decorations ![[#MN12:]]
26+
27+
define internal spir_func void @_ZZ4mainENKUlvE_clEv(%class.anon.0 addrspace(4)* align 1 dereferenceable_or_null(1) %this) #4 align 2 {
28+
entry:
29+
%this.addr = alloca %class.anon.0 addrspace(4)*, align 8
30+
%this.addr.ascast = addrspacecast %class.anon.0 addrspace(4)** %this.addr to %class.anon.0 addrspace(4)* addrspace(4)*
31+
store %class.anon.0 addrspace(4)* %this, %class.anon.0 addrspace(4)* addrspace(4)* %this.addr.ascast, align 8
32+
%this1 = load %class.anon.0 addrspace(4)*, %class.anon.0 addrspace(4)* addrspace(4)* %this.addr.ascast, align 8
33+
%call1 = call spir_func align 4 dereferenceable(4) i32 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIiJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.0" addrspace(4)* align 8 dereferenceable_or_null(8) addrspacecast (%"class.cl::sycl::ext::oneapi::device_global.0" addrspace(1)* @_ZL7dg_int1 to %"class.cl::sycl::ext::oneapi::device_global.0" addrspace(4)*)) #5
34+
%call2 = call spir_func align 4 dereferenceable(4) i32 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIiJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.0" addrspace(4)* align 8 dereferenceable_or_null(8) addrspacecast (%"class.cl::sycl::ext::oneapi::device_global.0" addrspace(1)* @_ZL7dg_int2 to %"class.cl::sycl::ext::oneapi::device_global.0" addrspace(4)*)) #5
35+
%call3 = call spir_func align 1 dereferenceable(1) i8 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIbJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.1" addrspace(4)* align 1 dereferenceable_or_null(1) addrspacecast (%"class.cl::sycl::ext::oneapi::device_global.1" addrspace(1)* @_ZL8dg_bool3 to %"class.cl::sycl::ext::oneapi::device_global.1" addrspace(4)*)) #5
36+
%call4 = call spir_func align 1 dereferenceable(1) i8 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIbJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.1" addrspace(4)* align 1 dereferenceable_or_null(1) addrspacecast (%"class.cl::sycl::ext::oneapi::device_global.1" addrspace(1)* @_ZL8dg_bool4 to %"class.cl::sycl::ext::oneapi::device_global.1" addrspace(4)*)) #5
37+
ret void
38+
}
39+
40+
; Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
41+
declare spir_func align 4 dereferenceable(4) i32 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIiJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.0" addrspace(4)* align 8 dereferenceable_or_null(8) %this) #4 align 2
42+
43+
; Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
44+
declare spir_func align 1 dereferenceable(1) i8 addrspace(4)* @_ZNK2cl4sycl3ext6oneapi13device_globalIbJNS2_8PropertyIXadsoKcL_ZL5Name1EEEXadsoS5_L_ZL6Value1EEEEENS4_IXadsoS5_L_ZL5Name2EEEXadsoS5_L_ZL6Value2EEEEENS4_IXadsoS5_L_ZL5Name3EEEXadsoS5_L_ZL6Value3EEEEENS4_IXadsoS5_L_ZL5Name4EEEXadsoS5_L_ZL6Value4EEEEEEE3getEv(%"class.cl::sycl::ext::oneapi::device_global.1" addrspace(4)* align 1 dereferenceable_or_null(1) %this) #4 align 2
45+
46+
attributes #0 = { "sycl-unique-id"="6da74a122db9f35d____ZL7dg_int1" "sycl-device-image-scope"="false" "sycl-host-access"="1" "sycl-implement-in-csr"="true" "sycl-init-mode"="0" "sycl-device-global-size"="4" }
47+
attributes #1 = { "sycl-unique-id"="7da74a1187b9f35d____ZL7dg_int2" "sycl-implement-in-csr"="false" "sycl-init-mode"="1" "sycl-device-global-size"="4" }
48+
attributes #2 = { "sycl-unique-id"="9d329ad59055e972____ZL8dg_bool3" "sycl-device-image-scope"="true" "sycl-host-access"="0" "sycl-implement-in-csr" "sycl-init-mode"="0" "sycl-device-global-size"="1" }
49+
attributes #3 = { "sycl-unique-id"="dda2bad52c45c432____ZL8dg_bool4" "sycl-device-image-scope" "sycl-host-access"="2" "sycl-device-global-size"="1" }
50+
attributes #4 = { convergent mustprogress noinline norecurse nounwind optnone "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
51+
attributes #5 = { convergent nounwind }
52+
; no sycl-device-global-size attribute, this is not a device global variable but it contains compile-time properties,
53+
; a metadata node will be generated.
54+
attributes #6 = { "sycl-unique-id"="6da74a122db9f35d____ZL7no_dg_int1" "sycl-device-image-scope"="false" "sycl-host-access"="1" "sycl-implement-in-csr"="true" "sycl-init-mode"="0" }
55+
56+
!llvm.dependent-libraries = !{!0}
57+
!llvm.module.flags = !{!1, !2}
58+
!opencl.spir.version = !{!3}
59+
!spirv.Source = !{!4}
60+
!llvm.ident = !{!5}
61+
62+
!0 = !{!"libcpmt"}
63+
!1 = !{i32 1, !"wchar_size", i32 2}
64+
!2 = !{i32 7, !"frame-pointer", i32 2}
65+
!3 = !{i32 1, i32 2}
66+
!4 = !{i32 4, i32 100000}
67+
!5 = !{!"clang version 14.0.0"}
68+
69+
; Ensure that the generated metadata nodes are correct
70+
; CHECK-IR-DAG: ![[#MN0]] = !{![[#MN1:]], ![[#MN2:]], ![[#MN3:]]}
71+
; CHECK-IR-DAG: ![[#MN1]] = !{i32 6149, i32 1}
72+
; CHECK-IR-DAG: ![[#MN2]] = !{i32 6148, i32 0}
73+
; CHECK-IR-DAG: ![[#MN3]] = !{i32 6147, i32 1, !"6da74a122db9f35d____ZL7dg_int1"}
74+
75+
; CHECK-IR-DAG: ![[#MN4]] = !{![[#MN5:]], ![[#MN6:]], ![[#MN7:]]}
76+
; CHECK-IR-DAG: ![[#MN5]] = !{i32 6149, i32 0}
77+
; CHECK-IR-DAG: ![[#MN6]] = !{i32 6148, i32 1}
78+
; CHECK-IR-DAG: ![[#MN7]] = !{i32 6147, i32 2, !"7da74a1187b9f35d____ZL7dg_int2"}
79+
80+
; CHECK-IR-DAG: ![[#MN8]] = !{![[#MN1]], ![[#MN2]], ![[#MN9:]]}
81+
; CHECK-IR-DAG: ![[#MN9]] = !{i32 6147, i32 0, !"9d329ad59055e972____ZL8dg_bool3"}
82+
83+
; CHECK-IR-DAG: ![[#MN10]] = !{![[#MN11:]]}
84+
; CHECK-IR-DAG: ![[#MN11]] = !{i32 6147, i32 2, !"dda2bad52c45c432____ZL8dg_bool4"}
85+
86+
; For not a device global variable, only actually present compile-time
87+
; properties are handled
88+
; CHECK-IR-DAG: ![[#MN12]] = !{![[#MN1]], ![[#MN2]]}

llvm/test/tools/sycl-post-link/kernel-attributes/kernel-pipelined.ll renamed to llvm/test/SYCLLowerIR/CompileTimePropertiesPass/kernel-attributes/kernel-pipelined.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; Check conversion of sycl-pipelined attribute
2-
; RUN: sycl-post-link --device-globals --ir-output-only %s -S -o - | FileCheck %s --check-prefix CHECK-IR
2+
; RUN: opt -passes="compile-time-properties" %s -S -o - | FileCheck %s --check-prefix CHECK-IR
33

44
; CHECK-IR-DAG: @pipelineNegative() #0 {{.*}}!spirv.Decorations [[DEFAULT_PIPELINE:![0-9]+]] {
55
; Function Attrs: convergent norecurse

llvm/test/tools/sycl-post-link/kernel-attributes/register-map-interface.ll renamed to llvm/test/SYCLLowerIR/CompileTimePropertiesPass/kernel-attributes/register-map-interface.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; Check conversion of sycl-register-map-interface attribute
2-
; RUN: sycl-post-link --device-globals --ir-output-only %s -S -o - | FileCheck %s --check-prefix CHECK-IR
2+
; RUN: opt -passes="compile-time-properties" %s -S -o - | FileCheck %s --check-prefix CHECK-IR
33

44
; CHECK-IR-DAG: @pStreaming() #0 {{.*}}!ip_interface [[REGISTER_MAP:![0-9]+]] {
55
; Function Attrs: convergent norecurse

llvm/test/tools/sycl-post-link/kernel-attributes/streaming-interface.ll renamed to llvm/test/SYCLLowerIR/CompileTimePropertiesPass/kernel-attributes/streaming-interface.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; Check conversion of sycl-streaming-interface attribute
2-
; RUN: sycl-post-link --device-globals --ir-output-only %s -S -o - | FileCheck %s --check-prefix CHECK-IR
2+
; RUN: opt -passes="compile-time-properties" %s -S -o - | FileCheck %s --check-prefix CHECK-IR
33

44
; CHECK-IR-DAG: @pStreaming() #0 {{.*}}!ip_interface [[STREAMING:![0-9]+]] {
55
; Function Attrs: convergent norecurse

llvm/test/tools/sycl-post-link/kernel-properties.ll renamed to llvm/test/SYCLLowerIR/CompileTimePropertiesPass/kernel-properties.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: sycl-post-link --ir-output-only --device-globals %s -S -o - | FileCheck %s --check-prefix CHECK-IR
1+
; RUN: opt -passes=compile-time-properties %s -S | FileCheck %s --check-prefix CHECK-IR
22

33
; CHECK-IR-DAG: @"_ZTSZZ4mainENK3$_0clERN2cl4sycl7handlerEE9TheKernel0"() #0 {{.*}}!intel_reqd_sub_group_size ![[SGSizeMD0:[0-9]+]] {{.*}}!reqd_work_group_size ![[WGSizeMD0:[0-9]+]]{{.*}}!work_group_size_hint ![[WGSizeHintMD0:[0-9]+]]
44
; Function Attrs: convergent norecurse

llvm/test/tools/sycl-post-link/sycl-properties-ptr-annotations.ll renamed to llvm/test/SYCLLowerIR/CompileTimePropertiesPass/sycl-properties-ptr-annotations.ll

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
1-
; RUN: sycl-post-link --device-globals --ir-output-only -S %s -o %t.ll
2-
; RUN: FileCheck %s -input-file=%t.ll
3-
;
4-
; TODO: Remove --device-globals once other features start using compile-time
5-
; properties.
6-
;
7-
; Tests the translation of "sycl-properties" pointer annotations to pointer
8-
; annotations the SPIR-V translator will produce decorations from.
9-
; NOTE: These use SYCL property meta-names that are currently only intended for
10-
; use in attributes-to-metadata translations, but sycl-post-link does not
11-
; currently make the distinction so we will use them for the purpose of
12-
; testing the transformations.
1+
; RUN: opt -passes=compile-time-properties %s -S | FileCheck %s
132

143
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
154
target triple = "spir64-unknown-unknown"

0 commit comments

Comments
 (0)