<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/83555>83555</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] UNREACHABLE executed at AArch64ISelLowering.cpp:6144
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          tblah
      </td>
    </tr>
</table>

<pre>
    LLVM version: 199bbe2b380

Compiling https://github.com/llvm/llvm-test-suite/blob/main/Fortran/gfortran/regression/internal_dummy_3.f08 with llvm-flang leads to a crash from hitting UNREACHABLE at AArch64ISelLowering.cpp:6144.

LLVM IR generated by flang:
```
; ModuleID = 'internal_dummy_3.ll'
source_filename = "FIRModule"
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

@_QMmEfirst = global ptr null
@_QQEnvironmentDefaults = constant ptr null

define void @_QMmPtest(ptr %0, ptr %1, ptr %2) #0 {
  %4 = alloca i32, i64 1, align 4
  %5 = alloca i32, i64 1, align 4
  %6 = alloca { ptr }, i64 1, align 8
  %7 = getelementptr { ptr }, ptr %6, i32 0, i32 0
  store ptr %0, ptr %7, align 8
  %8 = ptrtoint ptr %1 to i64
  %9 = icmp ne i64 %8, 0
  br i1 %9, label %10, label %17

10: ; preds = %3
  %11 = call i32 %1()
  %12 = load i32, ptr %0, align 4
  %13 = sub i32 %12, 1
  %14 = icmp ne i32 %11, %13
 br i1 %14, label %15, label %17

15: ; preds = %10
  %16 = call {} @_FortranAStopStatement(i32 1, i1 false, i1 false)
  unreachable

17: ; preds = %10, %3
  %18 = ptrtoint ptr %2 to i64
  %19 = icmp ne i64 %18, 0
  br i1 %19, label %20, label %27

20: ; preds = %17
  %21 = call i32 %2()
  %22 = load i32, ptr %0, align 4
  %23 = sub i32 %22, 2
  %24 = icmp ne i32 %21, %23
  br i1 %24, label %25, label %27

25: ; preds = %20
  %26 = call {} @_FortranAStopStatement(i32 2, i1 false, i1 false)
 unreachable

27:                                               ; preds = %20, %17
  %28 = load i32, ptr %0, align 4
  %29 = icmp eq i32 %28, 1
  br i1 %29, label %30, label %33

30: ; preds = %27
  %31 = alloca [32 x i8], i64 1, align 4
  call void @llvm.init.trampoline(ptr %31, ptr @_QMmFtestPmylevel, ptr %6)
  %32 = call ptr @llvm.adjust.trampoline(ptr %31)
  store ptr %32, ptr @_QMmEfirst, align 8
  br label %33

33: ; preds = %30, %27
  %34 = load ptr, ptr @_QMmEfirst, align 8
  %35 = call i32 %34()
  %36 = icmp ne i32 %35, 1
  br i1 %36, label %37, label %39

37: ; preds = %33
  %38 = call {} @_FortranAStopStatement(i32 3, i1 false, i1 false)
 unreachable

39:                                               ; preds = %33
  %40 = load i32, ptr %0, align 4
  %41 = icmp eq i32 %40, 10
 br i1 %41, label %53, label %42

42: ; preds = %39
  br i1 %9, label %43, label %48

43: ; preds = %42
  %44 = load i32, ptr %0, align 4
  %45 = add i32 %44, 1
  %46 = alloca [32 x i8], i64 1, align 4
  call void @llvm.init.trampoline(ptr %46, ptr @_QMmFtestPmylevel, ptr %6)
  %47 = call ptr @llvm.adjust.trampoline(ptr %46)
  store i32 %45, ptr %5, align 4
  call void @_QMmPtest(ptr %5, ptr %47, ptr %1)
 br label %53

48:                                               ; preds = %42
  %49 = load i32, ptr %0, align 4
  %50 = add i32 %49, 1
  %51 = alloca [32 x i8], i64 1, align 4
  call void @llvm.init.trampoline(ptr %51, ptr @_QMmFtestPmylevel, ptr %6)
  %52 = call ptr @llvm.adjust.trampoline(ptr %51)
  store i32 %50, ptr %4, align 4
 call void @_QMmPtest(ptr %4, ptr %52, ptr null)
  br label %53

53: ; preds = %48, %43, %39
  ret void
}

define internal i32 @_QMmFtestPmylevel(ptr nest %0) #0 {
 %2 = getelementptr { ptr }, ptr %0, i32 0, i32 0
  %3 = load ptr, ptr %2, align 8
  %4 = alloca i32, i64 1, align 4
  %5 = load i32, ptr %3, align 4
  store i32 %5, ptr %4, align 4
  %6 = load i32, ptr %4, align 4
  ret i32 %6
}

define void @_QQmain() #0 {
  %1 = alloca i32, i64 1, align 4
  store i32 1, ptr %1, align 4
  call void @_QMmPtest(ptr %1, ptr null, ptr null)
  ret void
}

declare {} @_FortranAStopStatement(i32, i1 zeroext, i1 zeroext)

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.init.trampoline(ptr nocapture writeonly, ptr readnone, ptr readnone) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: read)
declare ptr @llvm.adjust.trampoline(ptr) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #3

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #3

attributes #0 = { "frame-pointer"="non-leaf" "target-cpu"="generic" "target-features"="+outline-atomics,+v8a,+fp-armv8,+neon" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
attributes #3 = { nocallback nofree nosync nounwind willreturn }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
```

