mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 21:42:54 +02:00
8507fc3677
Summary: Mips Linux uses $gp to hold a pointer to thread info structure and accesses it with a named register. This makes this work for LLVM. The N32 ABI doesn't quite work yet since the frontend generates incorrect IR for this case. It neglects to truncate the 64-bit GPR to a 32-bit value before converting to a pointer. Given correct IR (as in the testcase in this patch), it works correctly. Reviewers: sstankovic, vmedic, atanasyan Reviewed By: atanasyan Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6893 llvm-svn: 225529
18 lines
372 B
LLVM
18 lines
372 B
LLVM
; RUN: llc -march=mips -relocation-model=static -mattr=+noabicalls < %s | FileCheck %s
|
|
|
|
define i32* @get_gp() {
|
|
entry:
|
|
%0 = call i32 @llvm.read_register.i32(metadata !0)
|
|
%1 = inttoptr i32 %0 to i32*
|
|
ret i32* %1
|
|
}
|
|
|
|
; CHECK-LABEL: get_gp:
|
|
; CHECK: move $2, $gp
|
|
|
|
declare i32 @llvm.read_register.i32(metadata)
|
|
|
|
!llvm.named.register.$28 = !{!0}
|
|
|
|
!0 = !{!"$28"}
|