[llvm] [AIX] [XCOFF] Add support for common and local common symbols in the TOC (PR #79530)

zhijian lin via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 13:18:09 PST 2024


================
@@ -0,0 +1,204 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix CHECK
+; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix CHECK64
+
+; RUN: llc -filetype=obj -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -o %t32.o
+; RUN: llvm-objdump -t --symbol-description %t32.o | FileCheck %s --check-prefix=OBJ32
+
+; RUN: llc -filetype=obj -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -o %t64.o
+; RUN: llvm-objdump -t --symbol-description %t64.o | FileCheck %s --check-prefix=OBJ64
+
+ at a1 = common global i32 0, align 4 #0
+ at a2 = global i32 0, align 4 #0
+ at a3 = common global i32 0, align 4
+ at a4 = global i32 0, align 4
+
+define void @set(i32 noundef %_a) {
+; CHECK-LABEL: set:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: la 4, a2[TD](2)
+; CHECK-NEXT: la 5, a1[TD](2)
+; CHECK-NEXT: stw 3, 0(4)
+; CHECK-NEXT: lwz 4, L..C0(2) # @a4
+; CHECK-NEXT: stw 3, 0(5)
+; CHECK-NEXT: lwz 5, L..C1(2) # @a3
+; CHECK-NEXT: stw 3, 0(4)
+; CHECK-NEXT: stw 3, 0(5)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: set:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: la 4, a2[TD](2)
+; CHECK64-NEXT: la 5, a1[TD](2)
+; CHECK64-NEXT: stw 3, 0(4)
+; CHECK64-NEXT: ld 4, L..C0(2) # @a4
+; CHECK64-NEXT: stw 3, 0(5)
+; CHECK64-NEXT: ld 5, L..C1(2) # @a3
+; CHECK64-NEXT: stw 3, 0(4)
+; CHECK64-NEXT: stw 3, 0(5)
+; CHECK64-NEXT: blr
+entry:
+store i32 %_a, ptr @a2, align 4
+store i32 %_a, ptr @a1, align 4
+store i32 %_a, ptr @a4, align 4
+store i32 %_a, ptr @a3, align 4
+ret void
+}
+
+define i32 @get1() {
+; CHECK-LABEL: get1:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: la 3, a2[TD](2)
+; CHECK-NEXT: lwz 3, 0(3)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: get1:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: la 3, a2[TD](2)
+; CHECK64-NEXT: lwz 3, 0(3)
+; CHECK64-NEXT: blr
+entry:
+%0 = load i32, ptr @a2, align 4
+ret i32 %0
+}
+
+define i32 @get2() {
+; CHECK-LABEL: get2:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: la 3, a1[TD](2)
+; CHECK-NEXT: lwz 3, 0(3)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: get2:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: la 3, a1[TD](2)
+; CHECK64-NEXT: lwz 3, 0(3)
+; CHECK64-NEXT: blr
+entry:
+%0 = load i32, ptr @a1, align 4
+ret i32 %0
+}
+
+define i32 @get3() {
+; CHECK-LABEL: get3:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lwz 3, L..C0(2) # @a4
+; CHECK-NEXT: lwz 3, 0(3)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: get3:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: ld 3, L..C0(2) # @a4
+; CHECK64-NEXT: lwz 3, 0(3)
+; CHECK64-NEXT: blr
+entry:
+%0 = load i32, ptr @a4, align 4
+ret i32 %0
+}
+
+define i32 @get4() {
+; CHECK-LABEL: get4:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lwz 3, L..C1(2) # @a3
+; CHECK-NEXT: lwz 3, 0(3)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: get4:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: ld 3, L..C1(2) # @a3
+; CHECK64-NEXT: lwz 3, 0(3)
+; CHECK64-NEXT: blr
+entry:
+%0 = load i32, ptr @a3, align 4
+ret i32 %0
+}
+
+define nonnull ptr @escape1() {
+; CHECK-LABEL: escape1:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: la 3, a2[TD](2)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: escape1:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: la 3, a2[TD](2)
+; CHECK64-NEXT: blr
+entry:
+ret ptr @a2
+}
+
+define nonnull ptr @escape2() {
+; CHECK-LABEL: escape2:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: la 3, a1[TD](2)
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: escape2:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: la 3, a1[TD](2)
+; CHECK64-NEXT: blr
+entry:
+ret ptr @a1
+}
+
+define nonnull ptr @escape3() {
+; CHECK-LABEL: escape3:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lwz 3, L..C0(2) # @a4
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: escape3:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: ld 3, L..C0(2) # @a4
+; CHECK64-NEXT: blr
+entry:
+ret ptr @a4
+}
+
+define nonnull ptr @escape4() {
+; CHECK-LABEL: escape4:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lwz 3, L..C1(2) # @a3
+; CHECK-NEXT: blr
+;
+; CHECK64-LABEL: escape4:
+; CHECK64: # %bb.0: # %entry
+; CHECK64-NEXT: ld 3, L..C1(2) # @a3
+; CHECK64-NEXT: blr
+entry:
+ret ptr @a3
+}
+
+attributes #0 = { "toc-data" }
+
+; CHECK,CHECK64: .comm a3[RW],4,2 # @a3
----------------
diggerlin wrote:

if use 
--check-prefixes=CHECK,COMMON
--check-prefixes=CHECK64,COMMON
In the command,

please change this to 
`COMMON: .comm a3[RW],4,2 # @a3`
and following

https://github.com/llvm/llvm-project/pull/79530


More information about the llvm-commits mailing list