diff --git a/llvm/lib/CodeGen/MIRCanonicalizerPass.cpp b/llvm/lib/CodeGen/MIRCanonicalizerPass.cpp --- a/llvm/lib/CodeGen/MIRCanonicalizerPass.cpp +++ b/llvm/lib/CodeGen/MIRCanonicalizerPass.cpp @@ -104,6 +104,8 @@ "Rename Register Operands Canonically", false, false) static std::vector GetRPOList(MachineFunction &MF) { + if (MF.begin() == MF.end()) + return std::vector{}; ReversePostOrderTraversal RPOT(&*MF.begin()); std::vector RPOList; for (auto MBB : RPOT) { diff --git a/llvm/test/CodeGen/MIR/AArch64/print-parse-overloaded-intrinsics.mir b/llvm/test/CodeGen/MIR/AArch64/print-parse-overloaded-intrinsics.mir --- a/llvm/test/CodeGen/MIR/AArch64/print-parse-overloaded-intrinsics.mir +++ b/llvm/test/CodeGen/MIR/AArch64/print-parse-overloaded-intrinsics.mir @@ -2,6 +2,9 @@ # RUN: -verify-machineinstrs; llc -mtriple aarch64-- -run-pass legalizer \ # RUN: -simplify-mir %t -x mir -o - -verify-machineinstrs | FileCheck %s +# RUN: llc -mtriple aarch64-- -run-pass mir-canonicalizer %s -o %t \ +# RUN: -verify-machineinstrs + # Test that MIRParser is able to deserialize back MIR MIRPrinter serialized, # specifically overloaded intrinsic names in this case which aren't required # to encode all the concrete arg types in the name at MIR level.