| # 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(" }") |