| ; RUN: llc -mtriple powerpc-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck --check-prefixes=CHECK,32BIT %s |
| |
| ; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck --check-prefixes=CHECK,64BIT %s |
| |
| |
| define i32 @foo() { |
| entry: |
| ret i32 3 |
| } |
| |
| define i32 @main() { |
| entry: |
| %0 = call i32 @foo() |
| %1 = call i32 bitcast (i32 (...)* @extern_foo to i32 ()*)() |
| %2 = call i32 @static_foo() |
| %3 = add nsw i32 %0, %1 |
| %4 = add nsw i32 %3, %2 |
| ret i32 %4 |
| } |
| |
| declare i32 @extern_foo(...) |
| |
| define internal i32 @static_foo() { |
| entry: |
| ret i32 3 |
| } |
| |
| ; CHECK: .globl foo[DS] |
| ; CHECK: .globl .foo |
| ; 32BIT: .csect foo[DS],2 |
| ; 32BIT-NEXT: .vbyte 4, .foo |
| ; 32BIT-NEXT: .vbyte 4, TOC[TC0] |
| ; 32BIT-NEXT: .vbyte 4, 0 |
| ; 64BIT: .csect foo[DS],3 |
| ; 64BIT-NEXT: .vbyte 8, .foo |
| ; 64BIT-NEXT: .vbyte 8, TOC[TC0] |
| ; 64BIT-NEXT: .vbyte 8, 0 |
| ; CHECK-NEXT: .csect .text[PR],2 |
| ; CHECK-LABEL: .foo: |
| |
| ; CHECK: .globl main[DS] |
| ; CHECK: .globl .main |
| ; 32BIT: .csect main[DS],2 |
| ; 32BIT-NEXT: .vbyte 4, .main |
| ; 32BIT-NEXT: .vbyte 4, TOC[TC0] |
| ; 32BIT-NEXT: .vbyte 4, 0 |
| ; 64BIT: .csect main[DS],3 |
| ; 64BIT-NEXT: .vbyte 8, .main |
| ; 64BIT-NEXT: .vbyte 8, TOC[TC0] |
| ; 64BIT-NEXT: .vbyte 8, 0 |
| ; CHECK-NEXT: .csect .text[PR],2 |
| ; CHECK-LABEL: .main: |
| ; CHECK: bl .foo |
| ; CHECK: bl .extern_foo |
| ; CHECK: bl .static_foo |
| |
| ; CHECK: .lglobl static_foo[DS] |
| ; CHECK: .lglobl .static_foo |
| ; 32BIT: .csect static_foo[DS],2 |
| ; 32BIT-NEXT: .vbyte 4, .static_foo |
| ; 32BIT-NEXT: .vbyte 4, TOC[TC0] |
| ; 32BIT-NEXT: .vbyte 4, 0 |
| ; 64BIT: .csect static_foo[DS],3 |
| ; 64BIT-NEXT: .vbyte 8, .static_foo |
| ; 64BIT-NEXT: .vbyte 8, TOC[TC0] |
| ; 64BIT-NEXT: .vbyte 8, 0 |
| ; CHECK-NEXT: .csect .text[PR],2 |
| ; CHECK-LABEL: .static_foo: |
| |
| ; CHECK-NOT: .csect extern_foo |
| |
| ; CHECK: .toc |
| ; CHECK-NOT: .tc |