Skip to content

Commit 3824d22

Browse files
asbGroverkss
authored andcommitted
[RISCV] When using global merging, don't enable merging of external globals by default (llvm#115484)
AArch64 left this disabled after seeing some cases of slightly worse codegen that weren't tracked down, so I suggest as a path to incrementally moving towards enable globals merging we follow suit, and evaluate turning on later. This patch disables merging of external globals, but also adds a flag to override that. This reduces churn in test cases, simplifies benchmarking runs, and this flag can be removed later. A follow-on PR enables the globals merging pass by default (and as it's based on this commit, merging of external globals is disabled just as they are for AArch64).
1 parent e4a0e7e commit 3824d22

File tree

6 files changed

+44
-16
lines changed

6 files changed

+44
-16
lines changed

llvm/lib/Target/RISCV/RISCVTargetMachine.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ static cl::opt<cl::boolOrDefault>
5353
EnableGlobalMerge("riscv-enable-global-merge", cl::Hidden,
5454
cl::desc("Enable the global merge pass"));
5555

56+
static cl::opt<bool> ForceEnableGlobalMergeExternalGlobals(
57+
"riscv-force-enable-global-merge-external-globals", cl::Hidden,
58+
cl::init(false),
59+
cl::desc(
60+
"If the global merge pass is enabled, force enable global merging of "
61+
"external globals (overriding any logic that might disable it)"));
62+
5663
static cl::opt<bool>
5764
EnableMachineCombiner("riscv-enable-machine-combiner",
5865
cl::desc("Enable the machine combiner pass"),
@@ -472,7 +479,8 @@ bool RISCVPassConfig::addPreISel() {
472479
if (EnableGlobalMerge == cl::BOU_TRUE) {
473480
addPass(createGlobalMergePass(TM, /* MaxOffset */ 2047,
474481
/* OnlyOptimizeForSize */ false,
475-
/* MergeExternalByDefault */ true));
482+
/* MergeExternalByDefault */
483+
ForceEnableGlobalMergeExternalGlobals));
476484
}
477485

478486
return false;

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

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

78
@ig1 = internal global i32 0, align 4
89
@ig2 = internal global i32 0, align 4

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
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 -check-prefix=SMALL-DATA
2+
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -riscv-force-enable-global-merge-external-globals \
3+
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=SMALL-DATA
44
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -global-merge-min-data-size=5 \
5-
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=MINSIZE
5+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
6+
; RUN: | FileCheck %s -check-prefix=MINSIZE
67

78
@ig1 = internal global i32 0, align 4
89
@ig2 = internal global i32 0, align 4

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
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 -check-prefix=RV32
2+
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -riscv-force-enable-global-merge-external-globals \
3+
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32
44
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge -global-merge-min-data-size=5 \
5-
; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32-MINSIZE
5+
; 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
88
@ig2 = 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,12 +1,12 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv32 -riscv-enable-global-merge \
3-
; RUN: -verify-machineinstrs | FileCheck %s
3+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s
44
; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv64 -riscv-enable-global-merge \
5-
; RUN: -verify-machineinstrs | FileCheck %s
5+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s
66
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv32 -riscv-enable-global-merge \
7-
; RUN: -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
7+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
88
; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv64 -riscv-enable-global-merge \
9-
; RUN: -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
9+
; 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
1212
; constructing an input that is at the limit and comparing.

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
; RUN: | FileCheck %s
44
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge -verify-machineinstrs < %s \
55
; RUN: | FileCheck %s
6+
; RUN: llc -mtriple=riscv32 -riscv-enable-global-merge \
7+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
8+
; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s
9+
; RUN: llc -mtriple=riscv64 -riscv-enable-global-merge \
10+
; RUN: -riscv-force-enable-global-merge-external-globals -verify-machineinstrs < %s \
11+
; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s
612

713
@ig1 = internal global i32 0, align 4
814
@ig2 = internal global i32 0, align 4
@@ -21,9 +27,21 @@ define void @f1(i32 %a) nounwind {
2127
; CHECK-NEXT: sw a0, %lo(.L_MergedGlobals)(a1)
2228
; CHECK-NEXT: addi a1, a1, %lo(.L_MergedGlobals)
2329
; CHECK-NEXT: sw a0, 4(a1)
24-
; CHECK-NEXT: sw a0, 8(a1)
25-
; CHECK-NEXT: sw a0, 12(a1)
30+
; CHECK-NEXT: lui a1, %hi(eg1)
31+
; CHECK-NEXT: sw a0, %lo(eg1)(a1)
32+
; CHECK-NEXT: lui a1, %hi(eg2)
33+
; CHECK-NEXT: sw a0, %lo(eg2)(a1)
2634
; CHECK-NEXT: ret
35+
;
36+
; CHECK-WEXTERN-LABEL: f1:
37+
; CHECK-WEXTERN: # %bb.0:
38+
; CHECK-WEXTERN-NEXT: lui a1, %hi(.L_MergedGlobals)
39+
; CHECK-WEXTERN-NEXT: sw a0, %lo(.L_MergedGlobals)(a1)
40+
; CHECK-WEXTERN-NEXT: addi a1, a1, %lo(.L_MergedGlobals)
41+
; CHECK-WEXTERN-NEXT: sw a0, 4(a1)
42+
; CHECK-WEXTERN-NEXT: sw a0, 8(a1)
43+
; CHECK-WEXTERN-NEXT: sw a0, 12(a1)
44+
; CHECK-WEXTERN-NEXT: ret
2745
store i32 %a, ptr @ig1, align 4
2846
store i32 %a, ptr @ig2, align 4
2947
store i32 %a, ptr @eg1, align 4

0 commit comments

Comments
 (0)