forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
------------------------------------------------------------------------ r314798 | sdardis | 2017-10-03 06:45:49 -0700 (Tue, 03 Oct 2017) | 9 lines [mips] Enable spilling and reloading of the dsp register set. The dsp register class is an alias of the gpr register class, so we have to define instructions for spilling and reloading. Reviewers: atanasyan Differential Revision: https://reviews.llvm.org/D38038 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_50@318183 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
4 changed files
with
69 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
; RUN: llc -march=mips -mattr=+dsp < %s -asm-show-inst -O0 | FileCheck %s \ | ||
; RUN: --check-prefixes=ASM,ALL | ||
; RUN: llc -march=mips -mattr=+dsp,+micromips < %s -O0 -filetype=obj | \ | ||
; RUN: llvm-objdump -d - | FileCheck %s --check-prefixes=MM-OBJ,ALL | ||
|
||
; Test that spill and reloads use the dsp "variant" instructions. We use -O0 | ||
; to use the simple register allocator. | ||
|
||
; To test the micromips output, we have to take a round trip through the | ||
; object file encoder/decoder as the instruction mapping tables are used to | ||
; support micromips. | ||
|
||
; FIXME: We should be able to get rid of those instructions with the variable | ||
; value registers. | ||
|
||
; ALL-LABEL: spill_reload: | ||
|
||
define <4 x i8> @spill_reload(<4 x i8> %a, <4 x i8> %b, i32 %g) { | ||
entry: | ||
%c = tail call <4 x i8> @llvm.mips.addu.qb(<4 x i8> %a, <4 x i8> %b) | ||
%cond = icmp eq i32 %g, 0 | ||
br i1 %cond, label %true, label %end | ||
|
||
; ASM: SWDSP | ||
; ASM: SWDSP | ||
; ASM: SWDSP | ||
|
||
; MM-OBJ: sw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
; MM-OBJ: sw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
; MM-OBJ: sw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
; MM-OBJ: sw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
|
||
true: | ||
ret <4 x i8> %c | ||
|
||
; ASM: LWDSP | ||
|
||
; MM-OBJ: lw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
|
||
end: | ||
%d = tail call <4 x i8> @llvm.mips.addu.qb(<4 x i8> %c, <4 x i8> %a) | ||
ret <4 x i8> %d | ||
|
||
; ASM: LWDSP | ||
; ASM: LWDSP | ||
|
||
; MM-OBJ: lw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
; MM-OBJ: lw ${{[0-9]+}}, {{[0-9]+}}($sp) | ||
|
||
} | ||
|
||
declare <4 x i8> @llvm.mips.addu.qb(<4 x i8>, <4 x i8>) nounwind |