[PATCH] D70310: [AIX][XCOFF] Add support for generating assembly code for one-byte mergable strings
Xing Xue via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 20 08:34:38 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rG5665fc91fe93: [AIX][XCOFF] Add support for generating assembly code for one-byte mergable… (authored by xingxue).
Changed prior to commit:
https://reviews.llvm.org/D70310?vs=229534&id=230272#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70310/new/
https://reviews.llvm.org/D70310
Files:
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll
Index: llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/PowerPC/aix-xcoff-mergeable-str.ll
@@ -0,0 +1,28 @@
+; This file tests the codegen of mergeable strings in AIX assembly only.
+; Once the codegen of mergeable strings for XCOFF object files is supported
+; the test in this file should be merged into aix-xcoff-data.ll with additional
+; tests for XCOFF object files.
+
+; RUN: llc -verify-machineinstrs -mcpu=pwr7 \
+; RUN: -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s
+; RUN: llc -verify-machineinstrs -mcpu=pwr7 \
+; RUN: -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s
+
+ at strA = private unnamed_addr constant [14 x i8] c"hello world!\0A\00", align 1
+
+; CHECK: .csect .rodata.str1.1[RO]
+; CHECK-NEXT: .LstrA:
+; CHECK-NEXT: .byte 104
+; CHECK-NEXT: .byte 101
+; CHECK-NEXT: .byte 108
+; CHECK-NEXT: .byte 108
+; CHECK-NEXT: .byte 111
+; CHECK-NEXT: .byte 32
+; CHECK-NEXT: .byte 119
+; CHECK-NEXT: .byte 111
+; CHECK-NEXT: .byte 114
+; CHECK-NEXT: .byte 108
+; CHECK-NEXT: .byte 100
+; CHECK-NEXT: .byte 33
+; CHECK-NEXT: .byte 10
+; CHECK-NEXT: .byte 0
Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -1749,7 +1749,8 @@
SectionKind GVKind = getObjFileLowering().getKindForGlobal(GV, TM);
if ((!GVKind.isCommon() && !GVKind.isBSS() && !GVKind.isData() &&
!GVKind.isReadOnly()) ||
- GVKind.isMergeableCString() || GVKind.isMergeableConst())
+ GVKind.isMergeable2ByteCString() || GVKind.isMergeable4ByteCString() ||
+ GVKind.isMergeableConst())
report_fatal_error("Encountered a global variable kind that is "
"not supported yet.");
Index: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
===================================================================
--- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1849,6 +1849,24 @@
SC, Kind, /* BeginSymbolName */ nullptr);
}
+ if (Kind.isMergeableCString()) {
+ if (!Kind.isMergeable1ByteCString())
+ report_fatal_error("Unhandled multi-byte mergeable string kind.");
+
+ unsigned Align = GO->getParent()->getDataLayout().getPreferredAlignment(
+ cast<GlobalVariable>(GO));
+
+ unsigned EntrySize = getEntrySizeForKind(Kind);
+ std::string SizeSpec = ".rodata.str" + utostr(EntrySize) + ".";
+ SmallString<128> Name;
+ Name = SizeSpec + utostr(Align);
+
+ return getContext().getXCOFFSection(
+ Name, XCOFF::XMC_RO, XCOFF::XTY_SD,
+ TargetLoweringObjectFileXCOFF::getStorageClassForGlobal(GO),
+ Kind, /* BeginSymbolName */ nullptr);
+ }
+
if (Kind.isText())
return TextSection;
@@ -1861,8 +1879,7 @@
if (Kind.isBSS())
return DataSection;
- if (Kind.isReadOnly() && !Kind.isMergeableConst() &&
- !Kind.isMergeableCString())
+ if (Kind.isReadOnly() && !Kind.isMergeableConst())
return ReadOnlySection;
report_fatal_error("XCOFF other section types not yet implemented.");
@@ -1920,6 +1937,7 @@
const GlobalObject *GO) {
switch (GO->getLinkage()) {
case GlobalValue::InternalLinkage:
+ case GlobalValue::PrivateLinkage:
return XCOFF::C_HIDEXT;
case GlobalValue::ExternalLinkage:
case GlobalValue::CommonLinkage:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70310.230272.patch
Type: text/x-patch
Size: 3542 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191120/e155fa5e/attachment-0001.bin>
More information about the llvm-commits
mailing list