| ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \ | |
| ; RUN: -data-sections=false -function-sections=false -filetype=obj -o %t.o < %s | |
| ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck %s | |
| ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ | |
| ; RUN: -data-sections=false -function-sections=false --code-model=small -filetype=obj -o %t.o < %s | |
| ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck %s | |
| ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ | |
| ; RUN: -data-sections=true -function-sections=true --code-model=small -filetype=obj -o %t.o < %s | |
| ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck %s --check-prefix=SEC | |
| @a = global i32 1 | |
| @b = dso_local constant i32 2 | |
| @p = dso_local global ptr @a, !implicit.ref !0 | |
| @c = global i32 3 | |
| define dso_local void @foo(i32 noundef signext %i) { | |
| entry: | |
| tail call void @extern_func1(i32 noundef signext %i) | |
| ret void | |
| } | |
| declare void @extern_func1(i32 noundef signext) | |
| define dso_local signext i32 @bar() { | |
| entry: | |
| %0 = load i32, ptr @a, align 4 | |
| %call = tail call signext i32 @extern_func2(i32 noundef signext %0) | |
| ret i32 %call | |
| } | |
| declare signext i32 @extern_func2(i32 noundef signext) | |
| define dso_local signext i32 @baz() !implicit.ref !0 { | |
| entry: | |
| %0 = load i32, ptr @c, align 4 | |
| ret i32 %0 | |
| } | |
| !0 = !{ptr @b} | |
| ; CHECK: Disassembly of section .text: | |
| ; CHECK-EMPTY: | |
| ; CHECK-NEXT: 00000000 (idx: {{[0-9]+}}) .foo: | |
| ; CHECK: 00000000: R_REF (idx: {{[0-9]+}}) b | |
| ; CHECK: 0000000c: R_RBR (idx: {{[0-9]+}}) .extern_func1[PR] | |
| ; CHECK: 0000004a: R_TOC (idx: {{[0-9]+}}) a[TC] | |
| ; CHECK: 00000054: R_RBR (idx: {{[0-9]+}}) .extern_func2[PR] | |
| ; CHECK: 00000092: R_TOC (idx: {{[0-9]+}}) c[TC] | |
| ; CHECK: Disassembly of section .data: | |
| ; CHECK-EMPTY: | |
| ; CHECK-NEXT: [[DATA:[0-9a-f]+]] (idx: {{[0-9]+}}) a: | |
| ; CHECK: [[DATA]]: R_REF (idx: {{[0-9]+}}) b | |
| ; CHECK: [[DATA_P:[0-9a-f]+]] (idx: {{[0-9]+}}) p: | |
| ; CHECK: [[DATA_P]]: R_POS (idx: {{[0-9]+}}) a | |
| ; CHECK: {{[0-9a-f]+}} (idx: {{[0-9]+}}) c: | |
| ; SEC: Disassembly of section .text | |
| ; SEC-EMPTY: | |
| ; SEC-NEXT: .foo[PR]: | |
| ; SEC: R_RBR (idx: {{[0-9]+}}) .extern_func1[PR] | |
| ; SEC: .bar[PR]: | |
| ; SEC: R_TOC (idx: {{[0-9]+}}) a[TC] | |
| ; SEC: R_RBR (idx: {{[0-9]+}}) .extern_func2[PR] | |
| ; SEC: .baz[PR]: | |
| ; SEC: R_REF (idx: {{[0-9]+}}) b[RO] | |
| ; SEC: R_TOC (idx: {{[0-9]+}}) c[TC] | |
| ; SEC: Disassembly of section .data: | |
| ; SEC-EMPTY: | |
| ; SEC-NEXT: a[RW]: | |
| ; SEC: p[RW]: | |
| ; SEC: R_REF (idx: {{[0-9]+}}) b[RO] | |
| ; SEC: R_POS (idx: {{[0-9]+}}) a[RW] | |
| ; SEC: c[RW]: |