blob: 06b3536b7db96b642948a5b1c775fba56409e4ea [file] [log] [blame]
Martin Storsjo2dcaa412018-08-31 08:00:25 +00001; RUN: llc < %s -mtriple=thumbv7-w64-mingw32 | FileCheck %s
2
3@var = external local_unnamed_addr global i32, align 4
4@dsolocalvar = external dso_local local_unnamed_addr global i32, align 4
5@localvar = dso_local local_unnamed_addr global i32 0, align 4
6@localcommon = common dso_local local_unnamed_addr global i32 0, align 4
7@extvar = external dllimport local_unnamed_addr global i32, align 4
8
9define dso_local i32 @getVar() {
10; CHECK-LABEL: getVar:
11; CHECK: movw r0, :lower16:.refptr.var
12; CHECK: movt r0, :upper16:.refptr.var
13; CHECK: ldr r0, [r0]
14; CHECK: ldr r0, [r0]
15; CHECK: bx lr
16entry:
17 %0 = load i32, i32* @var, align 4
18 ret i32 %0
19}
20
21define dso_local i32 @getDsoLocalVar() {
22; CHECK-LABEL: getDsoLocalVar:
23; CHECK: movw r0, :lower16:dsolocalvar
24; CHECK: movt r0, :upper16:dsolocalvar
25; CHECK: ldr r0, [r0]
26; CHECK: bx lr
27entry:
28 %0 = load i32, i32* @dsolocalvar, align 4
29 ret i32 %0
30}
31
32define dso_local i32 @getLocalVar() {
33; CHECK-LABEL: getLocalVar:
34; CHECK: movw r0, :lower16:localvar
35; CHECK: movt r0, :upper16:localvar
36; CHECK: ldr r0, [r0]
37; CHECK: bx lr
38entry:
39 %0 = load i32, i32* @localvar, align 4
40 ret i32 %0
41}
42
43define dso_local i32 @getLocalCommon() {
44; CHECK-LABEL: getLocalCommon:
45; CHECK: movw r0, :lower16:localcommon
46; CHECK: movt r0, :upper16:localcommon
47; CHECK: ldr r0, [r0]
48; CHECK: bx lr
49entry:
50 %0 = load i32, i32* @localcommon, align 4
51 ret i32 %0
52}
53
54define dso_local i32 @getExtVar() {
55; CHECK-LABEL: getExtVar:
56; CHECK: movw r0, :lower16:__imp_extvar
57; CHECK: movt r0, :upper16:__imp_extvar
58; CHECK: ldr r0, [r0]
59; CHECK: ldr r0, [r0]
60; CHECK: bx lr
61entry:
62 %0 = load i32, i32* @extvar, align 4
63 ret i32 %0
64}
65
66define dso_local void @callFunc() {
67; CHECK-LABEL: callFunc:
68; CHECK: b otherFunc
69entry:
70 tail call void @otherFunc()
71 ret void
72}
73
74declare dso_local void @otherFunc()
75
76; CHECK: .section .rdata$.refptr.var,"dr",discard,.refptr.var
77; CHECK: .globl .refptr.var
78; CHECK: .refptr.var:
79; CHECK: .long var