Skip to content

Commit cbfe29b

Browse files
committed
Print assembly in the tlsVar+Offset-Delta method instead
1 parent b961d17 commit cbfe29b

File tree

3 files changed

+27
-28
lines changed

3 files changed

+27
-28
lines changed

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,25 +1654,24 @@ const MCExpr *PPCAsmPrinter::getAdjustedLocalExecExpr(const MachineOperand &MO,
16541654
// non-zero offset to the TLS variable address.
16551655
// For when TLS variables are extern, this is safe to do because we can
16561656
// assume that the address of extern TLS variables are zero.
1657-
if (FinalAddress < 32768)
1658-
Expr = MCBinaryExpr::createAdd(
1659-
Expr, MCConstantExpr::create(Offset, OutContext), OutContext);
1660-
else {
1657+
Expr = MCBinaryExpr::createAdd(
1658+
Expr, MCConstantExpr::create(Offset, OutContext), OutContext);
1659+
if (FinalAddress >= 32768) {
16611660
// Handle the written offset for cases where:
16621661
// TLS variable address + Offset > 32KB.
16631662

1664-
// The assembly that is printed is actually:
1663+
// The assembly that is printed will look like:
16651664
// TLSVar@le + Offset - Delta
16661665
// where Delta is a multiple of 64KB: ((FinalAddress + 32768) & ~0xFFFF).
1667-
ptrdiff_t OffsetDelta = Offset - ((FinalAddress + 32768) & ~0xFFFF);
1666+
ptrdiff_t Delta = ((FinalAddress + 32768) & ~0xFFFF);
16681667
// Check that the total instruction displacement fits within [-32768,32768).
1669-
ptrdiff_t InstDisp = TLSVarAddress + OffsetDelta;
1668+
ptrdiff_t InstDisp = TLSVarAddress + Offset - Delta;
16701669
assert((InstDisp < 32768) ||
16711670
(InstDisp >= -32768) &&
16721671
"Expecting the instruction displacement for local-exec TLS "
16731672
"variables to be between [-32768, 32768)!");
16741673
Expr = MCBinaryExpr::createAdd(
1675-
Expr, MCConstantExpr::create(OffsetDelta, OutContext), OutContext);
1674+
Expr, MCConstantExpr::create(-Delta, OutContext), OutContext);
16761675
}
16771676

16781677
return Expr;

llvm/test/CodeGen/PowerPC/aix-small-local-exec-tls-largeaccess.ll

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ define signext i32 @StoreArrays1() {
3030
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, mySmallLocalExecTLSv1[TL]@le(r13)
3131
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 2
3232
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, mySmallLocalExecTLSv1[TL]@le+24(r13)
33-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, mySmallLocalExecTLS2[TL]@le-65216(r13)
33+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, (mySmallLocalExecTLS2[TL]@le+320)-65536(r13)
3434
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 3
35-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, mySmallLocalExecTLS3[TL]@le-65212(r13)
35+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, (mySmallLocalExecTLS3[TL]@le+324)-65536(r13)
3636
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 88
37-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, mySmallLocalExecTLS4[TL]@le-65208(r13)
38-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, mySmallLocalExecTLS5[TL]@le-65204(r13)
37+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, (mySmallLocalExecTLS4[TL]@le+328)-65536(r13)
38+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, (mySmallLocalExecTLS5[TL]@le+332)-65536(r13)
3939
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 102
4040
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: blr
4141
;
@@ -46,12 +46,12 @@ define signext i32 @StoreArrays1() {
4646
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLSv1[TL]@le(r13)
4747
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 2
4848
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, mySmallLocalExecTLSv1[TL]@le+24(r13)
49-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS2[TL]@le-65216(r13)
49+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS2[TL]@le+320)-65536(r13)
5050
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 3
51-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS3[TL]@le-65212(r13)
51+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS3[TL]@le+324)-65536(r13)
5252
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 88
53-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, mySmallLocalExecTLS4[TL]@le-65208(r13)
54-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS5[TL]@le-65204(r13)
53+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, (mySmallLocalExecTLS4[TL]@le+328)-65536(r13)
54+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS5[TL]@le+332)-65536(r13)
5555
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 102
5656
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: blr
5757
entry:
@@ -95,13 +95,13 @@ define signext i32 @StoreArrays2() {
9595
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 4
9696
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, 24(r4)
9797
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r4, 2
98-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, mySmallLocalExecTLS2[TL]@le-65216(r13)
98+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, (mySmallLocalExecTLS2[TL]@le+320)-65536(r13)
9999
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r4, 3
100-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, mySmallLocalExecTLS3[TL]@le-65212(r13)
100+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, (mySmallLocalExecTLS3[TL]@le+324)-65536(r13)
101101
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r4, 88
102-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, mySmallLocalExecTLS4[TL]@le-65208(r13)
102+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r3, (mySmallLocalExecTLS4[TL]@le+328)-65536(r13)
103103
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 102
104-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, mySmallLocalExecTLS5[TL]@le-65204(r13)
104+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: stw r4, (mySmallLocalExecTLS5[TL]@le+332)-65536(r13)
105105
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: blr
106106
;
107107
; SMALL-LOCAL-EXEC-LARGECM64-LABEL: StoreArrays2:
@@ -114,12 +114,12 @@ define signext i32 @StoreArrays2() {
114114
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r4, 4
115115
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, 24(r3)
116116
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 2
117-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS2[TL]@le-65216(r13)
117+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS2[TL]@le+320)-65536(r13)
118118
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 3
119-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS3[TL]@le-65212(r13)
119+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS3[TL]@le+324)-65536(r13)
120120
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 88
121-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, mySmallLocalExecTLS4[TL]@le-65208(r13)
122-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, mySmallLocalExecTLS5[TL]@le-65204(r13)
121+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r4, (mySmallLocalExecTLS4[TL]@le+328)-65536(r13)
122+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: stw r3, (mySmallLocalExecTLS5[TL]@le+332)-65536(r13)
123123
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 102
124124
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: blr
125125
entry:

llvm/test/CodeGen/PowerPC/aix-small-local-exec-tls-largeaccess2.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ define i64 @StoreLargeAccess1() {
4242
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r4, 100
4343
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: std r3, mySmallLocalExecTLS3[TL]@le+2000(r13)
4444
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 882
45-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: std r4, mySmallLocalExecTLS4[TL]@le-58736(r13)
46-
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: std r3, mySmallLocalExecTLS5[TL]@le-57136(r13)
45+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: std r4, (mySmallLocalExecTLS4[TL]@le+6800)-65536(r13)
46+
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: std r3, (mySmallLocalExecTLS5[TL]@le+8400)-65536(r13)
4747
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: li r3, 1191
4848
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: addi r1, r1, 48
4949
; SMALL-LOCAL-EXEC-SMALLCM64-NEXT: ld r0, 16(r1)
@@ -70,8 +70,8 @@ define i64 @StoreLargeAccess1() {
7070
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r4, 100
7171
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: std r3, mySmallLocalExecTLS3[TL]@le+2000(r13)
7272
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 882
73-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: std r4, mySmallLocalExecTLS4[TL]@le-58736(r13)
74-
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: std r3, mySmallLocalExecTLS5[TL]@le-57136(r13)
73+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: std r4, (mySmallLocalExecTLS4[TL]@le+6800)-65536(r13)
74+
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: std r3, (mySmallLocalExecTLS5[TL]@le+8400)-65536(r13)
7575
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: li r3, 1191
7676
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: addi r1, r1, 48
7777
; SMALL-LOCAL-EXEC-LARGECM64-NEXT: ld r0, 16(r1)

0 commit comments

Comments
 (0)