<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">