]> granicus.if.org Git - llvm/commitdiff
[GlobalISel] Fix a crash when handling an invalid MVT during call lowering.
authorAmara Emerson <aemerson@apple.com>
Fri, 12 Apr 2019 22:05:46 +0000 (22:05 +0000)
committerAmara Emerson <aemerson@apple.com>
Fri, 12 Apr 2019 22:05:46 +0000 (22:05 +0000)
This crash was introduced in r358032 as we try to construct an EVT from an MVT
in order to find the register type for the calling conv. Fall back instead of
trying to do this with an invalid MVT coming from i256.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358314 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/GlobalISel/CallLowering.cpp
test/CodeGen/AArch64/GlobalISel/call-lowering-i256-crash.ll [new file with mode: 0644]

index 47fdeedaeb4abafee2f3ed7702fda4e8cdc87d0d..b6b1bef26007e0598b935045771c42a57533dc63 100644 (file)
@@ -125,7 +125,7 @@ bool CallLowering::handleAssignments(MachineIRBuilder &MIRBuilder,
     MVT CurVT = MVT::getVT(Args[i].Ty);
     if (Handler.assignArg(i, CurVT, CurVT, CCValAssign::Full, Args[i], CCInfo)) {
       // Try to use the register type if we couldn't assign the VT.
-      if (!Handler.isArgumentHandler())
+      if (!Handler.isArgumentHandler() || !CurVT.isValid())
         return false; 
       CurVT = TLI->getRegisterTypeForCallingConv(
           F.getContext(), F.getCallingConv(), EVT(CurVT));
diff --git a/test/CodeGen/AArch64/GlobalISel/call-lowering-i256-crash.ll b/test/CodeGen/AArch64/GlobalISel/call-lowering-i256-crash.ll
new file mode 100644 (file)
index 0000000..2ebd7a7
--- /dev/null
@@ -0,0 +1,7 @@
+; RUN: llc -mtriple=aarch64-linux-gnu -O0 -verify-machineinstrs -o - %s | FileCheck %s
+
+define i1 @test_crash_i256(i256 %int) {
+; CHECK-LABEL: test_crash_i256
+; CHECK: ret
+  ret i1 true
+}