@@ -2138,19 +2138,26 @@ def : GCNPat <
2138
2138
/********** Immediate Patterns **********/
2139
2139
/********** ================== **********/
2140
2140
2141
+ // FIXME: Remove VGPRImm. Should be inferrable from register bank.
2142
+
2141
2143
def : GCNPat <
2142
2144
(VGPRImm<(i32 imm)>:$imm),
2143
2145
(V_MOV_B32_e32 imm:$imm)
2144
2146
>;
2145
2147
2146
2148
def : GCNPat <
2147
- (VGPRImm<(f32 fpimm)> :$imm),
2148
- (V_MOV_B32_e32 (f32 (bitcast_fpimm_to_i32 $imm)) )
2149
+ (i32 imm :$imm),
2150
+ (S_MOV_B32 imm: $imm)
2149
2151
>;
2150
2152
2151
2153
def : GCNPat <
2152
- (i32 imm:$imm),
2153
- (S_MOV_B32 imm:$imm)
2154
+ (p5 frameindex:$fi),
2155
+ (V_MOV_B32_e32 (p5 (frameindex_to_targetframeindex $fi)))
2156
+ >;
2157
+
2158
+ def : GCNPat <
2159
+ (p5 frameindex:$fi),
2160
+ (S_MOV_B32 (p5 (frameindex_to_targetframeindex $fi)))
2154
2161
>;
2155
2162
2156
2163
def : GCNPat <
@@ -2168,40 +2175,34 @@ def : GCNPat <
2168
2175
(V_MOV_B32_e32 imm:$imm)
2169
2176
>;
2170
2177
2171
- // FIXME: Workaround for ordering issue with peephole optimizer where
2172
- // a register class copy interferes with immediate folding. Should
2173
- // use s_mov_b32, which can be shrunk to s_movk_i32
2174
2178
def : GCNPat <
2175
- (VGPRImm<(f16 fpimm)> :$imm),
2176
- (V_MOV_B32_e32 (f16 (bitcast_fpimm_to_i32 $imm)) )
2179
+ (i16 imm :$imm),
2180
+ (S_MOV_B32 imm: $imm)
2177
2181
>;
2178
2182
2179
2183
def : GCNPat <
2180
- (VGPRImm<(bf16 fpimm)>:$imm),
2181
- (V_MOV_B32_e32 (bf16 (bitcast_fpimm_to_i32 $imm)))
2184
+ (VGPRImm<(f16 fpimm)>:$imm),
2185
+ (V_MOV_B32_e32 (f16 (bitcast_fpimm_to_i32 $imm)))
2182
2186
>;
2183
2187
2184
- // V_MOV_B64_PSEUDO and S_MOV_B64_IMM_PSEUDO can be used with any 64-bit
2185
- // immediate and wil be expanded as needed, but we will only use these patterns
2186
- // for values which can be encoded.
2187
2188
def : GCNPat <
2188
- (VGPRImm<(i64 imm)> :$imm),
2189
- (V_MOV_B64_PSEUDO imm: $imm)
2189
+ (f16 fpimm :$imm),
2190
+ (S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)) )
2190
2191
>;
2191
2192
2192
2193
def : GCNPat <
2193
- (VGPRImm<(f64 fpimm)>:$imm),
2194
- (V_MOV_B64_PSEUDO (f64 (bitcast_fpimm_to_i64 $imm)))
2194
+ (VGPRImm<(bf16 fpimm)>:$imm),
2195
+ (V_MOV_B32_e32 (bf16 (bitcast_fpimm_to_i32 $imm)))
2195
2196
>;
2196
2197
2197
2198
def : GCNPat <
2198
- (i64 imm :$imm),
2199
- (S_MOV_B64_IMM_PSEUDO imm: $imm)
2199
+ (bf16 fpimm :$imm),
2200
+ (S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)) )
2200
2201
>;
2201
2202
2202
2203
def : GCNPat <
2203
- (f64 fpimm:$imm),
2204
- (S_MOV_B64_IMM_PSEUDO (i64 (bitcast_fpimm_to_i64 fpimm: $imm)))
2204
+ (VGPRImm<(f32 fpimm)> :$imm),
2205
+ (V_MOV_B32_e32 (f32 (bitcast_fpimm_to_i32 $imm)))
2205
2206
>;
2206
2207
2207
2208
def : GCNPat <
@@ -2210,31 +2211,38 @@ def : GCNPat <
2210
2211
>;
2211
2212
2212
2213
def : GCNPat <
2213
- (f16 fpimm :$imm),
2214
- (S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)) )
2214
+ (VGPRImm<(i64 imm)> :$imm),
2215
+ (V_MOV_B64_PSEUDO imm: $imm)
2215
2216
>;
2216
2217
2217
2218
def : GCNPat <
2218
- (bf16 fpimm :$imm),
2219
- (S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)) )
2219
+ (i64 InlineImm64 :$imm),
2220
+ (S_MOV_B64 InlineImm64: $imm)
2220
2221
>;
2221
2222
2222
2223
def : GCNPat <
2223
- (p5 frameindex:$fi ),
2224
- (V_MOV_B32_e32 (p5 (frameindex_to_targetframeindex $fi)) )
2224
+ (i64 imm:$imm ),
2225
+ (S_MOV_B64_IMM_PSEUDO imm:$imm )
2225
2226
>;
2226
2227
2227
2228
def : GCNPat <
2228
- (p5 frameindex:$fi ),
2229
- (S_MOV_B32 (p5 (frameindex_to_targetframeindex $fi )))
2229
+ (VGPRImm<(f64 fpimm)>:$imm ),
2230
+ (V_MOV_B64_PSEUDO (f64 (bitcast_fpimm_to_i64 $imm )))
2230
2231
>;
2231
2232
2233
+ // V_MOV_B64_PSEUDO and S_MOV_B64_IMM_PSEUDO can be used with any 64-bit
2234
+ // immediate and wil be expanded as needed, but we will only use these patterns
2235
+ // for values which can be encoded.
2232
2236
def : GCNPat <
2233
- (i64 InlineImm64:$imm),
2234
- (S_MOV_B64 InlineImm64:$imm)
2237
+ (f64 InlineImmFP64:$imm),
2238
+ (S_MOV_B64 (i64 (bitcast_fpimm_to_i64 $imm)))
2239
+ >;
2240
+
2241
+ def : GCNPat <
2242
+ (f64 fpimm:$imm),
2243
+ (S_MOV_B64_IMM_PSEUDO (i64 (bitcast_fpimm_to_i64 fpimm:$imm)))
2235
2244
>;
2236
2245
2237
- // Set to sign-extended 64-bit value (true = -1, false = 0)
2238
2246
// Set to sign-extended 64-bit value (true = -1, false = 0)
2239
2247
def : GCNPat <(i1 imm:$imm),
2240
2248
(S_MOV_B64 imm:$imm)> {
@@ -2246,11 +2254,6 @@ def : GCNPat <(i1 imm:$imm),
2246
2254
let WaveSizePredicate = isWave32;
2247
2255
}
2248
2256
2249
- def : GCNPat <
2250
- (f64 InlineImmFP64:$imm),
2251
- (S_MOV_B64 (f64 (bitcast_fpimm_to_i64 InlineImmFP64:$imm)))
2252
- >;
2253
-
2254
2257
/********** ================== **********/
2255
2258
/********** Intrinsic Patterns **********/
2256
2259
/********** ================== **********/
0 commit comments