1
- ; RUN: llc < %s -march=r600 -mcpu=verde -verify-machineinstrs | FileCheck %s
1
+ ; RUN: llc -march=r600 -mcpu=verde -verify-machineinstrs < %s | FileCheck %s
2
2
3
3
; Use a 64-bit value with lo bits that can be represented as an inline constant
4
- ; CHECK: @i64_imm_inline_lo
4
+ ; CHECK-LABEL : @i64_imm_inline_lo
5
5
; CHECK: S_MOV_B32 [[LO:s[0-9]+]], 5
6
6
; CHECK: V_MOV_B32_e32 v[[LO_VGPR:[0-9]+]], [[LO]]
7
7
; CHECK: BUFFER_STORE_DWORDX2 v{{\[}}[[LO_VGPR]]:
12
12
}
13
13
14
14
; Use a 64-bit value with hi bits that can be represented as an inline constant
15
- ; CHECK: @i64_imm_inline_hi
15
+ ; CHECK-LABEL : @i64_imm_inline_hi
16
16
; CHECK: S_MOV_B32 [[HI:s[0-9]+]], 5
17
17
; CHECK: V_MOV_B32_e32 v[[HI_VGPR:[0-9]+]], [[HI]]
18
18
; CHECK: BUFFER_STORE_DWORDX2 v{{\[[0-9]+:}}[[HI_VGPR]]
@@ -21,3 +21,173 @@ entry:
21
21
store i64 21780256376 , i64 addrspace (1 ) *%out ; 0x0000000512345678
22
22
ret void
23
23
}
24
+
25
+ ; CHECK-LABEL: @store_inline_imm_0.0_f32
26
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 0{{$}}
27
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
28
+ define void @store_inline_imm_0.0_f32 (float addrspace (1 )* %out ) {
29
+ store float 0 .0 , float addrspace (1 )* %out
30
+ ret void
31
+ }
32
+
33
+ ; CHECK-LABEL: @store_inline_imm_0.5_f32
34
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 0.5{{$}}
35
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
36
+ define void @store_inline_imm_0.5_f32 (float addrspace (1 )* %out ) {
37
+ store float 0 .5 , float addrspace (1 )* %out
38
+ ret void
39
+ }
40
+
41
+ ; CHECK-LABEL: @store_inline_imm_m_0.5_f32
42
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], -0.5{{$}}
43
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
44
+ define void @store_inline_imm_m_0.5_f32 (float addrspace (1 )* %out ) {
45
+ store float -0 .5 , float addrspace (1 )* %out
46
+ ret void
47
+ }
48
+
49
+ ; CHECK-LABEL: @store_inline_imm_1.0_f32
50
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 1.0{{$}}
51
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
52
+ define void @store_inline_imm_1.0_f32 (float addrspace (1 )* %out ) {
53
+ store float 1 .0 , float addrspace (1 )* %out
54
+ ret void
55
+ }
56
+
57
+ ; CHECK-LABEL: @store_inline_imm_m_1.0_f32
58
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], -1.0{{$}}
59
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
60
+ define void @store_inline_imm_m_1.0_f32 (float addrspace (1 )* %out ) {
61
+ store float -1 .0 , float addrspace (1 )* %out
62
+ ret void
63
+ }
64
+
65
+ ; CHECK-LABEL: @store_inline_imm_2.0_f32
66
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 2.0{{$}}
67
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
68
+ define void @store_inline_imm_2.0_f32 (float addrspace (1 )* %out ) {
69
+ store float 2 .0 , float addrspace (1 )* %out
70
+ ret void
71
+ }
72
+
73
+ ; CHECK-LABEL: @store_inline_imm_m_2.0_f32
74
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], -2.0{{$}}
75
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
76
+ define void @store_inline_imm_m_2.0_f32 (float addrspace (1 )* %out ) {
77
+ store float -2 .0 , float addrspace (1 )* %out
78
+ ret void
79
+ }
80
+
81
+ ; CHECK-LABEL: @store_inline_imm_4.0_f32
82
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 4.0{{$}}
83
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
84
+ define void @store_inline_imm_4.0_f32 (float addrspace (1 )* %out ) {
85
+ store float 4 .0 , float addrspace (1 )* %out
86
+ ret void
87
+ }
88
+
89
+ ; CHECK-LABEL: @store_inline_imm_m_4.0_f32
90
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], -4.0{{$}}
91
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
92
+ define void @store_inline_imm_m_4.0_f32 (float addrspace (1 )* %out ) {
93
+ store float -4 .0 , float addrspace (1 )* %out
94
+ ret void
95
+ }
96
+
97
+ ; CHECK-LABEL: @store_literal_imm_f32
98
+ ; CHECK: V_MOV_B32_e32 [[REG:v[0-9]+]], 0x45800000
99
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
100
+ define void @store_literal_imm_f32 (float addrspace (1 )* %out ) {
101
+ store float 4096 .0 , float addrspace (1 )* %out
102
+ ret void
103
+ }
104
+
105
+ ; CHECK-LABEL: @add_inline_imm_0.0_f32
106
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
107
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], 0.0,
108
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
109
+ define void @add_inline_imm_0.0_f32 (float addrspace (1 )* %out , float %x ) {
110
+ %y = fadd float %x , 0 .0
111
+ store float %y , float addrspace (1 )* %out
112
+ ret void
113
+ }
114
+
115
+ ; CHECK-LABEL: @add_inline_imm_0.5_f32
116
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
117
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], 0.5,
118
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
119
+ define void @add_inline_imm_0.5_f32 (float addrspace (1 )* %out , float %x ) {
120
+ %y = fadd float %x , 0 .5
121
+ store float %y , float addrspace (1 )* %out
122
+ ret void
123
+ }
124
+
125
+ ; CHECK-LABEL: @add_inline_imm_neg_0.5_f32
126
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
127
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], -0.5,
128
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
129
+ define void @add_inline_imm_neg_0.5_f32 (float addrspace (1 )* %out , float %x ) {
130
+ %y = fadd float %x , -0 .5
131
+ store float %y , float addrspace (1 )* %out
132
+ ret void
133
+ }
134
+
135
+ ; CHECK-LABEL: @add_inline_imm_1.0_f32
136
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
137
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], 1.0,
138
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
139
+ define void @add_inline_imm_1.0_f32 (float addrspace (1 )* %out , float %x ) {
140
+ %y = fadd float %x , 1 .0
141
+ store float %y , float addrspace (1 )* %out
142
+ ret void
143
+ }
144
+
145
+ ; CHECK-LABEL: @add_inline_imm_neg_1.0_f32
146
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
147
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], -1.0,
148
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
149
+ define void @add_inline_imm_neg_1.0_f32 (float addrspace (1 )* %out , float %x ) {
150
+ %y = fadd float %x , -1 .0
151
+ store float %y , float addrspace (1 )* %out
152
+ ret void
153
+ }
154
+
155
+ ; CHECK-LABEL: @add_inline_imm_2.0_f32
156
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
157
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], 2.0,
158
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
159
+ define void @add_inline_imm_2.0_f32 (float addrspace (1 )* %out , float %x ) {
160
+ %y = fadd float %x , 2 .0
161
+ store float %y , float addrspace (1 )* %out
162
+ ret void
163
+ }
164
+
165
+ ; CHECK-LABEL: @add_inline_imm_neg_2.0_f32
166
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
167
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], -2.0,
168
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
169
+ define void @add_inline_imm_neg_2.0_f32 (float addrspace (1 )* %out , float %x ) {
170
+ %y = fadd float %x , -2 .0
171
+ store float %y , float addrspace (1 )* %out
172
+ ret void
173
+ }
174
+
175
+ ; CHECK-LABEL: @add_inline_imm_4.0_f32
176
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
177
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], 4.0,
178
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
179
+ define void @add_inline_imm_4.0_f32 (float addrspace (1 )* %out , float %x ) {
180
+ %y = fadd float %x , 4 .0
181
+ store float %y , float addrspace (1 )* %out
182
+ ret void
183
+ }
184
+
185
+ ; CHECK-LABEL: @add_inline_imm_neg_4.0_f32
186
+ ; CHECK: S_LOAD_DWORD [[VAL:s[0-9]+]]
187
+ ; CHECK: V_ADD_F32_e64 [[REG:v[0-9]+]], [[VAL]], -4.0,
188
+ ; CHECK-NEXT: BUFFER_STORE_DWORD [[REG]]
189
+ define void @add_inline_imm_neg_4.0_f32 (float addrspace (1 )* %out , float %x ) {
190
+ %y = fadd float %x , -4 .0
191
+ store float %y , float addrspace (1 )* %out
192
+ ret void
193
+ }
0 commit comments