@@ -84,17 +84,19 @@ SPIRVLegalizerInfo::SPIRVLegalizerInfo(const SPIRVSubtarget &ST) {
8484 const LLT p6 = LLT::pointer (6 , PSize); // SPV_INTEL_usm_storage_classes (Host)
8585 const LLT p7 = LLT::pointer (7 , PSize); // Input
8686 const LLT p8 = LLT::pointer (8 , PSize); // Output
87+ const LLT p9 =
88+ LLT::pointer (9 , PSize); // CodeSectionINTEL, SPV_INTEL_function_pointers
8789 const LLT p10 = LLT::pointer (10 , PSize); // Private
8890 const LLT p11 = LLT::pointer (11 , PSize); // StorageBuffer
8991 const LLT p12 = LLT::pointer (12 , PSize); // Uniform
9092
9193 // TODO: remove copy-pasting here by using concatenation in some way.
9294 auto allPtrsScalarsAndVectors = {
93- p0, p1, p2, p3, p4, p5, p6, p7, p8,
94- p10, p11, p12, s1, s8, s16, s32, s64, v2s1 ,
95- v2s8, v2s16, v2s32, v2s64, v3s1, v3s8, v3s16, v3s32, v3s64 ,
96- v4s1, v4s8, v4s16, v4s32, v4s64, v8s1, v8s8, v8s16, v8s32 ,
97- v8s64, v16s1, v16s8, v16s16, v16s32, v16s64};
95+ p0, p1, p2, p3, p4, p5, p6, p7, p8,
96+ p9, p10, p11, p12, s1, s8, s16, s32, s64,
97+ v2s1, v2s8, v2s16, v2s32, v2s64, v3s1, v3s8, v3s16, v3s32,
98+ v3s64, v4s1, v4s8, v4s16, v4s32, v4s64, v8s1, v8s8, v8s16,
99+ v8s32, v8s64, v16s1, v16s8, v16s16, v16s32, v16s64};
98100
99101 auto allVectors = {v2s1, v2s8, v2s16, v2s32, v2s64, v3s1, v3s8,
100102 v3s16, v3s32, v3s64, v4s1, v4s8, v4s16, v4s32,
@@ -121,10 +123,10 @@ SPIRVLegalizerInfo::SPIRVLegalizerInfo(const SPIRVSubtarget &ST) {
121123 s16, s32, s64, v2s16, v2s32, v2s64, v3s16, v3s32, v3s64,
122124 v4s16, v4s32, v4s64, v8s16, v8s32, v8s64, v16s16, v16s32, v16s64};
123125
124- auto allFloatAndIntScalarsAndPtrs = {s8, s16, s32, s64, p0, p1, p2, p3,
125- p4, p5, p6, p7, p8, p10, p11, p12};
126+ auto allFloatAndIntScalarsAndPtrs = {s8, s16, s32, s64, p0, p1, p2, p3, p4,
127+ p5, p6, p7, p8, p9 , p10, p11, p12};
126128
127- auto allPtrs = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p10, p11, p12};
129+ auto allPtrs = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12};
128130
129131 bool IsExtendedInts =
130132 ST.canUseExtension (
@@ -177,15 +179,22 @@ SPIRVLegalizerInfo::SPIRVLegalizerInfo(const SPIRVSubtarget &ST) {
177179 getActionDefinitionsBuilder (G_UNMERGE_VALUES).alwaysLegal ();
178180
179181 getActionDefinitionsBuilder ({G_MEMCPY, G_MEMMOVE})
182+ .unsupportedIf (LegalityPredicates::any (typeIs (0 , p9), typeIs (1 , p9)))
180183 .legalIf (all (typeInSet (0 , allPtrs), typeInSet (1 , allPtrs)));
181184
182- getActionDefinitionsBuilder (G_MEMSET).legalIf (
183- all (typeInSet (0 , allPtrs), typeInSet (1 , allIntScalars)));
185+ getActionDefinitionsBuilder (G_MEMSET)
186+ .unsupportedIf (typeIs (0 , p9))
187+ .legalIf (all (typeInSet (0 , allPtrs), typeInSet (1 , allIntScalars)));
184188
185189 getActionDefinitionsBuilder (G_ADDRSPACE_CAST)
190+ .unsupportedIf (
191+ LegalityPredicates::any (all (typeIs (0 , p9), typeIsNot (1 , p9)),
192+ all (typeIsNot (0 , p9), typeIs (1 , p9))))
186193 .legalForCartesianProduct (allPtrs, allPtrs);
187194
188- getActionDefinitionsBuilder ({G_LOAD, G_STORE}).legalIf (typeInSet (1 , allPtrs));
195+ getActionDefinitionsBuilder ({G_LOAD, G_STORE})
196+ .unsupportedIf (typeIs (1 , p9))
197+ .legalIf (typeInSet (1 , allPtrs));
189198
190199 getActionDefinitionsBuilder ({G_SMIN, G_SMAX, G_UMIN, G_UMAX, G_ABS,
191200 G_BITREVERSE, G_SADDSAT, G_UADDSAT, G_SSUBSAT,
@@ -247,9 +256,12 @@ SPIRVLegalizerInfo::SPIRVLegalizerInfo(const SPIRVSubtarget &ST) {
247256
248257 // ST.canDirectlyComparePointers() for pointer args is supported in
249258 // legalizeCustom().
250- getActionDefinitionsBuilder (G_ICMP).customIf (
251- all (typeInSet (0 , allBoolScalarsAndVectors),
252- typeInSet (1 , allPtrsScalarsAndVectors)));
259+ getActionDefinitionsBuilder (G_ICMP)
260+ .unsupportedIf (LegalityPredicates::any (
261+ all (typeIs (0 , p9), typeInSet (1 , allPtrs), typeIsNot (1 , p9)),
262+ all (typeInSet (0 , allPtrs), typeIsNot (0 , p9), typeIs (1 , p9))))
263+ .customIf (all (typeInSet (0 , allBoolScalarsAndVectors),
264+ typeInSet (1 , allPtrsScalarsAndVectors)));
253265
254266 getActionDefinitionsBuilder (G_FCMP).legalIf (
255267 all (typeInSet (0 , allBoolScalarsAndVectors),
0 commit comments