[llvm] [FastISel] Don't use sizeWithoutDebug() for debug records (PR #101648)
Alexis Engelke via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 2 03:21:12 PDT 2024
https://github.com/aengelke created https://github.com/llvm/llvm-project/pull/101648
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)
>From ac0a670624f088607ebe6273cf2e153dc1ecedf6 Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Fri, 2 Aug 2024 08:53:48 +0000
Subject: [PATCH] [FastISel] Don't use sizeWithoutDebug()
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.
---
llvm/lib/CodeGen/SelectionDAG/FastISel.cpp | 9 +++++++--
.../CodeGen/AArch64/fast-isel-branch-uncond-debug.ll | 2 +-
2 files changed, 8 insertions(+), 3 deletions(-)
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:
More information about the llvm-commits
mailing list