brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · c816a53 Raw
203 lines · plain
1# RUN: llc -o /dev/null %s -mtriple=aarch64-apple-ios -run-pass=aarch64-collect-loh -debug-only=aarch64-collect-loh 2>&1 | FileCheck %s2# RUN: llc -debugify-and-strip-all-safe -o /dev/null %s -mtriple=aarch64-apple-ios -run-pass=aarch64-collect-loh -debug-only=aarch64-collect-loh 2>&1 | FileCheck %s3# REQUIRES: asserts4--- |5  define void @func0() { ret void }6 7  declare void @extfunc()8 9  @g0 = external global i3210  @g1 = external global i3211  @g2 = external global i3212  @g3 = external global i3213  @g4 = external global i3214  @g5 = external global i3215...16---17# Check various LOH variants. Remember that the algorithms walks the basic18# blocks backwards.19# CHECK-LABEL: ********** AArch64 Collect LOH **********20# CHECK-LABEL: Looking in function func021name: func022tracksRegLiveness: true23body: |24  bb.0:25    ; CHECK: Adding MCLOH_AdrpAdrp:26    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g327    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g428    ; CHECK-NEXT: Adding MCLOH_AdrpAdrp:29    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g230    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g331    ; CHECK-NEXT: Adding MCLOH_AdrpAdrp:32    ; CHECK-NEXT: $x0 = ADRP target-flags(aarch64-page) @g033    ; CHECK-NEXT: $x0 = ADRP target-flags(aarch64-page) @g134    $x0 = ADRP target-flags(aarch64-page) @g035    $x0 = ADRP target-flags(aarch64-page) @g136    $x1 = ADRP target-flags(aarch64-page) @g237    $x1 = ADRP target-flags(aarch64-page) @g338    $x1 = ADRP target-flags(aarch64-page) @g439 40  bb.1:41    ; CHECK-NEXT: Adding MCLOH_AdrpAdd:42    ; CHECK-NEXT: $x20 = ADRP target-flags(aarch64-page) @g043    ; CHECK-NEXT: $x3 = ADDXri $x20, target-flags(aarch64-pageoff) @g044    ; CHECK-NEXT: Adding MCLOH_AdrpAdd:45    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g046    ; CHECK-NEXT: $x1 = ADDXri $x1, target-flags(aarch64-pageoff) @g047    $x1 = ADRP target-flags(aarch64-page) @g048    $x9 = SUBXri undef $x11, 5, 0 ; should not affect MCLOH formation49    $x1 = ADDXri $x1, target-flags(aarch64-pageoff) @g0, 050    $x20 = ADRP target-flags(aarch64-page) @g051    BL @extfunc, csr_aarch64_aapcs ; should not clobber X2052    $x3 = ADDXri $x20, target-flags(aarch64-pageoff) @g0, 053 54  bb.2:55    ; CHECK-NOT: MCLOH_AdrpAdd56    $x9 = ADRP target-flags(aarch64-page) @g057    BL @extfunc, csr_aarch64_aapcs ; clobbers x958    ; Verification requires the use of 'undef' in front of the clobbered $x959    $x9 = ADDXri undef $x9, target-flags(aarch64-pageoff) @g0, 060 61  bb.3:62    ; CHECK-NOT: MCLOH_AdrpAdd63    $x10 = ADRP target-flags(aarch64-page) @g064    HINT 0, implicit def $x10 ; clobbers x1065    $x10 = ADDXri $x10, target-flags(aarch64-pageoff) @g0, 066 67  bb.4:68    ; Cannot produce a LOH for multiple users69    ; CHECK-NOT: MCLOH_AdrpAdd70    $x10 = ADRP target-flags(aarch64-page) @g071    HINT 0, implicit def $x10 ; clobbers x1072    $x11 = ADDXri $x10, target-flags(aarch64-pageoff) @g0, 073    $x12 = ADDXri $x10, target-flags(aarch64-pageoff) @g0, 074 75  bb.5:76    ; CHECK-NEXT: Adding MCLOH_AdrpLdr:77    ; CHECK-NEXT: $x5 = ADRP target-flags(aarch64-page) @g278    ; CHECK-NEXT: $s6 = LDRSui $x5, target-flags(aarch64-pageoff) @g279    ; CHECK-NEXT: Adding MCLOH_AdrpLdr:80    ; CHECK-NEXT: $x4 = ADRP target-flags(aarch64-page) @g281    ; CHECK-NEXT: $x4 = LDRXui $x4, target-flags(aarch64-pageoff) @g282    $x4 = ADRP target-flags(aarch64-page) @g283    $x4 = LDRXui $x4, target-flags(aarch64-pageoff) @g284    $x5 = ADRP target-flags(aarch64-page) @g285    $s6 = LDRSui $x5, target-flags(aarch64-pageoff) @g286 87  bb.6:88    ; CHECK-NEXT: Adding MCLOH_AdrpLdrGot:89    ; CHECK-NEXT: $x5 = ADRP target-flags(aarch64-page, aarch64-got) @g290    ; CHECK-NEXT: $x6 = LDRXui $x5, target-flags(aarch64-pageoff, aarch64-got) @g291    ; CHECK-NEXT: Adding MCLOH_AdrpLdrGot:92    ; CHECK-NEXT: $x4 = ADRP target-flags(aarch64-page, aarch64-got) @g293    ; CHECK-NEXT: $x4 = LDRXui $x4, target-flags(aarch64-pageoff, aarch64-got) @g294    $x4 = ADRP target-flags(aarch64-page, aarch64-got) @g295    $x4 = LDRXui $x4, target-flags(aarch64-pageoff, aarch64-got) @g296    $x5 = ADRP target-flags(aarch64-page, aarch64-got) @g297    $x6 = LDRXui $x5, target-flags(aarch64-pageoff, aarch64-got) @g298 99  bb.7:100    ; CHECK-NOT: Adding MCLOH_AdrpLdrGot:101    ; Loading a float value from a GOT table makes no sense so this should not102    ; produce an LOH.103    $x11 = ADRP target-flags(aarch64-page, aarch64-got) @g5104    $s11 = LDRSui $x11, target-flags(aarch64-pageoff, aarch64-got) @g5105 106  bb.8:107    ; CHECK-NEXT: Adding MCLOH_AdrpAddLdr:108    ; CHECK-NEXT: $x7 = ADRP target-flags(aarch64-page) @g3109    ; CHECK-NEXT: $x8 = ADDXri $x7, target-flags(aarch64-pageoff) @g3110    ; CHECK-NEXT: $d1 = LDRDui $x8, 8111    $x7 = ADRP target-flags(aarch64-page) @g3112    $x8 = ADDXri $x7, target-flags(aarch64-pageoff) @g3, 0113    $d1 = LDRDui $x8, 8114 115  bb.9:116    ; CHECK-NEXT: Adding MCLOH_AdrpAdd:117    ; CHECK-NEXT: $x3 = ADRP target-flags(aarch64-page) @g3118    ; CHECK-NEXT: $x3 = ADDXri $x3, target-flags(aarch64-pageoff) @g3119    ; CHECK-NEXT: Adding MCLOH_AdrpAdd:120    ; CHECK-NEXT: $x5 = ADRP target-flags(aarch64-page) @g3121    ; CHECK-NEXT: $x2 = ADDXri $x5, target-flags(aarch64-pageoff) @g3122    ; CHECK-NEXT: Adding MCLOH_AdrpAddStr:123    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page) @g3124    ; CHECK-NEXT: $x1 = ADDXri $x1, target-flags(aarch64-pageoff) @g3125    ; CHECK-NEXT: STRXui $xzr, $x1, 16126    $x1 = ADRP target-flags(aarch64-page) @g3127    $x1 = ADDXri $x1, target-flags(aarch64-pageoff) @g3, 0128    STRXui $xzr, $x1, 16129 130    ; This sequence should just produce an AdrpAdd (not AdrpAddStr)131    $x5 = ADRP target-flags(aarch64-page) @g3132    $x2 = ADDXri $x5, target-flags(aarch64-pageoff) @g3, 0133    STRXui $x2, undef $x11, 16134 135    ; This sequence should just produce an AdrpAdd (not AdrpAddStr)136    $x3 = ADRP target-flags(aarch64-page) @g3137    $x3 = ADDXri $x3, target-flags(aarch64-pageoff) @g3, 0138    STRXui $x3, $x3, 16139 140  bb.10:141    ; CHECK-NEXT: Adding MCLOH_AdrpLdr:142    ; CHECK-NEXT: $x2 = ADRP target-flags(aarch64-page) @g3143    ; CHECK-NEXT: $x2 = LDRXui $x2, target-flags(aarch64-pageoff) @g3144    ; CHECK-NEXT: Adding MCLOH_AdrpLdrGotLdr:145    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page, aarch64-got) @g4146    ; CHECK-NEXT: $x1 = LDRXui $x1, target-flags(aarch64-pageoff, aarch64-got) @g4147    ; CHECK-NEXT: $x1 = LDRXui $x1, 24148    $x1 = ADRP target-flags(aarch64-page, aarch64-got) @g4149    $x1 = LDRXui $x1, target-flags(aarch64-pageoff, aarch64-got) @g4150    $x1 = LDRXui $x1, 24151    ; Should just produce a MCLOH_AdrpLdr (not MCLOH_AdrpLdrGotLdr)152    $x2 = ADRP target-flags(aarch64-page) @g3153    $x2 = LDRXui $x2, target-flags(aarch64-pageoff) @g3154    $x2 = LDRXui $x2, 24155 156  bb.11:157    ; CHECK-NEXT: Adding MCLOH_AdrpLdr158    ; CHECK-NEXT: $x5 = ADRP target-flags(aarch64-page) @g1159    ; CHECK-NEXT: $x5 = LDRXui $x5, target-flags(aarch64-pageoff) @g1160    ; CHECK-NEXT: Adding MCLOH_AdrpLdrGotStr:161    ; CHECK-NEXT: $x1 = ADRP target-flags(aarch64-page, aarch64-got) @g4162    ; CHECK-NEXT: $x1 = LDRXui $x1, target-flags(aarch64-pageoff, aarch64-got) @g4163    ; CHECK-NEXT: STRXui $xzr, $x1, 32164    $x1 = ADRP target-flags(aarch64-page, aarch64-got) @g4165    $x1 = LDRXui $x1, target-flags(aarch64-pageoff, aarch64-got) @g4166    STRXui $xzr, $x1, 32167    ; Should just produce a MCLOH_AdrpLdr (not MCLOH_AdrpLdrGotStr)168    $x5 = ADRP target-flags(aarch64-page) @g1169    $x5 = LDRXui $x5, target-flags(aarch64-pageoff) @g1170    STRXui undef $x11, $x5, 32171 172  bb.12:173    ; CHECK-NOT: MCLOH_AdrpAdrp174    ; CHECK: Adding MCLOH_AdrpAddLdr175    ; $x9 = ADRP @g4176    ; $x9 = ADDXri $x9, @g4177    ; $x5 = LDRXui $x9, 0178    $x9 = ADRP target-flags(aarch64-page, aarch64-got) @g4179    $x9 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @g4, 0180    $x5 = LDRXui $x9, 0181    $x9 = ADRP target-flags(aarch64-page, aarch64-got) @g5182 183  bb.13:184    ; Cannot produce a LOH for multiple users185    ; CHECK-NOT: MCLOH_AdrpAdd186    $x10 = ADRP target-flags(aarch64-page) @g0187    $x11 = ADDXri $x10, target-flags(aarch64-pageoff) @g0, 0188    B %bb.14189 190  bb.14:191    liveins: $x10192    $x12 = ADDXri $x10, target-flags(aarch64-pageoff) @g0, 0193 194  bb.15:195    ; Should not produce a LOH when reg is clobbered by bundled regmask196    ; CHECK-NOT: MCLOH_AdrpAdrp197    $x8 = ADRP target-flags(aarch64-page) @g0198    BUNDLE {199      BL @extfunc, csr_aarch64_aapcs200    }201    $x8 = ADRP target-flags(aarch64-page) @g1202...203