Skip to content

Commit 0623497

Browse files
authored
[RISCV] Mark FLH as canFoldAsLoad. (#165974)
1 parent c081fb0 commit 0623497

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ defvar ZfhminDExts = [ZfhminDExt, ZhinxminZdinxExt, ZhinxminZdinx32Ext];
9090
//===----------------------------------------------------------------------===//
9191

9292
let Predicates = [HasHalfFPLoadStoreMove] in {
93+
let canFoldAsLoad = 1 in
9394
def FLH : FPLoad_r<0b001, "flh", FPR16, WriteFLD16>;
9495

9596
// Operands for stores are in the order srcreg, base, offset rather than
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh < %s | FileCheck %s
2+
3+
; CHECK-LABEL: .section .llvm_stackmaps
4+
; CHECK-NEXT: __LLVM_StackMaps:
5+
; Header
6+
; CHECK-NEXT: .byte 3
7+
; CHECK-NEXT: .byte 0
8+
; CHECK-NEXT: .half 0
9+
; Num Functions
10+
; CHECK-NEXT: .word 1
11+
; Num LargeConstants
12+
; CHECK-NEXT: .word 0
13+
; Num Callsites
14+
; CHECK-NEXT: .word 1
15+
16+
; Functions and stack size
17+
; CHECK-NEXT: .quad liveArgs
18+
; CHECK-NEXT: .quad 0
19+
; CHECK-NEXT: .quad 1
20+
21+
; Spilled stack map values.
22+
;
23+
; Verify 3 stack map entries.
24+
;
25+
; CHECK-LABEL: .word .L{{.*}}-liveArgs
26+
; CHECK-NEXT: .half 0
27+
; CHECK-NEXT: .half 25
28+
;
29+
; Check that at least one is a spilled entry from SP.
30+
; Location: Indirect SP + ...
31+
; CHECK: .byte 3
32+
; CHECK-NEXT: .byte 0
33+
; CHECK-NEXT: .half 8
34+
; CHECK-NEXT: .half 2
35+
; CHECK-NEXT: .half 0
36+
; CHECK-NEXT: .word
37+
define void @liveArgs(double %arg0, double %arg1, double %arg2, double %arg3, double %arg4, double %arg5, double %arg6, double %arg7, double %arg8, double %arg9, double %arg10, double %arg11, double %arg12, double %arg13, double %arg14, double %arg15, double %arg16, double %arg17, double %arg18, double %arg19, double %arg20, double %arg21, double %arg22, double %arg23, half %arg24, half %arg25, half %arg26, half %arg27, half %arg28, bfloat %arg29) {
38+
entry:
39+
call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 28, ptr null, i32 5, double %arg0, double %arg1, double %arg2, double %arg3, double %arg4, double %arg5, double %arg6, double %arg7, double %arg8, double %arg9, double %arg10, double %arg11, double %arg12, double %arg13, double %arg14, double %arg15, double %arg16, double %arg17, double %arg18, double %arg19, double %arg20, double %arg21, double %arg22, double %arg23, half %arg24, half %arg25, half %arg26, half %arg27, half %arg28, bfloat %arg29)
40+
ret void
41+
}

0 commit comments

Comments
 (0)