Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / SystemZ / zos-ada-relocations.ll
blobe25246917ec0998b5462ce5006be8c464ceecc25
1 ; Test the ADA section in the assembly output for all cases.
3 ; RUN: llc < %s -mtriple=s390x-ibm-zos | FileCheck %s
5 ; CHECK-LABEL: DoIt:
6 ; CHECK:    stmg    6, 7, 1840(4)
7 ; CHECK:    aghi    4, -224
8 ; CHECK:    lg  1, 0(5)
9 ; CHECK:    lg  6, 16(5)
10 ; CHECK:    lg  5, 8(5)
11 ; CHECK:    stg 1, 2264(4)
12 ; CHECK:    basr    7, 6
13 ; CHECK:    bcr 0, 0
14 ; CHECK:    lg  7, 2072(4)
15 ; CHECK:    aghi    4, 224
16 ; CHECK:    b   2(7)
17 define hidden void @DoIt() {
18 entry:
19   %F = alloca ptr, align 8
20   store ptr @DoFunc, ptr %F, align 8
21   %0 = load ptr, ptr %F, align 8
22   call void @Caller(ptr noundef %0)
23   ret void
25 declare void @DoFunc()
26 declare void @Caller(ptr noundef)
28 ; CHECK-LABEL: get_i:
29 ; CHECK:    stmg    6, 8, 1872(4)
30 ; CHECK:    aghi    4, -192
31 ; CHECK:    lg  1, 24(5)
32 ; CHECK:    lg  2, 32(5)
33 ; CHECK:    lgf 1, 0(1)
34 ; CHECK:    lg  6, 48(5)
35 ; CHECK:    lg  5, 40(5)
36 ; CHECK:    l   8, 0(2)
37 ; CHECK:    basr    7, 6
38 ; CHECK:    bcr 0, 0
39 ; CHECK:    ar  3, 8
40 ; CHECK:    lgfr    3, 3
41 ; CHECK:    lmg 7, 8, 2072(4)
42 ; CHECK:    aghi    4, 192
43 ; CHECK:    b   2(7)
44 @i = external global i32, align 4
45 @i2 = external global i32, align 4
47 define signext i32 @get_i() {
48 entry:
49   %0 = load i32, ptr @i, align 4
50   %1 = load i32, ptr @i2, align 4
51   %call = call signext i32 @callout(i32 signext %1)
52   %add = add nsw i32 %0, %call
53   ret i32 %add
56 declare signext i32 @callout(i32 signext)
58 ; CHECK:     .section    ".ada"
59 ; CHECK:  .set @@DoFunc@indirect0, DoFunc
60 ; CHECK:      .indirect_symbol   @@DoFunc@indirect0
61 ; CHECK:  .quad V(@@DoFunc@indirect0)          * Offset 0 pointer to function descriptor DoFunc
62 ; CHECK:  .quad R(Caller)                      * Offset 8 function descriptor of Caller
63 ; CHECK:  .quad V(Caller)
64 ; CHECK:  .quad A(i2)                           * Offset 24 pointer to data symbol i2
65 ; CHECK:  .quad A(i)                            * Offset 32 pointer to data symbol i
66 ; CHECK:  .quad R(callout)                      * Offset 40 function descriptor of callout
67 ; CHECK:  .quad V(callout)