mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 14:47:00 +00:00
875b7560fb
This patch adds support for the MachO .alt_entry assembly directive, and uses it for global aliases with non-zero GEP offsets. The alt_entry flag indicates that a symbol should be layed out immediately after the preceding symbol. Conceptually it introduces an alternate entry point for a function or data structure. E.g.: safe_foo: // check preconditions for foo .alt_entry fast_foo fast_foo: // body of foo, can assume preconditions. The .alt_entry flag is also implicitly set on assembly aliases of the form: a = b + C where C is a non-zero constant, since these have the same effect as an alt_entry symbol: they introduce a label that cannot be moved relative to the preceding one. Setting the alt_entry flag on aliases of this form fixes http://llvm.org/PR25381. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263521 91177308-0d34-0410-b5e6-96231b3b80d8
23 lines
741 B
LLVM
23 lines
741 B
LLVM
; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck --check-prefix=MACHO %s
|
|
; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck --check-prefix=ELF %s
|
|
|
|
;MACHO: .globl _offsetSym0
|
|
;MACHO-NOT: .alt_entry
|
|
;MACHO: _offsetSym0 = _s
|
|
;MACHO: .globl _offsetSym1
|
|
;MACHO: .alt_entry _offsetSym1
|
|
;MACHO: _offsetSym1 = _s+8
|
|
|
|
;ELF: .globl offsetSym0
|
|
;ELF-NOT: .alt_entry
|
|
;ELF: offsetSym0 = s
|
|
;ELF: .globl offsetSym1
|
|
;ELF-NOT: .alt_entry
|
|
;ELF: offsetSym1 = s+8
|
|
|
|
%struct.S1 = type { i32, i32, i32 }
|
|
|
|
@s = global %struct.S1 { i32 31, i32 32, i32 33 }, align 4
|
|
@offsetSym0 = alias i32, i32* getelementptr inbounds (%struct.S1, %struct.S1* @s, i64 0, i32 0)
|
|
@offsetSym1 = alias i32, i32* getelementptr inbounds (%struct.S1, %struct.S1* @s, i64 0, i32 2)
|