235 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=DEFAULT,CHECK3# RUN: llc -mtriple aarch64-apple-darwin -code-model=large -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=LARGE-MACHO,CHECK4# RUN: llc -mtriple aarch64-apple-darwin -code-model=small -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=SMALL-MACHO,CHECK5# RUN: llc -mtriple aarch64-linux-elf -code-model=large -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=LARGE-ELF,CHECK6# RUN: llc -mtriple aarch64-linux-elf -code-model=tiny -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=TINY,CHECK7# RUN: llc -mtriple aarch64-windows-coff -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=WINDOWS,CHECK8 9# Each of these tests has a trivial pattern for folding a G_PTR_ADD into a10# G_GLOBAL_VALUE.11#12# Check that given different code models/target features, we do/don't fold.13 14--- |15 @external_linkage = external hidden global i3216 @common_linkage = common local_unnamed_addr global i32 0, align 417 @internal_linkage = internal unnamed_addr global i32 0, align 418 @extern_weak_linkage = extern_weak hidden global i3219 @dll_import = external dllimport global i3220 21 define void @test_external_linkage() { ret void }22 define void @test_internal_linkage() { ret void }23 define void @test_common_linkage() { ret void }24 define void @test_extern_weak_linkage() { ret void }25 define void @never_fold_tagged_globals() #0 { ret void }26 define void @test_dll_import() { ret void }27 28 attributes #0 = { "target-features"="+tagged-globals" }29...30---31name: test_external_linkage32alignment: 433tracksRegLiveness: true34machineFunctionInfo: {}35body: |36 bb.0:37 ; Large + Mach-O goes via GOT, so we can't fold.38 39 ; DEFAULT-LABEL: name: test_external_linkage40 ; DEFAULT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 141 ; DEFAULT-NEXT: $x0 = COPY [[GV]](p0)42 ; DEFAULT-NEXT: RET_ReallyLR implicit $x043 ;44 ; LARGE-MACHO-LABEL: name: test_external_linkage45 ; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @external_linkage46 ; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 147 ; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)48 ; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)49 ; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x050 ;51 ; SMALL-MACHO-LABEL: name: test_external_linkage52 ; SMALL-MACHO: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 153 ; SMALL-MACHO-NEXT: $x0 = COPY [[GV]](p0)54 ; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x055 ;56 ; LARGE-ELF-LABEL: name: test_external_linkage57 ; LARGE-ELF: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 158 ; LARGE-ELF-NEXT: $x0 = COPY [[GV]](p0)59 ; LARGE-ELF-NEXT: RET_ReallyLR implicit $x060 ;61 ; TINY-LABEL: name: test_external_linkage62 ; TINY: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 163 ; TINY-NEXT: $x0 = COPY [[GV]](p0)64 ; TINY-NEXT: RET_ReallyLR implicit $x065 ;66 ; WINDOWS-LABEL: name: test_external_linkage67 ; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 168 ; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)69 ; WINDOWS-NEXT: RET_ReallyLR implicit $x070 %global:_(p0) = G_GLOBAL_VALUE @external_linkage71 %imm:_(s64) = G_CONSTANT i64 172 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)73 $x0 = COPY %ptr_add(p0)74 RET_ReallyLR implicit $x075 76...77---78name: test_internal_linkage79alignment: 480tracksRegLiveness: true81machineFunctionInfo: {}82body: |83 bb.0:84 ; Large + Mach-O goes via GOT, so we can't fold.85 86 ; DEFAULT-LABEL: name: test_internal_linkage87 ; DEFAULT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 188 ; DEFAULT-NEXT: $x0 = COPY [[GV]](p0)89 ; DEFAULT-NEXT: RET_ReallyLR implicit $x090 ;91 ; LARGE-MACHO-LABEL: name: test_internal_linkage92 ; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @internal_linkage93 ; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 194 ; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)95 ; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)96 ; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x097 ;98 ; SMALL-MACHO-LABEL: name: test_internal_linkage99 ; SMALL-MACHO: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1100 ; SMALL-MACHO-NEXT: $x0 = COPY [[GV]](p0)101 ; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x0102 ;103 ; LARGE-ELF-LABEL: name: test_internal_linkage104 ; LARGE-ELF: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1105 ; LARGE-ELF-NEXT: $x0 = COPY [[GV]](p0)106 ; LARGE-ELF-NEXT: RET_ReallyLR implicit $x0107 ;108 ; TINY-LABEL: name: test_internal_linkage109 ; TINY: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1110 ; TINY-NEXT: $x0 = COPY [[GV]](p0)111 ; TINY-NEXT: RET_ReallyLR implicit $x0112 ;113 ; WINDOWS-LABEL: name: test_internal_linkage114 ; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1115 ; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)116 ; WINDOWS-NEXT: RET_ReallyLR implicit $x0117 %global:_(p0) = G_GLOBAL_VALUE @internal_linkage118 %imm:_(s64) = G_CONSTANT i64 1119 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)120 $x0 = COPY %ptr_add(p0)121 RET_ReallyLR implicit $x0122 123...124---125name: test_common_linkage126alignment: 4127tracksRegLiveness: true128machineFunctionInfo: {}129body: |130 bb.0:131 ; DEFAULT-LABEL: name: test_common_linkage132 ; DEFAULT: %global:_(p0) = G_GLOBAL_VALUE @common_linkage133 ; DEFAULT-NEXT: %imm:_(s64) = G_CONSTANT i64 1134 ; DEFAULT-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)135 ; DEFAULT-NEXT: $x0 = COPY %ptr_add(p0)136 ; DEFAULT-NEXT: RET_ReallyLR implicit $x0137 ;138 ; LARGE-MACHO-LABEL: name: test_common_linkage139 ; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @common_linkage140 ; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1141 ; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)142 ; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)143 ; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x0144 ;145 ; SMALL-MACHO-LABEL: name: test_common_linkage146 ; SMALL-MACHO: %global:_(p0) = G_GLOBAL_VALUE @common_linkage147 ; SMALL-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1148 ; SMALL-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)149 ; SMALL-MACHO-NEXT: $x0 = COPY %ptr_add(p0)150 ; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x0151 ;152 ; LARGE-ELF-LABEL: name: test_common_linkage153 ; LARGE-ELF: %global:_(p0) = G_GLOBAL_VALUE @common_linkage154 ; LARGE-ELF-NEXT: %imm:_(s64) = G_CONSTANT i64 1155 ; LARGE-ELF-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)156 ; LARGE-ELF-NEXT: $x0 = COPY %ptr_add(p0)157 ; LARGE-ELF-NEXT: RET_ReallyLR implicit $x0158 ;159 ; TINY-LABEL: name: test_common_linkage160 ; TINY: %global:_(p0) = G_GLOBAL_VALUE @common_linkage161 ; TINY-NEXT: %imm:_(s64) = G_CONSTANT i64 1162 ; TINY-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)163 ; TINY-NEXT: $x0 = COPY %ptr_add(p0)164 ; TINY-NEXT: RET_ReallyLR implicit $x0165 ;166 ; WINDOWS-LABEL: name: test_common_linkage167 ; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @common_linkage + 1168 ; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)169 ; WINDOWS-NEXT: RET_ReallyLR implicit $x0170 %global:_(p0) = G_GLOBAL_VALUE @common_linkage171 %imm:_(s64) = G_CONSTANT i64 1172 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)173 $x0 = COPY %ptr_add(p0)174 RET_ReallyLR implicit $x0175 176...177---178name: test_extern_weak_linkage179alignment: 4180tracksRegLiveness: true181machineFunctionInfo: {}182body: |183 bb.0:184 ; CHECK-LABEL: name: test_extern_weak_linkage185 ; CHECK: %global:_(p0) = G_GLOBAL_VALUE @extern_weak_linkage186 ; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1187 ; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)188 ; CHECK-NEXT: $x0 = COPY %ptr_add(p0)189 ; CHECK-NEXT: RET_ReallyLR implicit $x0190 %global:_(p0) = G_GLOBAL_VALUE @extern_weak_linkage191 %imm:_(s64) = G_CONSTANT i64 1192 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)193 $x0 = COPY %ptr_add(p0)194 RET_ReallyLR implicit $x0195 196...197---198name: never_fold_tagged_globals199alignment: 4200tracksRegLiveness: true201machineFunctionInfo: {}202body: |203 bb.0:204 ; CHECK-LABEL: name: never_fold_tagged_globals205 ; CHECK: %global:_(p0) = G_GLOBAL_VALUE @external_linkage206 ; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1207 ; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)208 ; CHECK-NEXT: $x0 = COPY %ptr_add(p0)209 ; CHECK-NEXT: RET_ReallyLR implicit $x0210 %global:_(p0) = G_GLOBAL_VALUE @external_linkage211 %imm:_(s64) = G_CONSTANT i64 1212 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)213 $x0 = COPY %ptr_add(p0)214 RET_ReallyLR implicit $x0215 216...217---218name: test_dll_import219alignment: 4220tracksRegLiveness: true221machineFunctionInfo: {}222body: |223 bb.0:224 ; CHECK-LABEL: name: test_dll_import225 ; CHECK: %global:_(p0) = G_GLOBAL_VALUE @dll_import226 ; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1227 ; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)228 ; CHECK-NEXT: $x0 = COPY %ptr_add(p0)229 ; CHECK-NEXT: RET_ReallyLR implicit $x0230 %global:_(p0) = G_GLOBAL_VALUE @dll_import231 %imm:_(s64) = G_CONSTANT i64 1232 %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)233 $x0 = COPY %ptr_add(p0)234 RET_ReallyLR implicit $x0235