[llvm] [DAGCombine] `visitANY_EXTEND` - fold `(aext (freeze (load x)))` -> `(aext (truncate (freeze (extload x))))` (PR #218454)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 25 03:00:04 PDT 2026
================
@@ -16718,33 +16719,43 @@ SDValue DAGCombiner::visitANY_EXTEND(SDNode *N) {
tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0,
ISD::ZEXTLOAD, ISD::ZERO_EXTEND))
return foldedExt;
- } else if (ISD::isNON_EXTLoad(N0.getNode()) &&
- ISD::isUNINDEXEDLoad(N0.getNode())) {
- LoadSDNode *LN0 = cast<LoadSDNode>(N0);
- if (TLI.isLoadLegalOrCustom(VT, N0.getValueType(), LN0->getAlign(),
- LN0->getAddressSpace(), ISD::EXTLOAD, false)) {
- bool DoXform = true;
- SmallVector<SDNode *, 4> SetCCs;
- if (!N0.hasOneUse())
- DoXform =
- ExtendUsesToFormExtLoad(VT, N, N0, ISD::ANY_EXTEND, SetCCs, TLI);
- if (DoXform) {
- SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, DL, VT, LN0->getChain(),
- LN0->getBasePtr(), N0.getValueType(),
- LN0->getMemOperand());
- ExtendSetCCUses(SetCCs, N0, ExtLoad, ISD::ANY_EXTEND);
- // If the load value is used only by N, replace it via CombineTo N.
- bool NoReplaceTrunc = N0.hasOneUse();
- CombineTo(N, ExtLoad);
- if (NoReplaceTrunc) {
- DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
- recursivelyDeleteUnusedNodes(LN0);
- } else {
- SDValue Trunc =
- DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), ExtLoad);
- CombineTo(LN0, Trunc, ExtLoad.getValue(1));
+ } else {
+ bool Frozen = N0.getOpcode() == ISD::FREEZE;
----------------
RKSimon wrote:
I think this will help you simplify some of the later one use logic:
```suggestion
bool Frozen = N0.getOpcode() == ISD::FREEZE && N0.getOperand(0).hasOneUse();
```
https://github.com/llvm/llvm-project/pull/218454
More information about the llvm-commits
mailing list