brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 4d99936 Raw
96 lines · plain
1; Test loads of symbolic addresses when generating small-model non-PIC.2; All addresses can be treated as PC3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6@e4 = external dso_local global i327@d4 = dso_local global i32 18@e2 = external dso_local global i32, align 29@d2 = dso_local global i32 1, align 210@e1 = external dso_local global i32, align 111@d1 = dso_local global i32 1, align 112 13declare dso_local void @ef()14define dso_local void @df() {15  ret void16}17 18declare dso_local void @foo(ptr)19 20; Test a load of a fully-aligned external variable.21define dso_local ptr@f1() {22; CHECK-LABEL: f1:23; CHECK: larl %r2, e424; CHECK-NEXT: br %r1425  ret ptr@e426}27 28; Test a load of a fully-aligned local variable.29define dso_local ptr@f2() {30; CHECK-LABEL: f2:31; CHECK: larl %r2, d432; CHECK-NEXT: br %r1433  ret ptr@d434}35 36; Test a load of a 2-byte-aligned external variable.37define dso_local ptr@f3() {38; CHECK-LABEL: f3:39; CHECK: larl %r2, e240; CHECK-NEXT: br %r1441  ret ptr@e242}43 44; Test a load of a 2-byte-aligned local variable.45define dso_local ptr@f4() {46; CHECK-LABEL: f4:47; CHECK: larl %r2, d248; CHECK-NEXT: br %r1449  ret ptr@d250}51 52; Test a load of an unaligned external variable, which must go via the GOT.53define dso_local ptr@f5() {54; CHECK-LABEL: f5:55; CHECK: lgrl %r2, e1@GOT56; CHECK-NEXT: br %r1457  ret ptr@e158}59 60; Test a load of an unaligned local variable, which must go via the GOT.61define dso_local ptr@f6() {62; CHECK-LABEL: f6:63; CHECK: lgrl %r2, d1@GOT64; CHECK-NEXT: br %r1465  ret ptr@d166}67 68; Test a load of an external function.69define dso_local ptr@f7() {70; CHECK-LABEL: f7:71; CHECK: larl %r2, ef72; CHECK-NEXT: br %r1473  ret ptr@ef74}75 76; Test a load of a local function.77define dso_local ptr@f8() {78; CHECK-LABEL: f8:79; CHECK: larl %r2, df80; CHECK-NEXT: br %r1481  ret ptr@df82}83 84; Test that LARL can be rematerialized.85define dso_local i32 @f9() {86; CHECK-LABEL: f9:87; CHECK: larl %r2, d288; CHECK: brasl %r14, foo@PLT89; CHECK: larl %r2, d290; CHECK: brasl %r14, foo@PLT91; CHECK: br %r1492  call void @foo(ptr@d2)93  call void @foo(ptr@d2)94  ret i32 095}96