1
- // RUN: llvm - mc - arch=amdgcn - show - encoding %s | FileCheck %s
2
- // RUN: llvm - mc - arch=amdgcn - m cpu = SI - show - encoding %s | FileCheck %s
1
+ // RUN: llvm - mc - arch=amdgcn - show - encoding %s | FileCheck %s -- check - prefix=SICI
2
+ // RUN: llvm - mc - arch=amdgcn - m cpu = SI - show - encoding %s | FileCheck %s -- check - prefix=SICI
3
+ // RUN: not llvm - mc - arch=amdgcn - m cpu =tonga - show - encoding %s | FileCheck %s -- check - prefix=VI
4
+ // RUN: not llvm - mc - arch=amdgcn - m cpu =tonga - show - encoding %s 2 >& 1 | FileCheck %s - check - prefix=NOVI
5
+
3
6
4
7
//=== ---------------------------------------------------------------------- ===//
5
8
// VOPC Instructions
8
11
// Test forced e64 encoding
9
12
10
13
v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6
11
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x40]
14
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x40]
15
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x41,0xd0,0x04,0x0d,0x02,0x40]
16
+
12
17
13
18
//
14
19
// Modifier tests:
15
20
//
16
21
17
22
v_cmp_lt_f32 s [ 2 : 3 ] - v4 , v6
18
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x20]
23
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x20]
24
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , v6 ; encoding: [0x02,0x00,0x41,0xd0,0x04,0x0d,0x02,0x20]
19
25
20
26
v_cmp_lt_f32 s [ 2 : 3 ] v4 , - v6
21
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x40]
27
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x40]
28
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - v6 ; encoding: [0x02,0x00,0x41,0xd0,0x04,0x0d,0x02,0x40]
22
29
23
30
v_cmp_lt_f32 s [ 2 : 3 ] - v4 , - v6
24
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x60]
31
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , - v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x60]
32
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - v4 , - v6 ; encoding: [0x02,0x00,0x41,0xd0,0x04,0x0d,0x02,0x60]
25
33
26
34
v_cmp_lt_f32 s [ 2 : 3 ] |v4| , v6
27
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x00]
35
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x00]
36
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , v6 ; encoding: [0x02,0x01,0x41,0xd0,0x04,0x0d,0x02,0x00]
28
37
29
38
v_cmp_lt_f32 s [ 2 : 3 ] v4 , |v6|
30
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , |v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x00]
39
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , |v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x00]
40
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , |v6| ; encoding: [0x02,0x02,0x41,0xd0,0x04,0x0d,0x02,0x00]
31
41
32
42
v_cmp_lt_f32 s [ 2 : 3 ] |v4| , |v6|
33
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , |v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x00]
43
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , |v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x00]
44
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], |v4| , |v6| ; encoding: [0x02,0x03,0x41,0xd0,0x04,0x0d,0x02,0x00]
34
45
35
46
v_cmp_lt_f32 s [ 2 : 3 ] - |v4| , v6
36
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x20]
47
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x20]
48
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , v6 ; encoding: [0x02,0x01,0x41,0xd0,0x04,0x0d,0x02,0x20]
37
49
38
50
v_cmp_lt_f32 s [ 2 : 3 ] v4 , - |v6|
39
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - |v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x40]
51
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - |v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x40]
52
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , - |v6| ; encoding: [0x02,0x02,0x41,0xd0,0x04,0x0d,0x02,0x40]
40
53
41
54
v_cmp_lt_f32 s [ 2 : 3 ] - |v4| , - |v6|
42
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , - |v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x60]
55
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , - |v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x60]
56
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], - |v4| , - |v6| ; encoding: [0x02,0x03,0x41,0xd0,0x04,0x0d,0x02,0x60]
43
57
44
58
//
45
59
// Instruction tests:
46
60
//
47
61
48
62
v_cmp_f_f32 s [ 2 : 3 ], v4 , v6
49
- // CHECK: v_cmp_f_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x00,0xd0,0x04,0x0d,0x02,0x00]
63
+ // SICI: v_cmp_f_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x00,0xd0,0x04,0x0d,0x02,0x00]
64
+ // VI: v_cmp_f_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x40,0xd0,0x04,0x0d,0x02,0x00]
50
65
51
66
v_cmp_lt_f32 s [ 2 : 3 ], v4 , v6
52
- // CHECK: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x00]
67
+ // SICI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x00]
68
+ // VI: v_cmp_lt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x41,0xd0,0x04,0x0d,0x02,0x00]
53
69
54
70
v_cmp_eq_f32 s [ 2 : 3 ], v4 , v6
55
- // CHECK: v_cmp_eq_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x04,0xd0,0x04,0x0d,0x02,0x00]
71
+ // SICI: v_cmp_eq_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x04,0xd0,0x04,0x0d,0x02,0x00]
72
+ // VI: v_cmp_eq_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x42,0xd0,0x04,0x0d,0x02,0x00]
56
73
57
74
v_cmp_le_f32 s [ 2 : 3 ], v4 , v6
58
- // CHECK: v_cmp_le_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x06,0xd0,0x04,0x0d,0x02,0x00]
75
+ // SICI: v_cmp_le_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x06,0xd0,0x04,0x0d,0x02,0x00]
76
+ // VI: v_cmp_le_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x43,0xd0,0x04,0x0d,0x02,0x00]
59
77
60
78
v_cmp_gt_f32 s [ 2 : 3 ], v4 , v6
61
- // CHECK: v_cmp_gt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x08,0xd0,0x04,0x0d,0x02,0x00]
79
+ // SICI: v_cmp_gt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x08,0xd0,0x04,0x0d,0x02,0x00]
80
+ // VI: v_cmp_gt_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x44,0xd0,0x04,0x0d,0x02,0x00]
62
81
63
82
v_cmp_lg_f32 s [ 2 : 3 ], v4 , v6
64
- // CHECK: v_cmp_lg_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x0a,0xd0,0x04,0x0d,0x02,0x00]
83
+ // SICI: v_cmp_lg_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x0a,0xd0,0x04,0x0d,0x02,0x00]
84
+ // VI: v_cmp_lg_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x45,0xd0,0x04,0x0d,0x02,0x00]
65
85
66
86
v_cmp_ge_f32 s [ 2 : 3 ], v4 , v6
67
- // CHECK: v_cmp_ge_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x0c,0xd0,0x04,0x0d,0x02,0x00]
87
+ // SICI: v_cmp_ge_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x0c,0xd0,0x04,0x0d,0x02,0x00]
88
+ // VI: v_cmp_ge_f32_e64 s [ 2 : 3 ], v4 , v6 ; encoding: [0x02,0x00,0x46,0xd0,0x04,0x0d,0x02,0x00]
68
89
69
90
// TODO: Finish VOPC
70
91
@@ -77,22 +98,28 @@ v_cmp_ge_f32 s[2:3], v4, v6
77
98
//
78
99
79
100
v_fract_f32 v1 , - v2
80
- // CHECK: v_fract_f32_e64 v1 , - v2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x20]
101
+ // SICI: v_fract_f32_e64 v1 , - v2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x20]
102
+ // VI: v_fract_f32_e64 v1 , - v2 ; encoding: [0x01,0x00,0x5b,0xd1,0x02,0x01,0x00,0x20]
81
103
82
104
v_fract_f32 v1 , |v2|
83
- // CHECK: v_fract_f32_e64 v1 , |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x00]
105
+ // SICI: v_fract_f32_e64 v1 , |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x00]
106
+ // VI: v_fract_f32_e64 v1 , |v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x00]
84
107
85
108
v_fract_f32 v1 , - |v2|
86
- // CHECK: v_fract_f32_e64 v1 , - |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x20]
109
+ // SICI: v_fract_f32_e64 v1 , - |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x20]
110
+ // VI: v_fract_f32_e64 v1 , - |v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x20]
87
111
88
112
v_fract_f32 v1 , v2 clamp
89
- // CHECK: v_fract_f32_e64 v1 , v2 clamp ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x00]
113
+ // SICI: v_fract_f32_e64 v1 , v2 clamp ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x00]
114
+ // VI: v_fract_f32_e64 v1 , v2 clamp ; encoding: [0x01,0x80,0x5b,0xd1,0x02,0x01,0x00,0x00]
90
115
91
116
v_fract_f32 v1 , v2 mul : 2
92
- // CHECK: v_fract_f32_e64 v1 , v2 mul : 2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x08]
117
+ // SICI: v_fract_f32_e64 v1 , v2 mul : 2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x08]
118
+ // VI: v_fract_f32_e64 v1 , v2 mul : 2 ; encoding: [0x01,0x00,0x5b,0xd1,0x02,0x01,0x00,0x08]
93
119
94
120
v_fract_f32 v1 , v2 , div : 2 clamp
95
- // CHECK: v_fract_f32_e64 v1 , v2 clamp div : 2 ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x18]
121
+ // SICI: v_fract_f32_e64 v1 , v2 clamp div : 2 ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x18]
122
+ // VI: v_fract_f32_e64 v1 , v2 clamp div : 2 ; encoding: [0x01,0x80,0x5b,0xd1,0x02,0x01,0x00,0x18]
96
123
97
124
// TODO: Finish VOP1
98
125
@@ -102,37 +129,47 @@ v_fract_f32 v1, v2, div:2 clamp
102
129
103
130
// Test forced e64 encoding with e32 operands
104
131
105
- v_ldexp_f32_e64 v1 , v3 , v5
106
- // CHECK: v_ldexp_f32_e64 v1 , v3 , v5 ; encoding: [0x01,0x00,0x56,0xd2,0x03,0x0b,0x02,0x00]
132
+ v_add_f32_e64 v1 , v3 , v5
133
+ // SICI: v_add_f32_e64 v1 , v3 , v5 ; encoding: [0x01,0x00,0x06,0xd2,0x03,0x0b,0x02,0x00]
134
+ // VI: v_add_f32_e64 v1 , v3 , v5 ; encoding: [0x01,0x00,0x01,0xd1,0x03,0x0b,0x02,0x00]
107
135
108
136
109
137
// TODO: Modifier tests
110
138
111
139
v_cndmask_b32 v1 , v3 , v5 , s [ 4 : 5 ]
112
- // CHECK: v_cndmask_b32_e64 v1 , v3 , v5 , s [ 4 : 5 ] ; encoding: [0x01,0x00,0x00,0xd2,0x03,0x0b,0x12,0x00]
140
+ // SICI: v_cndmask_b32_e64 v1 , v3 , v5 , s [ 4 : 5 ] ; encoding: [0x01,0x00,0x00,0xd2,0x03,0x0b,0x12,0x00]
141
+ // VI: v_cndmask_b32_e64 v1 , v3 , v5 , s [ 4 : 5 ] ; encoding: [0x01,0x00,0x00,0xd1,0x03,0x0b,0x12,0x00]
113
142
114
143
//TODO: readlane , writelane
115
144
116
145
v_add_f32 v1 , v3 , s5
117
- // CHECK: v_add_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x06,0xd2,0x03,0x0b,0x00,0x00]
146
+ // SICI: v_add_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x06,0xd2,0x03,0x0b,0x00,0x00]
147
+ // VI: v_add_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x01,0xd1,0x03,0x0b,0x00,0x00]
118
148
119
149
v_sub_f32 v1 , v3 , s5
120
- // CHECK: v_sub_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x08,0xd2,0x03,0x0b,0x00,0x00]
150
+ // SICI: v_sub_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x08,0xd2,0x03,0x0b,0x00,0x00]
151
+ // VI: v_sub_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x02,0xd1,0x03,0x0b,0x00,0x00]
121
152
122
153
v_subrev_f32 v1 , v3 , s5
123
- // CHECK: v_subrev_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0a,0xd2,0x03,0x0b,0x00,0x00]
154
+ // SICI: v_subrev_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0a,0xd2,0x03,0x0b,0x00,0x00]
155
+ // VI: v_subrev_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x03,0xd1,0x03,0x0b,0x00,0x00]
124
156
125
157
v_mac_legacy_f32 v1 , v3 , s5
126
- // CHECK: v_mac_legacy_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0c,0xd2,0x03,0x0b,0x00,0x00]
158
+ // SICI: v_mac_legacy_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0c,0xd2,0x03,0x0b,0x00,0x00]
159
+ // FIXME: The error message should be: error: instruction not supported on this GPU
160
+ // NOVI: error: invalid operand for instruction
127
161
128
162
v_mul_legacy_f32 v1 , v3 , s5
129
- // CHECK: v_mul_legacy_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0e,0xd2,0x03,0x0b,0x00,0x00]
163
+ // SICI: v_mul_legacy_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x0e,0xd2,0x03,0x0b,0x00,0x00]
164
+ // VI: v_mul_legacy_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x04,0xd1,0x03,0x0b,0x00,0x00]
130
165
131
166
v_mul_f32 v1 , v3 , s5
132
- // CHECK: v_mul_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x10,0xd2,0x03,0x0b,0x00,0x00]
167
+ // SICI: v_mul_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x10,0xd2,0x03,0x0b,0x00,0x00]
168
+ // VI: v_mul_f32_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x05,0xd1,0x03,0x0b,0x00,0x00]
133
169
134
170
v_mul_i32_i24 v1 , v3 , s5
135
- // CHECK: v_mul_i32_i24_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x12,0xd2,0x03,0x0b,0x00,0x00]
171
+ // SICI: v_mul_i32_i24_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x12,0xd2,0x03,0x0b,0x00,0x00]
172
+ // VI: v_mul_i32_i24_e64 v1 , v3 , s5 ; encoding: [0x01,0x00,0x06,0xd1,0x03,0x0b,0x00,0x00]
136
173
137
174
///=== --------------------------------------------------------------------- ===//
138
175
// VOP3 Instructions
@@ -141,7 +178,8 @@ v_mul_i32_i24 v1, v3, s5
141
178
// TODO: Modifier tests
142
179
143
180
v_mad_legacy_f32 v2 , v4 , v6 , v8
144
- // CHECK: v_mad_legacy_f32 v2 , v4 , v6 , v8 ; encoding: [0x02,0x00,0x80,0xd2,0x04,0x0d,0x22,0x04]
181
+ // SICI: v_mad_legacy_f32 v2 , v4 , v6 , v8 ; encoding: [0x02,0x00,0x80,0xd2,0x04,0x0d,0x22,0x04]
182
+ // VI: v_mad_legacy_f32 v2 , v4 , v6 , v8 ; encoding: [0x02,0x00,0xc0,0xd1,0x04,0x0d,0x22,0x04]
145
183
146
184
147
185
0 commit comments