Skip to content

Commit 2cfa1a6

Browse files
author
iclsrc
committed
Merge from 'sycl' to 'sycl-web' (3 commits)
2 parents 026b433 + 20d9346 commit 2cfa1a6

File tree

13 files changed

+591
-517
lines changed

13 files changed

+591
-517
lines changed

clang/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp

Lines changed: 474 additions & 474 deletions
Large diffs are not rendered by default.

libclc/utils/libclc-remangler/LibclcRemangler.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,20 @@ class Remangler {
367367
addSub(typeNode);
368368
break;
369369
}
370+
case Node::Kind::KBinaryFPType: {
371+
if (remangleSub(typeNode, S))
372+
return;
373+
374+
const BinaryFPType *BFPType = static_cast<const BinaryFPType *>(typeNode);
375+
assert(BFPType->getDimension()->getKind() == Node::Kind::KNameType);
376+
const NameType *dims =
377+
static_cast<const NameType *>(BFPType->getDimension());
378+
379+
S << "DF";
380+
S << dims->getName();
381+
S << '_';
382+
break;
383+
}
370384
case Node::Kind::KVendorExtQualType: {
371385
if (remangleSub(typeNode, S))
372386
return;

llvm-spirv/lib/SPIRV/SPIRVToOCL.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class SPIRVToOCLBase : public InstVisitor<SPIRVToOCLBase> {
187187

188188
/// Transform __spirv_OpAtomicCompareExchange and
189189
/// __spirv_OpAtomicCompareExchangeWeak
190-
virtual Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI, Op OC) = 0;
190+
virtual Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI) = 0;
191191

192192
/// Transform __spirv_OpAtomicIIncrement/OpAtomicIDecrement to:
193193
/// - OCL2.0: atomic_fetch_add_explicit/atomic_fetch_sub_explicit
@@ -293,10 +293,10 @@ class SPIRVToOCL12Base : public SPIRVToOCLBase {
293293
/// (bool)atomic_xchg(*ptr, 1)
294294
Instruction *visitCallSPIRVAtomicFlagTestAndSet(CallInst *CI);
295295

296-
/// Transform __spirv_OpAtomicCompareExchange and
297-
/// __spirv_OpAtomicCompareExchangeWeak into atomic_cmpxchg. There is no
298-
/// weak version of function in OpenCL 1.2
299-
Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI, Op OC) override;
296+
/// Transform __spirv_OpAtomicCompareExchange/Weak into atomic_cmpxchg
297+
/// OpAtomicCompareExchangeWeak is not "weak" at all, but instead has
298+
/// the same semantics as OpAtomicCompareExchange.
299+
Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI) override;
300300

301301
/// Conduct generic mutations for all atomic builtins
302302
CallInst *mutateCommonAtomicArguments(CallInst *CI, Op OC) override;
@@ -371,8 +371,10 @@ class SPIRVToOCL20Base : public SPIRVToOCLBase {
371371
std::string mapFPAtomicName(Op OC) override;
372372

373373
/// Transform __spirv_OpAtomicCompareExchange/Weak into
374-
/// compare_exchange_strong/weak_explicit
375-
Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI, Op OC) override;
374+
/// atomic_compare_exchange_strong_explicit
375+
/// OpAtomicCompareExchangeWeak is not "weak" at all, but instead has
376+
/// the same semantics as OpAtomicCompareExchange.
377+
Instruction *visitCallSPIRVAtomicCmpExchg(CallInst *CI) override;
376378
};
377379

378380
class SPIRVToOCL20Pass : public llvm::PassInfoMixin<SPIRVToOCL20Pass>,

llvm-spirv/lib/SPIRV/SPIRVToOCL12.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ SPIRVToOCL12Base::visitCallSPIRVAtomicFlagTestAndSet(CallInst *CI) {
205205
&Attrs);
206206
}
207207

