| ; Test the ADA section in the assembly output for all cases. |
| ; |
| ; RUN: llc < %s -mtriple=s390x-ibm-zos | FileCheck %s |
| |
| ; CHECK-LABEL: DoIt: |
| ; CHECK: stmg 6, 7, 1840(4) |
| ; CHECK: aghi 4, -224 |
| ; CHECK: lg 1, 0(5) |
| ; CHECK: lg 6, 16(5) |
| ; CHECK: lg 5, 8(5) |
| ; CHECK: stg 1, 2264(4) |
| ; CHECK: basr 7, 6 |
| ; CHECK: bcr 0, 0 |
| ; CHECK: lg 7, 2072(4) |
| ; CHECK: aghi 4, 224 |
| ; CHECK: b 2(7) |
| define hidden void @DoIt() { |
| entry: |
| %F = alloca ptr, align 8 |
| store ptr @DoFunc, ptr %F, align 8 |
| %0 = load ptr, ptr %F, align 8 |
| call void @Caller(ptr noundef %0) |
| ret void |
| } |
| declare void @DoFunc() |
| declare void @Caller(ptr noundef) |
| |
| ; CHECK-LABEL: get_i: |
| ; CHECK: stmg 6, 8, 1872(4) |
| ; CHECK: aghi 4, -192 |
| ; CHECK: lg 1, 24(5) |
| ; CHECK: lg 2, 32(5) |
| ; CHECK: lgf 1, 0(1) |
| ; CHECK: lg 6, 48(5) |
| ; CHECK: lg 5, 40(5) |
| ; CHECK: l 8, 0(2) |
| ; CHECK: basr 7, 6 |
| ; CHECK: bcr 0, 0 |
| ; CHECK: ar 3, 8 |
| ; CHECK: lgfr 3, 3 |
| ; CHECK: lmg 7, 8, 2072(4) |
| ; CHECK: aghi 4, 192 |
| ; CHECK: b 2(7) |
| @i = external global i32, align 4 |
| @i2 = external global i32, align 4 |
| |
| define signext i32 @get_i() { |
| entry: |
| %0 = load i32, ptr @i, align 4 |
| %1 = load i32, ptr @i2, align 4 |
| %call = call signext i32 @callout(i32 signext %1) |
| %add = add nsw i32 %0, %call |
| ret i32 %add |
| } |
| |
| declare signext i32 @callout(i32 signext) |
| |
| ; CHECK: .section ".ada" |
| ; CHECK: .set @@DoFunc@indirect0, DoFunc |
| ; CHECK: .indirect_symbol @@DoFunc@indirect0 |
| ; CHECK: .quad V(@@DoFunc@indirect0) * Offset 0 pointer to function descriptor DoFunc |
| ; CHECK: .quad R(Caller) * Offset 8 function descriptor of Caller |
| ; CHECK: .quad V(Caller) |
| ; CHECK: .quad A(i2) * Offset 24 pointer to data symbol i2 |
| ; CHECK: .quad A(i) * Offset 32 pointer to data symbol i |
| ; CHECK: .quad R(callout) * Offset 40 function descriptor of callout |
| ; CHECK: .quad V(callout) |