To reproduce, run `llc` on this IR.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Wdtu2zwSfhr6hrAhDXW88IVT19gA6aKH3f-2oCTa5l-K9FJU0uzTL0jJsmjLSRykW7SqZMx5vpnhgTYN30nGlii-Q_F6RluzV3ppCkH3s0JVz8uHh7--4EemG64kIisc5nlRMChIFqBgjYJV9_yk6gMXXO7w3phDg8gKwQbBZsfNvi0WpaoRbIR4PP43N6wx86blhiHYFEIVCDY15RLBZqO00dS-7bbDq2Y7zRpnBWy4NExLKn5WbV0__ySLbZDhJ2722MneCip3WDBaNdgoTHGpabPHW61qvOfGWDP__c_vn1ef_rG6e_iMqcGrlS73SXT_g4kH9cQ0l7tFeTggskrCKFqMXXURuf-Od0wyTQ2rcPGMnUrrdUeYBP3f7pPc4S-qagW7X2NE1hhBeuGCEAjSjr5RrS7Zzy0XTNKa9Sywuf_eSUEAHaGhescMrqihgj6r1hxJ2bxGZMXmPENkZf8RmPMwQWTlHvYriaxz0ZyHYAlCyOaSQPfbD_vbmRKj-UEMtlDq4jVv5S-pnuRccNn-nu9kO7D1zyj4-e1L_XnLddNZtxOqoAIfjMayFWJE9u2zfORayZpJs2Zb2grTOJZSycZQac6Z3LNiWy4ZflS8wr22rxZcCDJLjiAOEHzC_Xs4egcEOUZAAozSu04Ytr9HTikVQpUUcwKWhScRdrxU8J3E0Yg8vo08GZOj9K6zJl1PsGUjtrQLHjNMMBugjsvj7t1KnCQCODi99HIaozTDE2FJp5VmTunBaKN4H34bQ1tUFj8nwtwR8rI-YMmcG5bbCh10Fxrz0NHanwUtmHDCAv8zHec2DGzLseVz0KxqevDFZKQ5DDuIUCGcr12OMwT5mAgckVC0OmZoHITLJIXEMTRtMQh1XOGYJvKd7ulc_pyInnZwPIx8V-OXPI8nPQ-DsQHJyXWL4HTtCqBvn6sfRh1-GGocXBBk1kBnHA_xloqG-e9DvFqpGS33tBDMsyi9ZlHnr5eUaeDAJXDCSeSEV6AT-tgBHzvgRRCmsXMMs9MOl-CBC_DAreCBC_CA44IxzSR44AgeIBe-g48eiF_yfRo9MEYP3I4eeB09V8ADDjy3_Zkyvy8tL4fZrekZQY79Zwh95tX3Kew-5IgPOULGXpJpyMHYXBJ6_T--I4B_Y56heGoCDHa7NB1nnF3kLLjkZmE0rQ9KcMlO446cZlw3Djd2HH6tnwV7ZMIfFGOcEzgBoud2imj1d9tcV5VPDpdRIsYrgIkxU-ir4STT3f8IAz-u0QkGB6Pfqt1yxhdNgEQXXYAkUwVL4mnUkMSHSep_5p6b042VjBsqyW4uVvLuYiX5BxSrZ34U3FijUThVo5GjHmbgEO0o9MIbE-8z8hakEUxHO39lnRKdCc08odNIjcYdP4pujUG_sKyqwf_ofA0SJX-6m0TJ-7pJlN7cTaLkopscHY9HiuLXHJrYAoz5o9TfD-QnOI0hNE5v9gEF4YMhvxEMcXABhvwcDPEfHy3xO0dLfPtoiS9HS--4t3GJLh16DQvRGEtD6N22EvKpqeSDIb5S61k_lbpG4bUUzYwzqBeTrif2r8fzgM7Lyeg6BySz-2iHk4vNq1tiv3WbGFzfJlrjp6cpdAG7HKLv2jNPwJ9M0PvZfzn5eNhhTwifore56UUnL-XnBKhv3TFVduX0ILwhEifPwvMzihsbXOjjeBLTr8CwFFSzN64u-vXEf5lW7Lc5__KWN7ZSNq0sDVcSr4zRja0fqaxHBS1_Yam2mjEsVfMsSyxVK5-4rPATF0Iz02qJa1Yr_Ywgo3pXs9rya0arJ-1OD3PfgTd0Mqv8YFrNsBOhpHg-hszKlUqyy2-X7PD_49mFU29omr2F8LEWXjejMbT81dBHtjgEp2ogf1K9l1qnXzNXQp0JpyB4VlBjNC9aw5q-XG3DTu8wAthqWrP5QbnmiwAQWSMAqeRcMLpFducP0J1_zstDO1C4o19e-gRbRi2mmoEKwZ1qjc3QnBpV87JB8AnB3WNGu5ftYU51_Zh1X5Ip6SQeC9M3PBwM_8jauaYNPlTbC4rI-xSddS8EoQNF7c7HF1tBd8fJHNqOBsdjquPxXAiXEoIRx3DcYT8B1qxod_hebhX-q78L6c50up3WIAr648iTkOwk5Ov9J_zQjfKBF8a8cMabjnk_v8R7dt_gnv9SWLODVlVbunamW4lREghRoiTASmKz5w2-_76YVUtS5SSnM7YM0yCHPIjibLZfFmUQRiWUSUrDNCnyMi8g30LOQlbkZVnO-BICiAIShGEQR2G2SLIKyqSMk7SKyqiIURSwmnKxcNlRejfjTdOyZUbiOJ65FVbj7p4AbOKZrBBZ9Xcx1tN4PdNLd6dTtLvGlj5vTHOSZrgR7vLqyBOvvZsd9puVrWHV61c8s1aL5Rvvrg5a_c1Kg2DjvGkQbJxD_wsAAP__5cV9sA">