80 lines · plain
1; RUN: llc < %s -mtriple=thumbv7-w64-mingw32 | FileCheck %s2 3@var = external local_unnamed_addr global i32, align 44@dsolocalvar = external dso_local local_unnamed_addr global i32, align 45@localvar = dso_local local_unnamed_addr global i32 0, align 46@localcommon = common dso_local local_unnamed_addr global i32 0, align 47@extvar = external dllimport local_unnamed_addr global i32, align 48 9define dso_local i32 @getVar() {10; CHECK-LABEL: getVar:11; CHECK: movw r0, :lower16:.refptr.var12; CHECK: movt r0, :upper16:.refptr.var13; CHECK: ldr r0, [r0]14; CHECK: ldr r0, [r0]15; CHECK: bx lr16entry:17 %0 = load i32, ptr @var, align 418 ret i32 %019}20 21define dso_local i32 @getDsoLocalVar() {22; CHECK-LABEL: getDsoLocalVar:23; CHECK: movw r0, :lower16:dsolocalvar24; CHECK: movt r0, :upper16:dsolocalvar25; CHECK: ldr r0, [r0]26; CHECK: bx lr27entry:28 %0 = load i32, ptr @dsolocalvar, align 429 ret i32 %030}31 32define dso_local i32 @getLocalVar() {33; CHECK-LABEL: getLocalVar:34; CHECK: movw r0, :lower16:localvar35; CHECK: movt r0, :upper16:localvar36; CHECK: ldr r0, [r0]37; CHECK: bx lr38entry:39 %0 = load i32, ptr @localvar, align 440 ret i32 %041}42 43define dso_local i32 @getLocalCommon() {44; CHECK-LABEL: getLocalCommon:45; CHECK: movw r0, :lower16:localcommon46; CHECK: movt r0, :upper16:localcommon47; CHECK: ldr r0, [r0]48; CHECK: bx lr49entry:50 %0 = load i32, ptr @localcommon, align 451 ret i32 %052}53 54define dso_local i32 @getExtVar() {55; CHECK-LABEL: getExtVar:56; CHECK: movw r0, :lower16:__imp_extvar57; CHECK: movt r0, :upper16:__imp_extvar58; CHECK: ldr r0, [r0]59; CHECK: ldr r0, [r0]60; CHECK: bx lr61entry:62 %0 = load i32, ptr @extvar, align 463 ret i32 %064}65 66define dso_local void @callFunc() {67; CHECK-LABEL: callFunc:68; CHECK: b.w otherFunc69entry:70 tail call void @otherFunc()71 ret void72}73 74declare dso_local void @otherFunc()75 76; CHECK: .section .rdata$.refptr.var,"dr",discard,.refptr.var77; CHECK: .globl .refptr.var78; CHECK: .refptr.var:79; CHECK: .long var80