Skip to content

Commit 4d7e8c5

Browse files
committed
- Amode only for LD
- Add sorting key - Change generation of Rmode/Amode
1 parent 01549d4 commit 4d7e8c5

File tree

7 files changed

+50
-93
lines changed

7 files changed

+50
-93
lines changed

llvm/include/llvm/MC/MCGOFFAttributes.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ struct SDAttr {
5252
struct EDAttr {
5353
bool IsReadOnly = false;
5454
GOFF::ESDExecutable Executable = GOFF::ESD_EXE_Unspecified;
55-
GOFF::ESDAmode Amode;
5655
GOFF::ESDRmode Rmode;
5756
GOFF::ESDNameSpaceId NameSpace = GOFF::ESD_NS_NormalName;
5857
GOFF::ESDTextStyle TextStyle = GOFF::ESD_TS_ByteOriented;
@@ -78,7 +77,6 @@ struct PRAttr {
7877
bool IsReadOnly = false; // ???? Not documented.
7978
GOFF::ESDExecutable Executable = GOFF::ESD_EXE_Unspecified;
8079
GOFF::ESDLinkageType Linkage = GOFF::ESD_LT_XPLink;
81-
GOFF::ESDAmode Amode;
8280
GOFF::ESDBindingScope BindingScope = GOFF::ESD_BSC_Unspecified;
8381
GOFF::ESDDuplicateSymbolSeverity DuplicateSymbolSeverity =
8482
GOFF::ESD_DSS_NoWarning;

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2796,15 +2796,15 @@ MCSection *TargetLoweringObjectFileGOFF::getSectionForLSDA(
27962796

27972797
MCSectionGOFF *WSA = getContext().getGOFFSection(
27982798
SectionKind::getMetadata(), GOFF::CLASS_WSA,
2799-
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::AMODE, GOFF::RMODE,
2800-
GOFF::ESD_NS_Parts, GOFF::ESD_TS_ByteOriented,
2801-
GOFF::ESD_BA_Merge, GOFF::LOADBEHAVIOR, GOFF::ESD_RQ_0,
2799+
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::RMODE, GOFF::ESD_NS_Parts,
2800+
GOFF::ESD_TS_ByteOriented, GOFF::ESD_BA_Merge,
2801+
GOFF::LOADBEHAVIOR, GOFF::ESD_RQ_0,
28022802
GOFF::ESD_ALIGN_Doubleword},
28032803
static_cast<MCSectionGOFF *>(TextSection)->getParent());
28042804
return getContext().getGOFFSection(
28052805
SectionKind::getData(), Name,
28062806
GOFF::PRAttr{true, false, GOFF::ESD_EXE_Unspecified, GOFF::LINKAGE,
2807-
GOFF::AMODE, GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
2807+
GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
28082808
GOFF::ESD_ALIGN_Fullword, 0},
28092809
WSA);
28102810
}
@@ -2827,15 +2827,15 @@ MCSection *TargetLoweringObjectFileGOFF::SelectSectionForGlobal(
28272827
GOFF::SDAttr{GOFF::ESD_TA_Unspecified, SDBindingScope});
28282828
MCSectionGOFF *ED = getContext().getGOFFSection(
28292829
SectionKind::getMetadata(), GOFF::CLASS_WSA,
2830-
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::AMODE, GOFF::RMODE,
2831-
GOFF::ESD_NS_Parts, GOFF::ESD_TS_ByteOriented,
2832-
GOFF::ESD_BA_Merge, GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_0,
2830+
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::RMODE, GOFF::ESD_NS_Parts,
2831+
GOFF::ESD_TS_ByteOriented, GOFF::ESD_BA_Merge,
2832+
GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_0,
28332833
static_cast<GOFF::ESDAlignment>(GO->getAlignment())},
28342834
SD);
28352835
return getContext().getGOFFSection(
28362836
Kind, Symbol->getName(),
28372837
GOFF::PRAttr{false, false, GOFF::ESD_EXE_DATA, GOFF::LINKAGE,
2838-
GOFF::AMODE, PRBindingScope, GOFF::ESD_DSS_NoWarning,
2838+
PRBindingScope, GOFF::ESD_DSS_NoWarning,
28392839
static_cast<GOFF::ESDAlignment>(GO->getAlignment()), 0},
28402840
ED);
28412841
}

