Skip to content

Commit 9d02264

Browse files
authored
[RISCV] Enable global merging by default (#115495)
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 9cbf2dd commit 9d02264

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
@@ -474,7 +474,13 @@ bool RISCVPassConfig::addPreISel() {
474474
addPass(createBarrierNoopPass());
475475
}
476476

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