Skip to content

Commit 4be525f

Browse files
committed
Address second round of review comments.
- Change setting per global code model on MCSymbol to the ASMPrinters initialization so it happens once. - Add some globals without explicit code models to the lit test.
1 parent 792c839 commit 4be525f

File tree

2 files changed

+58
-30
lines changed

2 files changed

+58
-30
lines changed

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -501,25 +501,16 @@ static CodeModel::Model getCodeModel(const PPCSubtarget &S,
501501
return ModuleModel;
502502
}
503503

504-
static void checkPerGlobalCodeModel(const GlobalValue *GV, MCSymbol *Sym) {
505-
// ELF per global code model not supported yet.
506-
if (!isa<MCSymbolXCOFF>(Sym))
507-
return;
508-
504+
static std::optional<CodeModel::Model>
505+
hasPerGlobalCodeModel(const GlobalValue *GV) {
509506
// Symbols that aren't global variables cannot have the attribute.
510507
if (!isa<GlobalVariable>(GV))
511-
return;
512-
513-
const GlobalVariable *GVar = cast<GlobalVariable>(GV);
514-
std::optional<CodeModel::Model> MaybeCM = GVar->getCodeModel();
508+
return std::nullopt;
515509

516-
// No overriding atribute.
517-
if (!MaybeCM)
518-
return;
519-
520-
CodeModel::Model CM = *MaybeCM;
510+
return cast<GlobalVariable>(GV)->getCodeModel();
511+
}
521512

522-
MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(Sym);
513+
static void setOptionalCodeModel(MCSymbolXCOFF *XSym, CodeModel::Model CM) {
523514
switch (CM) {
524515
case CodeModel::Large:
525516
XSym->setPerSymbolCodeModel(MCSymbolXCOFF::CM_Large);
@@ -528,7 +519,7 @@ static void checkPerGlobalCodeModel(const GlobalValue *GV, MCSymbol *Sym) {
528519
XSym->setPerSymbolCodeModel(MCSymbolXCOFF::CM_Small);
529520
return;
530521
default:
531-
report_fatal_error("Invlaid code model for AIX");
522+
report_fatal_error("Invalid code model for AIX");
532523
}
533524
}
534525

@@ -784,7 +775,6 @@ static MCSymbol *getMCSymbolForTOCPseudoMO(const MachineOperand &MO,
784775
case MachineOperand::MO_GlobalAddress: {
785776
const GlobalValue *GV = MO.getGlobal();
786777
MCSymbol *Sym = AP.getSymbol(GV);
787-
checkPerGlobalCodeModel(GV, Sym);
788778
return Sym;
789779
}
790780
case MachineOperand::MO_ConstantPoolIndex:
@@ -3030,6 +3020,11 @@ bool PPCAIXAsmPrinter::doInitialization(Module &M) {
30303020
}
30313021

30323022
setCsectAlignment(&G);
3023+
std::optional<CodeModel::Model> OptionalCodeModel =
3024+
hasPerGlobalCodeModel(&G);
3025+
if (OptionalCodeModel)
3026+
setOptionalCodeModel(cast<MCSymbolXCOFF>(getSymbol(&G)),
3027+
*OptionalCodeModel);
30333028
}
30343029

30353030
for (const auto &F : M)

llvm/test/CodeGen/PowerPC/aix-codemodel-attr.ll

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
; RUN: llc --verify-machineinstrs -mtriple powerpc-ibm-aix --code-model=small < \
2-
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK32 %s
2+
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK32,CHECK-SMALL,CHECK-SMALL32 %s
33

44
; RUN: llc --verify-machineinstrs -mtriple powerpc-ibm-aix --code-model=large < \
5-
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK32 %s
5+
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK32,CHECK-LARGE,CHECK-LARGE32 %s
66

77
; RUN: llc --verify-machineinstrs -mtriple powerpc64-ibm-aix --code-model=small < \
8-
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK64 %s
8+
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK64,CHECK-SMALL,CHECK-SMALL64 %s
99

1010
; RUN: llc --verify-machineinstrs -mtriple powerpc64-ibm-aix --code-model=large < \
11-
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK64 %s
11+
; RUN: %s | FileCheck --check-prefixes=CHECK,CHECK64,CHECK-LARGE,CHECK-LARGE64 %s
1212

1313
@a = external dso_local global i32, code_model "small", align 4
1414
@b = external dso_local global i32, code_model "large", align 4
1515
@c = dso_local global i32 55, code_model "small", align 4
1616
@d = dso_local global i32 41, code_model "large", align 4
17-
17+
@e = external dso_local global i32, align 4
18+
@f = dso_local global i32 2748, align 4
1819

1920
define i32 @A() local_unnamed_addr {
2021
entry:
@@ -58,6 +59,32 @@ entry:
5859
; CHECK: lwz 3, 0([[ADDR]])
5960
; CHECK: blr
6061

62+
define i32 @E() {
63+
entry:
64+
%0 = load i32, ptr @e, align 4
65+
ret i32 %0
66+
}
67+
; CHECK-LARGE: addis [[HI:[0-9]+]], L..C[[TL_E:[0-9]+]]@u(2)
68+
; CHECK-LARGE32: lwz [[SCRATCH:[0-9]+]], L..C[[TL_E]]@l([[HI]])
69+
; CHECK-SMALL32: lwz [[SCRATCH:[0-9]+]], L..C[[TL_E:[0-9]+]](2)
70+
; CHECK-LARGE64: ld [[SCRATCH:[0-9]+]], L..C[[TL_E]]@l([[HI]])
71+
; CHECK-SMALL64: ld [[SCRATCH:[0-9]+]], L..C[[TL_E:[0-9]+]](2)
72+
; CHECK: lwz 3, 0([[SCRATCH]])
73+
; CHECK: blr
74+
75+
define i32 @F() {
76+
entry:
77+
%0 = load i32, ptr @f, align 4
78+
ret i32 %0
79+
}
80+
; CHECK-LARGE: addis [[HI:[0-9]+]], L..C[[TL_F:[0-9]+]]@u(2)
81+
; CHECK-LARGE32: lwz [[SCRATCH:[0-9]+]], L..C[[TL_F]]@l([[HI]])
82+
; CHECK-SMALL32: lwz [[SCRATCH:[0-9]+]], L..C[[TL_F:[0-9]+]](2)
83+
; CHECK-LARGE64: ld [[SCRATCH:[0-9]+]], L..C[[TL_F]]@l([[HI]])
84+
; CHECK-SMALL64: ld [[SCRATCH:[0-9]+]], L..C[[TL_F:[0-9]+]](2)
85+
; CHECK: lwz 3, 0([[SCRATCH]])
86+
; CHECK: blr
87+
6188
define noundef nonnull ptr @addr_a() local_unnamed_addr {
6289
entry:
6390
ret ptr @a
@@ -94,11 +121,17 @@ entry:
94121
; CHECK: blr
95122

96123
;; Check TOC entires have correct storage mapping class
97-
; CHECK: L..C[[TL_A]]:
98-
; CHECK: .tc a[TC],a[UA]
99-
; CHECK: L..C[[TL_B]]:
100-
; CHECK: .tc b[TE],b[UA]
101-
; CHECK: L..C[[TL_C]]:
102-
; CHECK: .tc c[TC],c[RW]
103-
; CHECK: L..C[[TL_D]]:
104-
; CHECK: .tc d[TE],d[RW]
124+
; CHECK: L..C[[TL_A]]:
125+
; CHECK: .tc a[TC],a[UA]
126+
; CHECK: L..C[[TL_B]]:
127+
; CHECK: .tc b[TE],b[UA]
128+
; CHECK: L..C[[TL_C]]:
129+
; CHECK: .tc c[TC],c[RW]
130+
; CHECK: L..C[[TL_D]]:
131+
; CHECK: .tc d[TE],d[RW]
132+
; CHECK: L..C[[TL_E]]:
133+
; CHECK-SMALL: .tc e[TC],e[UA]
134+
; CHECK-LARGE: .tc e[TE],e[UA]
135+
; CHECK: L..C[[TL_F]]:
136+
; CHECK-SMALL: .tc f[TC],f[RW]
137+
; CHECK-LARGE: .tc f[TE],f[RW]

0 commit comments

Comments
 (0)