Index: mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp =================================================================== --- mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp +++ mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp @@ -141,10 +141,14 @@ //===----------------------------------------------------------------------===// OpFoldResult spirv::CompositeExtractOp::fold(FoldAdaptor adaptor) { - if (auto insertOp = - getComposite().getDefiningOp()) { + Value compositeOp = getComposite(); + + auto insertOp = compositeOp.getDefiningOp(); + while (insertOp) { if (getIndices() == insertOp.getIndices()) return insertOp.getObject(); + compositeOp = insertOp.getComposite(); + insertOp = compositeOp.getDefiningOp(); } if (auto constructOp =