[llvm] 90ab85a - Reland "[CodeGen][AArch64] Make MFS testable on AArch64"
Daniel Hoekwater via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 22 13:23:51 PDT 2023
Author: Daniel Hoekwater
Date: 2023-08-22T20:21:33Z
New Revision: 90ab85a1b2e72f63039fadf6669b23f52192defd
URL: https://github.com/llvm/llvm-project/commit/90ab85a1b2e72f63039fadf6669b23f52192defd
DIFF: https://github.com/llvm/llvm-project/commit/90ab85a1b2e72f63039fadf6669b23f52192defd.diff
LOG: Reland "[CodeGen][AArch64] Make MFS testable on AArch64"
Reverted by 3d22dac6c3b97d7bb92f243886dfb0d32a5c42e9 because it depended
on b9d079d6188b50730e0a67267b7fee36008435ce, which broke some tests.
Added:
Modified:
llvm/lib/CodeGen/MachineFunctionSplitter.cpp
llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
llvm/lib/Target/AArch64/AArch64InstrInfo.h
llvm/test/CodeGen/Generic/machine-function-splitter.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/MachineFunctionSplitter.cpp b/llvm/lib/CodeGen/MachineFunctionSplitter.cpp
index fbc071536d221a..440f6d2cb461e8 100644
--- a/llvm/lib/CodeGen/MachineFunctionSplitter.cpp
+++ b/llvm/lib/CodeGen/MachineFunctionSplitter.cpp
@@ -66,6 +66,13 @@ static cl::opt<bool> SplitAllEHCode(
cl::desc("Splits all EH code and it's descendants by default."),
cl::init(false), cl::Hidden);
+static cl::opt<bool> AllowUnsupportedTriple(
+ "mfs-allow-unsupported-triple",
+ cl::desc(
+ "Splits functions even if the target triple isn't supported. This is "
+ "testing flag for targets that don't yet support function splitting."),
+ cl::init(false), cl::Hidden);
+
namespace {
class MachineFunctionSplitter : public MachineFunctionPass {
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index 433f8ad84d3afd..1a9b36a5ef9f30 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -4892,6 +4892,12 @@ bool llvm::rewriteAArch64FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
return false;
}
+void AArch64InstrInfo::insertNoop(MachineBasicBlock &MBB,
+ MachineBasicBlock::iterator MI) const {
+ DebugLoc DL;
+ BuildMI(MBB, MI, DL, get(AArch64::HINT)).addImm(0);
+}
+
MCInst AArch64InstrInfo::getNop() const {
return MCInstBuilder(AArch64::HINT).addImm(0);
}
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.h b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
index fe59d8f72f0b05..ca7e1e0834f17c 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
@@ -240,6 +240,10 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
const DebugLoc &DL, Register DstReg,
ArrayRef<MachineOperand> Cond, Register TrueReg,
Register FalseReg) const override;
+
+ void insertNoop(MachineBasicBlock &MBB,
+ MachineBasicBlock::iterator MI) const override;
+
MCInst getNop() const override;
bool isSchedulingBoundary(const MachineInstr &MI,
diff --git a/llvm/test/CodeGen/Generic/machine-function-splitter.ll b/llvm/test/CodeGen/Generic/machine-function-splitter.ll
index a3c2a7c7b31a91..1dceee4305d624 100644
--- a/llvm/test/CodeGen/Generic/machine-function-splitter.ll
+++ b/llvm/test/CodeGen/Generic/machine-function-splitter.ll
@@ -7,6 +7,11 @@
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions -mfs-psi-cutoff=950000 | FileCheck %s -check-prefixes=MFS-OPTS2,MFS-OPTS2-X86
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions -mfs-split-ehcode | FileCheck %s -check-prefixes=MFS-EH-SPLIT,MFS-EH-SPLIT-X86
+; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -enable-split-machine-functions -mfs-allow-unsupported-triple | FileCheck %s -check-prefixes=MFS-DEFAULTS,MFS-DEFAULTS-AARCH64
+; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -enable-split-machine-functions -mfs-allow-unsupported-triple -mfs-psi-cutoff=0 -mfs-count-threshold=2000 | FileCheck %s --dump-input=always -check-prefixes=MFS-OPTS1,MFS-OPTS1-AARCH64
+; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -enable-split-machine-functions -mfs-allow-unsupported-triple -mfs-psi-cutoff=950000 | FileCheck %s -check-prefixes=MFS-OPTS2,MFS-OPTS2-AARCH64
+; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -enable-split-machine-functions -mfs-allow-unsupported-triple -mfs-split-ehcode | FileCheck %s -check-prefixes=MFS-EH-SPLIT,MFS-EH-SPLIT-AARCH64
+
; COM: Machine function splitting with AFDO profiles
; RUN: sed 's/InstrProf/SampleProfile/g' %s > %t.ll
; RUN: llc < %t.ll -mtriple=x86_64-unknown-linux-gnu -split-machine-functions | FileCheck %s --check-prefix=FSAFDO-MFS
@@ -19,6 +24,8 @@ define void @foo1(i1 zeroext %0) nounwind !prof !14 !section_prefix !15 {
; MFS-DEFAULTS-NEXT: foo1.cold:
; MFS-DEFAULTS-X86-NOT: callq bar
; MFS-DEFAULTS-X86-NEXT: callq baz
+; MFS-DEFAULTS-AARCH64-NOT: bl bar
+; MFS-DEFAULTS-AARCH64-NEXT: bl baz
br i1 %0, label %2, label %4, !prof !17
2: ; preds = %1
@@ -80,6 +87,9 @@ define void @foo4(i1 zeroext %0, i1 zeroext %1) nounwind !prof !20 {
; MFS-OPTS1-X86-NOT: callq bar
; MFS-OPTS1-X86-NOT: callq baz
; MFS-OPTS1-X86-NEXT: callq bam
+; MFS-OPTS1-AARCH64-NOT: bl bar
+; MFS-OPTS1-AARCH64-NOT: bl baz
+; MFS-OPTS1-AARCH64-NEXT: bl bam
br i1 %0, label %3, label %7, !prof !18
3:
@@ -114,6 +124,9 @@ define void @foo5(i1 zeroext %0, i1 zeroext %1) nounwind !prof !20 {
; MFS-OPTS2-X86-NOT: callq bar
; MFS-OPTS2-X86-NOT: callq baz
; MFS-OPTS2-X86-NEXT: callq bam
+; MFS-OPTS2-AARCH64-NOT: bl bar
+; MFS-OPTS2-AARCH64-NOT: bl baz
+; MFS-OPTS2-AARCH64-NEXT: bl bam
br i1 %0, label %3, label %7, !prof !21
3:
@@ -166,6 +179,7 @@ define i32 @foo7(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14
; MFS-DEFAULTS-NEXT: foo7.cold:
; MFS-DEFAULTS-X86: callq baz
; MFS-DEFAULTS-X86: callq _Unwind_Resume at PLT
+; MFS-DEFAULTS-AARCH64: bl baz
entry:
invoke void @_Z1fv()
to label %try.cont unwind label %lpad
@@ -200,12 +214,14 @@ define i32 @foo8(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14
; MFS-DEFAULTS: .section .text.split.foo8,"ax", at progbits
; MFS-DEFAULTS-NEXT: foo8.cold:
; MFS-DEFAULTS-X86: callq baz
+; MFS-DEFAULTS-AARCH64: bl baz
;; Check that all ehpads are by default treated as cold with -mfs-split-ehcode.
; MFS-EH-SPLIT-LABEL: foo8
; MFS-EH-SPLIT-X86: callq baz
-; MFS-EH-SPLIT: .section .text.split.foo8,"ax", at progbits
-; MFS-EH-SPLIT-NEXT: foo8.cold:
+; MFS-EH-SPLIT-AARCH64: bl baz
+; MFS-EH-SPLIT-X86: .section .text.split.foo8,"ax", at progbits
+; MFS-EH-SPLIT-X86-NEXT: foo8.cold:
; MFS-EH-SPLIT-X86: callq _Unwind_Resume at PLT
; MFS-EH-SPLIT-X86: callq _Unwind_Resume at PLT
entry:
@@ -264,8 +280,9 @@ define i32 @foo10(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14
;; Check that nop is inserted just before the EH pad if it's beginning a section.
; MFS-DEFAULTS-LABEL: foo10
; MFS-DEFAULTS-X86-LABEL: callq baz
-; MFS-DEFAULTS: .section .text.split.foo10,"ax", at progbits
-; MFS-DEFAULTS-NEXT: foo10.cold:
+; MFS-DEFAULTS-AARCH64: bl baz
+; MFS-DEFAULTS-X86: .section .text.split.foo10,"ax", at progbits
+; MFS-DEFAULTS-X86-NEXT: foo10.cold:
; MFS-DEFAULTS-X86: nop
; MFS-DEFAULTS-X86: callq _Unwind_Resume at PLT
entry:
@@ -287,8 +304,8 @@ define void @foo11(i1 zeroext %0) personality ptr @__gxx_personality_v0 {
;; Check that function having landing pads are split with mfs-split-ehcode
;; even in the absence of profile data
; MFS-EH-SPLIT-LABEL: foo11
-; MFS-EH-SPLIT: .section .text.split.foo11,"ax", at progbits
-; MFS-EH-SPLIT-NEXT: foo11.cold:
+; MFS-EH-SPLIT-X86: .section .text.split.foo11,"ax", at progbits
+; MFS-EH-SPLIT-X86-NEXT: foo11.cold:
; MFS-EH-SPLIT-X86: nop
; MFS-EH-SPLIT-X86: callq _Unwind_Resume at PLT
entry:
@@ -314,6 +331,9 @@ define i32 @foo12(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14
; MFS-EH-SPLIT-X86: callq bar
; MFS-EH-SPLIT-X86: callq baz
; MFS-EH-SPLIT-X86: callq qux
+; MFS-EH-SPLIT-AARCH64: bl bar
+; MFS-EH-SPLIT-AARCH64: bl baz
+; MFS-EH-SPLIT-AARCH64: bl qux
entry:
invoke void @_Z1fv()
to label %8 unwind label %lpad
@@ -346,11 +366,15 @@ define i32 @foo13(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14
;; is not touched.
; MFS-EH-SPLIT-LABEL: foo13
; MFS-EH-SPLIT-X86: callq bam
+; MFS-EH-SPLIT-AARCH64: bl bam
; MFS-EH-SPLIT: .section .text.split.foo13,"ax", at progbits
; MFS-EH-SPLIT-NEXT: foo13.cold:
; MFS-EH-SPLIT-X86: callq baz
; MFS-EH-SPLIT-X86: callq bar
; MFS-EH-SPLIT-X86: callq qux
+; MFS-EH-SPLIT-AARCH64: bl baz
+; MFS-EH-SPLIT-AARCH64: bl bar
+; MFS-EH-SPLIT-AARCH64: bl qux
entry:
invoke void @_Z1fv()
to label %try.cont unwind label %lpad, !prof !17
More information about the llvm-commits
mailing list