From 9c3d059fa2aa3a29b2da0c38703ed03205500fde Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Tue, 6 Dec 2016 19:02:15 +0000 Subject: [PATCH] GlobalISel: fall back gracefully when we hit unhandled legalizer default. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288840 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/GlobalISel/LegalizerInfo.cpp | 4 +++- test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/GlobalISel/LegalizerInfo.cpp b/lib/CodeGen/GlobalISel/LegalizerInfo.cpp index 2b99a555858..e49662075ed 100644 --- a/lib/CodeGen/GlobalISel/LegalizerInfo.cpp +++ b/lib/CodeGen/GlobalISel/LegalizerInfo.cpp @@ -93,7 +93,9 @@ LegalizerInfo::getAction(const InstrAspect &Aspect) const { if (DefaultAction != DefaultActions.end() && DefaultAction->second == Legal) return std::make_pair(Legal, Ty); - assert(DefaultAction->second == NarrowScalar && "unexpected default"); + if (DefaultAction == DefaultActions.end() || + DefaultAction->second != NarrowScalar) + return std::make_pair(Unsupported, LLT()); return findLegalAction(Aspect, NarrowScalar); } diff --git a/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll b/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll index d164e2ea2f3..e4a2bb2dbf5 100644 --- a/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll +++ b/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll @@ -74,3 +74,11 @@ define void @odd_type(i42* %addr) { define void @sequence_mapping([2 x i64] %in) { ret void } + + ; Legalizer was asserting when it enountered an unexpected default action. +; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for legal_default +; FALLBACK-WITH-REPORT-LABEL: legal_default: +define void @legal_default(i64 %in) { + insertvalue [2 x i64] undef, i64 %in, 0 + ret void +} -- 2.50.1