1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -mtriple=riscv32 -mattr=+d -mattr= +xtheadfmemidx -mattr=+m -verify-machineinstrs < %s \
3
- ; RUN: | FileCheck %s -check-prefix=RV32XTHEADMEMIDX
4
- ; RUN: llc -mtriple=riscv64 -mattr=+d -mattr= +xtheadfmemidx -verify-machineinstrs < %s \
5
- ; RUN: | FileCheck %s -check-prefix= RV64XTHEADFMEMIDX
2
+ ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d, +xtheadfmemidx \
3
+ ; RUN: -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK,RV32XTHEADFMEMIDX
4
+ ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d, +xtheadfmemidx \
5
+ ; RUN: -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK, RV64XTHEADFMEMIDX
6
6
7
- define float @flrw (ptr %a , i64 %b ) {
8
- ; RV32XTHEADMEMIDX-LABEL: flrw:
9
- ; RV32XTHEADMEMIDX: # %bb.0:
10
- ; RV32XTHEADMEMIDX-NEXT: th.flrw fa5, a0, a1, 2
11
- ; RV32XTHEADMEMIDX-NEXT: fadd.s fa0, fa5, fa5
12
- ; RV32XTHEADMEMIDX-NEXT: ret
13
- ;
14
- ; RV64XTHEADFMEMIDX-LABEL: flrw:
15
- ; RV64XTHEADFMEMIDX: # %bb.0:
16
- ; RV64XTHEADFMEMIDX-NEXT: th.flrw fa5, a0, a1, 2
17
- ; RV64XTHEADFMEMIDX-NEXT: fadd.s fa0, fa5, fa5
18
- ; RV64XTHEADFMEMIDX-NEXT: ret
19
- %1 = getelementptr float , ptr %a , i64 %b
7
+ define float @flrw (ptr %a , iXLen %b ) {
8
+ ; CHECK-LABEL: flrw:
9
+ ; CHECK: # %bb.0:
10
+ ; CHECK-NEXT: th.flrw fa5, a0, a1, 2
11
+ ; CHECK-NEXT: fadd.s fa0, fa5, fa5
12
+ ; CHECK-NEXT: ret
13
+ %1 = getelementptr float , ptr %a , iXLen %b
20
14
%2 = load float , ptr %1 , align 4
21
15
%3 = fadd float %2 , %2
22
16
ret float %3
23
17
}
24
18
25
19
define float @flurw (ptr %a , i32 %b ) {
26
- ; RV32XTHEADMEMIDX -LABEL: flurw:
27
- ; RV32XTHEADMEMIDX : # %bb.0:
28
- ; RV32XTHEADMEMIDX -NEXT: th.flrw fa5, a0, a1, 2
29
- ; RV32XTHEADMEMIDX -NEXT: fadd.s fa0, fa5, fa5
30
- ; RV32XTHEADMEMIDX -NEXT: ret
20
+ ; RV32XTHEADFMEMIDX -LABEL: flurw:
21
+ ; RV32XTHEADFMEMIDX : # %bb.0:
22
+ ; RV32XTHEADFMEMIDX -NEXT: th.flrw fa5, a0, a1, 2
23
+ ; RV32XTHEADFMEMIDX -NEXT: fadd.s fa0, fa5, fa5
24
+ ; RV32XTHEADFMEMIDX -NEXT: ret
31
25
;
32
26
; RV64XTHEADFMEMIDX-LABEL: flurw:
33
27
; RV64XTHEADFMEMIDX: # %bb.0:
@@ -41,30 +35,24 @@ define float @flurw(ptr %a, i32 %b) {
41
35
ret float %4
42
36
}
43
37
44
- define void @fsrw (ptr %a , i64 %b , float %c ) {
45
- ; RV32XTHEADMEMIDX-LABEL: fsrw:
46
- ; RV32XTHEADMEMIDX: # %bb.0:
47
- ; RV32XTHEADMEMIDX-NEXT: fadd.s fa5, fa0, fa0
48
- ; RV32XTHEADMEMIDX-NEXT: th.fsrw fa5, a0, a1, 2
49
- ; RV32XTHEADMEMIDX-NEXT: ret
50
- ;
51
- ; RV64XTHEADFMEMIDX-LABEL: fsrw:
52
- ; RV64XTHEADFMEMIDX: # %bb.0:
53
- ; RV64XTHEADFMEMIDX-NEXT: fadd.s fa5, fa0, fa0
54
- ; RV64XTHEADFMEMIDX-NEXT: th.fsrw fa5, a0, a1, 2
55
- ; RV64XTHEADFMEMIDX-NEXT: ret
38
+ define void @fsrw (ptr %a , iXLen %b , float %c ) {
39
+ ; CHECK-LABEL: fsrw:
40
+ ; CHECK: # %bb.0:
41
+ ; CHECK-NEXT: fadd.s fa5, fa0, fa0
42
+ ; CHECK-NEXT: th.fsrw fa5, a0, a1, 2
43
+ ; CHECK-NEXT: ret
56
44
%1 = fadd float %c , %c
57
- %2 = getelementptr float , ptr %a , i64 %b
45
+ %2 = getelementptr float , ptr %a , iXLen %b
58
46
store float %1 , ptr %2 , align 4
59
47
ret void
60
48
}
61
49
62
50
define void @fsurw (ptr %a , i32 %b , float %c ) {
63
- ; RV32XTHEADMEMIDX -LABEL: fsurw:
64
- ; RV32XTHEADMEMIDX : # %bb.0:
65
- ; RV32XTHEADMEMIDX -NEXT: fadd.s fa5, fa0, fa0
66
- ; RV32XTHEADMEMIDX -NEXT: th.fsrw fa5, a0, a1, 2
67
- ; RV32XTHEADMEMIDX -NEXT: ret
51
+ ; RV32XTHEADFMEMIDX -LABEL: fsurw:
52
+ ; RV32XTHEADFMEMIDX : # %bb.0:
53
+ ; RV32XTHEADFMEMIDX -NEXT: fadd.s fa5, fa0, fa0
54
+ ; RV32XTHEADFMEMIDX -NEXT: th.fsrw fa5, a0, a1, 2
55
+ ; RV32XTHEADFMEMIDX -NEXT: ret
68
56
;
69
57
; RV64XTHEADFMEMIDX-LABEL: fsurw:
70
58
; RV64XTHEADFMEMIDX: # %bb.0:
@@ -78,30 +66,24 @@ define void @fsurw(ptr %a, i32 %b, float %c) {
78
66
ret void
79
67
}
80
68
81
- define double @flrd (ptr %a , i64 %b ) {
82
- ; RV32XTHEADMEMIDX-LABEL: flrd:
83
- ; RV32XTHEADMEMIDX: # %bb.0:
84
- ; RV32XTHEADMEMIDX-NEXT: th.flrd fa5, a0, a1, 3
85
- ; RV32XTHEADMEMIDX-NEXT: fadd.d fa0, fa5, fa5
86
- ; RV32XTHEADMEMIDX-NEXT: ret
87
- ;
88
- ; RV64XTHEADFMEMIDX-LABEL: flrd:
89
- ; RV64XTHEADFMEMIDX: # %bb.0:
90
- ; RV64XTHEADFMEMIDX-NEXT: th.flrd fa5, a0, a1, 3
91
- ; RV64XTHEADFMEMIDX-NEXT: fadd.d fa0, fa5, fa5
92
- ; RV64XTHEADFMEMIDX-NEXT: ret
93
- %1 = getelementptr double , ptr %a , i64 %b
69
+ define double @flrd (ptr %a , iXLen %b ) {
70
+ ; CHECK-LABEL: flrd:
71
+ ; CHECK: # %bb.0:
72
+ ; CHECK-NEXT: th.flrd fa5, a0, a1, 3
73
+ ; CHECK-NEXT: fadd.d fa0, fa5, fa5
74
+ ; CHECK-NEXT: ret
75
+ %1 = getelementptr double , ptr %a , iXLen %b
94
76
%2 = load double , ptr %1 , align 8
95
77
%3 = fadd double %2 , %2
96
78
ret double %3
97
79
}
98
80
99
81
define double @flurd (ptr %a , i32 %b ) {
100
- ; RV32XTHEADMEMIDX -LABEL: flurd:
101
- ; RV32XTHEADMEMIDX : # %bb.0:
102
- ; RV32XTHEADMEMIDX -NEXT: th.flrd fa5, a0, a1, 3
103
- ; RV32XTHEADMEMIDX -NEXT: fadd.d fa0, fa5, fa5
104
- ; RV32XTHEADMEMIDX -NEXT: ret
82
+ ; RV32XTHEADFMEMIDX -LABEL: flurd:
83
+ ; RV32XTHEADFMEMIDX : # %bb.0:
84
+ ; RV32XTHEADFMEMIDX -NEXT: th.flrd fa5, a0, a1, 3
85
+ ; RV32XTHEADFMEMIDX -NEXT: fadd.d fa0, fa5, fa5
86
+ ; RV32XTHEADFMEMIDX -NEXT: ret
105
87
;
106
88
; RV64XTHEADFMEMIDX-LABEL: flurd:
107
89
; RV64XTHEADFMEMIDX: # %bb.0:
@@ -115,30 +97,24 @@ define double @flurd(ptr %a, i32 %b) {
115
97
ret double %4
116
98
}
117
99
118
- define void @fsrd (ptr %a , i64 %b , double %c ) {
119
- ; RV32XTHEADMEMIDX-LABEL: fsrd:
120
- ; RV32XTHEADMEMIDX: # %bb.0:
121
- ; RV32XTHEADMEMIDX-NEXT: fadd.d fa5, fa0, fa0
122
- ; RV32XTHEADMEMIDX-NEXT: th.fsrd fa5, a0, a1, 3
123
- ; RV32XTHEADMEMIDX-NEXT: ret
124
- ;
125
- ; RV64XTHEADFMEMIDX-LABEL: fsrd:
126
- ; RV64XTHEADFMEMIDX: # %bb.0:
127
- ; RV64XTHEADFMEMIDX-NEXT: fadd.d fa5, fa0, fa0
128
- ; RV64XTHEADFMEMIDX-NEXT: th.fsrd fa5, a0, a1, 3
129
- ; RV64XTHEADFMEMIDX-NEXT: ret
100
+ define void @fsrd (ptr %a , iXLen %b , double %c ) {
101
+ ; CHECK-LABEL: fsrd:
102
+ ; CHECK: # %bb.0:
103
+ ; CHECK-NEXT: fadd.d fa5, fa0, fa0
104
+ ; CHECK-NEXT: th.fsrd fa5, a0, a1, 3
105
+ ; CHECK-NEXT: ret
130
106
%1 = fadd double %c , %c
131
- %2 = getelementptr double , ptr %a , i64 %b
107
+ %2 = getelementptr double , ptr %a , iXLen %b
132
108
store double %1 , ptr %2 , align 8
133
109
ret void
134
110
}
135
111
136
112
define void @fsurd (ptr %a , i32 %b , double %c ) {
137
- ; RV32XTHEADMEMIDX -LABEL: fsurd:
138
- ; RV32XTHEADMEMIDX : # %bb.0:
139
- ; RV32XTHEADMEMIDX -NEXT: fadd.d fa5, fa0, fa0
140
- ; RV32XTHEADMEMIDX -NEXT: th.fsrd fa5, a0, a1, 3
141
- ; RV32XTHEADMEMIDX -NEXT: ret
113
+ ; RV32XTHEADFMEMIDX -LABEL: fsurd:
114
+ ; RV32XTHEADFMEMIDX : # %bb.0:
115
+ ; RV32XTHEADFMEMIDX -NEXT: fadd.d fa5, fa0, fa0
116
+ ; RV32XTHEADFMEMIDX -NEXT: th.fsrd fa5, a0, a1, 3
117
+ ; RV32XTHEADFMEMIDX -NEXT: ret
142
118
;
143
119
; RV64XTHEADFMEMIDX-LABEL: fsurd:
144
120
; RV64XTHEADFMEMIDX: # %bb.0:
0 commit comments