llvm/lib/MC/GOFFObjectWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@ class GOFFSymbol {
239239
// TODO Do we need/should set the "mangled" flag?
240240
BehavAttrs.setReadOnly(Attr.IsReadOnly);
241241
BehavAttrs.setExecutable(Attr.Executable);
242-
BehavAttrs.setAmode(Attr.Amode);
243242
BehavAttrs.setRmode(Attr.Rmode);
244243
BehavAttrs.setTextStyle(Attr.TextStyle);
245244
BehavAttrs.setBindingAlgorithm(Attr.BindAlgorithm);
@@ -266,7 +265,6 @@ class GOFFSymbol {
266265
SymbolFlags.setRenameable(Attr.IsRenamable);
267266
BehavAttrs.setExecutable(Attr.Executable);
268267
BehavAttrs.setAlignment(Attr.Alignment);
269-
BehavAttrs.setAmode(Attr.Amode);
270268
BehavAttrs.setLinkageType(Attr.Linkage);
271269
BehavAttrs.setBindingScope(Attr.BindingScope);
272270
BehavAttrs.setDuplicateSymbolSeverity(Attr.DuplicateSymbolSeverity);

llvm/lib/MC/MCObjectFileInfo.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -553,43 +553,43 @@ void MCObjectFileInfo::initGOFFMCObjectFileInfo(const Triple &T) {
553553

554554
MCSectionGOFF *ADAEDSection = Ctx->getGOFFSection(
555555
SectionKind::getMetadata(), GOFF::CLASS_WSA,
556-
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::AMODE, GOFF::RMODE,
557-
GOFF::ESD_NS_Parts, GOFF::ESD_TS_ByteOriented,
558-
GOFF::ESD_BA_Merge, GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_1,
556+
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::RMODE, GOFF::ESD_NS_Parts,
557+
GOFF::ESD_TS_ByteOriented, GOFF::ESD_BA_Merge,
558+
GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_1,
559559
GOFF::ESD_ALIGN_Quadword},
560560
RootSDSection);
561561
ADASection = Ctx->getGOFFSection(
562562
SectionKind::getData(), "#S",
563563
GOFF::PRAttr{false, false, GOFF::ESD_EXE_DATA, GOFF::ESD_LT_XPLink,
564-
GOFF::AMODE, GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
564+
GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
565565
GOFF::ESD_ALIGN_Quadword, 0},
566566
ADAEDSection);
567567

568568
TextSection = Ctx->getGOFFSection(
569569
SectionKind::getText(), GOFF::CLASS_CODE,
570-
GOFF::EDAttr{true, GOFF::ESD_EXE_CODE, GOFF::AMODE, GOFF::RMODE,
570+
GOFF::EDAttr{true, GOFF::ESD_EXE_CODE, GOFF::RMODE,
571571
GOFF::ESD_NS_NormalName, GOFF::ESD_TS_ByteOriented,
572572
GOFF::ESD_BA_Concatenate, GOFF::ESD_LB_Initial,
573573
GOFF::ESD_RQ_0, GOFF::ESD_ALIGN_Doubleword},
574574
RootSDSection);
575575

576576
MCSectionGOFF *PPA2ListEDSection = Ctx->getGOFFSection(
577577
SectionKind::getMetadata(), GOFF::CLASS_PPA2,
578-
GOFF::EDAttr{true, GOFF::ESD_EXE_DATA, GOFF::AMODE, GOFF::RMODE,
579-
GOFF::ESD_NS_Parts, GOFF::ESD_TS_ByteOriented,
580-
GOFF::ESD_BA_Merge, GOFF::ESD_LB_Initial, GOFF::ESD_RQ_0,
578+
GOFF::EDAttr{true, GOFF::ESD_EXE_DATA, GOFF::RMODE, GOFF::ESD_NS_Parts,
579+
GOFF::ESD_TS_ByteOriented, GOFF::ESD_BA_Merge,
580+
GOFF::ESD_LB_Initial, GOFF::ESD_RQ_0,
581581
GOFF::ESD_ALIGN_Doubleword},
582582
RootSDSection);
583583
PPA2ListSection = Ctx->getGOFFSection(
584584
SectionKind::getData(), ".&ppa2",
585585
GOFF::PRAttr{true, false, GOFF::ESD_EXE_Unspecified, GOFF::ESD_LT_OS,
586-
GOFF::AMODE, GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
586+
GOFF::ESD_BSC_Section, GOFF::ESD_DSS_NoWarning,
587587
GOFF::ESD_ALIGN_Doubleword, 0},
588588
PPA2ListEDSection);
589589

590590
IDRLSection = Ctx->getGOFFSection(
591591
SectionKind::getData(), "B_IDRL",
592-
GOFF::EDAttr{true, GOFF::ESD_EXE_Unspecified, GOFF::AMODE, GOFF::RMODE,
592+
GOFF::EDAttr{true, GOFF::ESD_EXE_Unspecified, GOFF::RMODE,
593593
GOFF::ESD_NS_NormalName, GOFF::ESD_TS_Structured,
594594
GOFF::ESD_BA_Concatenate, GOFF::ESD_LB_NoLoad,
595595
GOFF::ESD_RQ_0, GOFF::ESD_ALIGN_Doubleword},

llvm/lib/MC/MCSectionGOFF.cpp

Lines changed: 26 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -13,61 +13,11 @@
1313
using namespace llvm;
1414

1515
namespace {
16-
void emitRMode(raw_ostream &OS, GOFF::ESDRmode Rmode, bool UseParenthesis) {
17-
if (Rmode != GOFF::ESD_RMODE_None) {
18-
OS << "RMODE" << (UseParenthesis ? '(' : ' ');
19-
switch (Rmode) {
20-
case GOFF::ESD_RMODE_24:
21-
OS << "24";
22-
break;
23-
case GOFF::ESD_RMODE_31:
24-
OS << "31";
25-
break;
26-
case GOFF::ESD_RMODE_64:
27-
OS << "64";
28-
break;
29-
case GOFF::ESD_RMODE_None:
30-
break;
31-
}
32-
if (UseParenthesis)
33-
OS << ')';
34-
}
35-
}
36-
37-
void emitCATTR(raw_ostream &OS, StringRef Name, StringRef ParentName,
38-
bool EmitAmodeAndRmode, GOFF::ESDAmode Amode,
39-
GOFF::ESDRmode Rmode, GOFF::ESDAlignment Alignment,
16+
void emitCATTR(raw_ostream &OS, StringRef Name, GOFF::ESDRmode Rmode,
17+
GOFF::ESDAlignment Alignment,
4018
GOFF::ESDLoadingBehavior LoadBehavior,
4119
GOFF::ESDExecutable Executable, bool IsReadOnly,
42-
StringRef PartName) {
43-
if (EmitAmodeAndRmode && Amode != GOFF::ESD_AMODE_None) {
44-
OS << ParentName << " AMODE ";
45-
switch (Amode) {
46-
case GOFF::ESD_AMODE_24:
47-
OS << "24";
48-
break;
49-
case GOFF::ESD_AMODE_31:
50-
OS << "31";
51-
break;
52-
case GOFF::ESD_AMODE_ANY:
53-
OS << "ANY";
54-
break;
55-
case GOFF::ESD_AMODE_64:
56-
OS << "64";
57-
break;
58-
case GOFF::ESD_AMODE_MIN:
59-
OS << "ANY64";
60-
break;
61-
case GOFF::ESD_AMODE_None:
62-
break;
63-
}
64-
OS << "\n";
65-
}
66-
if (EmitAmodeAndRmode && Rmode != GOFF::ESD_RMODE_None) {
67-
OS << ParentName << ' ';
68-
emitRMode(OS, Rmode, /*UseParenthesis=*/false);
69-
OS << "\n";
70-
}
20+
uint32_t SortKey, StringRef PartName) {
7121
OS << Name << " CATTR ";
7222
OS << "ALIGN(" << static_cast<unsigned>(Alignment) << ")";
7323
switch (LoadBehavior) {
@@ -94,8 +44,24 @@ void emitCATTR(raw_ostream &OS, StringRef Name, StringRef ParentName,
9444
OS << ",READONLY";
9545
if (Rmode != GOFF::ESD_RMODE_None) {
9646
OS << ',';
97-
emitRMode(OS, Rmode, /*UseParenthesis=*/true);
47+
OS << "RMODE(";
48+
switch (Rmode) {
49+
case GOFF::ESD_RMODE_24:
50+
OS << "24";
51+
break;
52+
case GOFF::ESD_RMODE_31:
53+
OS << "31";
54+
break;
55+
case GOFF::ESD_RMODE_64:
56+
OS << "64";
57+
break;
58+
case GOFF::ESD_RMODE_None:
59+
break;
60+
}
61+
OS << ')';
9862
}
63+
if (SortKey)
64+
OS << ",PRIORITY(" << SortKey << ")";
9965
if (!PartName.empty())
10066
OS << ",PART(" << PartName << ")";
10167
OS << '\n';
@@ -112,27 +78,24 @@ void MCSectionGOFF::printSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
11278
break;
11379
}
11480
case GOFF::ESD_ST_ElementDefinition: {
115-
bool ParentEmitted = getParent()->Emitted;
11681
getParent()->printSwitchToSection(MAI, T, OS, Subsection);
11782
if (!Emitted) {
118-
emitCATTR(OS, Name, getParent()->getName(), !ParentEmitted,
119-
EDAttributes.Amode, EDAttributes.Rmode, EDAttributes.Alignment,
83+
emitCATTR(OS, Name, EDAttributes.Rmode, EDAttributes.Alignment,
12084
EDAttributes.LoadBehavior, EDAttributes.Executable,
121-
EDAttributes.IsReadOnly, StringRef());
85+
EDAttributes.IsReadOnly, 0, StringRef());
12286
Emitted = true;
12387
} else
12488
OS << Name << " CATTR ,\n";
12589
break;
12690
}
12791
case GOFF::ESD_ST_PartReference: {
12892
MCSectionGOFF *ED = getParent();
129-
bool SDEmitted = ED->getParent()->Emitted;
13093
ED->getParent()->printSwitchToSection(MAI, T, OS, Subsection);
13194
if (!Emitted) {
132-
emitCATTR(OS, ED->getName(), ED->getParent()->getName(), !SDEmitted,
133-
PRAttributes.Amode, getParent()->EDAttributes.Rmode,
134-
PRAttributes.Alignment, getParent()->EDAttributes.LoadBehavior,
135-
PRAttributes.Executable, PRAttributes.IsReadOnly, Name);
95+
emitCATTR(OS, ED->getName(), ED->getEDAttributes().Rmode,
96+
PRAttributes.Alignment, ED->EDAttributes.LoadBehavior,
97+
PRAttributes.Executable, PRAttributes.IsReadOnly,
98+
PRAttributes.SortKey, Name);
13699
ED->Emitted = true;
137100
Emitted = true;
138101
} else

llvm/test/CodeGen/SystemZ/zos-simple-test.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
define signext i32 @main() {
88
; CHECK: stdin#C CSECT
9-
; CHECK: stdin#C AMODE 64
10-
; CHECK: stdin#C RMODE 64
119
; CHECK: C_CODE64 CATTR ALIGN(3),EXECUTABLE,READONLY,RMODE(64)
1210
; CHECK: main:
1311
; CHECK: stdin#C CSECT

llvm/test/MC/GOFF/section.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ entry:
4545
; CHECK-NEXT: 00000a0 03 00 00 01 [[C_CODE64:00 00 00 02]] [[ROOTSD]] 00 00 00 00
4646
; CHECK-NEXT: 00000b0 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
4747
; CHECK-NEXT: 00000c0 00 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00
48-
; CHECK-NEXT: 00000d0 00 00 00 00 00 00 00 00 00 00 00 00 04 04 00 0a
48+
; CHECK-NEXT: 00000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 0a
4949
; CHECK-NEXT: 00000e0 00 00 03 00 00 00 00 08 c3 6d c3 d6 c4 c5 f6 f4
5050

5151
; ESD record, type ED.
@@ -54,7 +54,7 @@ entry:
5454
; CHECK-NEXT: 00000f0 03 01 00 01 [[C_QPPA2:00 00 00 03]] [[ROOTSD]] 00 00 00 00
5555
; CHECK-NEXT: 0000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5656
; CHECK-NEXT: 0000110 00 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00
57-
; CHECK-NEXT: 0000120 00 00 00 00 00 00 00 00 00 00 00 00 04 04 01 09
57+
; CHECK-NEXT: 0000120 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 09
5858
; CHECK-NEXT: 0000130 00 00 03 00 00 00 00 09 c3 6d 7c 7c d8 d7 d7 c1
5959
;
6060
; Continuation:
@@ -69,31 +69,31 @@ entry:
6969
; CHECK-NEXT: 0000190 03 00 00 03 [[PPA2:00 00 00 04]] [[C_QPPA2]] 00 00 00 00
7070
; CHECK-NEXT: 00001a0 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00
7171
; CHECK-NEXT: 00001b0 00 00 00 00 00 00 00 00 03 20 00 00 00 00 00 00
72-
; CHECK-NEXT: 00001c0 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00
72+
; CHECK-NEXT: 00001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7373
; CHECK-NEXT: 00001d0 00 01 03 00 00 00 00 06 4b 50 97 97 81 f2 00 00
7474

7575
; ESD record, type ED.
7676
; The name is C_WSA64.
7777
; CHECK-NEXT: 00001e0 03 00 00 01 [[C_WSA64:00 00 00 05]] [[ROOTSD]] 00 00 00 00
7878
; CHECK-NEXT: 00001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7979
; CHECK-NEXT: 0000200 00 00 00 00 00 00 00 00 03 81 00 00 00 00 00 00
80-
; CHECK-NEXT: 0000210 00 00 00 00 00 00 00 00 00 00 00 00 04 04 01 01
80+
; CHECK-NEXT: 0000210 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 01
8181
; CHECK-NEXT: 0000220 00 40 04 00 00 00 00 07 c3 6d e6 e2 c1 f6 f4 00
8282

8383
; ESD record, type PR.
8484
; The name is test#S.
8585
; CHECK-NEXT: 0000230 03 00 00 03 [[TESTS:00 00 00 06]] [[C_WSA64]] 00 00 00 00
8686
; CHECK-NEXT: 0000240 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
8787
; CHECK-NEXT: 0000250 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
88-
; CHECK-NEXT: 0000260 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 01
88+
; CHECK-NEXT: 0000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
8989
; CHECK-NEXT: 0000270 00 01 24 00 00 00 00 06 a3 85 a2 a3 7b e2 00 00
9090

9191
; ESD record, type ED.
9292
; The name is B_IDRL.
9393
; CHECK-NEXT: 0000280 03 00 00 01 [[BIDRL:00 00 00 07]] [[ROOTSD]] 00 00 00 00
9494
; CHECK-NEXT: 0000290 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
9595
; CHECK-NEXT: 00002a0 00 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00
96-
; CHECK-NEXT: 00002b0 00 00 00 00 00 00 00 00 00 00 00 00 04 04 10 08
96+
; CHECK-NEXT: 00002b0 00 00 00 00 00 00 00 00 00 00 00 00 00 04 10 08
9797
; CHECK-NEXT: 00002c0 00 80 03 00 00 00 00 06 c2 6d c9 c4 d9 d3 00 00
9898

9999
; ESD record, type LD.

0 commit comments

Comments
 (0)