From: Joe Nash Date: Mon, 17 Apr 2023 21:22:43 +0000 (-0400) Subject: [AMDGPU] NFC. Refactor GISel for cmp intrinsics X-Git-Tag: upstream/17.0.6~11068 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05d04a0180c74b119db96b59c4230ad6f861e553;p=platform%2Fupstream%2Fllvm.git [AMDGPU] NFC. Refactor GISel for cmp intrinsics Combine the logic for fcmp and icmp intrinsics and use operand presence instead. Reviewed By: kosarev, foad Differential Revision: https://reviews.llvm.org/D148716 --- diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp index df1fa26..67057fd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp @@ -1291,27 +1291,26 @@ bool AMDGPUInstructionSelector::selectIntrinsicCmp(MachineInstr &I) const { if (Opcode == -1) return false; - MachineInstr *SelectedMI; - if (CmpInst::isFPPredicate(Pred)) { - MachineOperand &LHS = I.getOperand(2); - MachineOperand &RHS = I.getOperand(3); - auto [Src0, Src0Mods] = selectVOP3ModsImpl(LHS); - auto [Src1, Src1Mods] = selectVOP3ModsImpl(RHS); - Register Src0Reg = - copyToVGPRIfSrcFolded(Src0, Src0Mods, LHS, &I, /*ForceVGPR*/ true); - Register Src1Reg = - copyToVGPRIfSrcFolded(Src1, Src1Mods, RHS, &I, /*ForceVGPR*/ true); - SelectedMI = BuildMI(*BB, &I, DL, TII.get(Opcode), Dst) - .addImm(Src0Mods) - .addReg(Src0Reg) - .addImm(Src1Mods) - .addReg(Src1Reg) - .addImm(0); // clamp - } else { - SelectedMI = BuildMI(*BB, &I, DL, TII.get(Opcode), Dst) - .add(I.getOperand(2)) - .add(I.getOperand(3)); - } + MachineInstrBuilder SelectedMI; + MachineOperand &LHS = I.getOperand(2); + MachineOperand &RHS = I.getOperand(3); + auto [Src0, Src0Mods] = selectVOP3ModsImpl(LHS); + auto [Src1, Src1Mods] = selectVOP3ModsImpl(RHS); + Register Src0Reg = + copyToVGPRIfSrcFolded(Src0, Src0Mods, LHS, &I, /*ForceVGPR*/ true); + Register Src1Reg = + copyToVGPRIfSrcFolded(Src1, Src1Mods, RHS, &I, /*ForceVGPR*/ true); + SelectedMI = BuildMI(*BB, &I, DL, TII.get(Opcode), Dst); + if (AMDGPU::hasNamedOperand(Opcode, AMDGPU::OpName::src0_modifiers)) + SelectedMI.addImm(Src0Mods); + SelectedMI.addReg(Src0Reg); + if (AMDGPU::hasNamedOperand(Opcode, AMDGPU::OpName::src1_modifiers)) + SelectedMI.addImm(Src1Mods); + SelectedMI.addReg(Src1Reg); + if (AMDGPU::hasNamedOperand(Opcode, AMDGPU::OpName::clamp)) + SelectedMI.addImm(0); // clamp + if (AMDGPU::hasNamedOperand(Opcode, AMDGPU::OpName::op_sel)) + SelectedMI.addImm(0); // op_sel RBI.constrainGenericRegister(Dst, *TRI.getBoolRC(), *MRI); if (!constrainSelectedInstRegOperands(*SelectedMI, TII, TRI, RBI))