Skip to content

Commit fbeca72

Browse files
committed
[RISCV] Enable global merging by default
Stacks on top of <llvm#115484>. From the discussion at the round-table at the RISC-V Summit it was clear people see cases where global merging would help. So the direction of enabling it by default and iteratively working to enable it in more cases or to improve the heuristics seems sensible. This patch tries to make a minimal step in that direction.
1 parent 269df4c commit fbeca72

File tree

7 files changed

+22
-17
lines changed

7 files changed

+22
-17
lines changed

llvm/lib/Target/RISCV/RISCVTargetMachine.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,13 @@ bool RISCVPassConfig::addPreISel() {
476476
addPass(createBarrierNoopPass());
477477
}
478478

479-
if (EnableGlobalMerge == cl::BOU_TRUE) {
479+
if ((TM->getOptLevel() != CodeGenOptLevel::None &&
480+
EnableGlobalMerge == cl::BOU_UNSET) ||
481+
EnableGlobalMerge == cl::BOU_TRUE) {
482+
// FIXME: Like AArch64, we disable extern global merging by default due to
483+
// concerns it might regress some workloads. Unlike AArch64, we don't
484+
// currently support enabling the pass in an "OnlyOptimizeForSize" mode.
485+
// Investigating and addressing both items are TODO.
480486
addPass(createGlobalMergePass(TM, /* MaxOffset */ 2047,
481487
/* OnlyOptimizeForSize */ false,
482488
/* MergeExternalByDefault */

llvm/test/CodeGen/RISCV/O3-pipeline.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
; CHECK-NEXT: Exception handling preparation
7575
; CHECK-NEXT: A No-Op Barrier Pass
7676
; CHECK-NEXT: FunctionPass Manager
77+
; CHECK-NEXT: Merge internal globals
7778
; CHECK-NEXT: Dominator Tree Construction
7879
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
7980
; CHECK-NEXT: Function Alias Analysis Results

llvm/test/CodeGen/RISCV/global-merge-minsize-smalldata-nonzero.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -riscv-force-enable-global-merge-external-globals \
2+
; RUN: llc -mtriple=riscv64 -riscv-force-enable-global-merge-external-globals \
33
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=SMALL-DATA
4-
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -global-merge-min-data-size=0 \
4+
; RUN: llc -mtriple=riscv64 -global-merge-min-data-size=0 \
55
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
66
; RUN: | FileCheck %s -check-prefix=MINSIZE
77

llvm/test/CodeGen/RISCV/global-merge-minsize-smalldata-zero.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -riscv-force-enable-global-merge-external-globals \
2+
; RUN: llc -mtriple=riscv32 -riscv-force-enable-global-merge-external-globals \
33
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=SMALL-DATA
4-
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -global-merge-min-data-size=5 \
4+
; RUN: llc -mtriple=riscv64 -global-merge-min-data-size=5 \
55
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
66
; RUN: | FileCheck %s -check-prefix=MINSIZE
77

llvm/test/CodeGen/RISCV/global-merge-minsize.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -riscv-force-enable-global-merge-external-globals \
2+
; RUN: llc -mtriple=riscv32 -riscv-force-enable-global-merge-external-globals \
33
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32
4-
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -global-merge-min-data-size=5 \
4+
; RUN: llc -mtriple=riscv32 -global-merge-min-data-size=5 \
55
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32-MINSIZE
66

77
@ig1 = internal global i32 0, align 4

llvm/test/CodeGen/RISCV/global-merge-offset.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv32 -riscv-enable-global-merge \
2+
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv32 \
33
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s
4-
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv64 -riscv-enable-global-merge \
4+
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv64 \
55
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s
6-
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv32 -riscv-enable-global-merge \
6+
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv32 \
77
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
8-
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv64 -riscv-enable-global-merge \
8+
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv64 \
99
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
1010

1111
; This test demonstrates that the MaxOffset is set correctly for RISC-V by

llvm/test/CodeGen/RISCV/global-merge.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -verify-machineinstrs < %s \
3-
; RUN: | FileCheck %s
4-
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -verify-machineinstrs < %s \
5-
; RUN: | FileCheck %s
6-
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge \
2+
; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck %s
3+
; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck %s
4+
; RUN: llc -mtriple=riscv32 \
75
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
86
; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s
9-
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge \
7+
; RUN: llc -mtriple=riscv64 \
108
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
119
; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s
1210

0 commit comments

Comments
 (0)