@@ -125,19 +125,20 @@ bool AIELegalizerHelper::pack32BitVector(LegalizerHelper &Helper,
125125 return true ;
126126}
127127
128- bool AIELegalizerHelper::unpack32BitVector (LegalizerHelper &Helper,
129- MachineInstr &MI,
130- Register SourceReg) const {
128+ // Unpack 32 bit or 64 bit vectors
129+ bool AIELegalizerHelper::unpackVector (LegalizerHelper &Helper, MachineInstr &MI,
130+ Register SourceReg) const {
131131 MachineIRBuilder &MIRBuilder = Helper.MIRBuilder ;
132132 MachineRegisterInfo &MRI = *MIRBuilder.getMRI ();
133133
134134 const LLT SourceRegTy = MRI.getType (SourceReg);
135- assert (SourceRegTy.getSizeInBits () == 32 &&
136- " cannot unpack vectors larger or smaller than 32-bit" );
135+ unsigned SourceRegSize = SourceRegTy.getSizeInBits ();
136+ assert ((SourceRegSize == 32 || SourceRegSize == 64 ) &&
137+ " cannot unpack vectors other than 32-bit or 64-bit" );
137138
138- const LLT S32 = LLT::scalar (32 );
139+ const LLT Type = LLT::scalar (SourceRegSize );
139140 unsigned Offset = 0 ;
140- Register DstCastReg = MRI.createGenericVirtualRegister (S32 );
141+ Register DstCastReg = MRI.createGenericVirtualRegister (Type );
141142
142143 MachineOperand *Operand = MI.operands_begin (),
143144 *OperandEnd = MI.operands_end () - 1 ;
@@ -149,9 +150,9 @@ bool AIELegalizerHelper::unpack32BitVector(LegalizerHelper &Helper,
149150 // optimized out in O0.
150151 if (Offset != 0 ) {
151152 const MachineInstrBuilder ShiftConstant =
152- MIRBuilder.buildConstant (S32 , Offset);
153+ MIRBuilder.buildConstant (Type , Offset);
153154 const MachineInstrBuilder Masked =
154- MIRBuilder.buildLShr (S32 , DstCastReg, ShiftConstant);
155+ MIRBuilder.buildLShr (Type , DstCastReg, ShiftConstant);
155156 MIRBuilder.buildTrunc (DestinationOperand, Masked);
156157
157158 } else {
@@ -345,8 +346,9 @@ bool AIELegalizerHelper::legalizeG_UNMERGE_VALUES(LegalizerHelper &Helper,
345346 LastTy.getSizeInBits () &&
346347 " This operation is only supported for vectors" );
347348
348- if (LastTy.getSizeInBits () == 32 )
349- return unpack32BitVector (Helper, MI, LastReg);
349+ unsigned LastTySize = LastTy.getSizeInBits ();
350+ if (LastTySize == 32 || LastTySize == 64 )
351+ return unpackVector (Helper, MI, LastReg);
350352
351353 // Pad vectors of 128-bit vectors to 256-bit
352354 Register TargetReg = LastReg;
0 commit comments