Author: Alex Bradbury
Date: 2025-11-27T18:38:25Z
New Revision: 78686bbf84f50f328ba1e9315b47cd51793dc836

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

LOG: Revert "[ShrinkWrap] Modify shrink wrapping to accommodate functions 
terminat…"

This reverts commit 650eeb867fa95435b7c123e6630eb98934ac5bf3.

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/MachineBasicBlock.h
    llvm/lib/CodeGen/ShrinkWrap.cpp
    llvm/test/CodeGen/AArch64/arm64-shrink-wrapping.ll

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h 
b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
index 1dd649347474d..a1023d4c32ce4 100644
--- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h
+++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
@@ -988,13 +988,6 @@ class MachineBasicBlock
     return !empty() && back().isEHScopeReturn();
   }
 
-  /// Convenience function that returns true if the block exits the function
-  /// without returning.
-  bool isNoReturnBlock() const {
-    return !empty() && succ_empty() && !back().isReturn() &&
-           !back().isIndirectBranch();
-  }
-
   /// Split a basic block into 2 pieces at \p SplitPoint. A new block will be
   /// inserted after this block, and all instructions after \p SplitInst moved
   /// to it (\p SplitInst will be in the original block). If \p LIS is 
provided,

diff  --git a/llvm/lib/CodeGen/ShrinkWrap.cpp b/llvm/lib/CodeGen/ShrinkWrap.cpp
index c2221cacc5bd5..83581052560cb 100644
--- a/llvm/lib/CodeGen/ShrinkWrap.cpp
+++ b/llvm/lib/CodeGen/ShrinkWrap.cpp
@@ -697,12 +697,14 @@ void 
ShrinkWrapImpl::updateSaveRestorePoints(MachineBasicBlock &MBB,
 
   if (!Restore)
     Restore = &MBB;
-  else if (MBB.isNoReturnBlock()) {
-    // MBB exits the function without returning, so we don't need an epilogue
-    // here. This is common for things like cleanup landing pads etc. In these
-    // cases, we can skip updating `Restore`.
-  } else
+  else if (MPDT->getNode(&MBB)) // If the block is not in the post dom tree, it
+                                // means the block never returns. If that's the
+                                // case, we don't want to call
+                                // `findNearestCommonDominator`, which will
+                                // return `Restore`.
     Restore = MPDT->findNearestCommonDominator(Restore, &MBB);
+  else
+    Restore = nullptr; // Abort, we can't find a restore point in this case.
 
   // Make sure we would be able to insert the restore code before the
   // terminator.

diff  --git a/llvm/test/CodeGen/AArch64/arm64-shrink-wrapping.ll 
b/llvm/test/CodeGen/AArch64/arm64-shrink-wrapping.ll
index 9d0aea8ce0f76..5806bcf0dacf1 100644
--- a/llvm/test/CodeGen/AArch64/arm64-shrink-wrapping.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-shrink-wrapping.ll
@@ -1192,182 +1192,3 @@ false:
 
   ret void
 }