208-
Instruction *SPIRVToOCL12Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI,
209-
Op OC) {
208+
Instruction *SPIRVToOCL12Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI) {
210209
AttributeList Attrs = CI->getCalledFunction()->getAttributes();
211210
return mutateCallInstOCL(
212211
M, CI,
@@ -247,7 +246,7 @@ Instruction *SPIRVToOCL12Base::visitCallSPIRVAtomicBuiltin(CallInst *CI,
247246
break;
248247
case OpAtomicCompareExchange:
249248
case OpAtomicCompareExchangeWeak:
250-
NewCI = visitCallSPIRVAtomicCmpExchg(CI, OC);
249+
NewCI = visitCallSPIRVAtomicCmpExchg(CI);
251250
break;
252251
default:
253252
NewCI = mutateCommonAtomicArguments(CI, OC);

llvm-spirv/lib/SPIRV/SPIRVToOCL20.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ Instruction *SPIRVToOCL20Base::visitCallSPIRVAtomicBuiltin(CallInst *CI,
159159
break;
160160
case OpAtomicCompareExchange:
161161
case OpAtomicCompareExchangeWeak:
162-
NewCI = visitCallSPIRVAtomicCmpExchg(CIG, OC);
162+
NewCI = visitCallSPIRVAtomicCmpExchg(CIG);
163163
break;
164164
default:
165165
NewCI = mutateAtomicName(CIG, OC);
@@ -232,8 +232,7 @@ CallInst *SPIRVToOCL20Base::mutateCommonAtomicArguments(CallInst *CI, Op OC) {
232232
&Attrs);
233233
}
234234

235-
Instruction *SPIRVToOCL20Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI,
236-
Op OC) {
235+
Instruction *SPIRVToOCL20Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI) {
237236
assert(CI->getCalledFunction() && "Unexpected indirect call");
238237
AttributeList Attrs = CI->getCalledFunction()->getAttributes();
239238
Instruction *PInsertBefore = CI;
@@ -242,7 +241,7 @@ Instruction *SPIRVToOCL20Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI,
242241
M, CI,
243242
[=](CallInst *, std::vector<Value *> &Args, Type *&RetTy) {
244243
// OpAtomicCompareExchange[Weak] semantics is different from
245-
// atomic_compare_exchange_[strong|weak] semantics as well as
244+
// atomic_compare_exchange_strong semantics as well as
246245
// arguments order.
247246
// OCL built-ins returns boolean value and stores a new/original
248247
// value by pointer passed as 2nd argument (aka expected) while SPIR-V
@@ -263,7 +262,9 @@ Instruction *SPIRVToOCL20Base::visitCallSPIRVAtomicCmpExchg(CallInst *CI,
263262
std::swap(Args[3], Args[4]);
264263
std::swap(Args[2], Args[3]);
265264
RetTy = Type::getInt1Ty(*Ctx);
266-
return OCLSPIRVBuiltinMap::rmap(OC);
265+
// OpAtomicCompareExchangeWeak is not "weak" at all, but instead has
266+
// the same semantics as OpAtomicCompareExchange.
267+
return "atomic_compare_exchange_strong_explicit";
267268
},
268269
[=](CallInst *CI) -> Instruction * {
269270
// OCL built-ins atomic_compare_exchange_[strong|weak] return boolean

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,11 +2332,13 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
23322332
RegexIterT DecorationsIt(AnnotatedCode.begin(), AnnotatedCode.end(),
23332333
DecorationRegex);
23342334
RegexIterT DecorationsEnd;
2335-
// If we didn't find any FPGA specific annotations then add a UserSemantic
2336-
// decoration
2335+
// If we didn't find any FPGA specific annotations that are seprated as
2336+
// described above, then add a UserSemantic decoration
23372337
if (DecorationsIt == DecorationsEnd)
23382338
Decorates.MemoryAttributesVec.emplace_back(DecorationUserSemantic,
23392339
AnnotatedCode.str());
2340+
bool IntelFPGADecorationFound = false;
2341+
DecorationsInfoVec IntelFPGADecorationsVec;
23402342
for (; DecorationsIt != DecorationsEnd; ++DecorationsIt) {
23412343
// Drop the braces surrounding the actual decoration
23422344
const StringRef AnnotatedDecoration = AnnotatedCode.substr(
@@ -2346,12 +2348,14 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
23462348
StringRef Name = Split.first, ValueStr = Split.second;
23472349
if (AllowFPGAMemAccesses) {
23482350
if (Name == "params") {
2351+
IntelFPGADecorationFound = true;
23492352
unsigned ParamsBitMask = 0;
23502353
bool Failure = ValueStr.getAsInteger(10, ParamsBitMask);
23512354
assert(!Failure && "Non-integer LSU controls value");
23522355
(void)Failure;
23532356
LSUControls.setWithBitMask(ParamsBitMask);
23542357
} else if (Name == "cache-size") {
2358+
IntelFPGADecorationFound = true;
23552359
if (!LSUControls.CacheSizeInfo.hasValue())
23562360
continue;
23572361
unsigned CacheSizeValue = 0;
@@ -2365,12 +2369,15 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
23652369
StringRef Annotation;
23662370
Decoration Dec;
23672371
if (Name == "pump") {
2372+
IntelFPGADecorationFound = true;
23682373
Dec = llvm::StringSwitch<Decoration>(ValueStr)
23692374
.Case("1", DecorationSinglepumpINTEL)
23702375
.Case("2", DecorationDoublepumpINTEL);
23712376
} else if (Name == "register") {
2377+
IntelFPGADecorationFound = true;
23722378
Dec = DecorationRegisterINTEL;
23732379
} else if (Name == "simple_dual_port") {
2380+
IntelFPGADecorationFound = true;
23742381
Dec = DecorationSimpleDualPortINTEL;
23752382
} else {
23762383
Dec = llvm::StringSwitch<Decoration>(Name)
@@ -2384,14 +2391,25 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
23842391
.Case("force_pow2_depth", DecorationForcePow2DepthINTEL)
23852392
.Default(DecorationUserSemantic);
23862393
if (Dec == DecorationUserSemantic)
2387-
Annotation = AnnotatedCode;
2388-
else
2394+
Annotation = AnnotatedDecoration;
2395+
else {
2396+
IntelFPGADecorationFound = true;
23892397
Annotation = ValueStr;
2398+
}
23902399
}
2391-
Decorates.MemoryAttributesVec.emplace_back(Dec, Annotation.str());
2400+
IntelFPGADecorationsVec.emplace_back(Dec, Annotation.str());
23922401
}
23932402
}
2403+
// Even if there is an annotation string that is split in blocks like Intel
2404+
// FPGA annotation, it's not necessarily an FPGA annotation. Translate the
2405+
// whole string as UserSemantic decoration in this case.
2406+
if (IntelFPGADecorationFound)
2407+
Decorates.MemoryAttributesVec = IntelFPGADecorationsVec;
2408+
else
2409+
Decorates.MemoryAttributesVec.emplace_back(DecorationUserSemantic,
2410+
AnnotatedCode.str());
23942411
Decorates.MemoryAccessesVec = LSUControls.getDecorationsFromCurrentState();
2412+
23952413
return Decorates;
23962414
}
23972415

llvm-spirv/test/transcoding/AtomicCompareExchangeExplicit_cl20.cl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ __kernel void testAtomicCompareExchangeExplicit_cl20(
4747

4848
//CHECK-LLVM: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected1.as, i32 %desired, i32 3, i32 0, i32 2)
4949
//CHECK-LLVM: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected3.as, i32 %desired, i32 4, i32 0, i32 1)
50-
//CHECK-LLVM: call spir_func i1 @_Z37atomic_compare_exchange_weak_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected5.as, i32 %desired, i32 3, i32 0, i32 2)
51-
//CHECK-LLVM: call spir_func i1 @_Z37atomic_compare_exchange_weak_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected7.as, i32 %desired, i32 4, i32 0, i32 1)
50+
//CHECK-LLVM: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected5.as, i32 %desired, i32 3, i32 0, i32 2)
51+
//CHECK-LLVM: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %0, i32 addrspace(4)* %expected7.as, i32 %desired, i32 4, i32 0, i32 1)

llvm-spirv/test/transcoding/AtomicCompareExchange_cl20.ll

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ target triple = "spir-unknown-unknown"
99

1010
; Check 'LLVM ==> SPIR-V ==> LLVM' conversion of atomic_compare_exchange_strong and atomic_compare_exchange_weak.
1111

12+
; SPIR-V does not include an equivalent of atomic_compare_exchange_weak
13+
; (OpAtomicCompareExchangeWeak is identical to OpAtomicCompareExchange and
14+
; is deprecated, and removed in SPIR-V 1.4.)
15+
; This breaks the round trip for atomic_compare_exchange_weak, which must be
16+
; translated back to LLVM IR as atomic_compare_exchange_strong, regardless
17+
; of whether OpAtomicCompareExchange or OpAtomicCompareExchangeWeak is used.
18+
1219
; Function Attrs: nounwind
1320

1421
; CHECK-LABEL: define spir_func void @test_strong
@@ -24,7 +31,7 @@ target triple = "spir-unknown-unknown"
2431
; CHECK: [[PTR_WEAK:%expected[0-9]*]] = alloca i32, align 4
2532
; CHECK: store i32 {{.*}}, i32* [[PTR_WEAK]]
2633
; CHECK: [[PTR_WEAK]].as = addrspacecast i32* [[PTR_WEAK]] to i32 addrspace(4)*
27-
; CHECK: call spir_func i1 @_Z37atomic_compare_exchange_weak_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope{{.*}}(i32 {{.*}}* %object, i32 {{.*}}* [[PTR_WEAK]].as, i32 %desired, i32 5, i32 5, i32 2)
34+
; CHECK: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope{{.*}}(i32 {{.*}}* %object, i32 {{.*}}* [[PTR_WEAK]].as, i32 %desired, i32 5, i32 5, i32 2)
2835
; CHECK: load i32, i32 addrspace(4)* [[PTR_WEAK]].as
2936

3037
; Check that alloca for atomic_compare_exchange is being created in the entry block.

llvm-spirv/test/transcoding/IntelFPGAMemoryAttributes.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@
249249
; CHECK-SPIRV: Decorate {{[0-9]+}} ForcePow2DepthINTEL 0
250250
; CHECK-SPIRV: Decorate {{[0-9]+}} ForcePow2DepthINTEL 1
251251

252+
; CHECK-SPIRV-NOT: Decorate [[#]] UserSemantic "{memory:MLAB}{sizeinfo:4,500}"
253+
252254
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
253255
target triple = "spir"
254256

llvm-spirv/test/transcoding/atomics.spt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
119734787 65536 393230 32 0
1+
119734787 65536 393230 33 0
22
2 Capability Addresses
33
2 Capability Kernel
44
5 ExtInstImport 1 "OpenCL.std"
55
3 MemoryModel 2 2
66
8 EntryPoint 6 6 "test_atomic_global"
7-
13 String 31 "kernel_arg_type.test_atomic_global.int*,"
7+
13 String 32 "kernel_arg_type.test_atomic_global.int*,"
88
3 Source 3 102000
99
3 Name 7 "dst"
1010
4 Name 8 "object"
@@ -18,7 +18,7 @@
1818
2 TypeVoid 2
1919
4 TypePointer 4 5 3
2020
7 TypeFunction 5 2 4 4 4 3
21-
2 TypeBool 29
21+
2 TypeBool 30
2222

2323

2424
5 Function 2 6 0 5
@@ -40,10 +40,11 @@
4040
7 AtomicXor 3 24 7 13 14 13
4141
7 AtomicAnd 3 25 7 13 14 13
4242
9 AtomicCompareExchange 3 26 7 13 14 14 13 17
43-
7 AtomicExchange 3 27 7 13 14 13
44-
6 AtomicLoad 3 28 8 13 14
43+
9 AtomicCompareExchangeWeak 3 27 7 13 14 14 13 17
44+
7 AtomicExchange 3 28 7 13 14 13
45+
6 AtomicLoad 3 29 8 13 14
4546
5 AtomicStore 8 13 14 10
46-
6 AtomicFlagTestAndSet 29 30 8 13 14
47+
6 AtomicFlagTestAndSet 30 31 8 13 14
4748
4 AtomicFlagClear 8 13 14
4849
1 Return
4950

@@ -66,7 +67,7 @@
6667
; CHECK-LLVM-12: call spir_func i32 @_Z9atomic_orPU3AS1Vii(i32 addrspace(1)* %dst, i32 1) [[attr]]
6768
; CHECK-LLVM-12: call spir_func i32 @_Z10atomic_xorPU3AS1Vii(i32 addrspace(1)* %dst, i32 1) [[attr]]
6869
; CHECK-LLVM-12: call spir_func i32 @_Z10atomic_andPU3AS1Vii(i32 addrspace(1)* %dst, i32 1) [[attr]]
69-
; CHECK-LLVM-12: call spir_func i32 @_Z14atomic_cmpxchgPU3AS1Viii(i32 addrspace(1)* %dst, i32 0, i32 1) [[attr]]
70+
; CHECK-LLVM-12-COUNT-2: call spir_func i32 @_Z14atomic_cmpxchgPU3AS1Viii(i32 addrspace(1)* %dst, i32 0, i32 1) [[attr]]
7071
; CHECK-LLVM-12: call spir_func i32 @_Z11atomic_xchgPU3AS1Vii(i32 addrspace(1)* %dst, i32 1) [[attr]]
7172
; CHECK-LLVM-12: call spir_func i32 @_Z10atomic_addPU3AS1Vii(i32 addrspace(1)* %object, i32 0) [[attr]]
7273
; CHECK-LLVM-12: call spir_func i32 @_Z11atomic_xchgPU3AS1Vii(i32 addrspace(1)* %object, i32 %desired) [[attr]]
@@ -89,11 +90,12 @@
8990
; CHECK-LLVM-20: call spir_func i32 @_Z25atomic_fetch_xor_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %dst.as9, i32 1, i32 5, i32 2) [[attr]]
9091
; CHECK-LLVM-20: call spir_func i32 @_Z25atomic_fetch_and_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %dst.as10, i32 1, i32 5, i32 2) [[attr]]
9192
; CHECK-LLVM-20: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %dst.as11, i32 addrspace(4)* %expected12.as, i32 1, i32 5, i32 5, i32 2) [[attr]]
92-
; CHECK-LLVM-20: call spir_func i32 @_Z24atomic_exchange_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %dst.as13, i32 1, i32 5, i32 2) [[attr]]
93+
; CHECK-LLVM-20: call spir_func i1 @_Z39atomic_compare_exchange_strong_explicitPU3AS4VU7_AtomiciPU3AS4ii12memory_orderS4_12memory_scope(i32 addrspace(4)* %dst.as13, i32 addrspace(4)* %expected14.as, i32 1, i32 5, i32 5, i32 2) [[attr]]
94+
; CHECK-LLVM-20: call spir_func i32 @_Z24atomic_exchange_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %dst.as15, i32 1, i32 5, i32 2) [[attr]]
9395
; CHECK-LLVM-20: call spir_func i32 @_Z20atomic_load_explicitPU3AS4VU7_Atomici12memory_order12memory_scope(i32 addrspace(4)* %object.as, i32 5, i32 2) [[attr]]
94-
; CHECK-LLVM-20: call spir_func void @_Z21atomic_store_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %object.as14, i32 %desired, i32 5, i32 2) [[attr]]
95-
; CHECK-LLVM-20: call spir_func i1 @_Z33atomic_flag_test_and_set_explicitPU3AS4VU7_Atomici12memory_order12memory_scope(i32 addrspace(4)* %object.as15, i32 5, i32 2) [[attr]]
96-
; CHECK-LLVM-20: call spir_func void @_Z26atomic_flag_clear_explicitPU3AS4VU7_Atomici12memory_order12memory_scope(i32 addrspace(4)* %object.as16, i32 5, i32 2) [[attr]]
96+
; CHECK-LLVM-20: call spir_func void @_Z21atomic_store_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %object.as16, i32 %desired, i32 5, i32 2) [[attr]]
97+
; CHECK-LLVM-20: call spir_func i1 @_Z33atomic_flag_test_and_set_explicitPU3AS4VU7_Atomici12memory_order12memory_scope(i32 addrspace(4)* %object.as17, i32 5, i32 2) [[attr]]
98+
; CHECK-LLVM-20: call spir_func void @_Z26atomic_flag_clear_explicitPU3AS4VU7_Atomici12memory_order12memory_scope(i32 addrspace(4)* %object.as18, i32 5, i32 2) [[attr]]
9799

98100
; RUN: llvm-spirv -r %t1.spv -o %t2.bc --spirv-target-env="SPV-IR"
99101
; RUN: llvm-dis < %t2.bc | FileCheck %s --check-prefix=CHECK-LLVM-SPV-IR

0 commit comments

Comments
 (0)