Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[mips] Support 9-bit offsets for the 'R' inline assembly memory const…
…raint. Summary: The 'R' constraint is actually supposed to be much more complicated than this and is defined in terms of whether it will cause macro expansion in the assembler. 'R' is getting less useful due to architecture changes and ought to be replaced by other constraints. We therefore implement 9-bit offsets which will work for all subtargets and all instructions. Reviewers: vkalintiris Reviewed By: vkalintiris Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8440 llvm-svn: 233537
- Loading branch information
1 parent
9dc5e3e
commit 82df616
Showing
3 changed files
with
74 additions
and
10 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
; RUN: llc -march=mipsel < %s | FileCheck %s | ||
|
||
@data = global [8193 x i32] zeroinitializer | ||
|
||
define void @R(i32 *%p) nounwind { | ||
entry: | ||
; CHECK-LABEL: R: | ||
|
||
call void asm sideeffect "lw $$1, $0", "*R,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 0)) | ||
|
||
; CHECK: lw $[[BASEPTR:[0-9]+]], %got(data)( | ||
; CHECK: #APP | ||
; CHECK: lw $1, 0($[[BASEPTR]]) | ||
; CHECK: #NO_APP | ||
|
||
ret void | ||
} | ||
|
||
define void @R_offset_4(i32 *%p) nounwind { | ||
entry: | ||
; CHECK-LABEL: R_offset_4: | ||
|
||
call void asm sideeffect "lw $$1, $0", "*R,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 1)) | ||
|
||
; CHECK: lw $[[BASEPTR:[0-9]+]], %got(data)( | ||
; CHECK: #APP | ||
; CHECK: lw $1, 4($[[BASEPTR]]) | ||
; CHECK: #NO_APP | ||
|
||
ret void | ||
} | ||
|
||
define void @R_offset_254(i32 *%p) nounwind { | ||
entry: | ||
; CHECK-LABEL: R_offset_254: | ||
|
||
call void asm sideeffect "lw $$1, $0", "*R,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 63)) | ||
|
||
; CHECK-DAG: lw $[[BASEPTR:[0-9]+]], %got(data)( | ||
; CHECK: #APP | ||
; CHECK: lw $1, 252($[[BASEPTR]]) | ||
; CHECK: #NO_APP | ||
|
||
ret void | ||
} | ||
|
||
define void @R_offset_256(i32 *%p) nounwind { | ||
entry: | ||
; CHECK-LABEL: R_offset_256: | ||
|
||
call void asm sideeffect "lw $$1, $0", "*R,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 64)) | ||
|
||
; CHECK-DAG: lw $[[BASEPTR:[0-9]+]], %got(data)( | ||
; CHECK: addiu $[[BASEPTR2:[0-9]+]], $[[BASEPTR]], 256 | ||
; CHECK: #APP | ||
; CHECK: lw $1, 0($[[BASEPTR2]]) | ||
; CHECK: #NO_APP | ||
|
||
ret void | ||
} |