@@ -70,6 +70,7 @@ void GenXSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
7070 .Case (" XeHPC" , XeHPC)
7171 .Case (" XeHPCVG" , XeHPCVG)
7272 .Case (" Xe2" , Xe2)
73+ .Case (" Xe3" , Xe3)
7374 .Default (Invalid);
7475
7576 std::string CPUName (CPU);
@@ -103,6 +104,8 @@ uint32_t GenXSubtarget::getMaxThreadsNumPerSubDevice() const {
103104 return 1 << 12 ;
104105 case Xe2:
105106 return 1 << 13 ;
107+ case Xe3:
108+ return 1 << 15 ;
106109 }
107110 return 0 ;
108111}
@@ -148,6 +151,16 @@ ArrayRef<std::pair<int, int>> GenXSubtarget::getThreadIdReservedBits() const {
148151 static const std::pair<int , int > Bits[] = {{10 , 1 }, {7 , 1 }, {3 , 1 }};
149152 return Bits;
150153 }
154+ case GenXSubtarget::Xe3: {
155+ // [17:14] Slice ID.
156+ // [13:12] : Reserved MBZ
157+ // [11:8] SubSlice ID
158+ // [7] : Reserved MBZ
159+ // [6:4] : EUID
160+ // [3:0] : TID
161+ static const std::pair<int , int > Bits[] = {{12 , 2 }, {7 , 1 }};
162+ return Bits;
163+ }
151164 default :
152165 // All other platforms have pre-defined Thread ID register
153166 return {};
@@ -205,7 +218,8 @@ ArrayRef<std::pair<int, int>> GenXSubtarget::getEUIdBits() const {
205218 static const std::pair<int , int > Bits[] = {{4 , 2 }, {8 , 1 }};
206219 return Bits;
207220 }
208- case GenXSubtarget::Xe2: {
221+ case GenXSubtarget::Xe2:
222+ case GenXSubtarget::Xe3: {
209223 // [6:4] : EUID
210224 static const std::pair<int , int > Bits[] = {{4 , 3 }};
211225 return Bits;
@@ -218,6 +232,11 @@ ArrayRef<std::pair<int, int>> GenXSubtarget::getEUIdBits() const {
218232
219233ArrayRef<std::pair<int , int >> GenXSubtarget::getThreadIdBits () const {
220234 switch (TargetId) {
235+ case GenXSubtarget::Xe3: {
236+ // [3:0] : EUID
237+ static const std::pair<int , int > Bits[] = {{0 , 4 }};
238+ return Bits;
239+ }
221240 default :
222241 static const std::pair<int , int > Bits[] = {{0 , 3 }};
223242 return Bits;
@@ -252,6 +271,8 @@ TARGET_PLATFORM GenXSubtarget::getVisaPlatform() const {
252271 return TARGET_PLATFORM::Xe_PVCXT;
253272 case Xe2:
254273 return TARGET_PLATFORM::Xe2;
274+ case Xe3:
275+ return TARGET_PLATFORM::Xe3;
255276 default :
256277 return TARGET_PLATFORM::GENX_NONE;
257278 }
@@ -287,6 +308,11 @@ bool GenXSubtarget::isValidGRFSize(unsigned Size) const {
287308 case GenXSubtarget::XeHPCVG:
288309 case GenXSubtarget::Xe2:
289310 return Size == 128 || Size == 256 ;
311+ case GenXSubtarget::Xe3: {
312+ static const std::unordered_set<unsigned > Supported = {32 , 64 , 96 , 128 ,
313+ 160 , 192 , 256 };
314+ return Supported.count (Size);
315+ }
290316 default :
291317 return Size == 128 ; // platforms <= TGL
292318 }
0 commit comments