[llvm] [FastISel] Don't use sizeWithoutDebug() for debug records (PR #101648)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 2 03:21:41 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
@llvm/pr-subscribers-llvm-selectiondag
Author: Alexis Engelke (aengelke)
<details>
<summary>Changes</summary>
sizeWithoutDebug() iterates over the entire block, but all we do is to check whether the number is not equal to one. In times of debug records, simply check whether the first and last instructions are equal.
[c-t-t](http://llvm-compile-time-tracker.com/compare.php?from=e7f9d8e5c3e49e729c69aaa9be3322f7902370b8&to=ac0a670624f088607ebe6273cf2e153dc1ecedf6&stat=instructions:u)
---
Full diff: https://github.com/llvm/llvm-project/pull/101648.diff
2 Files Affected:
- (modified) llvm/lib/CodeGen/SelectionDAG/FastISel.cpp (+7-2)
- (modified) llvm/test/CodeGen/AArch64/fast-isel-branch-uncond-debug.ll (+1-1)
``````````diff
diff --git a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
index e255bbaa92b16..ce697a7c1b668 100644
--- a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
@@ -86,6 +86,7 @@
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Mangler.h"
#include "llvm/IR/Metadata.h"
+#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/IR/Type.h"
@@ -1664,8 +1665,12 @@ bool FastISel::selectInstruction(const Instruction *I) {
/// (fall-through) successor, and update the CFG.
void FastISel::fastEmitBranch(MachineBasicBlock *MSucc,
const DebugLoc &DbgLoc) {
- if (FuncInfo.MBB->getBasicBlock()->sizeWithoutDebug() > 1 &&
- FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
+ const BasicBlock *BB = FuncInfo.MBB->getBasicBlock();
+ bool BlockHasMultipleInstrs = &BB->front() != &BB->back();
+ // Handle legacy case of debug intrinsics
+ if (BlockHasMultipleInstrs && !BB->getModule()->IsNewDbgInfoFormat)
+ BlockHasMultipleInstrs = BB->sizeWithoutDebug() > 1;
+ if (BlockHasMultipleInstrs && FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
// For more accurate line information if this is the only non-debug
// instruction in the block then emit it, otherwise we have the
// unconditional fall-through case, which needs no instructions.
diff --git a/llvm/test/CodeGen/AArch64/fast-isel-branch-uncond-debug.ll b/llvm/test/CodeGen/AArch64/fast-isel-branch-uncond-debug.ll
index e1614d322b93d..5ce7bb04c5518 100644
--- a/llvm/test/CodeGen/AArch64/fast-isel-branch-uncond-debug.ll
+++ b/llvm/test/CodeGen/AArch64/fast-isel-branch-uncond-debug.ll
@@ -1,5 +1,5 @@
; RUN: llc -mtriple=aarch64 -O1 -opt-bisect-limit=2 -o - %s 2> /dev/null | FileCheck %s
-; RUN: llc --try-experimental-debuginfo-iterators -mtriple=aarch64 -O1 -opt-bisect-limit=2 -o - %s 2> /dev/null | FileCheck %s
+; RUN: llc --preserve-input-debuginfo-format=true -mtriple=aarch64 -O1 -opt-bisect-limit=2 -o - %s 2> /dev/null | FileCheck %s
define dso_local i32 @a() #0 !dbg !7 {
entry:
``````````
</details>
https://github.com/llvm/llvm-project/pull/101648
More information about the llvm-commits
mailing list