Skip to content

Commit f596ab4

Browse files
committed
AMDGPU: Use early return
1 parent eb5ca29 commit f596ab4

File tree

1 file changed

+51
-50
lines changed

1 file changed

+51
-50
lines changed

llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -323,60 +323,61 @@ static bool shrinkScalarLogicOp(const GCNSubtarget &ST,
323323
MachineOperand *SrcReg = Src0;
324324
MachineOperand *SrcImm = Src1;
325325

326-
if (SrcImm->isImm() &&
327-
!AMDGPU::isInlinableLiteral32(SrcImm->getImm(), ST.hasInv2PiInlineImm())) {
328-
uint32_t Imm = static_cast<uint32_t>(SrcImm->getImm());
329-
uint32_t NewImm = 0;
330-
331-
if (Opc == AMDGPU::S_AND_B32) {
332-
if (isPowerOf2_32(~Imm)) {
333-
NewImm = countTrailingOnes(Imm);
334-
Opc = AMDGPU::S_BITSET0_B32;
335-
} else if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
336-
NewImm = ~Imm;
337-
Opc = AMDGPU::S_ANDN2_B32;
338-
}
339-
} else if (Opc == AMDGPU::S_OR_B32) {
340-
if (isPowerOf2_32(Imm)) {
341-
NewImm = countTrailingZeros(Imm);
342-
Opc = AMDGPU::S_BITSET1_B32;
343-
} else if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
344-
NewImm = ~Imm;
345-
Opc = AMDGPU::S_ORN2_B32;
346-
}
347-
} else if (Opc == AMDGPU::S_XOR_B32) {
348-
if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
349-
NewImm = ~Imm;
350-
Opc = AMDGPU::S_XNOR_B32;
351-
}
352-
} else {
353-
llvm_unreachable("unexpected opcode");
354-
}
326+
if (!SrcImm->isImm() ||
327+
AMDGPU::isInlinableLiteral32(SrcImm->getImm(), ST.hasInv2PiInlineImm()))
328+
return false;
329+
330+
uint32_t Imm = static_cast<uint32_t>(SrcImm->getImm());
331+
uint32_t NewImm = 0;
355332

356-
if ((Opc == AMDGPU::S_ANDN2_B32 || Opc == AMDGPU::S_ORN2_B32) &&
357-
SrcImm == Src0) {
358-
if (!TII->commuteInstruction(MI, false, 1, 2))
359-
NewImm = 0;
333+
if (Opc == AMDGPU::S_AND_B32) {
334+
if (isPowerOf2_32(~Imm)) {
335+
NewImm = countTrailingOnes(Imm);
336+
Opc = AMDGPU::S_BITSET0_B32;
337+
} else if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
338+
NewImm = ~Imm;
339+
Opc = AMDGPU::S_ANDN2_B32;
340+
}
341+
} else if (Opc == AMDGPU::S_OR_B32) {
342+
if (isPowerOf2_32(Imm)) {
343+
NewImm = countTrailingZeros(Imm);
344+
Opc = AMDGPU::S_BITSET1_B32;
345+
} else if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
346+
NewImm = ~Imm;
347+
Opc = AMDGPU::S_ORN2_B32;
348+
}
349+
} else if (Opc == AMDGPU::S_XOR_B32) {
350+
if (AMDGPU::isInlinableLiteral32(~Imm, ST.hasInv2PiInlineImm())) {
351+
NewImm = ~Imm;
352+
Opc = AMDGPU::S_XNOR_B32;
360353
}
354+
} else {
355+
llvm_unreachable("unexpected opcode");
356+
}
361357

362-
if (NewImm != 0) {
363-
if (Register::isVirtualRegister(Dest->getReg()) && SrcReg->isReg()) {
364-
MRI.setRegAllocationHint(Dest->getReg(), 0, SrcReg->getReg());
365-
MRI.setRegAllocationHint(SrcReg->getReg(), 0, Dest->getReg());
366-
return true;
367-
}
358+
if ((Opc == AMDGPU::S_ANDN2_B32 || Opc == AMDGPU::S_ORN2_B32) &&
359+
SrcImm == Src0) {
360+
if (!TII->commuteInstruction(MI, false, 1, 2))
361+
NewImm = 0;
362+
}
368363

369-
if (SrcReg->isReg() && SrcReg->getReg() == Dest->getReg()) {
370-
MI.setDesc(TII->get(Opc));
371-
if (Opc == AMDGPU::S_BITSET0_B32 ||
372-
Opc == AMDGPU::S_BITSET1_B32) {
373-
Src0->ChangeToImmediate(NewImm);
374-
// Remove the immediate and add the tied input.
375-
MI.getOperand(2).ChangeToRegister(Dest->getReg(), false);
376-
MI.tieOperands(0, 2);
377-
} else {
378-
SrcImm->setImm(NewImm);
379-
}
364+
if (NewImm != 0) {
365+
if (Register::isVirtualRegister(Dest->getReg()) && SrcReg->isReg()) {
366+
MRI.setRegAllocationHint(Dest->getReg(), 0, SrcReg->getReg());
367+
MRI.setRegAllocationHint(SrcReg->getReg(), 0, Dest->getReg());
368+
return true;
369+
}
370+
371+
if (SrcReg->isReg() && SrcReg->getReg() == Dest->getReg()) {
372+
MI.setDesc(TII->get(Opc));
373+
if (Opc == AMDGPU::S_BITSET0_B32 ||
374+
Opc == AMDGPU::S_BITSET1_B32) {
375+
Src0->ChangeToImmediate(NewImm);
376+
// Remove the immediate and add the tied input.
377+
MI.getOperand(2).ChangeToRegister(Dest->getReg(), false);
378+
MI.tieOperands(0, 2);
379+
} else {
380+
SrcImm->setImm(NewImm);
380381
}
381382
}
382383
}

0 commit comments

Comments
 (0)