@@ -3553,29 +3553,97 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
35533553 Width = TypeSize::getFixed (0 );
35543554 MinOffset = MaxOffset = 0 ;
35553555 return false ;
3556+ // LDR / STR
3557+ case AArch64::LDRQui:
3558+ case AArch64::STRQui:
3559+ Scale = TypeSize::getFixed (16 );
3560+ Width = TypeSize::getFixed (16 );
3561+ MinOffset = 0 ;
3562+ MaxOffset = 4095 ;
3563+ break ;
3564+ case AArch64::LDRXui:
3565+ case AArch64::LDRDui:
3566+ case AArch64::STRXui:
3567+ case AArch64::STRDui:
3568+ case AArch64::PRFMui:
3569+ Scale = TypeSize::getFixed (8 );
3570+ Width = TypeSize::getFixed (8 );
3571+ MinOffset = 0 ;
3572+ MaxOffset = 4095 ;
3573+ break ;
3574+ case AArch64::LDRWui:
3575+ case AArch64::LDRSui:
3576+ case AArch64::LDRSWui:
3577+ case AArch64::STRWui:
3578+ case AArch64::STRSui:
3579+ Scale = TypeSize::getFixed (4 );
3580+ Width = TypeSize::getFixed (4 );
3581+ MinOffset = 0 ;
3582+ MaxOffset = 4095 ;
3583+ break ;
3584+ case AArch64::LDRHui:
3585+ case AArch64::LDRHHui:
3586+ case AArch64::LDRSHWui:
3587+ case AArch64::LDRSHXui:
3588+ case AArch64::STRHui:
3589+ case AArch64::STRHHui:
3590+ Scale = TypeSize::getFixed (2 );
3591+ Width = TypeSize::getFixed (2 );
3592+ MinOffset = 0 ;
3593+ MaxOffset = 4095 ;
3594+ break ;
3595+ case AArch64::LDRBui:
3596+ case AArch64::LDRBBui:
3597+ case AArch64::LDRSBWui:
3598+ case AArch64::LDRSBXui:
3599+ case AArch64::STRBui:
3600+ case AArch64::STRBBui:
3601+ Scale = TypeSize::getFixed (1 );
3602+ Width = TypeSize::getFixed (1 );
3603+ MinOffset = 0 ;
3604+ MaxOffset = 4095 ;
3605+ break ;
3606+ // post/pre inc
3607+ case AArch64::STRQpre:
3608+ case AArch64::LDRQpost:
3609+ Scale = TypeSize::getFixed (1 );
3610+ Width = TypeSize::getFixed (16 );
3611+ MinOffset = -256 ;
3612+ MaxOffset = 255 ;
3613+ break ;
3614+ case AArch64::STRXpre:
3615+ case AArch64::STRDpre:
3616+ case AArch64::LDRXpost:
3617+ case AArch64::LDRDpost:
3618+ Scale = TypeSize::getFixed (1 );
3619+ Width = TypeSize::getFixed (8 );
3620+ MinOffset = -256 ;
3621+ MaxOffset = 255 ;
3622+ break ;
35563623 case AArch64::STRWpost:
35573624 case AArch64::LDRWpost:
3558- Width = TypeSize::getFixed (32 );
35593625 Scale = TypeSize::getFixed (4 );
3626+ Width = TypeSize::getFixed (32 );
35603627 MinOffset = -256 ;
35613628 MaxOffset = 255 ;
35623629 break ;
3630+ // Unscaled
35633631 case AArch64::LDURQi:
35643632 case AArch64::STURQi:
3565- Width = TypeSize::getFixed (16 );
35663633 Scale = TypeSize::getFixed (1 );
3634+ Width = TypeSize::getFixed (16 );
35673635 MinOffset = -256 ;
35683636 MaxOffset = 255 ;
35693637 break ;
3570- case AArch64::PRFUMi:
35713638 case AArch64::LDURXi:
35723639 case AArch64::LDURDi:
35733640 case AArch64::LDAPURXi:
35743641 case AArch64::STURXi:
35753642 case AArch64::STURDi:
35763643 case AArch64::STLURXi:
3577- Width = TypeSize::getFixed ( 8 );
3644+ case AArch64::PRFUMi:
35783645 Scale = TypeSize::getFixed (1 );
3646+ Width = TypeSize::getFixed (8 );
35793647 MinOffset = -256 ;
35803648 MaxOffset = 255 ;
35813649 break ;
@@ -3587,8 +3655,8 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
35873655 case AArch64::STURWi:
35883656 case AArch64::STURSi:
35893657 case AArch64::STLURWi:
3590- Width = TypeSize::getFixed (4 );
35913658 Scale = TypeSize::getFixed (1 );
3659+ Width = TypeSize::getFixed (4 );
35923660 MinOffset = -256 ;
35933661 MaxOffset = 255 ;
35943662 break ;
@@ -3602,8 +3670,8 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
36023670 case AArch64::STURHi:
36033671 case AArch64::STURHHi:
36043672 case AArch64::STLURHi:
3605- Width = TypeSize::getFixed (2 );
36063673 Scale = TypeSize::getFixed (1 );
3674+ Width = TypeSize::getFixed (2 );
36073675 MinOffset = -256 ;
36083676 MaxOffset = 255 ;
36093677 break ;
@@ -3617,11 +3685,12 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
36173685 case AArch64::STURBi:
36183686 case AArch64::STURBBi:
36193687 case AArch64::STLURBi:
3620- Width = TypeSize::getFixed (1 );
36213688 Scale = TypeSize::getFixed (1 );
3689+ Width = TypeSize::getFixed (1 );
36223690 MinOffset = -256 ;
36233691 MaxOffset = 255 ;
36243692 break ;
3693+ // LDP / STP
36253694 case AArch64::LDPQi:
36263695 case AArch64::LDNPQi:
36273696 case AArch64::STPQi:
@@ -3631,13 +3700,6 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
36313700 MinOffset = -64 ;
36323701 MaxOffset = 63 ;
36333702 break ;
3634- case AArch64::LDRQui:
3635- case AArch64::STRQui:
3636- Scale = TypeSize::getFixed (16 );
3637- Width = TypeSize::getFixed (16 );
3638- MinOffset = 0 ;
3639- MaxOffset = 4095 ;
3640- break ;
36413703 case AArch64::LDPXi:
36423704 case AArch64::LDPDi:
36433705 case AArch64::LDNPXi:
@@ -3651,23 +3713,6 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
36513713 MinOffset = -64 ;
36523714 MaxOffset = 63 ;
36533715 break ;
3654- case AArch64::PRFMui:
3655- case AArch64::LDRXui:
3656- case AArch64::LDRDui:
3657- case AArch64::STRXui:
3658- case AArch64::STRDui:
3659- Scale = TypeSize::getFixed (8 );
3660- Width = TypeSize::getFixed (8 );
3661- MinOffset = 0 ;
3662- MaxOffset = 4095 ;
3663- break ;
3664- case AArch64::StoreSwiftAsyncContext:
3665- // Store is an STRXui, but there might be an ADDXri in the expansion too.
3666- Scale = TypeSize::getFixed (1 );
3667- Width = TypeSize::getFixed (8 );
3668- MinOffset = 0 ;
3669- MaxOffset = 4095 ;
3670- break ;
36713716 case AArch64::LDPWi:
36723717 case AArch64::LDPSi:
36733718 case AArch64::LDNPWi:
@@ -3681,37 +3726,13 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
36813726 MinOffset = -64 ;
36823727 MaxOffset = 63 ;
36833728 break ;
3684- case AArch64::LDRWui:
3685- case AArch64::LDRSui:
3686- case AArch64::LDRSWui:
3687- case AArch64::STRWui:
3688- case AArch64::STRSui:
3689- Scale = TypeSize::getFixed (4 );
3690- Width = TypeSize::getFixed (4 );
3691- MinOffset = 0 ;
3692- MaxOffset = 4095 ;
3693- break ;
3694- case AArch64::LDRHui:
3695- case AArch64::LDRHHui:
3696- case AArch64::LDRSHWui:
3697- case AArch64::LDRSHXui:
3698- case AArch64::STRHui:
3699- case AArch64::STRHHui:
3700- Scale = TypeSize::getFixed (2 );
3701- Width = TypeSize::getFixed (2 );
3702- MinOffset = 0 ;
3703- MaxOffset = 4095 ;
3704- break ;
3705- case AArch64::LDRBui:
3706- case AArch64::LDRBBui:
3707- case AArch64::LDRSBWui:
3708- case AArch64::LDRSBXui:
3709- case AArch64::STRBui:
3710- case AArch64::STRBBui:
3711- Scale = TypeSize::getFixed (1 );
3712- Width = TypeSize::getFixed (1 );
3713- MinOffset = 0 ;
3714- MaxOffset = 4095 ;
3729+ // pre/post inc
3730+ case AArch64::STPQpre:
3731+ case AArch64::LDPQpost:
3732+ Scale = TypeSize::getFixed (16 );
3733+ Width = TypeSize::getFixed (16 );
3734+ MinOffset = -1024 ;
3735+ MaxOffset = 1008 ;
37153736 break ;
37163737 case AArch64::STPXpre:
37173738 case AArch64::LDPXpost:
@@ -3722,28 +3743,12 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
37223743 MinOffset = -512 ;
37233744 MaxOffset = 504 ;
37243745 break ;
3725- case AArch64::STPQpre:
3726- case AArch64::LDPQpost:
3727- Scale = TypeSize::getFixed (16 );
3728- Width = TypeSize::getFixed (16 );
3729- MinOffset = -1024 ;
3730- MaxOffset = 1008 ;
3731- break ;
3732- case AArch64::STRXpre:
3733- case AArch64::STRDpre:
3734- case AArch64::LDRXpost:
3735- case AArch64::LDRDpost:
3746+ case AArch64::StoreSwiftAsyncContext:
3747+ // Store is an STRXui, but there might be an ADDXri in the expansion too.
37363748 Scale = TypeSize::getFixed (1 );
37373749 Width = TypeSize::getFixed (8 );
3738- MinOffset = -256 ;
3739- MaxOffset = 255 ;
3740- break ;
3741- case AArch64::STRQpre:
3742- case AArch64::LDRQpost:
3743- Scale = TypeSize::getFixed (1 );
3744- Width = TypeSize::getFixed (16 );
3745- MinOffset = -256 ;
3746- MaxOffset = 255 ;
3750+ MinOffset = 0 ;
3751+ MaxOffset = 4095 ;
37473752 break ;
37483753 case AArch64::ADDG:
37493754 Scale = TypeSize::getFixed (16 );
@@ -3767,6 +3772,7 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
37673772 MinOffset = -256 ;
37683773 MaxOffset = 255 ;
37693774 break ;
3775+ // SVE
37703776 case AArch64::STR_ZZZZXI:
37713777 case AArch64::LDR_ZZZZXI:
37723778 Scale = TypeSize::getScalable (16 );
0 commit comments