AArch64: compare correct type for multi-valued SDNode.
authorTim Northover <t.p.northover@gmail.com>
Wed, 18 Aug 2021 08:26:03 +0000 (09:26 +0100)
committerTim Northover <t.p.northover@gmail.com>
Wed, 18 Aug 2021 08:35:31 +0000 (09:35 +0100)
If Orig produces more than one value (rare) with different types (rarer) then
we need to make sure we check against the one that Orig actually represents,
not just the first type.

Unfortunately because of the combination of things that need to happen I wasn't
able to produce a test.

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

index 8de9bd7..0e5e704 100644 (file)
@@ -15378,7 +15378,7 @@ static SDValue foldTruncStoreOfExt(SelectionDAG &DAG, SDNode *N) {
         ExtOpCode != ISD::ANY_EXTEND)
       return SDValue();
     SDValue Orig = Ext->getOperand(0);
-    if (Store->getMemoryVT() != Orig->getValueType(0))
+    if (Store->getMemoryVT() != Orig.getValueType())
       return SDValue();
     return DAG.getStore(Store->getChain(), SDLoc(Store), Orig,
                         Store->getBasePtr(), Store->getPointerInfo(),