-
-@exception = external hidden constant { ptr, ptr, ptr }
-
-define noundef i32 @call_with_no_ret(i32 %in) personality ptr 
@__gxx_personality_v0 {
-; ENABLE-LABEL: call_with_no_ret:
-; ENABLE:       Lfunc_begin0:
-; ENABLE-NEXT:    .cfi_startproc
-; ENABLE-NEXT:    .cfi_personality 155, ___gxx_personality_v0
-; ENABLE-NEXT:    .cfi_lsda 16, Lexception0
-; ENABLE-NEXT:  ; %bb.0: ; %entry
-; ENABLE-NEXT:    cmp w0, #1
-; ENABLE-NEXT:    b.eq LBB15_2
-; ENABLE-NEXT:  ; %bb.1: ; %exit
-; ENABLE-NEXT:    mov w0, wzr
-; ENABLE-NEXT:    ret
-; ENABLE-NEXT:  LBB15_2: ; %setup
-; ENABLE-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
-; ENABLE-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; ENABLE-NEXT:    add x29, sp, #16
-; ENABLE-NEXT:    .cfi_def_cfa w29, 16
-; ENABLE-NEXT:    .cfi_offset w30, -8
-; ENABLE-NEXT:    .cfi_offset w29, -16
-; ENABLE-NEXT:    .cfi_offset w19, -24
-; ENABLE-NEXT:    .cfi_offset w20, -32
-; ENABLE-NEXT:    mov w0, #32 ; =0x20
-; ENABLE-NEXT:    bl ___cxa_allocate_exception
-; ENABLE-NEXT:  Ltmp0: ; EH_LABEL
-; ENABLE-NEXT:    bl _construct_exception
-; ENABLE-NEXT:  Ltmp1: ; EH_LABEL
-; ENABLE-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
-; ENABLE-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
-; ENABLE-NEXT:  ; %bb.3: ; %throw
-; ENABLE-NEXT:  Lloh0:
-; ENABLE-NEXT:    adrp x2, _destruct_exception@GOTPAGE
-; ENABLE-NEXT:  Lloh1:
-; ENABLE-NEXT:    ldr x2, [x2, _destruct_exception@GOTPAGEOFF]
-; ENABLE-NEXT:  Lloh2:
-; ENABLE-NEXT:    adrp x1, _exception@PAGE
-; ENABLE-NEXT:  Lloh3:
-; ENABLE-NEXT:    add x1, x1, _exception@PAGEOFF
-; ENABLE-NEXT:    mov x0, x19
-; ENABLE-NEXT:    bl ___cxa_throw
-; ENABLE-NEXT:  LBB15_4: ; %teardown
-; ENABLE-NEXT:  Ltmp2: ; EH_LABEL
-; ENABLE-NEXT:    mov x20, x0
-; ENABLE-NEXT:    mov x0, x19
-; ENABLE-NEXT:    bl ___cxa_free_exception
-; ENABLE-NEXT:    mov x0, x20
-; ENABLE-NEXT:    bl __Unwind_Resume
-; ENABLE-NEXT:    .loh AdrpAdd Lloh2, Lloh3
-; ENABLE-NEXT:    .loh AdrpLdrGot Lloh0, Lloh1
-; ENABLE-NEXT:  Lfunc_end0:
-; ENABLE-NEXT:    .cfi_endproc
-; ENABLE-NEXT:    .section __TEXT,__gcc_except_tab
-; ENABLE-NEXT:    .p2align 2, 0x0
-; ENABLE-NEXT:  GCC_except_table15:
-; ENABLE-NEXT:  Lexception0:
-; ENABLE-NEXT:    .byte 255 ; @LPStart Encoding = omit
-; ENABLE-NEXT:    .byte 255 ; @TType Encoding = omit
-; ENABLE-NEXT:    .byte 1 ; Call site Encoding = uleb128
-; ENABLE-NEXT:    .uleb128 Lcst_end0-Lcst_begin0
-; ENABLE-NEXT:  Lcst_begin0:
-; ENABLE-NEXT:    .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
-; ENABLE-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and 
Ltmp0
-; ENABLE-NEXT:    .byte 0 ; has no landing pad
-; ENABLE-NEXT:    .byte 0 ; On action: cleanup
-; ENABLE-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
-; ENABLE-NEXT:    .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
-; ENABLE-NEXT:    .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
-; ENABLE-NEXT:    .byte 0 ; On action: cleanup
-; ENABLE-NEXT:    .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
-; ENABLE-NEXT:    .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
-; ENABLE-NEXT:    .byte 0 ; has no landing pad
-; ENABLE-NEXT:    .byte 0 ; On action: cleanup
-; ENABLE-NEXT:  Lcst_end0:
-; ENABLE-NEXT:    .p2align 2, 0x0
-;
-; DISABLE-LABEL: call_with_no_ret:
-; DISABLE:       Lfunc_begin0:
-; DISABLE-NEXT:    .cfi_startproc
-; DISABLE-NEXT:    .cfi_personality 155, ___gxx_personality_v0
-; DISABLE-NEXT:    .cfi_lsda 16, Lexception0
-; DISABLE-NEXT:  ; %bb.0: ; %entry
-; DISABLE-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
-; DISABLE-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; DISABLE-NEXT:    add x29, sp, #16
-; DISABLE-NEXT:    .cfi_def_cfa w29, 16
-; DISABLE-NEXT:    .cfi_offset w30, -8
-; DISABLE-NEXT:    .cfi_offset w29, -16
-; DISABLE-NEXT:    .cfi_offset w19, -24
-; DISABLE-NEXT:    .cfi_offset w20, -32
-; DISABLE-NEXT:    cmp w0, #1
-; DISABLE-NEXT:    b.eq LBB15_2
-; DISABLE-NEXT:  ; %bb.1: ; %exit
-; DISABLE-NEXT:    mov w0, wzr
-; DISABLE-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
-; DISABLE-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
-; DISABLE-NEXT:    ret
-; DISABLE-NEXT:  LBB15_2: ; %setup
-; DISABLE-NEXT:    mov w0, #32 ; =0x20
-; DISABLE-NEXT:    bl ___cxa_allocate_exception
-; DISABLE-NEXT:    mov x19, x0
-; DISABLE-NEXT:  Ltmp0: ; EH_LABEL
-; DISABLE-NEXT:    bl _construct_exception
-; DISABLE-NEXT:  Ltmp1: ; EH_LABEL
-; DISABLE-NEXT:  ; %bb.3: ; %throw
-; DISABLE-NEXT:  Lloh0:
-; DISABLE-NEXT:    adrp x2, _destruct_exception@GOTPAGE
-; DISABLE-NEXT:  Lloh1:
-; DISABLE-NEXT:    ldr x2, [x2, _destruct_exception@GOTPAGEOFF]
-; DISABLE-NEXT:  Lloh2:
-; DISABLE-NEXT:    adrp x1, _exception@PAGE
-; DISABLE-NEXT:  Lloh3:
-; DISABLE-NEXT:    add x1, x1, _exception@PAGEOFF
-; DISABLE-NEXT:    mov x0, x19
-; DISABLE-NEXT:    bl ___cxa_throw
-; DISABLE-NEXT:  LBB15_4: ; %teardown
-; DISABLE-NEXT:  Ltmp2: ; EH_LABEL
-; DISABLE-NEXT:    mov x20, x0
-; DISABLE-NEXT:    mov x0, x19
-; DISABLE-NEXT:    bl ___cxa_free_exception
-; DISABLE-NEXT:    mov x0, x20
-; DISABLE-NEXT:    bl __Unwind_Resume
-; DISABLE-NEXT:    .loh AdrpAdd Lloh2, Lloh3
-; DISABLE-NEXT:    .loh AdrpLdrGot Lloh0, Lloh1
-; DISABLE-NEXT:  Lfunc_end0:
-; DISABLE-NEXT:    .cfi_endproc
-; DISABLE-NEXT:    .section __TEXT,__gcc_except_tab
-; DISABLE-NEXT:    .p2align 2, 0x0
-; DISABLE-NEXT:  GCC_except_table15:
-; DISABLE-NEXT:  Lexception0:
-; DISABLE-NEXT:    .byte 255 ; @LPStart Encoding = omit
-; DISABLE-NEXT:    .byte 255 ; @TType Encoding = omit
-; DISABLE-NEXT:    .byte 1 ; Call site Encoding = uleb128
-; DISABLE-NEXT:    .uleb128 Lcst_end0-Lcst_begin0
-; DISABLE-NEXT:  Lcst_begin0:
-; DISABLE-NEXT:    .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
-; DISABLE-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and 
Ltmp0
-; DISABLE-NEXT:    .byte 0 ; has no landing pad
-; DISABLE-NEXT:    .byte 0 ; On action: cleanup
-; DISABLE-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
-; DISABLE-NEXT:    .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
-; DISABLE-NEXT:    .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
-; DISABLE-NEXT:    .byte 0 ; On action: cleanup
-; DISABLE-NEXT:    .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
-; DISABLE-NEXT:    .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and 
Lfunc_end0
-; DISABLE-NEXT:    .byte 0 ; has no landing pad
-; DISABLE-NEXT:    .byte 0 ; On action: cleanup
-; DISABLE-NEXT:  Lcst_end0:
-; DISABLE-NEXT:    .p2align 2, 0x0
-entry:
-  %cmp = icmp eq i32 %in, 1
-  br i1 %cmp, label %setup, label %exit
-
-setup:
-  %exception = tail call ptr @__cxa_allocate_exception(i64 32) nounwind
-  %call = invoke noundef ptr @construct_exception(ptr noundef nonnull 
%exception) to label %throw unwind label %teardown
-
-throw:
-  tail call void @__cxa_throw(ptr nonnull %exception, ptr nonnull @exception, 
ptr nonnull @destruct_exception) noreturn
-  unreachable
-
-teardown:
-  %caught = landingpad { ptr, i32 } cleanup
-  tail call void @__cxa_free_exception(ptr nonnull %exception) nounwind
-  resume { ptr, i32 } %caught
-
-exit:
-  ret i32 0
-}
-
-declare i32 @__gxx_personality_v0(...)
-
-declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr
-declare void @__cxa_free_exception(ptr) local_unnamed_addr
-declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr cold noreturn
-
-declare noundef ptr @construct_exception(ptr noundef nonnull returned) 
unnamed_addr
-declare noundef ptr @destruct_exception(ptr noundef nonnull returned) 
unnamed_addr mustprogress nounwind ssp uwtable(sync)


        
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to