Skip to content

Commit 3963ab4

Browse files
Chenyang-Ljsji
authored andcommitted
Guard Remove LLVMPointerToElt and LLVMAnyPointerToElt intrinsic types
1 parent 97ebd44 commit 3963ab4

File tree

3 files changed

+154
-3
lines changed

3 files changed

+154
-3
lines changed

llvm/include/llvm/IR/Intrinsics.h

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ namespace Intrinsic {
139139
VecOfBitcastsToInt,
140140
AMX,
141141
PPCQuad,
142+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
143+
AnyPtrToElt,
144+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
142145
AArch64Svcount,
143146
} Kind;
144147

@@ -159,33 +162,59 @@ namespace Intrinsic {
159162
};
160163

161164
unsigned getArgumentNumber() const {
165+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
162166
assert(Kind == Argument || Kind == ExtendArgument ||
163167
Kind == TruncArgument || Kind == HalfVecArgument ||
164-
Kind == SameVecWidthArgument || Kind == VecElementArgument ||
168+
Kind == SameVecWidthArgument ||
169+
Kind == PtrToElt || Kind == VecElementArgument ||
165170
Kind == Subdivide2Argument || Kind == Subdivide4Argument ||
166171
Kind == VecOfBitcastsToInt);
172+
#else
173+
assert(Kind == Argument || Kind == ExtendArgument ||
174+
Kind == TruncArgument || Kind == HalfVecArgument ||
175+
Kind == SameVecWidthArgument ||
176+
Kind == PtrToArgument ||
177+
Kind == PtrToElt || Kind == VecElementArgument ||
178+
Kind == Subdivide2Argument || Kind == Subdivide4Argument ||
179+
Kind == VecOfBitcastsToInt);
180+
181+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
167182
return Argument_Info >> 3;
168183
}
169184
ArgKind getArgumentKind() const {
185+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
170186
assert(Kind == Argument || Kind == ExtendArgument ||
171187
Kind == TruncArgument || Kind == HalfVecArgument ||
172-
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
173188
Kind == PtrToArgument ||
174-
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
175189
Kind == SameVecWidthArgument ||
176190
Kind == VecElementArgument || Kind == Subdivide2Argument ||
177191
Kind == Subdivide4Argument || Kind == VecOfBitcastsToInt);
192+
#else // INTEL_SYCL_OPAQUEPOINTER_READY
193+
assert(Kind == Argument || Kind == ExtendArgument ||
194+
Kind == TruncArgument || Kind == HalfVecArgument ||
195+
Kind == SameVecWidthArgument ||
196+
Kind == VecElementArgument || Kind == Subdivide2Argument ||
197+
Kind == Subdivide4Argument || Kind == VecOfBitcastsToInt);
198+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
178199
return (ArgKind)(Argument_Info & 7);
179200
}
180201

181202
// VecOfAnyPtrsToElt uses both an overloaded argument (for address space)
182203
// and a reference argument (for matching vector width and element types)
183204
unsigned getOverloadArgNumber() const {
205+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
184206
assert(Kind == VecOfAnyPtrsToElt);
207+
#else
208+
assert(Kind == VecOfAnyPtrsToElt || Kind == AnyPtrToElt);
209+
#endif
185210
return Argument_Info >> 16;
186211
}
187212
unsigned getRefArgNumber() const {
213+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
188214
assert(Kind == VecOfAnyPtrsToElt);
215+
#else
216+
assert(Kind == VecOfAnyPtrsToElt || Kind == AnyPtrToElt);
217+
#endif
189218
return Argument_Info & 0xFFFF;
190219
}
191220

llvm/include/llvm/IR/Intrinsics.td

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,10 @@ def IIT_V1 : IIT_Vec<1, 28>;
294294
def IIT_VARARG : IIT_VT<isVoid, 29>;
295295
def IIT_HALF_VEC_ARG : IIT_Base<30>;
296296
def IIT_SAME_VEC_WIDTH_ARG : IIT_Base<31>;
297+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
298+
def IIT_PTR_TO_ARG : IIT_Base<32>;
299+
def IIT_PTR_TO_ELT : IIT_Base<33>;
300+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
297301
def IIT_VEC_OF_ANYPTRS_TO_ELT : IIT_Base<34>;
298302
def IIT_I128 : IIT_Int<128, 35>;
299303
def IIT_V512 : IIT_Vec<512, 36>;
@@ -316,6 +320,9 @@ def IIT_PPCF128 : IIT_VT<ppcf128, 52>;
316320
def IIT_V3 : IIT_Vec<3, 53>;
317321
def IIT_EXTERNREF : IIT_VT<externref, 54>;
318322
def IIT_FUNCREF : IIT_VT<funcref, 55>;
323+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
324+
def IIT_ANYPTR_TO_ELT : IIT_Base<56>;
325+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
319326
def IIT_I2 : IIT_Int<2, 57>;
320327
def IIT_I4 : IIT_Int<4, 58>;
321328
def IIT_AARCH64_SVCOUNT : IIT_VT<aarch64svcount, 59>;
@@ -446,6 +453,12 @@ class LLVMScalarOrSameVectorWidth<int idx, LLVMType elty>
446453
], elty.Sig);
447454
}
448455

