blob: 0d7932217e39f88b831d1e5644ab440533b5850a [file] [edit]
; Read-only data stays in the code section (and is addressed PC-relative) only
; if it is local and its initializer needs no relocations. Externally visible
; read-only data and tables of function pointers (which point to function
; descriptors in the WSA) are parts in the WSA and are addressed via the ADA.
;
; RUN: llc < %s -mtriple=s390x-ibm-zos | FileCheck %s
; CHECK-LABEL: useext DS 0H
; CHECK: lg 2,0(5)
; CHECK-NOT: larl
; CHECK: b 2(7)
; CHECK-LABEL: useloc DS 0H
; CHECK: larl 2,loc
; CHECK: b 2(7)
; CHECK-LABEL: usetbl DS 0H
; CHECK: lg 1,8(5)
; CHECK-NOT: larl
; CHECK: b 2(7)
; CHECK: ext CSECT
; CHECK-NEXT: C_WSA64 CATTR {{.*}}PART(ext)
; CHECK: loc XATTR LINKAGE(XPLINK),REFERENCE(DATA),SCOPE(SECTION)
; CHECK-NEXT: loc DS 0H
; CHECK: tbl CSECT
; CHECK-NEXT: C_WSA64 CATTR {{.*}}PART(tbl)
@ext = constant [2 x i32] [i32 3, i32 4], align 4
@loc = internal constant [2 x i32] [i32 5, i32 6], align 4
@tbl = internal constant [1 x ptr] [ptr @f], align 8
define internal void @f() { ret void }
define signext i32 @useext(i64 %i) {
%p = getelementptr inbounds [2 x i32], ptr @ext, i64 0, i64 %i
%v = load i32, ptr %p, align 4
ret i32 %v
}
define signext i32 @useloc(i64 %i) {
%p = getelementptr inbounds [2 x i32], ptr @loc, i64 0, i64 %i
%v = load i32, ptr %p, align 4
ret i32 %v
}
define ptr @usetbl() {
%v = load ptr, ptr @tbl, align 8
ret ptr %v
}