# Test code generation for retrieving function descriptors
# from the ADA when the ADA is extremely large and forces the
# generation of a different instruction sequence
# RUN: %python %s | llc -mtriple=s390x-ibm-zos -O2 | FileCheck %s

# CHECK: algfi	8, {{[0-9]+}}
# CHECK: la	8, 0(8)

from __future__ import print_function

num_calls = 35000

print("define hidden signext i32 @main() {")
print("entry:")

for i in range(num_calls):
    print("  call void @foo%d()" % i)

# This is added to force the use of register r8 to generate
# la 8, 0(8) which generates the algfi instruction
print('%0 = call ptr asm " LGR $0,$1\0A", "=r,{r8}"(ptr nonnull @foo)')
print("  call void @bar(ptr noundef %0)")
print("ret i32 0")
print("}")

for i in range(num_calls):
    print("declare void @foo%d(...)" % i)

print("declare void @bar(ptr noundef)")
print("define internal void @foo() {")
print("entry:")
print("  ret void")
print("  }")
