diff options
| author | Aiden Grossman <aidengrossman@google.com> | 2025-09-26 22:48:22 +0000 |
|---|---|---|
| committer | Aiden Grossman <aidengrossman@google.com> | 2025-09-26 22:48:22 +0000 |
| commit | 76533872e149395812a6d1651aa49dbf53fb4921 (patch) | |
| tree | 199a669fa57a4effc3116705d2ec89c07ff36c65 /llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | |
| parent | 54f5c1b2e17a9be61609d70dbbc8354ad41bb931 (diff) | |
| parent | 37e7ad184d002db15f72771938755580433cf96d (diff) | |
[𝘀𝗽𝗿] changes introduced through rebaseusers/boomanaiden154/main.lit-remove-t-from-tests
Created using spr 1.3.6
[skip ci]
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index d4210b8bc9a8..2192a72bb27b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp @@ -1089,10 +1089,17 @@ void AMDGPUDAGToDAGISel::SelectUADDO_USUBO(SDNode *N) { for (SDNode::user_iterator UI = N->user_begin(), E = N->user_end(); UI != E; ++UI) if (UI.getUse().getResNo() == 1) { - if ((IsAdd && (UI->getOpcode() != ISD::UADDO_CARRY)) || - (!IsAdd && (UI->getOpcode() != ISD::USUBO_CARRY))) { - IsVALU = true; - break; + if (UI->isMachineOpcode()) { + if (UI->getMachineOpcode() != + (IsAdd ? AMDGPU::S_ADD_CO_PSEUDO : AMDGPU::S_SUB_CO_PSEUDO)) { + IsVALU = true; + break; + } + } else { + if (UI->getOpcode() != (IsAdd ? ISD::UADDO_CARRY : ISD::USUBO_CARRY)) { + IsVALU = true; + break; + } } } @@ -4078,18 +4085,26 @@ bool AMDGPUDAGToDAGISel::SelectVOP3PMadMixModsImpl(SDValue In, SDValue &Src, // register. Mods |= SISrcMods::OP_SEL_1; - if (IsExtractHigh || - (Src.getValueSizeInBits() == 16 && isExtractHiElt(Src, Src))) { - Mods |= SISrcMods::OP_SEL_0; + if (Src.getValueSizeInBits() == 16) { + if (isExtractHiElt(Src, Src)) { + Mods |= SISrcMods::OP_SEL_0; - // TODO: Should we try to look for neg/abs here? - } + // TODO: Should we try to look for neg/abs here? + return true; + } + + if (Src.getOpcode() == ISD::TRUNCATE && + Src.getOperand(0).getValueType() == MVT::i32) { + Src = Src.getOperand(0); + return true; + } + + if (Subtarget->useRealTrue16Insts()) + // In true16 mode, pack src to a 32bit + Src = createVOP3PSrc32FromLo16(Src, In, CurDAG, Subtarget); + } else if (IsExtractHigh) + Mods |= SISrcMods::OP_SEL_0; - // Prevent unnecessary subreg COPY to VGPR_16 - if (Src.getOpcode() == ISD::TRUNCATE && - Src.getOperand(0).getValueType() == MVT::i32) { - Src = Src.getOperand(0); - } return true; } |
