393 lines · plain
1# REQUIRES: ppc2# RUN: llvm-mc -filetype=obj -triple=powerpc64le %s -o %t1.o3# RUN: llvm-mc -filetype=obj -triple=powerpc64le %p/Inputs/ppc64-got-to-pcrel-relaxation-def.s -o %t2.o4# RUN: ld.lld --shared %t2.o -o %t2.so --soname=t25# RUN: ld.lld %t1.o %t2.o -o %t6# RUN: ld.lld %t1.o %t2.so -o %ts7# RUN: ld.lld %t1.o %t2.o -o %tn --no-pcrel-optimize8# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s --check-prefix=CHECK-S9# RUN: llvm-objdump -d --no-show-raw-insn %ts | FileCheck %s --check-prefix=CHECK-D10# RUN: llvm-objdump -d --no-show-raw-insn %tn | FileCheck %s --check-prefix=CHECK-D11 12# RUN: llvm-mc -filetype=obj -triple=powerpc64 %s -o %t1.o13# RUN: llvm-mc -filetype=obj -triple=powerpc64 %p/Inputs/ppc64-got-to-pcrel-relaxation-def.s -o %t2.o14# RUN: ld.lld --shared %t2.o -o %t2.so --soname=t215# RUN: ld.lld %t1.o %t2.o -o %t16# RUN: ld.lld %t1.o %t2.so -o %ts17# RUN: ld.lld %t1.o %t2.o -o %tn --no-pcrel-optimize18# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s --check-prefix=CHECK-S19# RUN: llvm-objdump -d --no-show-raw-insn %ts | FileCheck %s --check-prefix=CHECK-D20# RUN: llvm-objdump -d --no-show-raw-insn %tn | FileCheck %s --check-prefix=CHECK-D21 22# CHECK-S-LABEL: <check_LBZ_STB>:23# CHECK-S-NEXT: plbz 1024# CHECK-S-NEXT: paddi 925# CHECK-S-NEXT: li 3, 026# CHECK-S-NEXT: nop27# CHECK-S-NEXT: rldicl 9, 9, 9, 6028# CHECK-S-NEXT: add 9, 9, 1029# CHECK-S-NEXT: pstb 930# CHECK-S-NEXT: nop31# CHECK-S-NEXT: blr32 33# CHECK-D-LABEL: <check_LBZ_STB>:34# CHECK-D-NEXT: pld 835# CHECK-D-NEXT: pld 936# CHECK-D-NEXT: li 3, 037# CHECK-D-NEXT: lbz 10, 0(8)38# CHECK-D-NEXT: rldicl 9, 9, 9, 6039# CHECK-D-NEXT: add 9, 9, 1040# CHECK-D-NEXT: pld 1041# CHECK-D-NEXT: stb 9, 0(10)42# CHECK-D-NEXT: blr43check_LBZ_STB:44 pld 8,useVal@got@pcrel(0),145.Lpcrel1:46 pld 9,useAddr@got@pcrel(0),147 li 3,048 .reloc .Lpcrel1-8,R_PPC64_PCREL_OPT,.-(.Lpcrel1-8)49 lbz 10,0(8)50 rldicl 9,9,9,6051 add 9,9,1052 pld 10,storeVal@got@pcrel(0),153.Lpcrel2:54 .reloc .Lpcrel2-8,R_PPC64_PCREL_OPT,.-(.Lpcrel2-8)55 stb 9,0(10)56 blr57 58# CHECK-S-LABEL: <check_LHZ_STH>:59# CHECK-S-NEXT: plhz 360# CHECK-S-NEXT: nop61# CHECK-S-NEXT: nop62# CHECK-S-NEXT: psth 363# CHECK-S-NEXT: nop64# CHECK-S-NEXT: blr65 66# CHECK-D-LABEL: <check_LHZ_STH>:67# CHECK-D-NEXT: pld 968# CHECK-D-NEXT: lhz 3, 0(9)69# CHECK-D-NEXT: nop70# CHECK-D-NEXT: pld 971# CHECK-D-NEXT: sth 3, 0(9)72# CHECK-D-NEXT: blr73check_LHZ_STH:74 pld 9,useVal_ushort@got@pcrel(0),175.Lpcrel3:76 .reloc .Lpcrel3-8,R_PPC64_PCREL_OPT,.-(.Lpcrel3-8)77 lhz 3,0(9)78 pld 9,storeVal_ushort@got@pcrel(0),179.Lpcrel4:80 .reloc .Lpcrel4-8,R_PPC64_PCREL_OPT,.-(.Lpcrel4-8)81 sth 3,0(9)82 blr83 84# CHECK-S-LABEL: <check_LWZ_STW>:85# CHECK-S-NEXT: plwz 386# CHECK-S-NEXT: nop87# CHECK-S-NEXT: pstw 388# CHECK-S-NEXT: nop89# CHECK-S-NEXT: blr90 91# CHECK-D-LABEL: <check_LWZ_STW>:92# CHECK-D-NEXT: pld 993# CHECK-D-NEXT: lwz 3, 0(9)94# CHECK-D-NEXT: pld 995# CHECK-D-NEXT: stw 3, 0(9)96# CHECK-D-NEXT: blr97check_LWZ_STW:98 pld 9,useVal_uint@got@pcrel(0),199.Lpcrel5:100 .reloc .Lpcrel5-8,R_PPC64_PCREL_OPT,.-(.Lpcrel5-8)101 lwz 3,0(9)102 pld 9,storeVal_uint@got@pcrel(0),1103.Lpcrel6:104 .reloc .Lpcrel6-8,R_PPC64_PCREL_OPT,.-(.Lpcrel6-8)105 stw 3,0(9)106 blr107 108# CHECK-S-LABEL: <check_LFS_STFS>:109# CHECK-S-NEXT: plfs 1110# CHECK-S-NEXT: nop111# CHECK-S-NEXT: pstfs 1112# CHECK-S-NEXT: nop113# CHECK-S-NEXT: blr114 115# CHECK-D-LABEL: <check_LFS_STFS>:116# CHECK-D-NEXT: pld 9117# CHECK-D-NEXT: lfs 1, 0(9)118# CHECK-D-NEXT: pld 9119# CHECK-D-NEXT: stfs 1, 0(9)120# CHECK-D-NEXT: blr121check_LFS_STFS:122 pld 9,useVal_float@got@pcrel(0),1123.Lpcrel7:124 .reloc .Lpcrel7-8,R_PPC64_PCREL_OPT,.-(.Lpcrel7-8)125 lfs 1,0(9)126 pld 9,storeVal_float@got@pcrel(0),1127.Lpcrel8:128 .reloc .Lpcrel8-8,R_PPC64_PCREL_OPT,.-(.Lpcrel8-8)129 stfs 1,0(9)130 blr131 132# CHECK-S-LABEL: <check_LFD_STFD>:133# CHECK-S-NEXT: plfd 1134# CHECK-S-NEXT: nop135# CHECK-S-NEXT: pstfd 1136# CHECK-S-NEXT: nop137# CHECK-S-NEXT: blr138 139# CHECK-D-LABEL: <check_LFD_STFD>:140# CHECK-D-NEXT: pld 9141# CHECK-D-NEXT: lfd 1, 0(9)142# CHECK-D-NEXT: pld 9143# CHECK-D-NEXT: stfd 1, 0(9)144# CHECK-D-NEXT: blr145check_LFD_STFD:146 pld 9,useVal_double@got@pcrel(0),1147.Lpcrel9:148 .reloc .Lpcrel9-8,R_PPC64_PCREL_OPT,.-(.Lpcrel9-8)149 lfd 1,0(9)150 pld 9,storeVal_double@got@pcrel(0),1151.Lpcrel10:152 .reloc .Lpcrel10-8,R_PPC64_PCREL_OPT,.-(.Lpcrel10-8)153 stfd 1,0(9)154 blr155 156# CHECK-S-LABEL: <check_LWA_STW>:157# CHECK-S-NEXT: mr 9, 3158# CHECK-S-NEXT: plwa 3159# CHECK-S-NEXT: pstw 9160# CHECK-S-NEXT: nop161# CHECK-S-NEXT: nop162# CHECK-S-NEXT: blr163 164# CHECK-D-LABEL: <check_LWA_STW>:165# CHECK-D-NEXT: mr 9, 3166# CHECK-D-NEXT: pld 8167# CHECK-D-NEXT: pld 10168# CHECK-D-NEXT: lwa 3, 0(8)169# CHECK-D-NEXT: stw 9, 0(10)170# CHECK-D-NEXT: blr171check_LWA_STW:172 mr 9,3173 pld 8,useVal_sint@got@pcrel(0),1174.Lpcrel11:175 pld 10,storeVal_sint@got@pcrel(0),1176.Lpcrel12:177 .reloc .Lpcrel11-8,R_PPC64_PCREL_OPT,.-(.Lpcrel11-8)178 lwa 3,0(8)179 .reloc .Lpcrel12-8,R_PPC64_PCREL_OPT,.-(.Lpcrel12-8)180 stw 9,0(10)181 blr182 183# CHECK-S-LABEL: <check_LHA_STH>:184# CHECK-S-NEXT: mr 9, 3185# CHECK-S-NEXT: plha 3186# CHECK-S-NEXT: psth 9187# CHECK-S-NEXT: nop188# CHECK-S-NEXT: nop189# CHECK-S-NEXT: blr190 191# CHECK-D-LABEL: <check_LHA_STH>:192# CHECK-D-NEXT: mr 9, 3193# CHECK-D-NEXT: pld 8194# CHECK-D-NEXT: pld 10195# CHECK-D-NEXT: lha 3, 0(8)196# CHECK-D-NEXT: sth 9, 0(10)197# CHECK-D-NEXT: blr198check_LHA_STH:199 mr 9,3200 pld 8,useVal_sshort@got@pcrel(0),1201.Lpcrel13:202 pld 10,storeVal_sshort@got@pcrel(0),1203.Lpcrel14:204 .reloc .Lpcrel13-8,R_PPC64_PCREL_OPT,.-(.Lpcrel13-8)205 lha 3,0(8)206 .reloc .Lpcrel14-8,R_PPC64_PCREL_OPT,.-(.Lpcrel14-8)207 sth 9,0(10)208 blr209 210# CHECK-S-LABEL: <check_LD_STD>:211# CHECK-S-NEXT: pld 3212# CHECK-S-NEXT: nop213# CHECK-S-NEXT: pstd 3214# CHECK-S-NEXT: nop215# CHECK-S-NEXT: blr216 217# CHECK-D-LABEL: <check_LD_STD>:218# CHECK-D-NEXT: pld 9219# CHECK-D-NEXT: ld 3, 0(9)220# CHECK-D-NEXT: pld 9221# CHECK-D-NEXT: std 3, 0(9)222# CHECK-D-NEXT: blr223check_LD_STD:224 pld 9,useVal_longlong@got@pcrel(0),1225.Lpcrel15:226 .reloc .Lpcrel15-8,R_PPC64_PCREL_OPT,.-(.Lpcrel15-8)227 ld 3,0(9)228 pld 9,storeVal_longlong@got@pcrel(0),1229.Lpcrel16:230 .reloc .Lpcrel16-8,R_PPC64_PCREL_OPT,.-(.Lpcrel16-8)231 std 3,0(9)232 blr233 234# CHECK-S-LABEL: <check_LXV_STXV>:235# CHECK-S-NEXT: plxv 34236# CHECK-S-NEXT: nop237# CHECK-S-NEXT: pstxv 34238# CHECK-S-NEXT: nop239# CHECK-S-NEXT: blr240 241# CHECK-D-LABEL: <check_LXV_STXV>:242# CHECK-D-NEXT: pld 9243# CHECK-D-NEXT: lxv 34, 0(9)244# CHECK-D-NEXT: pld 9245# CHECK-D-NEXT: stxv 34, 0(9)246# CHECK-D-NEXT: blr247check_LXV_STXV:248 pld 9,useVal_vector@got@pcrel(0),1249.Lpcrel17:250 .reloc .Lpcrel17-8,R_PPC64_PCREL_OPT,.-(.Lpcrel17-8)251 lxv 34,0(9)252 pld 9,storeVal_vector@got@pcrel(0),1253.Lpcrel18:254 .reloc .Lpcrel18-8,R_PPC64_PCREL_OPT,.-(.Lpcrel18-8)255 stxv 34,0(9)256 blr257 258# CHECK-S-LABEL: <check_LXSSP_STXSSP>:259# CHECK-S-NEXT: plxssp 1260# CHECK-S-NEXT: nop261# CHECK-S-NEXT: pstxssp 1262# CHECK-S-NEXT: nop263# CHECK-S-NEXT: blr264 265# CHECK-D-LABEL: <check_LXSSP_STXSSP>:266# CHECK-D-NEXT: pld 9267# CHECK-D-NEXT: lxssp 1, 0(9)268# CHECK-D-NEXT: pld 9269# CHECK-D-NEXT: stxssp 1, 0(9)270# CHECK-D-NEXT: blr271check_LXSSP_STXSSP:272 pld 9,useVal_float@got@pcrel(0),1273.Lpcrel19:274 .reloc .Lpcrel19-8,R_PPC64_PCREL_OPT,.-(.Lpcrel19-8)275 lxssp 1,0(9)276 pld 9,storeVal_float@got@pcrel(0),1277.Lpcrel20:278 .reloc .Lpcrel20-8,R_PPC64_PCREL_OPT,.-(.Lpcrel20-8)279 stxssp 1,0(9)280 blr281 282# CHECK-S-LABEL: <check_LXSD_STXSD>:283# CHECK-S-NEXT: plxsd 1, [[#ADDR1:]]284# CHECK-S-NEXT: nop285# CHECK-S-NEXT: pstxsd 1, [[#ADDR2:]]286# CHECK-S-NEXT: nop287# CHECK-S-NEXT: blr288 289# CHECK-D-LABEL: <check_LXSD_STXSD>:290# CHECK-D-NEXT: pld 9291# CHECK-D-NEXT: lxsd 1, 0(9)292# CHECK-D-NEXT: pld 9293# CHECK-D-NEXT: stxsd 1, 0(9)294# CHECK-D-NEXT: blr295check_LXSD_STXSD:296 pld 9,useVal_double@got@pcrel(0),1297.Lpcrel21:298 .reloc .Lpcrel21-8,R_PPC64_PCREL_OPT,.-(.Lpcrel21-8)299 lxsd 1,0(9)300 pld 9,storeVal_double@got@pcrel(0),1301.Lpcrel22:302 .reloc .Lpcrel22-8,R_PPC64_PCREL_OPT,.-(.Lpcrel22-8)303 stxsd 1,0(9)304 blr305 306# The respective displacements are computed relative to the PC which advanced307# by 28 bytes in this function. Since the displacements in the two access308# instructions are 8 and 32 so the displacements are those computed above minus309# 20 and plus 4 (+8 - 28 and +32 - 28) respectively.310# CHECK-S-LABEL: <check_LXSD_STXSD_aggr>:311# CHECK-S-NEXT: plxsd 1, [[#ADDR1-20]]312# CHECK-S-NEXT: nop313# CHECK-S-NEXT: pstxsd 1, [[#ADDR2+4]]314# CHECK-S-NEXT: nop315# CHECK-S-NEXT: blr316 317# CHECK-D-LABEL: <check_LXSD_STXSD_aggr>:318# CHECK-D-NEXT: pld 9319# CHECK-D-NEXT: lxsd 1, 8(9)320# CHECK-D-NEXT: pld 9321# CHECK-D-NEXT: stxsd 1, 32(9)322# CHECK-D-NEXT: blr323check_LXSD_STXSD_aggr:324 pld 9,useVal_double@got@pcrel(0),1325.Lpcrel23:326 .reloc .Lpcrel23-8,R_PPC64_PCREL_OPT,.-(.Lpcrel23-8)327 lxsd 1,8(9)328 pld 9,storeVal_double@got@pcrel(0),1329.Lpcrel24:330 .reloc .Lpcrel24-8,R_PPC64_PCREL_OPT,.-(.Lpcrel24-8)331 stxsd 1,32(9)332 blr333 334# This includes a nop but that is not emitted by the linker.335# It is an alignment nop to prevent the prefixed instruction from336# crossing a 64-byte boundary.337# CHECK-S-LABEL: <check_LD_STD_W_PADDI>:338# CHECK-S-NEXT: paddi 9339# CHECK-S-NEXT: ld 3, 0(9)340# CHECK-S-NEXT: nop341# CHECK-S-NEXT: paddi 9342# CHECK-S-NEXT: std 3, 0(9)343# CHECK-S-NEXT: blr344 345# CHECK-D-LABEL: <check_LD_STD_W_PADDI>:346# CHECK-D-NEXT: paddi 9347# CHECK-D-NEXT: ld 3, 0(9)348# CHECK-D-NEXT: nop349# CHECK-D-NEXT: paddi 9350# CHECK-D-NEXT: std 3, 0(9)351# CHECK-D-NEXT: blr352check_LD_STD_W_PADDI:353 paddi 9,0,useVal_longlong@got@pcrel,1354.Lpcrel25:355 .reloc .Lpcrel25-8,R_PPC64_PCREL_OPT,.-(.Lpcrel25-8)356 ld 3,0(9)357 paddi 9,0,storeVal_longlong@got@pcrel,1358.Lpcrel26:359 .reloc .Lpcrel26-8,R_PPC64_PCREL_OPT,.-(.Lpcrel26-8)360 std 3,0(9)361 blr362# CHECK-S-LABEL: <check_LXSD_STXSD_aggr_notoc>:363# CHECK-S-NEXT: paddi 3, 0, -12, 1364# CHECK-S-NEXT: lwz 4, 8(3)365# CHECK-S-NEXT: paddi 3, 0, -24, 1366# CHECK-S-NEXT: stw 4, 32(3)367# CHECK-S-NEXT: blr368 369# CHECK-D-LABEL: <check_LXSD_STXSD_aggr_notoc>:370# CHECK-D-NEXT: paddi 3, 0, -12, 1371# CHECK-D-NEXT: lwz 4, 8(3)372# CHECK-D-NEXT: paddi 3, 0, -24, 1373# CHECK-D-NEXT: stw 4, 32(3)374# CHECK-D-NEXT: blr375.type Arr,@object # @Arr376.globl Arr377.p2align 2378Arr:379.long 11 # 0xb380.long 22 # 0x16381.long 33 # 0x21382check_LXSD_STXSD_aggr_notoc:383 paddi 3, 0, Arr@PCREL, 1384.Lpcrel27:385 .reloc .Lpcrel27-8,R_PPC64_PCREL_OPT,.-(.Lpcrel27-8)386 lwz 4,8(3)387 paddi 3, 0, Arr@PCREL, 1388.Lpcrel28:389 .reloc .Lpcrel28-8,R_PPC64_PCREL_OPT,.-(.Lpcrel28-8)390 stw 4,32(3)391 blr392 393