@@ -351,7 +351,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
351351 case MVT::f32 :
352352 if (X86ScalarSSEf32) {
353353 Opc = HasAVX512 ? X86::VMOVSSZrm : HasAVX ? X86::VMOVSSrm : X86::MOVSSrm;
354- RC = &X86::FR32RegClass;
354+ RC = HasAVX512 ? &X86::FR32XRegClass : &X86::FR32RegClass;
355355 } else {
356356 Opc = X86::LD_Fp32m;
357357 RC = &X86::RFP32RegClass;
@@ -360,7 +360,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
360360 case MVT::f64 :
361361 if (X86ScalarSSEf64) {
362362 Opc = HasAVX512 ? X86::VMOVSDZrm : HasAVX ? X86::VMOVSDrm : X86::MOVSDrm;
363- RC = &X86::FR64RegClass;
363+ RC = HasAVX512 ? &X86::FR64XRegClass : &X86::FR64RegClass;
364364 } else {
365365 Opc = X86::LD_Fp64m;
366366 RC = &X86::RFP64RegClass;
@@ -379,7 +379,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
379379 else
380380 Opc = HasVLX ? X86::VMOVUPSZ128rm :
381381 HasAVX ? X86::VMOVUPSrm : X86::MOVUPSrm;
382- RC = &X86::VR128RegClass;
382+ RC = HasVLX ? &X86::VR128XRegClass : &X86::VR128RegClass;
383383 break ;
384384 case MVT::v2f64:
385385 if (IsNonTemporal && Alignment >= 16 && HasSSE41)
@@ -391,7 +391,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
391391 else
392392 Opc = HasVLX ? X86::VMOVUPDZ128rm :
393393 HasAVX ? X86::VMOVUPDrm : X86::MOVUPDrm;
394- RC = &X86::VR128RegClass;
394+ RC = HasVLX ? &X86::VR128XRegClass : &X86::VR128RegClass;
395395 break ;
396396 case MVT::v4i32:
397397 case MVT::v2i64:
@@ -406,7 +406,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
406406 else
407407 Opc = HasVLX ? X86::VMOVDQU64Z128rm :
408408 HasAVX ? X86::VMOVDQUrm : X86::MOVDQUrm;
409- RC = &X86::VR128RegClass;
409+ RC = HasVLX ? &X86::VR128XRegClass : &X86::VR128RegClass;
410410 break ;
411411 case MVT::v8f32:
412412 assert (HasAVX);
@@ -418,7 +418,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
418418 Opc = HasVLX ? X86::VMOVAPSZ256rm : X86::VMOVAPSYrm;
419419 else
420420 Opc = HasVLX ? X86::VMOVUPSZ256rm : X86::VMOVUPSYrm;
421- RC = &X86::VR256RegClass;
421+ RC = HasVLX ? &X86::VR256XRegClass : &X86::VR256RegClass;
422422 break ;
423423 case MVT::v4f64:
424424 assert (HasAVX);
@@ -430,7 +430,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
430430 Opc = HasVLX ? X86::VMOVAPDZ256rm : X86::VMOVAPDYrm;
431431 else
432432 Opc = HasVLX ? X86::VMOVUPDZ256rm : X86::VMOVUPDYrm;
433- RC = &X86::VR256RegClass;
433+ RC = HasVLX ? &X86::VR256XRegClass : &X86::VR256RegClass;
434434 break ;
435435 case MVT::v8i32:
436436 case MVT::v4i64:
@@ -445,7 +445,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
445445 Opc = HasVLX ? X86::VMOVDQA64Z256rm : X86::VMOVDQAYrm;
446446 else
447447 Opc = HasVLX ? X86::VMOVDQU64Z256rm : X86::VMOVDQUYrm;
448- RC = &X86::VR256RegClass;
448+ RC = HasVLX ? &X86::VR256XRegClass : &X86::VR256RegClass;
449449 break ;
450450 case MVT::v16f32:
451451 assert (HasAVX512);
@@ -3723,7 +3723,7 @@ unsigned X86FastISel::X86MaterializeFP(const ConstantFP *CFP, MVT VT) {
37233723 Opc = Subtarget->hasAVX512 ()
37243724 ? X86::VMOVSSZrm
37253725 : Subtarget->hasAVX () ? X86::VMOVSSrm : X86::MOVSSrm;
3726- RC = &X86::FR32RegClass;
3726+ RC = Subtarget-> hasAVX512 () ? &X86::FR32XRegClass : &X86::FR32RegClass;
37273727 } else {
37283728 Opc = X86::LD_Fp32m;
37293729 RC = &X86::RFP32RegClass;
@@ -3734,7 +3734,7 @@ unsigned X86FastISel::X86MaterializeFP(const ConstantFP *CFP, MVT VT) {
37343734 Opc = Subtarget->hasAVX512 ()
37353735 ? X86::VMOVSDZrm
37363736 : Subtarget->hasAVX () ? X86::VMOVSDrm : X86::MOVSDrm;
3737- RC = &X86::FR64RegClass;
3737+ RC = Subtarget-> hasAVX512 () ? &X86::FR64XRegClass : &X86::FR64RegClass;
37383738 } else {
37393739 Opc = X86::LD_Fp64m;
37403740 RC = &X86::RFP64RegClass;
0 commit comments