Skip to content

Commit 1d9cd9a

Browse files
committed
Calc IsVALU correctly during UADDO/USUBO selection
Signed-off-by: John Lu <[email protected]>
1 parent ec27c2d commit 1d9cd9a

File tree

11 files changed

+5699
-5129
lines changed

11 files changed

+5699
-5129
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,10 +1089,17 @@ void AMDGPUDAGToDAGISel::SelectUADDO_USUBO(SDNode *N) {
10891089
for (SDNode::user_iterator UI = N->user_begin(), E = N->user_end(); UI != E;
10901090
++UI)
10911091
if (UI.getUse().getResNo() == 1) {
1092-
if ((IsAdd && (UI->getOpcode() != ISD::UADDO_CARRY)) ||
1093-
(!IsAdd && (UI->getOpcode() != ISD::USUBO_CARRY))) {
1094-
IsVALU = true;
1095-
break;
1092+
if (UI->isMachineOpcode()) {
1093+
if (UI->getMachineOpcode() !=
1094+
(IsAdd ? AMDGPU::S_ADD_CO_PSEUDO : AMDGPU::S_SUB_CO_PSEUDO)) {
1095+
IsVALU = true;
1096+
break;
1097+
}
1098+
} else {
1099+
if (UI->getOpcode() != (IsAdd ? ISD::UADDO_CARRY : ISD::USUBO_CARRY)) {
1100+
IsVALU = true;
1101+
break;
1102+
}
10961103
}
10971104
}
10981105

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5970,9 +5970,12 @@ SITargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
59705970
.add(Src1);
59715971
// clang-format on
59725972

5973-
BuildMI(*BB, MI, DL, TII->get(AMDGPU::S_CSELECT_B64), Dest1.getReg())
5974-
.addImm(1)
5975-
.addImm(0);
5973+
const TargetRegisterClass *Dest1RC = MRI.getRegClass(Dest1.getReg());
5974+
unsigned Dest1Size = TRI->getRegSizeInBits(*Dest1RC);
5975+
assert(Dest1Size == 64 || Dest1Size == 32);
5976+
unsigned SelOpc =
5977+
(Dest1Size == 64) ? AMDGPU::S_CSELECT_B64 : AMDGPU::S_CSELECT_B32;
5978+
BuildMI(*BB, MI, DL, TII->get(SelOpc), Dest1.getReg()).addImm(1).addImm(0);
59765979

59775980
MI.eraseFromParent();
59785981
return BB;

0 commit comments

Comments
 (0)