244 lines · plain
1; RUN: llc -mtriple x86_64-pc-win32 \2; RUN: -relocation-model=static < %s | FileCheck --check-prefix=COFF_S %s3; RUN: llc -mtriple x86_64-pc-win32 \4; RUN: -relocation-model=pic < %s | FileCheck --check-prefix=COFF %s5; RUN: llc -mtriple x86_64-pc-win32 \6; RUN: -relocation-model=dynamic-no-pic < %s | FileCheck --check-prefix=COFF %s7 8; RUN: llc -mtriple x86_64-uefi \9; RUN: -relocation-model=static < %s | FileCheck --check-prefix=COFF_S %s10; RUN: llc -mtriple x86_64-uefi \11; RUN: -relocation-model=pic < %s | FileCheck --check-prefix=COFF %s12; RUN: llc -mtriple x86_64-uefi \13; RUN: -relocation-model=dynamic-no-pic < %s | FileCheck --check-prefix=COFF %s14 15 16; 32 bits17 18; RUN: llc -mtriple i386-pc-win32 \19; RUN: -relocation-model=static < %s | FileCheck --check-prefix=COFF32 %s20; RUN: llc -mtriple i386-pc-win32 \21; RUN: -relocation-model=pic < %s | FileCheck --check-prefix=COFF32 %s22; RUN: llc -mtriple i386-pc-win32 \23; RUN: -relocation-model=dynamic-no-pic < %s | \24; RUN: FileCheck --check-prefix=COFF32 %s25 26; globals27 28@strong_default_global = global i32 4229define ptr @get_strong_default_global() {30 ret ptr @strong_default_global31}32; COFF: leaq strong_default_global(%rip), %rax33; COFF_S: movl $strong_default_global, %eax34; COFF32: movl $_strong_default_global, %eax35 36@weak_default_global = weak global i32 4237define ptr @get_weak_default_global() {38 ret ptr @weak_default_global39}40; COFF: leaq weak_default_global(%rip), %rax41; COFF_S: movl $weak_default_global, %eax42; COFF32: movl $_weak_default_global, %eax43 44@external_default_global = external global i3245define ptr @get_external_default_global() {46 ret ptr @external_default_global47}48; COFF: leaq external_default_global(%rip), %rax49; COFF_S: movl $external_default_global, %eax50; COFF32: movl $_external_default_global, %eax51 52 53@strong_local_global = dso_local global i32 4254define ptr @get_strong_local_global() {55 ret ptr @strong_local_global56}57; COFF: leaq strong_local_global(%rip), %rax58; COFF_S: movl $strong_local_global, %eax59; COFF32: movl $_strong_local_global, %eax60 61@weak_local_global = weak dso_local global i32 4262define ptr @get_weak_local_global() {63 ret ptr @weak_local_global64}65; COFF: leaq weak_local_global(%rip), %rax66; COFF_S: movl $weak_local_global, %eax67; COFF32: movl $_weak_local_global, %eax68 69@external_local_global = external dso_local global i3270define ptr @get_external_local_global() {71 ret ptr @external_local_global72}73; COFF: leaq external_local_global(%rip), %rax74; COFF_S: movl $external_local_global, %eax75; COFF32: movl $_external_local_global, %eax76 77 78@strong_preemptable_global = dso_preemptable global i32 4279define ptr @get_strong_preemptable_global() {80 ret ptr @strong_preemptable_global81}82; COFF: leaq strong_preemptable_global(%rip), %rax83; COFF_S: movl $strong_preemptable_global, %eax84; COFF32: movl $_strong_preemptable_global, %eax85 86@weak_preemptable_global = weak dso_preemptable global i32 4287define ptr @get_weak_preemptable_global() {88 ret ptr @weak_preemptable_global89}90; COFF: leaq weak_preemptable_global(%rip), %rax91; COFF_S: movl $weak_preemptable_global, %eax92; COFF32: movl $_weak_preemptable_global, %eax93 94@external_preemptable_global = external dso_preemptable global i3295define ptr @get_external_preemptable_global() {96 ret ptr @external_preemptable_global97}98; COFF: leaq external_preemptable_global(%rip), %rax99; COFF_S: movl $external_preemptable_global, %eax100; COFF32: movl $_external_preemptable_global, %eax101 102 103; aliases104@aliasee = global i32 42105 106@strong_default_alias = alias i32, ptr @aliasee107define ptr @get_strong_default_alias() {108 ret ptr @strong_default_alias109}110; COFF: leaq strong_default_alias(%rip), %rax111; COFF_S: movl $strong_default_alias, %eax112; COFF32: movl $_strong_default_alias, %eax113 114@weak_default_alias = weak alias i32, ptr @aliasee115define ptr @get_weak_default_alias() {116 ret ptr @weak_default_alias117}118; COFF: leaq weak_default_alias(%rip), %rax119; COFF_S: movl $weak_default_alias, %eax120; COFF32: movl $_weak_default_alias, %eax121 122 123@strong_local_alias = dso_local alias i32, ptr @aliasee124define ptr @get_strong_local_alias() {125 ret ptr @strong_local_alias126}127; COFF: leaq strong_local_alias(%rip), %rax128; COFF_S: movl $strong_local_alias, %eax129; COFF32: movl $_strong_local_alias, %eax130 131@weak_local_alias = weak dso_local alias i32, ptr @aliasee132define ptr @get_weak_local_alias() {133 ret ptr @weak_local_alias134}135; COFF: leaq weak_local_alias(%rip), %rax136; COFF_S: movl $weak_local_alias, %eax137; COFF32: movl $_weak_local_alias, %eax138 139 140@strong_preemptable_alias = dso_preemptable alias i32, ptr @aliasee141define ptr @get_strong_preemptable_alias() {142 ret ptr @strong_preemptable_alias143}144; COFF: leaq strong_preemptable_alias(%rip), %rax145; COFF_S: movl $strong_preemptable_alias, %eax146; COFF32: movl $_strong_preemptable_alias, %eax147 148@weak_preemptable_alias = weak dso_preemptable alias i32, ptr @aliasee149define ptr @get_weak_preemptable_alias() {150 ret ptr @weak_preemptable_alias151}152; COFF: leaq weak_preemptable_alias(%rip), %rax153; COFF_S: movl $weak_preemptable_alias, %eax154; COFF32: movl $_weak_preemptable_alias, %eax155 156 157; functions158 159define void @strong_default_function() {160 ret void161}162define ptr @get_strong_default_function() {163 ret ptr @strong_default_function164}165; COFF: leaq strong_default_function(%rip), %rax166; COFF_S: movl $strong_default_function, %eax167; COFF32: movl $_strong_default_function, %eax168 169define weak void @weak_default_function() {170 ret void171}172define ptr @get_weak_default_function() {173 ret ptr @weak_default_function174}175; COFF: leaq weak_default_function(%rip), %rax176; COFF_S: movl $weak_default_function, %eax177; COFF32: movl $_weak_default_function, %eax178 179declare void @external_default_function()180define ptr @get_external_default_function() {181 ret ptr @external_default_function182}183; COFF: leaq external_default_function(%rip), %rax184; COFF_S: movl $external_default_function, %eax185; COFF32: movl $_external_default_function, %eax186 187 188define dso_local void @strong_local_function() {189 ret void190}191define ptr @get_strong_local_function() {192 ret ptr @strong_local_function193}194; COFF: leaq strong_local_function(%rip), %rax195; COFF_S: movl $strong_local_function, %eax196; COFF32: movl $_strong_local_function, %eax197 198define weak dso_local void @weak_local_function() {199 ret void200}201define ptr @get_weak_local_function() {202 ret ptr @weak_local_function203}204; COFF: leaq weak_local_function(%rip), %rax205; COFF_S: movl $weak_local_function, %eax206; COFF32: movl $_weak_local_function, %eax207 208declare dso_local void @external_local_function()209define ptr @get_external_local_function() {210 ret ptr @external_local_function211}212; COFF: leaq external_local_function(%rip), %rax213; COFF_S: movl $external_local_function, %eax214; COFF32: movl $_external_local_function, %eax215 216 217define dso_preemptable void @strong_preemptable_function() {218 ret void219}220define ptr @get_strong_preemptable_function() {221 ret ptr @strong_preemptable_function222}223; COFF: leaq strong_preemptable_function(%rip), %rax224; COFF_S: movl $strong_preemptable_function, %eax225; COFF32: movl $_strong_preemptable_function, %eax226 227define weak dso_preemptable void @weak_preemptable_function() {228 ret void229}230define ptr @get_weak_preemptable_function() {231 ret ptr @weak_preemptable_function232}233; COFF: leaq weak_preemptable_function(%rip), %rax234; COFF_S: movl $weak_preemptable_function, %eax235; COFF32: movl $_weak_preemptable_function, %eax236 237declare dso_preemptable void @external_preemptable_function()238define ptr @get_external_preemptable_function() {239 ret ptr @external_preemptable_function240}241; COFF: leaq external_preemptable_function(%rip), %rax242; COFF_S: movl $external_preemptable_function, %eax243; COFF32: movl $_external_preemptable_function, %eax244