|
| 1 | +; RUN: llc -O2 -experimental-debug-variable-locations %s -stop-after=livedebugvalues -mtriple=arm64-apple-macosx15.0.0 -o - | FileCheck %s |
| 2 | + |
| 3 | +; CHECK: $w{{[0-9]+}} = ORRWrs $wzr, killed $w{{[0-9]+}}, 0 |
| 4 | +; CHECK-NEXT: DBG_INSTR_REF !{{[0-9]+}}, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(3, 0), debug-location !{{[0-9]+}} |
| 5 | + |
| 6 | +; This test makes sure that instruction referenced livedebugvalues pass doesn't crash when an ORRWrr is present before |
| 7 | +; aarch64-isel and is converted to an ORRWrs with a shift amount immediate value of 0 before livedebugvalues, in this |
| 8 | +; test case the MIR before both passes is shown below: |
| 9 | + |
| 10 | +; Before aarch64-isel |
| 11 | +; %11:gpr32 = ORRWrr $wzr, killed %10:gpr32, debug-location !5; :0 |
| 12 | +; %0:gpr64all = SUBREG_TO_REG 0, killed %11:gpr32, %subreg.sub_32, debug-location !5; :0 |
| 13 | +; DBG_INSTR_REF !7, !DIExpression(DW_OP_LLVM_arg, 0), %0:gpr64all, debug-location !11; :0 @[ :0 ] line no:0 |
| 14 | + |
| 15 | +; Before livedebugvalues |
| 16 | +; $w0 = ORRWrs $wzr, killed $w3, 0 |
| 17 | +; DBG_INSTR_REF !7, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(3, 0), debug-location !11; :0 @[ :0 ] line no:0 |
| 18 | + |
| 19 | +; The livedebugvalues pass will consider the ORRWrs variant as a copy, therefore the aarch64-isel call to |
| 20 | +; salvageCopySSA should do the same. |
| 21 | + |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | +%"class.llvm::iterator_range.53" = type { %"class.llvm::opt::arg_iterator.54", %"class.llvm::opt::arg_iterator.54" } |
| 26 | +%"class.llvm::opt::arg_iterator.54" = type { %"class.std::__1::reverse_iterator", %"class.std::__1::reverse_iterator", [2 x %"class.llvm::opt::OptSpecifier"] } |
| 27 | +%"class.std::__1::reverse_iterator" = type { ptr, ptr } |
| 28 | +%"class.llvm::opt::OptSpecifier" = type { i32 } |
| 29 | +declare noundef zeroext i1 @_ZNK4llvm3opt6Option7matchesENS0_12OptSpecifierE(ptr noundef nonnull align 8 dereferenceable(16), i64) local_unnamed_addr #1 |
| 30 | +define noundef zeroext i1 @_ZNK4llvm3opt7ArgList14hasFlagNoClaimENS0_12OptSpecifierES2_b(ptr noundef nonnull align 8 dereferenceable(184) %this, i64 %Pos.coerce, i64 %Neg.coerce, i1 noundef zeroext %Default) local_unnamed_addr #2 !dbg !9383 { |
| 31 | +entry: |
| 32 | + %ref.tmp.i = alloca %"class.llvm::iterator_range.53", align 8 |
| 33 | + %coerce.val.ii6 = and i64 %Pos.coerce, 4294967295, !dbg !9393 |
| 34 | + #dbg_value(i64 %coerce.val.ii6, !9452, !DIExpression(), !9480) |
| 35 | + %__begin0.sroa.4.0.ref.tmp.sroa_idx.i = getelementptr inbounds i8, ptr %ref.tmp.i, i64 8, !dbg !9489 |
| 36 | + %__begin0.sroa.4.0.copyload.i = load ptr, ptr %__begin0.sroa.4.0.ref.tmp.sroa_idx.i, align 8, !dbg !9489 |
| 37 | + %__end0.sroa.4.0.end_iterator.i.sroa_idx.i = getelementptr inbounds i8, ptr %ref.tmp.i, i64 48, !dbg !9495 |
| 38 | + %__end0.sroa.4.0.copyload.i = load ptr, ptr %__end0.sroa.4.0.end_iterator.i.sroa_idx.i, align 8, !dbg !9495 |
| 39 | + %cmp.i.i.i.not.i = icmp eq ptr %__begin0.sroa.4.0.copyload.i, %__end0.sroa.4.0.copyload.i, !dbg !9522 |
| 40 | + br i1 %cmp.i.i.i.not.i, label %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit.thread, label %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit, !dbg !9523 |
| 41 | +_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit.thread: ; preds = %entry |
| 42 | + br label %1, !dbg !9525 |
| 43 | +_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit: ; preds = %entry |
| 44 | + %incdec.ptr.i.i.i = getelementptr inbounds i8, ptr %__begin0.sroa.4.0.copyload.i, i64 -8, !dbg !9526 |
| 45 | + %0 = load ptr, ptr %incdec.ptr.i.i.i, align 8, !dbg !9527, !tbaa !9528 |
| 46 | + %tobool.not.not = icmp eq ptr %0, null, !dbg !9525 |
| 47 | + br i1 %tobool.not.not, label %1, label %cleanup, !dbg !9525 |
| 48 | +cleanup: ; preds = %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit |
| 49 | + %call13 = call noundef zeroext i1 @_ZNK4llvm3opt6Option7matchesENS0_12OptSpecifierE(ptr noundef nonnull align 8 dereferenceable(16) %0, i64 %coerce.val.ii6) #3, !dbg !9533 |
| 50 | + br label %1 |
| 51 | + %2 = phi i1 [ %call13, %cleanup ], [ %Default, %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit ], [ %Default, %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit.thread ] |
| 52 | + ret i1 %2, !dbg !9534 |
| 53 | +} |
| 54 | +!llvm.module.flags = !{ !2, !6} |
| 55 | +!llvm.dbg.cu = !{!7} |
| 56 | +!2 = !{i32 2, !"Debug Info Version", i32 3} |
| 57 | +!6 = !{i32 7, !"frame-pointer", i32 1} |
| 58 | +!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, emissionKind: FullDebug, sdk: "MacOSX15.3.sdk") |
| 59 | +!8 = !DIFile(filename: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/llvm/lib/Option/ArgList.cpp", directory: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/build-instr-ref-stage2", checksumkind: CSK_MD5, checksum: "a3198e8ace679c7b1581a26b5583c658") |
| 60 | +!3116 = distinct !DICompositeType(tag: DW_TAG_class_type, size: 32) |
| 61 | +!9383 = distinct !DISubprogram( unit: !7, flags: DIFlagArtificial | DIFlagObjectPointer) |
| 62 | +!9391 = distinct !DILexicalBlock(scope: !9383, line: 80, column: 12) |
| 63 | +!9393 = !DILocation( scope: !9391) |
| 64 | +!9395 = distinct !DISubprogram( unit: !7, retainedNodes: !9396) |
| 65 | +!9396 = !{} |
| 66 | +!9400 = distinct !DILocation( scope: !9401, inlinedAt: !9439) |
| 67 | +!9401 = distinct !DISubprogram( unit: !7, retainedNodes: !9436) |
| 68 | +!9436 = !{} |
| 69 | +!9439 = distinct !DILocation( scope: !9440, inlinedAt: !9478) |
| 70 | +!9440 = distinct !DILexicalBlock(scope: !9441, line: 269, column: 5) |
| 71 | +!9441 = distinct !DILexicalBlock(scope: !9442, line: 269, column: 5) |
| 72 | +!9442 = distinct !DISubprogram( unit: !7, retainedNodes: !9450) |
| 73 | +!9450 = !{} |
| 74 | +!9452 = !DILocalVariable( scope: !9442, type: !3116) |
| 75 | +!9478 = distinct !DILocation( scope: !9391) |
| 76 | +!9480 = !DILocation( scope: !9441, inlinedAt: !9478) |
| 77 | +!9484 = distinct !DISubprogram( unit: !7, retainedNodes: !9485) |
| 78 | +!9485 = !{} |
| 79 | +!9488 = distinct !DILocation( scope: !9441, inlinedAt: !9478) |
| 80 | +!9489 = !DILocation( scope: !9484, inlinedAt: !9488) |
| 81 | +!9491 = distinct !DISubprogram( unit: !7, retainedNodes: !9492) |
| 82 | +!9492 = !{} |
| 83 | +!9494 = distinct !DILocation( scope: !9441, inlinedAt: !9478) |
| 84 | +!9495 = !DILocation( scope: !9491, inlinedAt: !9494) |
| 85 | +!9497 = distinct !DISubprogram( unit: !7, retainedNodes: !9500) |
| 86 | +!9500 = !{} |
| 87 | +!9503 = distinct !DILocation( scope: !9441, inlinedAt: !9478) |
| 88 | +!9505 = distinct !DISubprogram( unit: !7, retainedNodes: !9509) |
| 89 | +!9509 = !{} |
| 90 | +!9515 = distinct !DILocation( scope: !9516, inlinedAt: !9520) |
| 91 | +!9516 = distinct !DISubprogram( unit: !7, retainedNodes: !9517) |
| 92 | +!9517 = !{} |
| 93 | +!9520 = distinct !DILocation( scope: !9497, inlinedAt: !9503) |
| 94 | +!9522 = !DILocation( scope: !9505, inlinedAt: !9515) |
| 95 | +!9523 = !DILocation( scope: !9441, inlinedAt: !9478) |
| 96 | +!9525 = !DILocation( scope: !9391) |
| 97 | +!9526 = !DILocation( scope: !9395, inlinedAt: !9400) |
| 98 | +!9527 = !DILocation( scope: !9440, inlinedAt: !9478) |
| 99 | +!9528 = !{!"any pointer", !9530, i64 0} |
| 100 | +!9530 = !{} |
| 101 | +!9533 = !DILocation( scope: !9391) |
| 102 | +!9534 = !DILocation( scope: !9383) |
0 commit comments