Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AIX][CodeGen] Storage Locations for Constant Pointers
This patch adds an `llc` option `-mroptr` to specify storage locations for constant pointers on AIX. When the `-mroptr` option is specified, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. Otherwise, by default, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage. https://reviews.llvm.org/D144190 enables the `-mroptr` option for `clang`. Reviewed By: hubert.reinterpretcast, stephenpeckham, myhsu, MaskRay, serge-sans-paille Differential Revision: https://reviews.llvm.org/D144189
- Loading branch information
Showing
8 changed files
with
124 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -mroptr < %s | FileCheck %s | ||
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -mroptr -filetype=obj -o %t.o < %s | ||
; RUN: llvm-objdump -t --symbol-description %t.o | FileCheck %s --check-prefix=OBJ | ||
|
||
; RUN: not llc -mtriple powerpc-ibm-aix-xcoff -mroptr -data-sections=false \ | ||
; RUN: < %s 2>&1 | FileCheck %s --check-prefix=DS_ERR | ||
|
||
; DS_ERR: -mroptr option must be used with -data-sections | ||
|
||
%union.U = type { %"struct.U::A" } | ||
%"struct.U::A" = type { ptr } | ||
|
||
@_ZL1p = internal constant i32 ptrtoint (ptr @_ZL1p to i32), align 4 | ||
; CHECK: .csect _ZL1p[RO],2 | ||
; CHECK-NEXT: .lglobl _ZL1p[RO] | ||
; CHECK-NEXT: .align 2 | ||
; CHECK-NEXT: .vbyte 4, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{8})}} l .text {{([[:xdigit:]]{8})}} (idx: [[#]]) _ZL1p[RO] | ||
@q = thread_local constant ptr @_ZL1p, align 4 | ||
; CHECK: .csect q[TL],2 | ||
; CHECK-NEXT: .globl q[TL] | ||
; CHECK-NEXT: .align 2 | ||
; CHECK-NEXT: .vbyte 4, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{8})}} g O .tdata {{([[:xdigit:]]{8})}} (idx: [[#]]) q[TL] | ||
@u = local_unnamed_addr constant [1 x %union.U] [%union.U { %"struct.U::A" { ptr @_ZL1p } }], align 4 | ||
; CHECK: .csect u[RO],2 | ||
; CHECK-NEXT: .globl u[RO] | ||
; CHECK-NEXT: .align 2 | ||
; CHECK-NEXT: .vbyte 4, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{8})}} g .text {{([[:xdigit:]]{8})}} (idx: [[#]]) u[RO] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -mroptr < %s | FileCheck %s | ||
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -mroptr -filetype=obj -o %t.o < %s | ||
; RUN: llvm-objdump -t --symbol-description %t.o | FileCheck %s --check-prefix=OBJ | ||
|
||
; RUN: not llc -mtriple powerpc64-ibm-aix-xcoff -mroptr -data-sections=false \ | ||
; RUN: < %s 2>&1 | FileCheck %s --check-prefix=DS_ERR | ||
; RUN: not llc -mtriple powerpc64le-unknown-linux-gnu -mroptr \ | ||
; RUN: < %s 2>&1 | FileCheck %s --check-prefix=OS_ERR | ||
|
||
; DS_ERR: -mroptr option must be used with -data-sections | ||
; OS_ERR: -mroptr option is only supported on AIX | ||
|
||
%union.U = type { %"struct.U::A" } | ||
%"struct.U::A" = type { ptr } | ||
|
||
@_ZL1p = internal constant i64 ptrtoint (ptr @_ZL1p to i64), align 8 | ||
; CHECK: .csect _ZL1p[RO],3 | ||
; CHECK-NEXT: .lglobl _ZL1p[RO] | ||
; CHECK-NEXT: .align 3 | ||
; CHECK-NEXT: .vbyte 8, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{16})}} l .text {{([[:xdigit:]]{16})}} (idx: [[#]]) _ZL1p[RO] | ||
@q = thread_local constant ptr @_ZL1p, align 8 | ||
; CHECK: .csect q[TL],3 | ||
; CHECK-NEXT: .globl q[TL] | ||
; CHECK-NEXT: .align 3 | ||
; CHECK-NEXT: .vbyte 8, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{16})}} g O .tdata {{([[:xdigit:]]{16})}} (idx: [[#]]) q[TL] | ||
@u = local_unnamed_addr constant [1 x %union.U] [%union.U { %"struct.U::A" { ptr @_ZL1p } }], align 8 | ||
; CHECK: .csect u[RO],3 | ||
; CHECK-NEXT: .globl u[RO] | ||
; CHECK-NEXT: .align 3 | ||
; CHECK-NEXT: .vbyte 8, _ZL1p[RO] | ||
; OBJ-DAG: {{([[:xdigit:]]{16})}} g .text {{([[:xdigit:]]{16})}} (idx: [[#]]) u[RO] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters