[llvm] [PowerPC] Support local-dynamic TLS relocation on AIX (PR #66316)

Felix via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 21 20:18:20 PDT 2023


================
@@ -181,10 +182,12 @@ define void @storesTIUninit(i32 %Val) #0 {
 ; LARGE32-NEXT:    stw 0, 40(1)
 ; LARGE32-NEXT:    mr 6, 3
 ; LARGE32-NEXT:    addis 3, L..C4 at u(2)
-; LARGE32-NEXT:    addis 4, L..C5 at u(2)
 ; LARGE32-NEXT:    lwz 3, L..C4 at l(3)
-; LARGE32-NEXT:    lwz 4, L..C5 at l(4)
-; LARGE32-NEXT:    bla .__tls_get_addr[PR]
+; LARGE32-NEXT:    addis 4, L..C5 at u(2)
+; LARGE32-NEXT:    lwz 7, L..C5 at l(4)
+; LARGE32-NEXT:    bla .__tls_get_mod[PR]
----------------
orcguru wrote:

```
# *** IR Dump After PowerPC TLS Dynamic Call Fixup (ppc-tls-dynamic-call) ***:
# Machine code for function storesTIUninit: IsSSA, TracksLiveness
Function Live Ins: $r3 in %0

bb.0.entry:
  liveins: $r3
  %0:gprc = COPY $r3
  %4:gprc_and_gprc_nor0 = ADDIStocHA $r2, target-flags(ppc-tlsld) &"_$TLSML[TC]"
  %5:gprc_and_gprc_nor0 = LWZtocL target-flags(ppc-tlsld) &"_$TLSML[TC]", %4:gprc_and_gprc_nor0
  $r3 = COPY %5:gprc_and_gprc_nor0
  $r3 = GETtlsMOD32AIX $r3, implicit-def $r0, implicit-def $r4, implicit-def $r5, implicit-def $r11, implicit-def $lr, implicit-def $cr0
  %1:gprc_and_gprc_nor0 = ADDIStocHA $r2, target-flags(ppc-tlsld) @TIUninit
  %2:gprc = LWZtocL target-flags(ppc-tlsld) @TIUninit, %1:gprc_and_gprc_nor0 :: (load (s32) from got)
  ADJCALLSTACKDOWN 0, 0, implicit-def $r1, implicit $r1
  $r4 = COPY %2:gprc
  $r3 = ADD4 $r3, $r4
  ADJCALLSTACKUP 0, 0, implicit-def $r1, implicit $r1
  %3:gprc_and_gprc_nor0 = COPY $r3
  STW %0:gprc, 0, %3:gprc_and_gprc_nor0 :: (store (s32) into @TIUninit)
  BLR implicit $lr, implicit $rm

# End machine code for function storesTIUninit.
```

```
# *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***:
# Machine code for function storesTIUninit: NoPHIs, TracksLiveness, TiedOpsRewritten
Function Live Ins: $r3 in %0

0B      bb.0.entry:
          liveins: $r3
16B       %0:gprc = COPY $r3
32B       %4:gprc_and_gprc_nor0 = ADDIStocHA $r2, target-flags(ppc-tlsld) &"_$TLSML[TC]"
48B       %5:gprc_and_gprc_nor0 = LWZtocL target-flags(ppc-tlsld) &"_$TLSML[TC]", %4:gprc_and_gprc_nor0, implicit $r2
56B       %1:gprc_and_gprc_nor0 = ADDIStocHA $r2, target-flags(ppc-tlsld) @TIUninit
64B       $r3 = COPY %5:gprc_and_gprc_nor0
72B       %2:gprc = LWZtocL target-flags(ppc-tlsld) @TIUninit, %1:gprc_and_gprc_nor0, implicit $r2 :: (load (s32) from got)
80B       $r3 = GETtlsMOD32AIX $r3, implicit-def dead $r0, implicit-def dead $r4, implicit-def dead $r5, implicit-def dead $r11, implicit-def $lr, implicit-def dead $cr0
128B      ADJCALLSTACKDOWN 0, 0, implicit-def $r1, implicit $r1
144B      $r4 = COPY %2:gprc
160B      $r3 = ADD4 $r3, killed $r4
176B      ADJCALLSTACKUP 0, 0, implicit-def $r1, implicit $r1
192B      %3:gprc_and_gprc_nor0 = COPY $r3
208B      STW %0:gprc, 0, %3:gprc_and_gprc_nor0 :: (store (s32) into @TIUninit)
224B      BLR implicit $lr, implicit $rm

# End machine code for function storesTIUninit.
```

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


More information about the llvm-commits mailing list