[llvm] ce4fcea - ARM: skip debug instructions when matching jump-table patterns.

Tim Northover via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 26 05:25:56 PST 2023


Author: Tim Northover
Date: 2023-01-26T13:00:36Z
New Revision: ce4fcea59e1d5829b4355b6401d7265be23f617a

URL: https://github.com/llvm/llvm-project/commit/ce4fcea59e1d5829b4355b6401d7265be23f617a
DIFF: https://github.com/llvm/llvm-project/commit/ce4fcea59e1d5829b4355b6401d7265be23f617a.diff

LOG: ARM: skip debug instructions when matching jump-table patterns.

When working out whether we can see a compressible jump-table pattern during
ConstantIslands, we were stopping when we saw a debug instruction. Instead it's
better to keep iterating backwards to the first real instruction.

Added: 
    llvm/test/CodeGen/ARM/jump-table-dbg-value.mir

Modified: 
    llvm/lib/Target/ARM/ARMConstantIslandPass.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp b/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp
index 386a74877bc17..0fa7258ad1edf 100644
--- a/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp
+++ b/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp
@@ -2278,9 +2278,12 @@ bool ARMConstantIslands::optimizeThumb2JumpTables() {
       //   %t = tLDRr %base, %idx
       Register BaseReg = User.MI->getOperand(0).getReg();
 
-      if (User.MI->getIterator() == User.MI->getParent()->begin())
+      MachineBasicBlock *UserMBB = User.MI->getParent();
+      MachineBasicBlock::iterator Shift = User.MI->getIterator();
+      if (Shift == UserMBB->begin())
         continue;
-      MachineInstr *Shift = User.MI->getPrevNode();
+
+      Shift = prev_nodbg(Shift, UserMBB->begin());
       if (Shift->getOpcode() != ARM::tLSLri ||
           Shift->getOperand(3).getImm() != 2 ||
           !Shift->getOperand(2).isKill())

diff  --git a/llvm/test/CodeGen/ARM/jump-table-dbg-value.mir b/llvm/test/CodeGen/ARM/jump-table-dbg-value.mir
new file mode 100644
index 0000000000000..1eda8a1e13dc1
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/jump-table-dbg-value.mir
@@ -0,0 +1,1064 @@
+# RUN: llc -run-pass=arm-cp-islands %s -o - | FileCheck %s
+--- |
+  ; ModuleID = '/Users/tim/simpler.ll'
+  source_filename = "src/app/ofw/thresholding.c"
+  target datalayout = "e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
+  target triple = "thumbv6m-apple-unknown-macho"
+  
+  ; Function Attrs: minsize nounwind optsize
+  define hidden arm_aapcscc void @handle_notify_event(i8 noundef zeroext %0) unnamed_addr #0 !dbg !317 {
+    call void @llvm.dbg.value(metadata i8 %0, metadata !322, metadata !DIExpression()), !dbg !323
+    %2 = zext i8 %0 to i32, !dbg !324
+    switch i32 %2, label %34 [
+      i32 0, label %35
+      i32 1, label %3
+      i32 3, label %4
+      i32 4, label %5
+      i32 5, label %6
+      i32 6, label %7
+      i32 7, label %8
+      i32 19, label %9
+      i32 20, label %10
+      i32 21, label %11
+      i32 22, label %12
+      i32 23, label %13
+      i32 68, label %14
+      i32 69, label %15
+      i32 70, label %16
+      i32 71, label %17
+      i32 73, label %18
+      i32 74, label %19
+      i32 75, label %20
+      i32 76, label %21
+      i32 77, label %22
+      i32 78, label %23
+      i32 79, label %24
+      i32 80, label %25
+      i32 81, label %26
+      i32 82, label %27
+      i32 83, label %28
+      i32 84, label %29
+      i32 85, label %30
+      i32 86, label %31
+      i32 87, label %32
+      i32 88, label %33
+    ], !dbg !324
+  
+  3:                                                ; preds = %1
+    tail call arm_aapcscc void @system_set_spmi_event_low(i8 noundef zeroext 0) #3, !dbg !325
+    br label %35, !dbg !327
+  
+  4:                                                ; preds = %1
+    tail call arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext 0) #3, !dbg !328
+    br label %35, !dbg !329
+  
+  5:                                                ; preds = %1
+    tail call arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext 1) #3, !dbg !330
+    br label %35, !dbg !331
+  
+  6:                                                ; preds = %1
+    tail call arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext 2) #3, !dbg !332
+    br label %35, !dbg !333
+  
+  7:                                                ; preds = %1
+    tail call arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext 3) #3, !dbg !334
+    br label %35, !dbg !335
+  
+  8:                                                ; preds = %1
+    tail call arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext 4) #3, !dbg !336
+    br label %35, !dbg !337
+  
+  9:                                                ; preds = %1
+    tail call arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext 0) #3, !dbg !338
+    br label %35, !dbg !339
+  
+  10:                                               ; preds = %1
+    tail call arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext 1) #3, !dbg !340
+    br label %35, !dbg !341
+  
+  11:                                               ; preds = %1
+    tail call arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext 2) #3, !dbg !342
+    br label %35, !dbg !343
+  
+  12:                                               ; preds = %1
+    tail call arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext 3) #3, !dbg !344
+    br label %35, !dbg !345
+  
+  13:                                               ; preds = %1
+    tail call arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext 4) #3, !dbg !346
+    br label %35, !dbg !347
+  
+  14:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 0, i32 noundef 0) #3, !dbg !348
+    br label %35, !dbg !349
+  
+  15:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 1, i32 noundef 0) #3, !dbg !350
+    br label %35, !dbg !351
+  
+  16:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 2, i32 noundef 0) #3, !dbg !352
+    br label %35, !dbg !353
+  
+  17:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 3, i32 noundef 0) #3, !dbg !354
+    br label %35, !dbg !355
+  
+  18:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 0, i32 noundef 1) #3, !dbg !356
+    br label %35, !dbg !357
+  
+  19:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 1, i32 noundef 1) #3, !dbg !358
+    br label %35, !dbg !359
+  
+  20:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 2, i32 noundef 1) #3, !dbg !360
+    br label %35, !dbg !361
+  
+  21:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef 3, i32 noundef 1) #3, !dbg !362
+    br label %35, !dbg !363
+  
+  22:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_gpio_trigger_state(i32 noundef 21, i32 noundef 0) #3, !dbg !364
+    br label %35, !dbg !365
+  
+  23:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_gpio_trigger_state(i32 noundef 22, i32 noundef 0) #3, !dbg !366
+    br label %35, !dbg !367
+  
+  24:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_gpio_trigger_state(i32 noundef 21, i32 noundef 1) #3, !dbg !368
+    br label %35, !dbg !369
+  
+  25:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_gpio_trigger_state(i32 noundef 22, i32 noundef 1) #3, !dbg !370
+    br label %35, !dbg !371
+  
+  26:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 0, i32 noundef 0) #3, !dbg !372
+    br label %35, !dbg !373
+  
+  27:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 1, i32 noundef 0) #3, !dbg !374
+    br label %35, !dbg !375
+  
+  28:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 2, i32 noundef 0) #3, !dbg !376
+    br label %35, !dbg !377
+  
+  29:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 3, i32 noundef 0) #3, !dbg !378
+    br label %35, !dbg !379
+  
+  30:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 0, i32 noundef 1) #3, !dbg !380
+    br label %35, !dbg !381
+  
+  31:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 1, i32 noundef 1) #3, !dbg !382
+    br label %35, !dbg !383
+  
+  32:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 2, i32 noundef 1) #3, !dbg !384
+    br label %35, !dbg !385
+  
+  33:                                               ; preds = %1
+    tail call arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef 3, i32 noundef 1) #3, !dbg !386
+    br label %35, !dbg !387
+  
+  34:                                               ; preds = %1
+    tail call arm_aapcscc void @assert_handler(i16 noundef zeroext 11) #3, !dbg !388
+    br label %35, !dbg !392
+  
+  35:                                               ; preds = %34, %33, %32, %31, %30, %29, %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5, %4, %3, %1
+    ret void, !dbg !393
+  }
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !394 arm_aapcscc void @system_set_spmi_event_low(i8 noundef zeroext) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !398 arm_aapcscc void @system_assert_virtual_wire(i8 noundef zeroext) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !399 arm_aapcscc void @system_deassert_virtual_wire(i8 noundef zeroext) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !400 arm_aapcscc void @system_change_cpu_gpu_trigger_state(i32 noundef, i32 noundef) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !405 arm_aapcscc void @system_change_gpio_trigger_state(i32 noundef, i32 noundef) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !409 arm_aapcscc void @system_change_throttle_trigger_state(i32 noundef, i32 noundef) local_unnamed_addr #1
+  
+  ; Function Attrs: minsize optsize
+  declare !dbg !413 arm_aapcscc void @assert_handler(i16 noundef zeroext) local_unnamed_addr #1
+  
+  ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
+  declare void @llvm.dbg.value(metadata, metadata, metadata) #2
+  
+  attributes #0 = { minsize nounwind optsize "frame-pointer"="all" "min-legal-vector-width"="0" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cortex-m0" "target-features"="+armv6-m,+soft-float,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-pacbti,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" "use-soft-float"="true" }
+  attributes #1 = { minsize optsize "frame-pointer"="all" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cortex-m0" "target-features"="+armv6-m,+soft-float,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-pacbti,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" "use-soft-float"="true" }
+  attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+  attributes #3 = { minsize nobuiltin nounwind optsize "no-builtins" }
+  
+  !llvm.dbg.cu = !{!0}
+  !llvm.module.flags = !{!307, !308, !309, !310, !311, !312, !313, !314, !315}
+  !llvm.ident = !{!316}
+  
+  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "Apple clang version 14.0.3 (clang-1403.0.22.8)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !299, globals: !306, splitDebugInlining: false, nameTableKind: None, sysroot: "thing", sdk: "thing")
+  !1 = !DIFile(filename: "thing", directory: "thing")
+  !2 = !{!3, !39, !130, !134, !148, !160, !177, !184, !188, !192, !198}
+  !3 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !4, line: 272, baseType: !5, size: 8, elements: !6)
+  !4 = !DIFile(filename: "thing", directory: "thing")
+  !5 = !DIBasicType(name: "thing", size: 8, encoding: DW_ATE_unsigned_char)
+  !6 = !{!7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38}
+  !7 = !DIEnumerator(name: "thing", value: 0)
+  !8 = !DIEnumerator(name: "thing", value: 1)
+  !9 = !DIEnumerator(name: "thing", value: 2)
+  !10 = !DIEnumerator(name: "thing", value: 3)
+  !11 = !DIEnumerator(name: "thing", value: 3)
+  !12 = !DIEnumerator(name: "thing", value: 4)
+  !13 = !DIEnumerator(name: "thing", value: 5)
+  !14 = !DIEnumerator(name: "thing", value: 6)
+  !15 = !DIEnumerator(name: "thing", value: 20)
+  !16 = !DIEnumerator(name: "thing", value: 21)
+  !17 = !DIEnumerator(name: "thing", value: 22)
+  !18 = !DIEnumerator(name: "thing", value: 23)
+  !19 = !DIEnumerator(name: "thing", value: 24)
+  !20 = !DIEnumerator(name: "thing", value: 100)
+  !21 = !DIEnumerator(name: "thing", value: 101)
+  !22 = !DIEnumerator(name: "thing", value: 102)
+  !23 = !DIEnumerator(name: "thing", value: 103)
+  !24 = !DIEnumerator(name: "thing", value: 104)
+  !25 = !DIEnumerator(name: "thing", value: 105)
+  !26 = !DIEnumerator(name: "thing", value: 106)
+  !27 = !DIEnumerator(name: "thing", value: 150)
+  !28 = !DIEnumerator(name: "thing", value: 151)
+  !29 = !DIEnumerator(name: "thing", value: 152)
+  !30 = !DIEnumerator(name: "thing", value: 153)
+  !31 = !DIEnumerator(name: "thing", value: 170)
+  !32 = !DIEnumerator(name: "thing", value: 171)
+  !33 = !DIEnumerator(name: "thing", value: 172)
+  !34 = !DIEnumerator(name: "thing", value: 173)
+  !35 = !DIEnumerator(name: "thing", value: 180)
+  !36 = !DIEnumerator(name: "thing", value: 181)
+  !37 = !DIEnumerator(name: "thing", value: 190)
+  !38 = !DIEnumerator(name: "thing", value: 191)
+  !39 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !4, line: 423, baseType: !5, size: 8, elements: !40)
+  !40 = !{!41, !42, !43, !44, !45, !46, !47, !48, !49, !50, !51, !52, !53, !54, !55, !56, !57, !58, !59, !60, !61, !62, !63, !64, !65, !66, !67, !68, !69, !70, !71, !72, !73, !74, !75, !76, !77, !78, !79, !80, !81, !82, !83, !84, !85, !86, !87, !88, !89, !90, !91, !92, !93, !94, !95, !96, !97, !98, !99, !100, !101, !102, !103, !104, !105, !106, !107, !108, !109, !110, !111, !112, !113, !114, !115, !116, !117, !118, !119, !120, !121, !122, !123, !124, !125, !126, !127, !128, !129}
+  !41 = !DIEnumerator(name: "thing", value: 0)
+  !42 = !DIEnumerator(name: "thing", value: 1)
+  !43 = !DIEnumerator(name: "thing", value: 2)
+  !44 = !DIEnumerator(name: "thing", value: 3)
+  !45 = !DIEnumerator(name: "thing", value: 4)
+  !46 = !DIEnumerator(name: "thing", value: 5)
+  !47 = !DIEnumerator(name: "thing", value: 6)
+  !48 = !DIEnumerator(name: "thing", value: 7)
+  !49 = !DIEnumerator(name: "thing", value: 8)
+  !50 = !DIEnumerator(name: "thing", value: 9)
+  !51 = !DIEnumerator(name: "thing", value: 10)
+  !52 = !DIEnumerator(name: "thing", value: 11)
+  !53 = !DIEnumerator(name: "thing", value: 12)
+  !54 = !DIEnumerator(name: "thing", value: 13)
+  !55 = !DIEnumerator(name: "thing", value: 14)
+  !56 = !DIEnumerator(name: "thing", value: 15)
+  !57 = !DIEnumerator(name: "thing", value: 16)
+  !58 = !DIEnumerator(name: "thing", value: 17)
+  !59 = !DIEnumerator(name: "thing", value: 18)
+  !60 = !DIEnumerator(name: "thing", value: 19)
+  !61 = !DIEnumerator(name: "thing", value: 20)
+  !62 = !DIEnumerator(name: "thing", value: 21)
+  !63 = !DIEnumerator(name: "thing", value: 22)
+  !64 = !DIEnumerator(name: "thing", value: 23)
+  !65 = !DIEnumerator(name: "thing", value: 24)
+  !66 = !DIEnumerator(name: "thing", value: 25)
+  !67 = !DIEnumerator(name: "thing", value: 26)
+  !68 = !DIEnumerator(name: "thing", value: 27)
+  !69 = !DIEnumerator(name: "thing", value: 28)
+  !70 = !DIEnumerator(name: "thing", value: 29)
+  !71 = !DIEnumerator(name: "thing", value: 30)
+  !72 = !DIEnumerator(name: "thing", value: 31)
+  !73 = !DIEnumerator(name: "thing", value: 32)
+  !74 = !DIEnumerator(name: "thing", value: 33)
+  !75 = !DIEnumerator(name: "thing", value: 34)
+  !76 = !DIEnumerator(name: "thing", value: 35)
+  !77 = !DIEnumerator(name: "thing", value: 36)
+  !78 = !DIEnumerator(name: "thing", value: 37)
+  !79 = !DIEnumerator(name: "thing", value: 38)
+  !80 = !DIEnumerator(name: "thing", value: 39)
+  !81 = !DIEnumerator(name: "thing", value: 40)
+  !82 = !DIEnumerator(name: "thing", value: 41)
+  !83 = !DIEnumerator(name: "thing", value: 42)
+  !84 = !DIEnumerator(name: "thing", value: 43)
+  !85 = !DIEnumerator(name: "thing", value: 44)
+  !86 = !DIEnumerator(name: "thing", value: 45)
+  !87 = !DIEnumerator(name: "thing", value: 46)
+  !88 = !DIEnumerator(name: "thing", value: 47)
+  !89 = !DIEnumerator(name: "thing", value: 48)
+  !90 = !DIEnumerator(name: "thing", value: 49)
+  !91 = !DIEnumerator(name: "thing", value: 50)
+  !92 = !DIEnumerator(name: "thing", value: 51)
+  !93 = !DIEnumerator(name: "thing", value: 52)
+  !94 = !DIEnumerator(name: "thing", value: 53)
+  !95 = !DIEnumerator(name: "thing", value: 54)
+  !96 = !DIEnumerator(name: "thing", value: 55)
+  !97 = !DIEnumerator(name: "thing", value: 56)
+  !98 = !DIEnumerator(name: "thing", value: 57)
+  !99 = !DIEnumerator(name: "thing", value: 58)
+  !100 = !DIEnumerator(name: "thing", value: 59)
+  !101 = !DIEnumerator(name: "thing", value: 60)
+  !102 = !DIEnumerator(name: "thing", value: 61)
+  !103 = !DIEnumerator(name: "thing", value: 62)
+  !104 = !DIEnumerator(name: "thing", value: 63)
+  !105 = !DIEnumerator(name: "thing", value: 64)
+  !106 = !DIEnumerator(name: "thing", value: 65)
+  !107 = !DIEnumerator(name: "thing", value: 66)
+  !108 = !DIEnumerator(name: "thing", value: 67)
+  !109 = !DIEnumerator(name: "thing", value: 68)
+  !110 = !DIEnumerator(name: "thing", value: 69)
+  !111 = !DIEnumerator(name: "thing", value: 70)
+  !112 = !DIEnumerator(name: "thing", value: 71)
+  !113 = !DIEnumerator(name: "thing", value: 72)
+  !114 = !DIEnumerator(name: "thing", value: 73)
+  !115 = !DIEnumerator(name: "thing", value: 74)
+  !116 = !DIEnumerator(name: "thing", value: 75)
+  !117 = !DIEnumerator(name: "thing", value: 76)
+  !118 = !DIEnumerator(name: "thing", value: 77)
+  !119 = !DIEnumerator(name: "thing", value: 78)
+  !120 = !DIEnumerator(name: "thing", value: 79)
+  !121 = !DIEnumerator(name: "thing", value: 80)
+  !122 = !DIEnumerator(name: "thing", value: 81)
+  !123 = !DIEnumerator(name: "thing", value: 82)
+  !124 = !DIEnumerator(name: "thing", value: 83)
+  !125 = !DIEnumerator(name: "thing", value: 84)
+  !126 = !DIEnumerator(name: "thing", value: 85)
+  !127 = !DIEnumerator(name: "thing", value: 86)
+  !128 = !DIEnumerator(name: "thing", value: 87)
+  !129 = !DIEnumerator(name: "thing", value: 88)
+  !130 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !4, line: 517, baseType: !5, size: 8, elements: !131)
+  !131 = !{!132, !133}
+  !132 = !DIEnumerator(name: "thing", value: 0)
+  !133 = !DIEnumerator(name: "thing", value: 1)
+  !134 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !135, line: 23, baseType: !136, size: 32, elements: !137)
+  !135 = !DIFile(filename: "thing", directory: "thing")
+  !136 = !DIBasicType(name: "thing", size: 32, encoding: DW_ATE_unsigned)
+  !137 = !{!138, !139, !140, !141, !142, !143, !144, !145, !146, !147}
+  !138 = !DIEnumerator(name: "thing", value: 0)
+  !139 = !DIEnumerator(name: "thing", value: 1)
+  !140 = !DIEnumerator(name: "thing", value: 2)
+  !141 = !DIEnumerator(name: "thing", value: 3)
+  !142 = !DIEnumerator(name: "thing", value: 4)
+  !143 = !DIEnumerator(name: "thing", value: 5)
+  !144 = !DIEnumerator(name: "thing", value: 6)
+  !145 = !DIEnumerator(name: "thing", value: 7)
+  !146 = !DIEnumerator(name: "thing", value: 8)
+  !147 = !DIEnumerator(name: "thing", value: 9)
+  !148 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !149, line: 4, baseType: !136, size: 32, elements: !150)
+  !149 = !DIFile(filename: "thing", directory: "thing")
+  !150 = !{!151, !152, !153, !154, !155, !156, !157, !158, !159}
+  !151 = !DIEnumerator(name: "thing", value: 0)
+  !152 = !DIEnumerator(name: "thing", value: 1)
+  !153 = !DIEnumerator(name: "thing", value: 2)
+  !154 = !DIEnumerator(name: "thing", value: 3)
+  !155 = !DIEnumerator(name: "thing", value: 4)
+  !156 = !DIEnumerator(name: "thing", value: 5)
+  !157 = !DIEnumerator(name: "thing", value: 6)
+  !158 = !DIEnumerator(name: "thing", value: 7)
+  !159 = !DIEnumerator(name: "thing", value: 8)
+  !160 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !4, line: 1287, baseType: !5, size: 8, align: 8, elements: !161)
+  !161 = !{!162, !163, !164, !165, !166, !167, !168, !169, !170, !171, !172, !173, !174, !175, !176}
+  !162 = !DIEnumerator(name: "thing", value: 0)
+  !163 = !DIEnumerator(name: "thing", value: 1)
+  !164 = !DIEnumerator(name: "thing", value: 2)
+  !165 = !DIEnumerator(name: "thing", value: 3)
+  !166 = !DIEnumerator(name: "thing", value: 4)
+  !167 = !DIEnumerator(name: "thing", value: 5)
+  !168 = !DIEnumerator(name: "thing", value: 6)
+  !169 = !DIEnumerator(name: "thing", value: 7)
+  !170 = !DIEnumerator(name: "thing", value: 8)
+  !171 = !DIEnumerator(name: "thing", value: 9)
+  !172 = !DIEnumerator(name: "thing", value: 10)
+  !173 = !DIEnumerator(name: "thing", value: 11)
+  !174 = !DIEnumerator(name: "thing", value: 12)
+  !175 = !DIEnumerator(name: "thing", value: 13)
+  !176 = !DIEnumerator(name: "thing", value: 14)
+  !177 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !178, line: 8, baseType: !136, size: 32, elements: !179)
+  !178 = !DIFile(filename: "thing", directory: "thing")
+  !179 = !{!180, !181, !182, !183}
+  !180 = !DIEnumerator(name: "thing", value: 0)
+  !181 = !DIEnumerator(name: "thing", value: 1)
+  !182 = !DIEnumerator(name: "thing", value: 2)
+  !183 = !DIEnumerator(name: "thing", value: 3)
+  !184 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !178, line: 22, baseType: !136, size: 32, elements: !185)
+  !185 = !{!186, !187}
+  !186 = !DIEnumerator(name: "thing", value: 0)
+  !187 = !DIEnumerator(name: "thing", value: 1)
+  !188 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !178, line: 27, baseType: !136, size: 32, elements: !189)
+  !189 = !{!190, !191}
+  !190 = !DIEnumerator(name: "thing", value: 21)
+  !191 = !DIEnumerator(name: "thing", value: 22)
+  !192 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !178, line: 15, baseType: !136, size: 32, elements: !193)
+  !193 = !{!194, !195, !196, !197}
+  !194 = !DIEnumerator(name: "thing", value: 0)
+  !195 = !DIEnumerator(name: "thing", value: 1)
+  !196 = !DIEnumerator(name: "thing", value: 2)
+  !197 = !DIEnumerator(name: "thing", value: 3)
+  !198 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !4, line: 895, baseType: !136, size: 32, elements: !199)
+  !199 = !{!200, !201, !202, !203, !204, !205, !206, !207, !208, !209, !210, !211, !212, !213, !214, !215, !216, !217, !218, !219, !220, !221, !222, !223, !224, !225, !226, !227, !228, !229, !230, !231, !232, !233, !234, !235, !236, !237, !238, !239, !240, !241, !242, !243, !244, !245, !246, !247, !248, !249, !250, !251, !252, !253, !254, !255, !256, !257, !258, !259, !260, !261, !262, !263, !264, !265, !266, !267, !268, !269, !270, !271, !272, !273, !274, !275, !276, !277, !278, !279, !280, !281, !282, !283, !284, !285, !286, !287, !288, !289, !290, !291, !292, !293, !294, !295, !296, !297, !298}
+  !200 = !DIEnumerator(name: "thing", value: 0)
+  !201 = !DIEnumerator(name: "thing", value: 1)
+  !202 = !DIEnumerator(name: "thing", value: 2)
+  !203 = !DIEnumerator(name: "thing", value: 3)
+  !204 = !DIEnumerator(name: "thing", value: 4)
+  !205 = !DIEnumerator(name: "thing", value: 5)
+  !206 = !DIEnumerator(name: "thing", value: 6)
+  !207 = !DIEnumerator(name: "thing", value: 7)
+  !208 = !DIEnumerator(name: "thing", value: 8)
+  !209 = !DIEnumerator(name: "thing", value: 9)
+  !210 = !DIEnumerator(name: "thing", value: 10)
+  !211 = !DIEnumerator(name: "thing", value: 11)
+  !212 = !DIEnumerator(name: "thing", value: 12)
+  !213 = !DIEnumerator(name: "thing", value: 13)
+  !214 = !DIEnumerator(name: "thing", value: 14)
+  !215 = !DIEnumerator(name: "thing", value: 15)
+  !216 = !DIEnumerator(name: "thing", value: 16)
+  !217 = !DIEnumerator(name: "thing", value: 17)
+  !218 = !DIEnumerator(name: "thing", value: 18)
+  !219 = !DIEnumerator(name: "thing", value: 19)
+  !220 = !DIEnumerator(name: "thing", value: 20)
+  !221 = !DIEnumerator(name: "thing", value: 21)
+  !222 = !DIEnumerator(name: "thing", value: 22)
+  !223 = !DIEnumerator(name: "thing", value: 23)
+  !224 = !DIEnumerator(name: "thing", value: 24)
+  !225 = !DIEnumerator(name: "thing", value: 25)
+  !226 = !DIEnumerator(name: "thing", value: 26)
+  !227 = !DIEnumerator(name: "thing", value: 27)
+  !228 = !DIEnumerator(name: "thing", value: 28)
+  !229 = !DIEnumerator(name: "thing", value: 29)
+  !230 = !DIEnumerator(name: "thing", value: 30)
+  !231 = !DIEnumerator(name: "thing", value: 31)
+  !232 = !DIEnumerator(name: "thing", value: 32)
+  !233 = !DIEnumerator(name: "thing", value: 33)
+  !234 = !DIEnumerator(name: "thing", value: 34)
+  !235 = !DIEnumerator(name: "thing", value: 35)
+  !236 = !DIEnumerator(name: "thing", value: 36)
+  !237 = !DIEnumerator(name: "thing", value: 37)
+  !238 = !DIEnumerator(name: "thing", value: 38)
+  !239 = !DIEnumerator(name: "thing", value: 39)
+  !240 = !DIEnumerator(name: "thing", value: 40)
+  !241 = !DIEnumerator(name: "thing", value: 41)
+  !242 = !DIEnumerator(name: "thing", value: 42)
+  !243 = !DIEnumerator(name: "thing", value: 43)
+  !244 = !DIEnumerator(name: "thing", value: 44)
+  !245 = !DIEnumerator(name: "thing", value: 45)
+  !246 = !DIEnumerator(name: "thing", value: 46)
+  !247 = !DIEnumerator(name: "thing", value: 47)
+  !248 = !DIEnumerator(name: "thing", value: 48)
+  !249 = !DIEnumerator(name: "thing", value: 49)
+  !250 = !DIEnumerator(name: "thing", value: 50)
+  !251 = !DIEnumerator(name: "thing", value: 51)
+  !252 = !DIEnumerator(name: "thing", value: 52)
+  !253 = !DIEnumerator(name: "thing", value: 53)
+  !254 = !DIEnumerator(name: "thing", value: 54)
+  !255 = !DIEnumerator(name: "thing", value: 55)
+  !256 = !DIEnumerator(name: "thing", value: 56)
+  !257 = !DIEnumerator(name: "thing", value: 57)
+  !258 = !DIEnumerator(name: "thing", value: 58)
+  !259 = !DIEnumerator(name: "thing", value: 59)
+  !260 = !DIEnumerator(name: "thing", value: 60)
+  !261 = !DIEnumerator(name: "thing", value: 61)
+  !262 = !DIEnumerator(name: "thing", value: 62)
+  !263 = !DIEnumerator(name: "thing", value: 63)
+  !264 = !DIEnumerator(name: "thing", value: 64)
+  !265 = !DIEnumerator(name: "thing", value: 65)
+  !266 = !DIEnumerator(name: "thing", value: 66)
+  !267 = !DIEnumerator(name: "thing", value: 67)
+  !268 = !DIEnumerator(name: "thing", value: 68)
+  !269 = !DIEnumerator(name: "thing", value: 69)
+  !270 = !DIEnumerator(name: "thing", value: 70)
+  !271 = !DIEnumerator(name: "thing", value: 71)
+  !272 = !DIEnumerator(name: "thing", value: 72)
+  !273 = !DIEnumerator(name: "thing", value: 73)
+  !274 = !DIEnumerator(name: "thing", value: 74)
+  !275 = !DIEnumerator(name: "thing", value: 75)
+  !276 = !DIEnumerator(name: "thing", value: 76)
+  !277 = !DIEnumerator(name: "thing", value: 77)
+  !278 = !DIEnumerator(name: "thing", value: 78)
+  !279 = !DIEnumerator(name: "thing", value: 79)
+  !280 = !DIEnumerator(name: "thing", value: 80)
+  !281 = !DIEnumerator(name: "thing", value: 81)
+  !282 = !DIEnumerator(name: "thing", value: 82)
+  !283 = !DIEnumerator(name: "thing", value: 83)
+  !284 = !DIEnumerator(name: "thing", value: 84)
+  !285 = !DIEnumerator(name: "thing", value: 85)
+  !286 = !DIEnumerator(name: "thing", value: 86)
+  !287 = !DIEnumerator(name: "thing", value: 87)
+  !288 = !DIEnumerator(name: "thing", value: 88)
+  !289 = !DIEnumerator(name: "thing", value: 89)
+  !290 = !DIEnumerator(name: "thing", value: 90)
+  !291 = !DIEnumerator(name: "thing", value: 91)
+  !292 = !DIEnumerator(name: "thing", value: 92)
+  !293 = !DIEnumerator(name: "thing", value: 93)
+  !294 = !DIEnumerator(name: "thing", value: 94)
+  !295 = !DIEnumerator(name: "thing", value: 95)
+  !296 = !DIEnumerator(name: "thing", value: 96)
+  !297 = !DIEnumerator(name: "thing", value: 97)
+  !298 = !DIEnumerator(name: "thing", value: 65535)
+  !299 = !{!300, !302, !305}
+  !300 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !301, line: 39, baseType: !302)
+  !301 = !DIFile(filename: "thing", directory: "thing")
+  !302 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !303, line: 193, baseType: !304)
+  !303 = !DIFile(filename: "thing", directory: "thing")
+  !304 = !DIBasicType(name: "thing", size: 32, encoding: DW_ATE_signed)
+  !305 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 32)
+  !306 = !{}
+  !307 = !{i32 7, !"Dwarf Version", i32 4}
+  !308 = !{i32 2, !"Debug Info Version", i32 3}
+  !309 = !{i32 1, !"wchar_size", i32 4}
+  !310 = !{i32 1, !"min_enum_size", i32 4}
+  !311 = !{i32 8, !"branch-target-enforcement", i32 0}
+  !312 = !{i32 8, !"sign-return-address", i32 0}
+  !313 = !{i32 8, !"sign-return-address-all", i32 0}
+  !314 = !{i32 8, !"sign-return-address-with-bkey", i32 0}
+  !315 = !{i32 7, !"frame-pointer", i32 2}
+  !316 = !{!"Apple clang version 14.0.3 (clang-1403.0.22.8)"}
+  !317 = distinct !DISubprogram(name: "thing", scope: !1, file: !1, line: 62, type: !318, scopeLine: 62, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !321)
+  !318 = !DISubroutineType(types: !319)
+  !319 = !{null, !320}
+  !320 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !4, line: 513, baseType: !39)
+  !321 = !{!322}
+  !322 = !DILocalVariable(name: "thing", arg: 1, scope: !317, file: !1, line: 62, type: !320)
+  !323 = !DILocation(line: 0, scope: !317)
+  !324 = !DILocation(line: 63, column: 5, scope: !317)
+  !325 = !DILocation(line: 68, column: 13, scope: !326)
+  !326 = distinct !DILexicalBlock(scope: !317, file: !1, line: 63, column: 20)
+  !327 = !DILocation(line: 69, column: 13, scope: !326)
+  !328 = !DILocation(line: 72, column: 13, scope: !326)
+  !329 = !DILocation(line: 73, column: 13, scope: !326)
+  !330 = !DILocation(line: 76, column: 13, scope: !326)
+  !331 = !DILocation(line: 77, column: 13, scope: !326)
+  !332 = !DILocation(line: 80, column: 13, scope: !326)
+  !333 = !DILocation(line: 81, column: 13, scope: !326)
+  !334 = !DILocation(line: 84, column: 13, scope: !326)
+  !335 = !DILocation(line: 85, column: 13, scope: !326)
+  !336 = !DILocation(line: 88, column: 13, scope: !326)
+  !337 = !DILocation(line: 89, column: 13, scope: !326)
+  !338 = !DILocation(line: 92, column: 13, scope: !326)
+  !339 = !DILocation(line: 93, column: 13, scope: !326)
+  !340 = !DILocation(line: 96, column: 13, scope: !326)
+  !341 = !DILocation(line: 97, column: 13, scope: !326)
+  !342 = !DILocation(line: 100, column: 13, scope: !326)
+  !343 = !DILocation(line: 101, column: 13, scope: !326)
+  !344 = !DILocation(line: 104, column: 13, scope: !326)
+  !345 = !DILocation(line: 105, column: 13, scope: !326)
+  !346 = !DILocation(line: 108, column: 13, scope: !326)
+  !347 = !DILocation(line: 109, column: 13, scope: !326)
+  !348 = !DILocation(line: 112, column: 13, scope: !326)
+  !349 = !DILocation(line: 113, column: 13, scope: !326)
+  !350 = !DILocation(line: 116, column: 13, scope: !326)
+  !351 = !DILocation(line: 117, column: 13, scope: !326)
+  !352 = !DILocation(line: 120, column: 13, scope: !326)
+  !353 = !DILocation(line: 121, column: 13, scope: !326)
+  !354 = !DILocation(line: 124, column: 13, scope: !326)
+  !355 = !DILocation(line: 125, column: 13, scope: !326)
+  !356 = !DILocation(line: 128, column: 13, scope: !326)
+  !357 = !DILocation(line: 129, column: 13, scope: !326)
+  !358 = !DILocation(line: 132, column: 13, scope: !326)
+  !359 = !DILocation(line: 133, column: 13, scope: !326)
+  !360 = !DILocation(line: 136, column: 13, scope: !326)
+  !361 = !DILocation(line: 137, column: 13, scope: !326)
+  !362 = !DILocation(line: 140, column: 13, scope: !326)
+  !363 = !DILocation(line: 141, column: 13, scope: !326)
+  !364 = !DILocation(line: 144, column: 13, scope: !326)
+  !365 = !DILocation(line: 145, column: 13, scope: !326)
+  !366 = !DILocation(line: 148, column: 13, scope: !326)
+  !367 = !DILocation(line: 149, column: 13, scope: !326)
+  !368 = !DILocation(line: 152, column: 13, scope: !326)
+  !369 = !DILocation(line: 153, column: 13, scope: !326)
+  !370 = !DILocation(line: 156, column: 13, scope: !326)
+  !371 = !DILocation(line: 157, column: 13, scope: !326)
+  !372 = !DILocation(line: 160, column: 13, scope: !326)
+  !373 = !DILocation(line: 161, column: 13, scope: !326)
+  !374 = !DILocation(line: 164, column: 13, scope: !326)
+  !375 = !DILocation(line: 165, column: 13, scope: !326)
+  !376 = !DILocation(line: 168, column: 13, scope: !326)
+  !377 = !DILocation(line: 169, column: 13, scope: !326)
+  !378 = !DILocation(line: 172, column: 13, scope: !326)
+  !379 = !DILocation(line: 173, column: 13, scope: !326)
+  !380 = !DILocation(line: 176, column: 13, scope: !326)
+  !381 = !DILocation(line: 177, column: 13, scope: !326)
+  !382 = !DILocation(line: 180, column: 13, scope: !326)
+  !383 = !DILocation(line: 181, column: 13, scope: !326)
+  !384 = !DILocation(line: 184, column: 13, scope: !326)
+  !385 = !DILocation(line: 185, column: 13, scope: !326)
+  !386 = !DILocation(line: 188, column: 13, scope: !326)
+  !387 = !DILocation(line: 189, column: 13, scope: !326)
+  !388 = !DILocation(line: 192, column: 13, scope: !389)
+  !389 = distinct !DILexicalBlock(scope: !390, file: !1, line: 192, column: 13)
+  !390 = distinct !DILexicalBlock(scope: !391, file: !1, line: 192, column: 13)
+  !391 = distinct !DILexicalBlock(scope: !326, file: !1, line: 192, column: 13)
+  !392 = !DILocation(line: 193, column: 5, scope: !326)
+  !393 = !DILocation(line: 194, column: 1, scope: !317)
+  !394 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 37, type: !395, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !395 = !DISubroutineType(types: !396)
+  !396 = !{null, !397}
+  !397 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !303, line: 266, baseType: !5)
+  !398 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 38, type: !395, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !399 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 39, type: !395, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !400 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 40, type: !401, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !401 = !DISubroutineType(types: !402)
+  !402 = !{null, !403, !404}
+  !403 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !178, line: 13, baseType: !177)
+  !404 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !178, line: 25, baseType: !184)
+  !405 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 41, type: !406, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !406 = !DISubroutineType(types: !407)
+  !407 = !{null, !408, !404}
+  !408 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !178, line: 30, baseType: !188)
+  !409 = !DISubprogram(name: "thing", scope: !178, file: !178, line: 42, type: !410, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !410 = !DISubroutineType(types: !411)
+  !411 = !{null, !412, !404}
+  !412 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !178, line: 20, baseType: !192)
+  !413 = !DISubprogram(name: "thing", scope: !414, file: !414, line: 29, type: !415, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !306)
+  !414 = !DIFile(filename: "thing", directory: "thing")
+  !415 = !DISubroutineType(types: !416)
+  !416 = !{null, !417}
+  !417 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !418)
+  !418 = !DIDerivedType(tag: DW_TAG_typedef, name: "thing", file: !303, line: 243, baseType: !419)
+  !419 = !DIBasicType(name: "thing", size: 16, encoding: DW_ATE_unsigned)
+
+...
+---
+name:            handle_notify_event
+alignment:       2
+exposesReturnsTwice: false
+legalized:       false
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+failsVerification: false
+tracksDebugUserValues: true
+registers:       []
+liveins:
+  - { reg: '$r0', virtual-reg: '' }
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       8
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    true
+  hasCalls:        true
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 0
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:      []
+stack:
+  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 
+      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false, 
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 
+      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, 
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo: {}
+jumpTable:
+  kind:            inline
+  entries:
+    - id:              0
+      blocks:          [ '%bb.37', '%bb.5', '%bb.36', '%bb.38', '%bb.40', 
+                         '%bb.41', '%bb.42', '%bb.43', '%bb.36', '%bb.36', 
+                         '%bb.36', '%bb.36', '%bb.36', '%bb.36', '%bb.36', 
+                         '%bb.36', '%bb.36', '%bb.36', '%bb.36', '%bb.44', 
+                         '%bb.46', '%bb.47', '%bb.48', '%bb.49' ]
+    - id:              1
+      blocks:          [ '%bb.2', '%bb.6', '%bb.7', '%bb.8', '%bb.36', 
+                         '%bb.10', '%bb.11', '%bb.14', '%bb.15', '%bb.17', 
+                         '%bb.18', '%bb.21', '%bb.22', '%bb.24', '%bb.25', 
+                         '%bb.26', '%bb.27', '%bb.29', '%bb.30', '%bb.33', 
+                         '%bb.34' ]
+body:             |
+  bb.0 (%ir-block.1):
+    successors: %bb.3(0x307c1f08), %bb.1(0x4f83e0f8)
+    liveins: $r0, $lr
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(), debug-location !323
+    frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
+    frame-setup CFI_INSTRUCTION def_cfa_offset 8
+    frame-setup CFI_INSTRUCTION offset $lr, -4
+    frame-setup CFI_INSTRUCTION offset $r7, -8
+    $r7 = frame-setup tADDrSPi $sp, 0, 14 /* CC::al */, $noreg
+    frame-setup CFI_INSTRUCTION def_cfa_register $r7
+    $r1 = tMOVr $r0, 14 /* CC::al */, $noreg, debug-location !324
+    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 68, 14 /* CC::al */, $noreg, debug-location !324
+    tCMPi8 renamable $r1, 20, 14 /* CC::al */, $noreg, implicit-def $cpsr, debug-location !324
+    tBcc %bb.3, 8 /* CC::hi */, killed $cpsr, debug-location !324
+  
+  bb.1 (%ir-block.1):
+    successors: %bb.2(0x064cbe24), %bb.6(0x064cbe24), %bb.7(0x064cbe24), %bb.8(0x064cbe24), %bb.36(0x0201253a), %bb.10(0x064cbe24), %bb.11(0x064cbe24), %bb.14(0x064cbe24), %bb.15(0x064cbe24), %bb.17(0x064cbe24), %bb.18(0x064cbe24), %bb.21(0x064cbe24), %bb.22(0x064cbe24), %bb.24(0x064cbe24), %bb.25(0x064cbe24), %bb.26(0x064cbe24), %bb.27(0x064cbe24), %bb.29(0x064cbe24), %bb.30(0x064cbe24), %bb.33(0x064cbe24), %bb.34(0x064cbe24)
+    liveins: $r1
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(), debug-location !323
+    renamable $r0, dead $cpsr = tLSLri killed renamable $r1, 2, 14 /* CC::al */, $noreg
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1 = tLEApcrelJT %jump-table.1, 14 /* CC::al */, $noreg
+    renamable $r0 = tLDRr renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg :: (load (s32) from jump-table)
+    renamable $r0, dead $cpsr = tADDrr killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg
+    tBR_JTr killed renamable $r0, %jump-table.1
+    ; CHECK: tTBB_JT $pc, killed $r1, %jump-table.1, 0
+  
+  bb.2 (%ir-block.14):
+    successors: %bb.12(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.12, 14 /* CC::al */, $noreg
+  
+  bb.3 (%ir-block.1):
+    successors: %bb.36(0x04ec4ec5), %bb.4(0x7b13b13b)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(), debug-location !323
+    tCMPi8 renamable $r0, 23, 14 /* CC::al */, $noreg, implicit-def $cpsr
+    tBcc %bb.36, 8 /* CC::hi */, killed $cpsr
+  
+  bb.4 (%ir-block.1):
+    successors: %bb.37(0x0a7e91a6), %bb.5(0x0a7e91a6), %bb.36(0x02112c34), %bb.38(0x0a7e91a6), %bb.40(0x0a7e91a6), %bb.41(0x0a7e91a6), %bb.42(0x0a7e91a6), %bb.43(0x0a7e91a6), %bb.44(0x0a7e91a6), %bb.46(0x0a7e91a6), %bb.47(0x0a7e91a6), %bb.48(0x0a7e91a6), %bb.49(0x0a7e91a6)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(), debug-location !323
+    renamable $r0, dead $cpsr = tLSLri killed renamable $r0, 2, 14 /* CC::al */, $noreg
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1 = tLEApcrelJT %jump-table.0, 14 /* CC::al */, $noreg
+    renamable $r0 = tLDRr renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg :: (load (s32) from jump-table)
+    renamable $r0, dead $cpsr = tADDrr killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg
+    tBR_JTr killed renamable $r0, %jump-table.0
+    ; CHECK: tTBB_JT $pc, killed $r0, %jump-table.0, 1
+  
+  bb.5 (%ir-block.3):
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tBL 14 /* CC::al */, $noreg, @system_set_spmi_event_low, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp, debug-location !325
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.6 (%ir-block.15):
+    successors: %bb.9(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+    tB %bb.9, 14 /* CC::al */, $noreg
+  
+  bb.7 (%ir-block.16):
+    successors: %bb.9(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.9, 14 /* CC::al */, $noreg
+  
+  bb.8 (%ir-block.17):
+    successors: %bb.9(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+  
+  bb.9 (%ir-block.35):
+    successors: %bb.13(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.13, 14 /* CC::al */, $noreg
+  
+  bb.10 (%ir-block.18):
+    successors: %bb.16(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.16, 14 /* CC::al */, $noreg
+  
+  bb.11 (%ir-block.19):
+    successors: %bb.12(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+  
+  bb.12 (%ir-block.35):
+    successors: %bb.13(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    $r1 = tMOVr $r0, 14 /* CC::al */, $noreg, debug-location !DILocation(line: 0, scope: !326)
+    tB %bb.13, 14 /* CC::al */, $noreg
+  
+  bb.14 (%ir-block.20):
+    successors: %bb.16(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.16, 14 /* CC::al */, $noreg
+  
+  bb.15 (%ir-block.21):
+    successors: %bb.16(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+  
+  bb.16 (%ir-block.35):
+    successors: %bb.13(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+  
+  bb.13 (%ir-block.35):
+    liveins: $r0, $r1
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    tBL 14 /* CC::al */, $noreg, @system_change_cpu_gpu_trigger_state, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $sp, debug-location !DILocation(line: 0, scope: !326)
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.17 (%ir-block.22):
+    successors: %bb.19(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 21, 14 /* CC::al */, $noreg
+    tB %bb.19, 14 /* CC::al */, $noreg
+  
+  bb.18 (%ir-block.23):
+    successors: %bb.19(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 22, 14 /* CC::al */, $noreg
+  
+  bb.19 (%ir-block.35):
+    successors: %bb.20(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.20, 14 /* CC::al */, $noreg
+  
+  bb.21 (%ir-block.24):
+    successors: %bb.23(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 21, 14 /* CC::al */, $noreg
+    tB %bb.23, 14 /* CC::al */, $noreg
+  
+  bb.22 (%ir-block.25):
+    successors: %bb.23(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 22, 14 /* CC::al */, $noreg
+  
+  bb.23 (%ir-block.35):
+    successors: %bb.20(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+  
+  bb.20 (%ir-block.35):
+    liveins: $r0, $r1
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    tBL 14 /* CC::al */, $noreg, @system_change_gpio_trigger_state, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $sp, debug-location !DILocation(line: 0, scope: !326)
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.24 (%ir-block.26):
+    successors: %bb.31(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.31, 14 /* CC::al */, $noreg
+  
+  bb.25 (%ir-block.27):
+    successors: %bb.28(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+    tB %bb.28, 14 /* CC::al */, $noreg
+  
+  bb.26 (%ir-block.28):
+    successors: %bb.28(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.28, 14 /* CC::al */, $noreg
+  
+  bb.27 (%ir-block.29):
+    successors: %bb.28(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+  
+  bb.28 (%ir-block.35):
+    successors: %bb.32(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.32, 14 /* CC::al */, $noreg
+  
+  bb.29 (%ir-block.30):
+    successors: %bb.35(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.35, 14 /* CC::al */, $noreg
+  
+  bb.30 (%ir-block.31):
+    successors: %bb.31(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+  
+  bb.31 (%ir-block.35):
+    successors: %bb.32(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    $r1 = tMOVr $r0, 14 /* CC::al */, $noreg, debug-location !DILocation(line: 0, scope: !326)
+    tB %bb.32, 14 /* CC::al */, $noreg
+  
+  bb.33 (%ir-block.32):
+    successors: %bb.35(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.35, 14 /* CC::al */, $noreg
+  
+  bb.34 (%ir-block.33):
+    successors: %bb.35(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+  
+  bb.35 (%ir-block.35):
+    successors: %bb.32(0x80000000)
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r1, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+  
+  bb.32 (%ir-block.35):
+    liveins: $r0, $r1
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    tBL 14 /* CC::al */, $noreg, @system_change_throttle_trigger_state, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $sp, debug-location !DILocation(line: 0, scope: !326)
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.36 (%ir-block.34):
+    successors: %bb.37(0x80000000)
+  
+    renamable $r0, dead $cpsr = tMOVi8 11, 14 /* CC::al */, $noreg
+    tBL 14 /* CC::al */, $noreg, @assert_handler, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp, debug-location !388
+  
+  bb.37 (%ir-block.35):
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.38 (%ir-block.4):
+    successors: %bb.39(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.39, 14 /* CC::al */, $noreg
+  
+  bb.40 (%ir-block.5):
+    successors: %bb.39(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+    tB %bb.39, 14 /* CC::al */, $noreg
+  
+  bb.41 (%ir-block.6):
+    successors: %bb.39(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.39, 14 /* CC::al */, $noreg
+  
+  bb.42 (%ir-block.7):
+    successors: %bb.39(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+    tB %bb.39, 14 /* CC::al */, $noreg
+  
+  bb.43 (%ir-block.8):
+    successors: %bb.39(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
+  
+  bb.39 (%ir-block.4):
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    tBL 14 /* CC::al */, $noreg, @system_assert_virtual_wire, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp, debug-location !DILocation(line: 0, scope: !326)
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+  
+  bb.44 (%ir-block.9):
+    successors: %bb.45(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
+    tB %bb.45, 14 /* CC::al */, $noreg
+  
+  bb.46 (%ir-block.10):
+    successors: %bb.45(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
+    tB %bb.45, 14 /* CC::al */, $noreg
+  
+  bb.47 (%ir-block.11):
+    successors: %bb.45(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
+    tB %bb.45, 14 /* CC::al */, $noreg
+  
+  bb.48 (%ir-block.12):
+    successors: %bb.45(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
+    tB %bb.45, 14 /* CC::al */, $noreg
+  
+  bb.49 (%ir-block.13):
+    successors: %bb.45(0x80000000)
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
+  
+  bb.45 (%ir-block.9):
+    liveins: $r0
+  
+    DBG_VALUE $r0, $noreg, !322, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !323
+    tBL 14 /* CC::al */, $noreg, @system_deassert_virtual_wire, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp, debug-location !DILocation(line: 0, scope: !326)
+    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit-def $sp, implicit $sp, debug-location !393
+
+...


        


More information about the llvm-commits mailing list