456+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
457+
class LLVMPointerTo<int num> : LLVMMatchType<num, IIT_PTR_TO_ARG>;
458+
class LLVMPointerToElt<int num> : LLVMMatchType<num, IIT_PTR_TO_ELT>;
459+
class LLVMAnyPointerToElt<int num>
460+
: LLVMMatchTypeNextArg<num, IIT_ANYPTR_TO_ELT>;
461+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
449462
class LLVMVectorOfAnyPointersToElt<int num>
450463
: LLVMMatchTypeNextArg<num, IIT_VEC_OF_ANYPTRS_TO_ELT>;
451464
class LLVMVectorElementType<int num> : LLVMMatchType<num, IIT_VEC_ELEMENT>;
@@ -1872,14 +1885,22 @@ def int_vp_scatter: DefaultAttrsIntrinsic<[],
18721885
// Experimental strided memory accesses
18731886
def int_experimental_vp_strided_store : DefaultAttrsIntrinsic<[],
18741887
[ llvm_anyvector_ty,
1888+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
18751889
llvm_anyptr_ty,
1890+
#else
1891+
LLVMAnyPointerToElt<0>,
1892+
#endif
18761893
llvm_anyint_ty, // Stride in bytes
18771894
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
18781895
llvm_i32_ty],
18791896
[ NoCapture<ArgIndex<1>>, IntrNoSync, IntrWriteMem, IntrArgMemOnly, IntrWillReturn ]>;
18801897

