From 626fa0284c3739cdfad3c5b64fc14afab53a2f5c Mon Sep 17 00:00:00 2001 From: Zaara Syeda Date: Mon, 28 Oct 2024 15:31:31 -0400 Subject: [PATCH] Enable aggressive constant merge in GlobalMerge for AIX Enable merging all constants without looking at use in GlobalMerge by default to replace PPCMergeStringPool pass on AIX. --- llvm/include/llvm/CodeGen/GlobalMerge.h | 3 + llvm/include/llvm/CodeGen/Passes.h | 3 +- llvm/lib/CodeGen/GlobalMerge.cpp | 13 +- llvm/lib/Target/PowerPC/PPCTargetMachine.cpp | 9 +- llvm/test/CodeGen/PowerPC/O3-pipeline.ll | 3 - .../PowerPC/aix-xcoff-mergeable-const.ll | 6 +- .../PowerPC/aix-xcoff-mergeable-str.ll | 9 +- .../PowerPC/aix-xcoff-used-with-stringpool.ll | 6 +- llvm/test/CodeGen/PowerPC/merge-private.ll | 4 +- .../PowerPC/mergeable-string-pool-large.ll | 143 +++++++++--------- .../PowerPC/mergeable-string-pool-tls.ll | 65 ++++---- .../CodeGen/PowerPC/mergeable-string-pool.ll | 130 ++++++++-------- 12 files changed, 214 insertions(+), 180 deletions(-) diff --git a/llvm/include/llvm/CodeGen/GlobalMerge.h b/llvm/include/llvm/CodeGen/GlobalMerge.h index 1577bcf8903f5..f1fb467fc7757 100644 --- a/llvm/include/llvm/CodeGen/GlobalMerge.h +++ b/llvm/include/llvm/CodeGen/GlobalMerge.h @@ -30,6 +30,9 @@ struct GlobalMergeOptions { bool MergeExternal = true; /// Whether we should merge constant global variables. bool MergeConstantGlobals = false; + /// Whether we should merge constant global variables aggressively without + /// looking at use. + bool MergeConstAggressive = false; /// Whether we should try to optimize for size only. /// Currently, this applies a dead simple heuristic: only consider globals /// used in minsize functions for merging. diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h index e12c1f076f133..a3dc2551e1133 100644 --- a/llvm/include/llvm/CodeGen/Passes.h +++ b/llvm/include/llvm/CodeGen/Passes.h @@ -480,7 +480,8 @@ namespace llvm { Pass *createGlobalMergePass(const TargetMachine *TM, unsigned MaximalOffset, bool OnlyOptimizeForSize = false, bool MergeExternalByDefault = false, - bool MergeConstantByDefault = false); + bool MergeConstantByDefault = false, + bool MergeConstAggressiveByDefault = false); /// This pass splits the stack into a safe stack and an unsafe stack to /// protect against stack-based overflow vulnerabilities. diff --git a/llvm/lib/CodeGen/GlobalMerge.cpp b/llvm/lib/CodeGen/GlobalMerge.cpp index 4c6c8c600ee2b..9a939d06946df 100644 --- a/llvm/lib/CodeGen/GlobalMerge.cpp +++ b/llvm/lib/CodeGen/GlobalMerge.cpp @@ -202,12 +202,13 @@ class GlobalMerge : public FunctionPass { explicit GlobalMerge(const TargetMachine *TM, unsigned MaximalOffset, bool OnlyOptimizeForSize, bool MergeExternalGlobals, - bool MergeConstantGlobals) + bool MergeConstantGlobals, bool MergeConstAggressive) : FunctionPass(ID), TM(TM) { Opt.MaxOffset = MaximalOffset; Opt.SizeOnly = OnlyOptimizeForSize; Opt.MergeExternal = MergeExternalGlobals; Opt.MergeConstantGlobals = MergeConstantGlobals; + Opt.MergeConstAggressive = MergeConstAggressive; initializeGlobalMergePass(*PassRegistry::getPassRegistry()); } @@ -268,7 +269,7 @@ bool GlobalMergeImpl::doMerge(SmallVectorImpl &Globals, }); // If we want to just blindly group all globals together, do so. - if (!GlobalMergeGroupByUse || (GlobalMergeAllConst && isConst)) { + if (!GlobalMergeGroupByUse || (Opt.MergeConstAggressive && isConst)) { BitVector AllGlobals(Globals.size()); AllGlobals.set(); return doMerge(Globals, AllGlobals, M, isConst, AddrSpace); @@ -758,10 +759,14 @@ bool GlobalMergeImpl::run(Module &M) { Pass *llvm::createGlobalMergePass(const TargetMachine *TM, unsigned Offset, bool OnlyOptimizeForSize, bool MergeExternalByDefault, - bool MergeConstantByDefault) { + bool MergeConstantByDefault, + bool MergeConstAggressiveByDefault) { bool MergeExternal = (EnableGlobalMergeOnExternal == cl::BOU_UNSET) ? MergeExternalByDefault : (EnableGlobalMergeOnExternal == cl::BOU_TRUE); bool MergeConstant = EnableGlobalMergeOnConst || MergeConstantByDefault; + bool MergeConstAggressive = GlobalMergeAllConst.getNumOccurrences() > 0 + ? GlobalMergeAllConst + : MergeConstAggressiveByDefault; return new GlobalMerge(TM, Offset, OnlyOptimizeForSize, MergeExternal, - MergeConstant); + MergeConstant, MergeConstAggressive); } diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp index cd188304595e1..133c47174570c 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -505,10 +505,13 @@ bool PPCPassConfig::addPreISel() { ? EnableGlobalMerge : (TM->getTargetTriple().isOSAIX() && getOptLevel() != CodeGenOptLevel::None)) - addPass( - createGlobalMergePass(TM, GlobalMergeMaxOffset, false, false, true)); + addPass(createGlobalMergePass(TM, GlobalMergeMaxOffset, false, false, true, + true)); - if (MergeStringPool && getOptLevel() != CodeGenOptLevel::None) + if ((MergeStringPool.getNumOccurrences() > 0) + ? MergeStringPool + : (TM->getTargetTriple().isOSLinux() && + getOptLevel() != CodeGenOptLevel::None)) addPass(createPPCMergeStringPoolPass()); if (!DisableInstrFormPrep && getOptLevel() != CodeGenOptLevel::None) diff --git a/llvm/test/CodeGen/PowerPC/O3-pipeline.ll b/llvm/test/CodeGen/PowerPC/O3-pipeline.ll index 21bd4bb8502c3..8aeea4ba045bf 100644 --- a/llvm/test/CodeGen/PowerPC/O3-pipeline.ll +++ b/llvm/test/CodeGen/PowerPC/O3-pipeline.ll @@ -70,9 +70,6 @@ ; CHECK-NEXT: CodeGen Prepare ; CHECK-NEXT: Dominator Tree Construction ; CHECK-NEXT: Exception handling preparation -; CHECK-NEXT: PPC Merge String Pool -; CHECK-NEXT: FunctionPass Manager -; CHECK-NEXT: Dominator Tree Construction ; CHECK-NEXT: Natural Loop Information ; CHECK-NEXT: Scalar Evolution Analysis ; CHECK-NEXT: Prepare loop for ppc preferred instruction forms diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-const.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-const.ll index c7b1d2a0771c1..f14901017982b 100644 --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-const.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-const.ll @@ -1,13 +1,13 @@ ; This file tests the codegen of mergeable const in AIX assembly. ; This file also tests mergeable const in XCOFF object file generation. ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ -; RUN: -data-sections=false -xcoff-traceback-table=false < %s | \ +; RUN: -global-merge-all-const=false -data-sections=false -xcoff-traceback-table=false < %s | \ ; RUN: FileCheck --check-prefixes=CHECK,CHECK32 %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ -; RUN: -xcoff-traceback-table=false -data-sections=false < %s | \ +; RUN: -global-merge-all-const=false -xcoff-traceback-table=false -data-sections=false < %s | \ ; RUN: FileCheck --check-prefixes=CHECK,CHECK64 %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ -; RUN: -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s +; RUN: -global-merge-all-const=false -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s ; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=CHECKOBJ %s ; RUN: llvm-readobj -s %t.o | FileCheck --check-prefix=CHECKSYM %s diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll index f70428b102895..5462240846994 100644 --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll @@ -4,12 +4,15 @@ ; tests for XCOFF object files. ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -xcoff-traceback-table=false \ -; RUN: -mtriple powerpc-ibm-aix-xcoff -data-sections=false -ppc-merge-string-pool=false < %s | FileCheck %s +; RUN: -mtriple powerpc-ibm-aix-xcoff -data-sections=false -ppc-merge-string-pool=false \ +; RUN: -global-merge-all-const=false < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -xcoff-traceback-table=false \ -; RUN: -mtriple powerpc64-ibm-aix-xcoff -data-sections=false -ppc-merge-string-pool=false < %s | FileCheck %s +; RUN: -mtriple powerpc64-ibm-aix-xcoff -data-sections=false -ppc-merge-string-pool=false \ +; RUN: -global-merge-all-const=false < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ -; RUN: -xcoff-traceback-table=false -data-sections=false -ppc-merge-string-pool=false -filetype=obj -o %t.o < %s +; RUN: -xcoff-traceback-table=false -data-sections=false -ppc-merge-string-pool=false \ +; RUN: -global-merge-all-const=false -filetype=obj -o %t.o < %s ; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=CHECKOBJ %s @magic16 = private unnamed_addr constant [4 x i16] [i16 264, i16 272, i16 213, i16 0], align 2 diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-used-with-stringpool.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-used-with-stringpool.ll index fa9a8fb457518..7f93661c37ee8 100644 --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-used-with-stringpool.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-used-with-stringpool.ll @@ -1,10 +1,12 @@ ;; Test that the string pooling pass does not pool globals that are ;; in llvm.used or in llvm.compiler.used. -; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple powerpc-ibm-aix-xcoff -data-sections=false < %s | \ +; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple powerpc-ibm-aix-xcoff \ +; RUN: -ppc-merge-string-pool=true -global-merge-all-const=false -data-sections=false < %s | \ ; RUN: FileCheck %s -; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple powerpc64-ibm-aix-xcoff -data-sections=false < %s | \ +; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -ppc-merge-string-pool=true -global-merge-all-const=false -data-sections=false < %s | \ ; RUN: FileCheck %s @keep_this = internal constant [5 x i8] c"keep1", align 1 diff --git a/llvm/test/CodeGen/PowerPC/merge-private.ll b/llvm/test/CodeGen/PowerPC/merge-private.ll index 0ca706abb275f..d3f2910826423 100644 --- a/llvm/test/CodeGen/PowerPC/merge-private.ll +++ b/llvm/test/CodeGen/PowerPC/merge-private.ll @@ -1,9 +1,9 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \ -; RUN: -ppc-asm-full-reg-names -ppc-global-merge=true < %s | FileCheck %s \ +; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \ ; RUN: --check-prefix=AIX64 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \ -; RUN: -ppc-asm-full-reg-names -ppc-global-merge=true < %s | FileCheck %s \ +; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \ ; RUN: --check-prefix=AIX32 ; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \ ; RUN: -ppc-asm-full-reg-names -ppc-global-merge=true < %s | FileCheck %s \ diff --git a/llvm/test/CodeGen/PowerPC/mergeable-string-pool-large.ll b/llvm/test/CodeGen/PowerPC/mergeable-string-pool-large.ll index b182763ccc146..27923e47b86b6 100644 --- a/llvm/test/CodeGen/PowerPC/mergeable-string-pool-large.ll +++ b/llvm/test/CodeGen/PowerPC/mergeable-string-pool-large.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 -; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \ +; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 -ppc-global-merge-max-offset=50000 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32 -; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \ +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 -ppc-global-merge-max-offset=50000 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE @@ -242,10 +242,8 @@ define dso_local signext i32 @str1() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) -; AIX32-NEXT: addi r3, r3, -29924 -; AIX32-NEXT: addis r3, r3, 1 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -257,11 +255,8 @@ define dso_local signext i32 @str1() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: li r4, 0 -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) -; AIX64-NEXT: ori r4, r4, 35612 -; AIX64-NEXT: add r3, r3, r4 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -318,17 +313,16 @@ define dso_local signext i32 @array0() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -96(r1) -; AIX32-NEXT: lis r6, 0 -; AIX32-NEXT: lwz r5, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: li r4, 12 +; AIX32-NEXT: lwz r6, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: li r7, 24 ; AIX32-NEXT: addi r3, r1, 64 +; AIX32-NEXT: li r4, 12 ; AIX32-NEXT: stw r0, 104(r1) -; AIX32-NEXT: ori r7, r6, 35596 -; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27 -; AIX32-NEXT: lxvw4x vs0, r5, r7 -; AIX32-NEXT: stxvw4x vs0, 0, r4 -; AIX32-NEXT: ori r4, r6, 35584 -; AIX32-NEXT: lxvw4x vs0, r5, r4 +; AIX32-NEXT: mr r5, r3 +; AIX32-NEXT: lxvw4x vs0, r6, r7 +; AIX32-NEXT: rlwimi r5, r4, 0, 28, 29 +; AIX32-NEXT: stxvw4x vs0, 0, r5 +; AIX32-NEXT: lxvw4x vs0, r6, r4 ; AIX32-NEXT: stxvw4x vs0, 0, r3 ; AIX32-NEXT: bl .calleeInt[PR] ; AIX32-NEXT: nop @@ -341,15 +335,14 @@ define dso_local signext i32 @array0() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -144(r1) -; AIX64-NEXT: li r3, 0 -; AIX64-NEXT: ld r4, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: li r4, 24 ; AIX64-NEXT: std r0, 160(r1) -; AIX64-NEXT: ori r5, r3, 35596 -; AIX64-NEXT: ori r3, r3, 35584 -; AIX64-NEXT: lxvw4x vs0, r4, r5 -; AIX64-NEXT: addi r5, r1, 124 -; AIX64-NEXT: stxvw4x vs0, 0, r5 -; AIX64-NEXT: lxvw4x vs0, r4, r3 +; AIX64-NEXT: lxvw4x vs0, r3, r4 +; AIX64-NEXT: addi r4, r1, 124 +; AIX64-NEXT: stxvw4x vs0, 0, r4 +; AIX64-NEXT: li r4, 12 +; AIX64-NEXT: lxvw4x vs0, r3, r4 ; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: stxvw4x vs0, 0, r3 ; AIX64-NEXT: bl .calleeInt[PR] @@ -418,28 +411,35 @@ define dso_local signext i32 @array1() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -176(r1) -; AIX32-NEXT: lwz r4, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r4, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: li r3, 136 ; AIX32-NEXT: li r5, 96 -; AIX32-NEXT: addi r3, r1, 64 ; AIX32-NEXT: stw r0, 184(r1) -; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: lxvw4x vs0, r4, r3 +; AIX32-NEXT: addi r3, r1, 64 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 80 +; AIX32-NEXT: li r5, 120 ; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: li r5, 80 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 64 +; AIX32-NEXT: li r5, 104 ; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: li r5, 64 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 48 +; AIX32-NEXT: li r5, 88 ; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: li r5, 48 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 32 +; AIX32-NEXT: li r5, 72 ; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: li r5, 32 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 16 +; AIX32-NEXT: li r5, 56 ; AIX32-NEXT: lxvw4x vs0, r4, r5 +; AIX32-NEXT: li r5, 16 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: lxvw4x vs0, 0, r4 +; AIX32-NEXT: li r5, 40 +; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: stxvw4x vs0, 0, r3 ; AIX32-NEXT: bl .calleeInt[PR] ; AIX32-NEXT: nop @@ -452,28 +452,35 @@ define dso_local signext i32 @array1() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -224(r1) -; AIX64-NEXT: ld r4, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r4, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: li r3, 136 ; AIX64-NEXT: li r5, 96 -; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: std r0, 240(r1) -; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: lxvw4x vs0, r4, r3 +; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 80 +; AIX64-NEXT: li r5, 120 ; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: li r5, 80 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 64 +; AIX64-NEXT: li r5, 104 ; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: li r5, 64 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 48 +; AIX64-NEXT: li r5, 88 ; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: li r5, 48 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 32 +; AIX64-NEXT: li r5, 72 ; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: li r5, 32 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 16 +; AIX64-NEXT: li r5, 56 ; AIX64-NEXT: lxvw4x vs0, r4, r5 +; AIX64-NEXT: li r5, 16 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: lxvw4x vs0, 0, r4 +; AIX64-NEXT: li r5, 40 +; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: stxvw4x vs0, 0, r3 ; AIX64-NEXT: bl .calleeInt[PR] ; AIX64-NEXT: nop @@ -565,34 +572,34 @@ define dso_local signext i32 @array2() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -176(r1) -; AIX32-NEXT: lwz r4, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: li r3, 208 +; AIX32-NEXT: lwz r4, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: li r3, 248 ; AIX32-NEXT: li r5, 96 ; AIX32-NEXT: stw r0, 184(r1) ; AIX32-NEXT: lxvw4x vs0, r4, r3 ; AIX32-NEXT: addi r3, r1, 64 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 192 +; AIX32-NEXT: li r5, 232 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: li r5, 80 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 176 +; AIX32-NEXT: li r5, 216 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: li r5, 64 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 160 +; AIX32-NEXT: li r5, 200 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: li r5, 48 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 144 +; AIX32-NEXT: li r5, 184 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: li r5, 32 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 128 +; AIX32-NEXT: li r5, 168 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: li r5, 16 ; AIX32-NEXT: stxvw4x vs0, r3, r5 -; AIX32-NEXT: li r5, 112 +; AIX32-NEXT: li r5, 152 ; AIX32-NEXT: lxvw4x vs0, r4, r5 ; AIX32-NEXT: stxvw4x vs0, 0, r3 ; AIX32-NEXT: bl .calleeInt[PR] @@ -606,34 +613,34 @@ define dso_local signext i32 @array2() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -224(r1) -; AIX64-NEXT: ld r4, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: li r3, 208 +; AIX64-NEXT: ld r4, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: li r3, 248 ; AIX64-NEXT: li r5, 96 ; AIX64-NEXT: std r0, 240(r1) ; AIX64-NEXT: lxvw4x vs0, r4, r3 ; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 192 +; AIX64-NEXT: li r5, 232 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: li r5, 80 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 176 +; AIX64-NEXT: li r5, 216 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: li r5, 64 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 160 +; AIX64-NEXT: li r5, 200 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: li r5, 48 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 144 +; AIX64-NEXT: li r5, 184 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: li r5, 32 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 128 +; AIX64-NEXT: li r5, 168 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: li r5, 16 ; AIX64-NEXT: stxvw4x vs0, r3, r5 -; AIX64-NEXT: li r5, 112 +; AIX64-NEXT: li r5, 152 ; AIX64-NEXT: lxvw4x vs0, r4, r5 ; AIX64-NEXT: stxvw4x vs0, 0, r3 ; AIX64-NEXT: bl .calleeInt[PR] @@ -740,12 +747,12 @@ define dso_local signext i32 @array3() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -224(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 232(r1) ; AIX32-NEXT: stw r31, 220(r1) # 4-byte Folded Spill ; AIX32-NEXT: addi r31, r1, 56 ; AIX32-NEXT: li r5, 160 -; AIX32-NEXT: addi r4, r3, 224 +; AIX32-NEXT: addi r4, r3, 264 ; AIX32-NEXT: mr r3, r31 ; AIX32-NEXT: bl .___memmove[PR] ; AIX32-NEXT: nop @@ -762,12 +769,12 @@ define dso_local signext i32 @array3() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -288(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 304(r1) ; AIX64-NEXT: std r31, 280(r1) # 8-byte Folded Spill ; AIX64-NEXT: addi r31, r1, 120 ; AIX64-NEXT: li r5, 160 -; AIX64-NEXT: addi r4, r3, 224 +; AIX64-NEXT: addi r4, r3, 264 ; AIX64-NEXT: mr r3, r31 ; AIX64-NEXT: bl .___memmove64[PR] ; AIX64-NEXT: nop @@ -839,12 +846,12 @@ define dso_local signext i32 @array4() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -384(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 392(r1) ; AIX32-NEXT: stw r31, 380(r1) # 4-byte Folded Spill ; AIX32-NEXT: addi r31, r1, 56 ; AIX32-NEXT: li r5, 320 -; AIX32-NEXT: addi r4, r3, 384 +; AIX32-NEXT: addi r4, r3, 424 ; AIX32-NEXT: mr r3, r31 ; AIX32-NEXT: bl .___memmove[PR] ; AIX32-NEXT: nop @@ -861,12 +868,12 @@ define dso_local signext i32 @array4() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -448(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 464(r1) ; AIX64-NEXT: std r31, 440(r1) # 8-byte Folded Spill ; AIX64-NEXT: addi r31, r1, 120 ; AIX64-NEXT: li r5, 320 -; AIX64-NEXT: addi r4, r3, 384 +; AIX64-NEXT: addi r4, r3, 424 ; AIX64-NEXT: mr r3, r31 ; AIX64-NEXT: bl .___memmove64[PR] ; AIX64-NEXT: nop diff --git a/llvm/test/CodeGen/PowerPC/mergeable-string-pool-tls.ll b/llvm/test/CodeGen/PowerPC/mergeable-string-pool-tls.ll index fde135246c2a9..1f2ee88ea7645 100644 --- a/llvm/test/CodeGen/PowerPC/mergeable-string-pool-tls.ll +++ b/llvm/test/CodeGen/PowerPC/mergeable-string-pool-tls.ll @@ -1,9 +1,8 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ -; RUN: -ppc-asm-full-reg-names -enable-global-merge=false < %s | FileCheck %s \ +; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \ ; RUN: --check-prefix=CHECK64 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \ -; RUN: -ppc-asm-full-reg-names -enable-global-merge=false < %s | FileCheck %s \ +; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \ ; RUN: --check-prefix=CHECK32 ; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \ @@ -31,14 +30,13 @@ define void @print_tls_func() { ; CHECK64-NEXT: stdu r1, -112(r1) ; CHECK64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" ; CHECK64-NEXT: std r0, 128(r1) -; CHECK64-NEXT: ld r6, L..C1(r2) # @__ModuleStringPool +; CHECK64-NEXT: ld r6, L..C1(r2) # @_MergedGlobals ; CHECK64-NEXT: bla .__tls_get_mod[PR] ; CHECK64-NEXT: ld r4, L..C2(r2) # target-flags(ppc-tlsld) @a ; CHECK64-NEXT: ld r5, L..C3(r2) # target-flags(ppc-tlsld) @b ; CHECK64-NEXT: add r4, r3, r4 ; CHECK64-NEXT: add r5, r3, r5 -; CHECK64-NEXT: addi r3, r6, 71 -; CHECK64-NEXT: addi r6, r6, 56 +; CHECK64-NEXT: addi r3, r6, 72 ; CHECK64-NEXT: bl .printf[PR] ; CHECK64-NEXT: nop ; CHECK64-NEXT: addi r1, r1, 112 @@ -52,14 +50,13 @@ define void @print_tls_func() { ; CHECK32-NEXT: stwu r1, -64(r1) ; CHECK32-NEXT: lwz r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" ; CHECK32-NEXT: stw r0, 72(r1) -; CHECK32-NEXT: lwz r6, L..C1(r2) # @__ModuleStringPool +; CHECK32-NEXT: lwz r6, L..C1(r2) # @_MergedGlobals ; CHECK32-NEXT: bla .__tls_get_mod[PR] ; CHECK32-NEXT: lwz r4, L..C2(r2) # target-flags(ppc-tlsld) @a ; CHECK32-NEXT: lwz r5, L..C3(r2) # target-flags(ppc-tlsld) @b ; CHECK32-NEXT: add r4, r3, r4 ; CHECK32-NEXT: add r5, r3, r5 -; CHECK32-NEXT: addi r3, r6, 71 -; CHECK32-NEXT: addi r6, r6, 56 +; CHECK32-NEXT: addi r3, r6, 72 ; CHECK32-NEXT: bl .printf[PR] ; CHECK32-NEXT: nop ; CHECK32-NEXT: addi r1, r1, 64 @@ -134,9 +131,9 @@ define void @test_func() { ; CHECK64: # %bb.0: # %entry ; CHECK64-NEXT: mflr r0 ; CHECK64-NEXT: stdu r1, -112(r1) -; CHECK64-NEXT: ld r3, L..C1(r2) # @__ModuleStringPool +; CHECK64-NEXT: ld r3, L..C1(r2) # @_MergedGlobals ; CHECK64-NEXT: std r0, 128(r1) -; CHECK64-NEXT: addi r3, r3, 16 +; CHECK64-NEXT: addi r3, r3, 32 ; CHECK64-NEXT: bl .callee[PR] ; CHECK64-NEXT: nop ; CHECK64-NEXT: addi r1, r1, 112 @@ -148,9 +145,9 @@ define void @test_func() { ; CHECK32: # %bb.0: # %entry ; CHECK32-NEXT: mflr r0 ; CHECK32-NEXT: stwu r1, -64(r1) -; CHECK32-NEXT: lwz r3, L..C1(r2) # @__ModuleStringPool +; CHECK32-NEXT: lwz r3, L..C1(r2) # @_MergedGlobals ; CHECK32-NEXT: stw r0, 72(r1) -; CHECK32-NEXT: addi r3, r3, 16 +; CHECK32-NEXT: addi r3, r3, 32 ; CHECK32-NEXT: bl .callee[PR] ; CHECK32-NEXT: nop ; CHECK32-NEXT: addi r1, r1, 64 @@ -201,8 +198,9 @@ define void @test_func2() { ; CHECK64: # %bb.0: # %entry ; CHECK64-NEXT: mflr r0 ; CHECK64-NEXT: stdu r1, -112(r1) -; CHECK64-NEXT: ld r3, L..C1(r2) # @__ModuleStringPool +; CHECK64-NEXT: ld r3, L..C1(r2) # @_MergedGlobals ; CHECK64-NEXT: std r0, 128(r1) +; CHECK64-NEXT: addi r3, r3, 16 ; CHECK64-NEXT: bl .callee2[PR] ; CHECK64-NEXT: nop ; CHECK64-NEXT: addi r1, r1, 112 @@ -214,8 +212,9 @@ define void @test_func2() { ; CHECK32: # %bb.0: # %entry ; CHECK32-NEXT: mflr r0 ; CHECK32-NEXT: stwu r1, -64(r1) -; CHECK32-NEXT: lwz r3, L..C1(r2) # @__ModuleStringPool +; CHECK32-NEXT: lwz r3, L..C1(r2) # @_MergedGlobals ; CHECK32-NEXT: stw r0, 72(r1) +; CHECK32-NEXT: addi r3, r3, 16 ; CHECK32-NEXT: bl .callee2[PR] ; CHECK32-NEXT: nop ; CHECK32-NEXT: addi r1, r1, 64 @@ -268,13 +267,17 @@ entry: ; CHECK64: .csect b[TL],2 ; CHECK64-NEXT: .lglobl b[TL] ; CHECK64-NEXT: .string "tls2" -; CHECK64: .csect L..__ModuleStringPool[RO],2 -; CHECK64-NEXT: .align 2 -; CHECK64-NEXT: .vbyte 4, 0x42af999a +; CHECK64: .csect L.._MergedGlobals[RO],2 +; CHECK64: .align 2 +; CHECK64-LABEL: c: +; CHECK64: .string "Regular global" +; CHECK64-LABEL: e: +; CHECK64: .vbyte 4, 0x42af999a ; CHECK64-NEXT: .vbyte 4, 0x42b1999a ; CHECK64-NEXT: .vbyte 4, 0x42b3cccd ; CHECK64-NEXT: .vbyte 4, 0x42b5999a -; CHECK64-NEXT: .vbyte 4, 1 +; CHECK64-LABEL: d: +; CHECK64: .vbyte 4, 1 ; CHECK64-NEXT: .vbyte 4, 2 ; CHECK64-NEXT: .vbyte 4, 3 ; CHECK64-NEXT: .vbyte 4, 4 @@ -284,10 +287,10 @@ entry: ; CHECK64-NEXT: .vbyte 4, 8 ; CHECK64-NEXT: .vbyte 4, 9 ; CHECK64-NEXT: .vbyte 4, 10 -; CHECK64-NEXT: .string "Regular global" -; CHECK64-NEXT: .byte 'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000 +; CHECK64-LABEL: L...str +; CHECK64: .byte 'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000 ; CHECK64: L..C1: -; CHECK64-NEXT: .tc L..__ModuleStringPool[TC],L..__ModuleStringPool[RO] +; CHECK64-NEXT: .tc L.._MergedGlobals[TC],L.._MergedGlobals[RO] ; CHECK64: L..C2: ; CHECK64-NEXT: .tc a[TC],a[TL]@ld ; CHECK64: L..C3: @@ -299,13 +302,17 @@ entry: ; CHECK32: .csect b[TL],2 ; CHECK32-NEXT: .lglobl b[TL] ; CHECK32-NEXT: .string "tls2" -; CHECK32: .csect L..__ModuleStringPool[RO],2 -; CHECK32-NEXT: .align 2 -; CHECK32-NEXT: .vbyte 4, 0x42af999a +; CHECK32: .csect L.._MergedGlobals[RO],2 +; CHECK32: .align 2 +; CHECK32-LABEL: c: +; CHECK32: .string "Regular global" +; CHECK32-LABEL: e: +; CHECK32: .vbyte 4, 0x42af999a ; CHECK32-NEXT: .vbyte 4, 0x42b1999a ; CHECK32-NEXT: .vbyte 4, 0x42b3cccd ; CHECK32-NEXT: .vbyte 4, 0x42b5999a -; CHECK32-NEXT: .vbyte 4, 1 +; CHECK32-LABEL: d: +; CHECK32: .vbyte 4, 1 ; CHECK32-NEXT: .vbyte 4, 2 ; CHECK32-NEXT: .vbyte 4, 3 ; CHECK32-NEXT: .vbyte 4, 4 @@ -315,10 +322,10 @@ entry: ; CHECK32-NEXT: .vbyte 4, 8 ; CHECK32-NEXT: .vbyte 4, 9 ; CHECK32-NEXT: .vbyte 4, 10 -; CHECK32-NEXT: .string "Regular global" -; CHECK32-NEXT: .byte 'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000 +; CHECK32-LABEL: L...str: +; CHECK32: .byte 'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000 ; CHECK32: L..C1: -; CHECK32-NEXT: .tc L..__ModuleStringPool[TC],L..__ModuleStringPool[RO] +; CHECK32-NEXT: .tc L.._MergedGlobals[TC],L.._MergedGlobals[RO] ; CHECK32: L..C2: ; CHECK32-NEXT: .tc a[TC],a[TL]@ld ; CHECK32: L..C3: diff --git a/llvm/test/CodeGen/PowerPC/mergeable-string-pool.ll b/llvm/test/CodeGen/PowerPC/mergeable-string-pool.ll index 833ed9fa65acf..2a937806f4bbf 100644 --- a/llvm/test/CodeGen/PowerPC/mergeable-string-pool.ll +++ b/llvm/test/CodeGen/PowerPC/mergeable-string-pool.ll @@ -1,6 +1,6 @@ -; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 -enable-global-merge=false \ +; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32,AIXDATA -; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 -enable-global-merge=false \ +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64,AIXDATA ; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \ ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE,LINUXDATA @@ -40,9 +40,9 @@ define dso_local signext i32 @str1() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) -; AIX32-NEXT: addi r3, r3, 422 +; AIX32-NEXT: addi r3, r3, 20 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -54,9 +54,9 @@ define dso_local signext i32 @str1() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) -; AIX64-NEXT: addi r3, r3, 422 +; AIX64-NEXT: addi r3, r3, 20 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -105,9 +105,9 @@ define dso_local signext i32 @str2() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) -; AIX32-NEXT: addi r3, r3, 388 +; AIX32-NEXT: addi r3, r3, 32 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -119,9 +119,9 @@ define dso_local signext i32 @str2() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) -; AIX64-NEXT: addi r3, r3, 388 +; AIX64-NEXT: addi r3, r3, 32 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -170,13 +170,13 @@ define dso_local signext i32 @str3() local_unnamed_addr #0 { ; AIX32-NEXT: stwu r1, -64(r1) ; AIX32-NEXT: stw r0, 72(r1) ; AIX32-NEXT: stw r30, 56(r1) # 4-byte Folded Spill -; AIX32-NEXT: lwz r30, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: addi r3, r30, 434 +; AIX32-NEXT: lwz r30, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: addi r3, r30, 44 ; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: mr r31, r3 -; AIX32-NEXT: addi r3, r30, 388 +; AIX32-NEXT: addi r3, r30, 32 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r3, r3, r31 @@ -193,13 +193,13 @@ define dso_local signext i32 @str3() local_unnamed_addr #0 { ; AIX64-NEXT: stdu r1, -128(r1) ; AIX64-NEXT: std r0, 144(r1) ; AIX64-NEXT: std r30, 112(r1) # 8-byte Folded Spill -; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: addi r3, r30, 434 +; AIX64-NEXT: ld r30, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: addi r3, r30, 44 ; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: mr r31, r3 -; AIX64-NEXT: addi r3, r30, 388 +; AIX64-NEXT: addi r3, r30, 32 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r3, r3, r31 @@ -272,9 +272,9 @@ define dso_local signext i32 @str4() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) -; AIX32-NEXT: addi r3, r3, 446 +; AIX32-NEXT: addi r3, r3, 56 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -286,9 +286,9 @@ define dso_local signext i32 @str4() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) -; AIX64-NEXT: addi r3, r3, 446 +; AIX64-NEXT: addi r3, r3, 56 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -335,9 +335,9 @@ define dso_local signext i32 @str5() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) -; AIX32-NEXT: addi r3, r3, 493 +; AIX32-NEXT: addi r3, r3, 736 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -349,9 +349,9 @@ define dso_local signext i32 @str5() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) -; AIX64-NEXT: addi r3, r3, 493 +; AIX64-NEXT: addi r3, r3, 736 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -398,15 +398,15 @@ define dso_local signext i32 @array1() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -96(r1) -; AIX32-NEXT: lwz r5, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: li r6, 372 +; AIX32-NEXT: lwz r5, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: li r6, 308 ; AIX32-NEXT: li r4, 12 ; AIX32-NEXT: addi r3, r1, 64 ; AIX32-NEXT: stw r0, 104(r1) ; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27 ; AIX32-NEXT: lxvw4x vs0, r5, r6 ; AIX32-NEXT: stxvw4x vs0, 0, r4 -; AIX32-NEXT: li r4, 360 +; AIX32-NEXT: li r4, 296 ; AIX32-NEXT: lxvw4x vs0, r5, r4 ; AIX32-NEXT: stxvw4x vs0, 0, r3 ; AIX32-NEXT: bl .calleeInt[PR] @@ -420,13 +420,13 @@ define dso_local signext i32 @array1() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -144(r1) -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: li r4, 372 +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: li r4, 308 ; AIX64-NEXT: std r0, 160(r1) ; AIX64-NEXT: lxvw4x vs0, r3, r4 ; AIX64-NEXT: addi r4, r1, 124 ; AIX64-NEXT: stxvw4x vs0, 0, r4 -; AIX64-NEXT: li r4, 360 +; AIX64-NEXT: li r4, 296 ; AIX64-NEXT: lxvw4x vs0, r3, r4 ; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: stxvw4x vs0, 0, r3 @@ -666,8 +666,8 @@ define dso_local signext i32 @str7() local_unnamed_addr #0 { ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: mr r31, r3 -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: addi r3, r3, 458 +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: addi r3, r3, 80 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r3, r3, r31 @@ -688,8 +688,8 @@ define dso_local signext i32 @str7() local_unnamed_addr #0 { ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: mr r31, r3 -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: addi r3, r3, 458 +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: addi r3, r3, 80 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r3, r3, r31 @@ -766,8 +766,8 @@ define dso_local signext i32 @mixed1() local_unnamed_addr #0 { ; AIX32-NEXT: bl .calleeInt[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: mr r31, r3 -; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: addi r3, r3, 400 +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: addi r3, r3, 68 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r3, r3, r31 @@ -787,8 +787,8 @@ define dso_local signext i32 @mixed1() local_unnamed_addr #0 { ; AIX64-NEXT: bl .calleeInt[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: mr r31, r3 -; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: addi r3, r3, 400 +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: addi r3, r3, 68 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r3, r3, r31 @@ -860,15 +860,15 @@ define dso_local signext i32 @mixed2() local_unnamed_addr #0 { ; AIX32-NEXT: stwu r1, -112(r1) ; AIX32-NEXT: stw r0, 120(r1) ; AIX32-NEXT: stw r30, 104(r1) # 4-byte Folded Spill -; AIX32-NEXT: lwz r30, L..C0(r2) # @__ModuleStringPool -; AIX32-NEXT: li r5, 372 +; AIX32-NEXT: lwz r30, L..C0(r2) # @_MergedGlobals +; AIX32-NEXT: li r5, 308 ; AIX32-NEXT: li r4, 12 ; AIX32-NEXT: addi r3, r1, 64 ; AIX32-NEXT: stw r31, 108(r1) # 4-byte Folded Spill ; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27 ; AIX32-NEXT: lxvw4x vs0, r30, r5 ; AIX32-NEXT: stxvw4x vs0, 0, r4 -; AIX32-NEXT: li r4, 360 +; AIX32-NEXT: li r4, 296 ; AIX32-NEXT: lxvw4x vs0, r30, r4 ; AIX32-NEXT: stxvw4x vs0, 0, r3 ; AIX32-NEXT: bl .calleeInt[PR] @@ -878,11 +878,11 @@ define dso_local signext i32 @mixed2() local_unnamed_addr #0 { ; AIX32-NEXT: bl .calleeInt[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r31, r3, r31 -; AIX32-NEXT: addi r3, r30, 400 +; AIX32-NEXT: addi r3, r30, 68 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r31, r31, r3 -; AIX32-NEXT: addi r3, r30, 473 +; AIX32-NEXT: addi r3, r30, 273 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: add r3, r31, r3 @@ -899,13 +899,13 @@ define dso_local signext i32 @mixed2() local_unnamed_addr #0 { ; AIX64-NEXT: stdu r1, -160(r1) ; AIX64-NEXT: std r0, 176(r1) ; AIX64-NEXT: std r30, 144(r1) # 8-byte Folded Spill -; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool -; AIX64-NEXT: li r3, 372 +; AIX64-NEXT: ld r30, L..C0(r2) # @_MergedGlobals +; AIX64-NEXT: li r3, 308 ; AIX64-NEXT: std r31, 152(r1) # 8-byte Folded Spill ; AIX64-NEXT: lxvw4x vs0, r30, r3 ; AIX64-NEXT: addi r3, r1, 124 ; AIX64-NEXT: stxvw4x vs0, 0, r3 -; AIX64-NEXT: li r3, 360 +; AIX64-NEXT: li r3, 296 ; AIX64-NEXT: lxvw4x vs0, r30, r3 ; AIX64-NEXT: addi r3, r1, 112 ; AIX64-NEXT: stxvw4x vs0, 0, r3 @@ -916,11 +916,11 @@ define dso_local signext i32 @mixed2() local_unnamed_addr #0 { ; AIX64-NEXT: bl .calleeInt[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r31, r3, r31 -; AIX64-NEXT: addi r3, r30, 400 +; AIX64-NEXT: addi r3, r30, 68 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r31, r31, r3 -; AIX64-NEXT: addi r3, r30, 473 +; AIX64-NEXT: addi r3, r30, 273 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: add r3, r31, r3 @@ -1033,8 +1033,9 @@ define dso_local signext i32 @str9() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C4(r2) # @.str.9 +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) +; AIX32-NEXT: addi r3, r3, 128 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -1046,8 +1047,9 @@ define dso_local signext i32 @str9() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C4(r2) # @.str.9 +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) +; AIX64-NEXT: addi r3, r3, 128 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -1092,8 +1094,9 @@ define dso_local signext i32 @str10() local_unnamed_addr #0 { ; AIX32: # %bb.0: # %entry ; AIX32-NEXT: mflr r0 ; AIX32-NEXT: stwu r1, -64(r1) -; AIX32-NEXT: lwz r3, L..C5(r2) # @.str.10 +; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals ; AIX32-NEXT: stw r0, 72(r1) +; AIX32-NEXT: addi r3, r3, 256 ; AIX32-NEXT: bl .callee[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: addi r1, r1, 64 @@ -1105,8 +1108,9 @@ define dso_local signext i32 @str10() local_unnamed_addr #0 { ; AIX64: # %bb.0: # %entry ; AIX64-NEXT: mflr r0 ; AIX64-NEXT: stdu r1, -112(r1) -; AIX64-NEXT: ld r3, L..C5(r2) # @.str.10 +; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals ; AIX64-NEXT: std r0, 128(r1) +; AIX64-NEXT: addi r3, r3, 256 ; AIX64-NEXT: bl .callee[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: addi r1, r1, 112 @@ -1148,8 +1152,18 @@ entry: attributes #0 = { nounwind } -; AIXDATA: .csect L..__ModuleStringPool[RO],3 -; AIXDATA: .align 3 # @__ModuleStringPool +; AIXDATA: .csect L.._MergedGlobals[RO],7 +; AIXDATA: .align 7 # @_MergedGlobals +; AIXDATA: .string "ABCABCABC" +; AIXDATA: .string "str1_STRING" +; AIXDATA: .string "str2_STRING" +; AIXDATA: .string "str3_STRING" +; AIXDATA: .string "str4_STRING" +; AIXDATA: .string "MixedString" +; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000 +; AIXDATA: .string "str9_STRING....." +; AIXDATA: .string "str10_STRING...." +; AIXDATA: .string "Different String 01" ; AIXDATA: .vbyte 4, 5 # 0x5 ; AIXDATA: .vbyte 4, 7 # 0x7 ; AIXDATA: .vbyte 4, 9 # 0x9 @@ -1157,14 +1171,6 @@ attributes #0 = { nounwind } ; AIXDATA: .vbyte 4, 17 # 0x11 ; AIXDATA: .vbyte 4, 1235 # 0x4d3 ; AIXDATA: .vbyte 4, 32 # 0x20 -; AIXDATA: .string "str2_STRING" -; AIXDATA: .string "MixedString" -; AIXDATA: .string "ABCABCABC" -; AIXDATA: .string "str1_STRING" -; AIXDATA: .string "str3_STRING" -; AIXDATA: .string "str4_STRING" -; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000 -; AIXDATA: .string "Different String 01" ; AIXDATA: .string "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING" ; LINUXDATA: .L__ModuleStringPool: