Skip to content

Commit dc170c7

Browse files
committed
AMDGPU: Special case align requirement for AV_MOV_B64_IMM_PSEUDO
This should not require aligned registers. Fixes expensive_checks test failure. I don't see a better way until the new system to specify the alignment per register is done.
1 parent db3054a commit dc170c7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5034,7 +5034,7 @@ bool SIInstrInfo::verifyInstruction(const MachineInstr &MI,
50345034
// aligned register constraint.
50355035
// FIXME: We do not verify inline asm operands, but custom inline asm
50365036
// verification is broken anyway
5037-
if (ST.needsAlignedVGPRs()) {
5037+
if (ST.needsAlignedVGPRs() && Opcode != AMDGPU::AV_MOV_B64_IMM_PSEUDO) {
50385038
const TargetRegisterClass *RC = RI.getRegClassForReg(MRI, Reg);
50395039
if (RI.hasVectorRegisters(RC) && MO.getSubReg()) {
50405040
if (const TargetRegisterClass *SubRC =
@@ -6013,7 +6013,11 @@ const TargetRegisterClass *SIInstrInfo::getRegClass(const MCInstrDesc &TID,
60136013
IsAllocatable = VDstIdx != -1 || AMDGPU::hasNamedOperand(
60146014
TID.Opcode, AMDGPU::OpName::data1);
60156015
}
6016+
} else if (TID.getOpcode() == AMDGPU::AV_MOV_B64_IMM_PSEUDO) {
6017+
// Special pseudos have no alignment requirement
6018+
return RI.getRegClass(RegClass);
60166019
}
6020+
60176021
return adjustAllocatableRegClass(ST, RI, TID, RegClass, IsAllocatable);
60186022
}
60196023

llvm/test/CodeGen/AMDGPU/av_movimm_pseudo_expansion.mir

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,25 @@ body: |
186186
$vgpr2_vgpr3 = AV_MOV_B64_IMM_PSEUDO 4477415320595726336, implicit $exec
187187
$vgpr4_vgpr5 = AV_MOV_B64_IMM_PSEUDO 4477415321638205827, implicit $exec
188188
...
189+
190+
---
191+
name: av_mov_b64_imm_pseudo_unaligned_agpr
192+
tracksRegLiveness: true
193+
body: |
194+
bb.0:
195+
; CHECK-LABEL: name: av_mov_b64_imm_pseudo_unaligned_agpr
196+
; CHECK: $agpr1 = V_ACCVGPR_WRITE_B32_e64 9, implicit $exec, implicit-def $agpr1_agpr2
197+
; CHECK-NEXT: $agpr2 = V_ACCVGPR_WRITE_B32_e64 -16, implicit $exec, implicit-def $agpr1_agpr2
198+
$agpr1_agpr2 = AV_MOV_B64_IMM_PSEUDO 18446744004990074889, implicit $exec
199+
...
200+
201+
---
202+
name: av_mov_b64_imm_pseudo_unaligned_vgpr
203+
tracksRegLiveness: true
204+
body: |
205+
bb.0:
206+
; CHECK-LABEL: name: av_mov_b64_imm_pseudo_unaligned_vgpr
207+
; CHECK: $vgpr1 = V_MOV_B32_e32 9, implicit $exec, implicit-def $vgpr1_vgpr2
208+
; CHECK-NEXT: $vgpr2 = V_MOV_B32_e32 -16, implicit $exec, implicit-def $vgpr1_vgpr2
209+
$vgpr1_vgpr2 = AV_MOV_B64_IMM_PSEUDO 18446744004990074889, implicit $exec
210+
...

0 commit comments

Comments
 (0)