18811898
def int_experimental_vp_strided_load : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
1899+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
18821900
[ llvm_anyptr_ty,
1901+
#else
1902+
[ LLVMAnyPointerToElt<0>,
1903+
#endif
18831904
llvm_anyint_ty, // Stride in bytes
18841905
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
18851906
llvm_i32_ty],
@@ -2299,13 +2320,21 @@ def int_masked_scatter:
22992320

23002321
def int_masked_expandload:
23012322
DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2323+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
23022324
[llvm_ptr_ty, LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
2325+
#else
2326+
[LLVMPointerToElt<0>, LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
2327+
#endif
23032328
LLVMMatchType<0>],
23042329
[IntrReadMem, IntrWillReturn, NoCapture<ArgIndex<0>>]>;
23052330

23062331
def int_masked_compressstore:
23072332
DefaultAttrsIntrinsic<[],
2333+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
23082334
[llvm_anyvector_ty, llvm_ptr_ty,
2335+
#else
2336+
[llvm_anyvector_ty, LLVMPointerToElt<0>,
2337+
#endif
23092338
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
23102339
[IntrWriteMem, IntrArgMemOnly, IntrWillReturn,
23112340
NoCapture<ArgIndex<1>>]>;
@@ -2444,15 +2473,23 @@ def int_matrix_multiply
24442473

24452474
def int_matrix_column_major_load
24462475
: DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2476+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
24472477
[llvm_ptr_ty, llvm_anyint_ty, llvm_i1_ty,
2478+
#else
2479+
[LLVMPointerToElt<0>, llvm_anyint_ty, llvm_i1_ty,
2480+
#endif
24482481
llvm_i32_ty, llvm_i32_ty],
24492482
[IntrNoSync, IntrWillReturn, IntrArgMemOnly, IntrReadMem,
24502483
NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>,
24512484
ImmArg<ArgIndex<4>>]>;
24522485

24532486
def int_matrix_column_major_store
24542487
: DefaultAttrsIntrinsic<[],
2488+
#ifdef INTEL_SYCL_OPAQUEPOINTER_READY
24552489
[llvm_anyvector_ty, llvm_ptr_ty,
2490+
#else
2491+
[llvm_anyvector_ty, LLVMPointerToElt<0>,
2492+
#endif
24562493
llvm_anyint_ty, llvm_i1_ty, llvm_i32_ty, llvm_i32_ty],
24572494
[IntrNoSync, IntrWillReturn, IntrArgMemOnly, IntrWriteMem,
24582495
WriteOnly<ArgIndex<1>>, NoCapture<ArgIndex<1>>,

llvm/lib/IR/Function.cpp

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,6 +1209,26 @@ static void DecodeIITType(unsigned &NextElt, ArrayRef<unsigned char> Infos,
12091209
ArgInfo));
12101210
return;
12111211
}
1212+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
1213+
case IIT_PTR_TO_ARG: {
1214+
unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
1215+
OutputTable.push_back(IITDescriptor::get(IITDescriptor::PtrToArgument,
1216+
ArgInfo));
1217+
return;
1218+
}
1219+
case IIT_PTR_TO_ELT: {
1220+
unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
1221+
OutputTable.push_back(IITDescriptor::get(IITDescriptor::PtrToElt, ArgInfo));
1222+
return;
1223+
}
1224+
case IIT_ANYPTR_TO_ELT: {
1225+
unsigned short ArgNo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
1226+
unsigned short RefNo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
1227+
OutputTable.push_back(
1228+
IITDescriptor::get(IITDescriptor::AnyPtrToElt, ArgNo, RefNo));
1229+
return;
1230+
}
1231+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
12121232
case IIT_VEC_OF_ANYPTRS_TO_ELT: {
12131233
unsigned short ArgNo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
12141234
unsigned short RefNo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]);
@@ -1374,6 +1394,20 @@ static Type *DecodeFixedType(ArrayRef<Intrinsic::IITDescriptor> &Infos,
13741394
return VectorType::get(EltTy, VTy->getElementCount());
13751395
return EltTy;
13761396
}
1397+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
1398+
case IITDescriptor::PtrToArgument: {
1399+
Type *Ty = Tys[D.getArgumentNumber()];
1400+
return PointerType::getUnqual(Ty);
1401+
}
1402+
case IITDescriptor::PtrToElt: {
1403+
Type *Ty = Tys[D.getArgumentNumber()];
1404+
VectorType *VTy = dyn_cast<VectorType>(Ty);
1405+
if (!VTy)
1406+
llvm_unreachable("Expected an argument of Vector Type");
1407+
Type *EltTy = VTy->getElementType();
1408+
return PointerType::getUnqual(EltTy);
1409+
}
1410+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
13771411
case IITDescriptor::VecElementArgument: {
13781412
Type *Ty = Tys[D.getArgumentNumber()];
13791413
if (VectorType *VTy = dyn_cast<VectorType>(Ty))
@@ -1389,6 +1423,11 @@ static Type *DecodeFixedType(ArrayRef<Intrinsic::IITDescriptor> &Infos,
13891423
case IITDescriptor::VecOfAnyPtrsToElt:
13901424
// Return the overloaded type (which determines the pointers address space)
13911425
return Tys[D.getOverloadArgNumber()];
1426+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
1427+
case IITDescriptor::AnyPtrToElt:
1428+
// Return the overloaded type (which determines the pointers address space)
1429+
return Tys[D.getOverloadArgNumber()];
1430+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
13921431
}
13931432
llvm_unreachable("unhandled");
13941433
}
@@ -1591,6 +1630,52 @@ static bool matchIntrinsicType(
15911630
return matchIntrinsicType(EltTy, Infos, ArgTys, DeferredChecks,
15921631
IsDeferredCheck);
15931632
}
1633+
#ifndef INTEL_SYCL_OPAQUEPOINTER_READY
1634+
case IITDescriptor::PtrToArgument: {
1635+
if (D.getArgumentNumber() >= ArgTys.size())
1636+
return IsDeferredCheck || DeferCheck(Ty);
1637+
Type * ReferenceType = ArgTys[D.getArgumentNumber()];
1638+
PointerType *ThisArgType = dyn_cast<PointerType>(Ty);
1639+
return (!ThisArgType ||
1640+
!ThisArgType->isOpaqueOrPointeeTypeMatches(ReferenceType));
1641+
}
1642+
case IITDescriptor::PtrToElt: {
1643+
if (D.getArgumentNumber() >= ArgTys.size())
1644+
return IsDeferredCheck || DeferCheck(Ty);
1645+
VectorType * ReferenceType =
1646+
dyn_cast<VectorType> (ArgTys[D.getArgumentNumber()]);
1647+
PointerType *ThisArgType = dyn_cast<PointerType>(Ty);
1648+
1649+
if (!ThisArgType || !ReferenceType)
1650+
return true;
1651+
return !ThisArgType->isOpaqueOrPointeeTypeMatches(
1652+
ReferenceType->getElementType());
1653+
}
1654+
case IITDescriptor::AnyPtrToElt: {
1655+
unsigned RefArgNumber = D.getRefArgNumber();
1656+
if (RefArgNumber >= ArgTys.size()) {
1657+
if (IsDeferredCheck)
1658+
return true;
1659+
// If forward referencing, already add the pointer type and
1660+
// defer the checks for later.
1661+
ArgTys.push_back(Ty);
1662+
return DeferCheck(Ty);
1663+
}
1664+
1665+
if (!IsDeferredCheck) {
1666+
assert(D.getOverloadArgNumber() == ArgTys.size() &&
1667+
"Table consistency error");
1668+
ArgTys.push_back(Ty);
1669+
}
1670+
1671+
auto *ReferenceType = dyn_cast<VectorType>(ArgTys[RefArgNumber]);
1672+
auto *ThisArgType = dyn_cast<PointerType>(Ty);
1673+
if (!ThisArgType || !ReferenceType)
1674+
return true;
1675+
return !ThisArgType->isOpaqueOrPointeeTypeMatches(
1676+
ReferenceType->getElementType());
1677+
}
1678+
#endif // INTEL_SYCL_OPAQUEPOINTER_READY
15941679
case IITDescriptor::VecOfAnyPtrsToElt: {
15951680
unsigned RefArgNumber = D.getRefArgNumber();
15961681
if (RefArgNumber >= ArgTys.size()) {

0 commit comments

Comments
 (0)