Skip to content

Commit 51e2ac2

Browse files
committed
AMDGPU: Cleanup immediate selection patterns
Reorder for consistency, so the same types for v/s are together.
1 parent 1e492ae commit 51e2ac2

File tree

1 file changed

+60
-31
lines changed

1 file changed

+60
-31
lines changed

llvm/lib/Target/AMDGPU/SIInstructions.td

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2138,19 +2138,26 @@ def : GCNPat <
21382138
/********** Immediate Patterns **********/
21392139
/********** ================== **********/
21402140

2141+
// FIXME: Remove VGPRImm. Should be inferrable from register bank.
2142+
21412143
def : GCNPat <
21422144
(VGPRImm<(i32 imm)>:$imm),
21432145
(V_MOV_B32_e32 imm:$imm)
21442146
>;
21452147

21462148
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)
21492151
>;
21502152

21512153
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)))
21542161
>;
21552162

21562163
def : GCNPat <
@@ -2174,15 +2181,13 @@ foreach pred = [NotHasTrue16BitInsts, UseFakeTrue16Insts] in {
21742181
// FIXME: Workaround for ordering issue with peephole optimizer where
21752182
// a register class copy interferes with immediate folding. Should
21762183
// use s_mov_b32, which can be shrunk to s_movk_i32
2177-
def : GCNPat <
2178-
(VGPRImm<(f16 fpimm)>:$imm),
2179-
(V_MOV_B32_e32 (f16 (bitcast_fpimm_to_i32 $imm)))
2180-
>;
21812184

2182-
def : GCNPat <
2183-
(VGPRImm<(bf16 fpimm)>:$imm),
2184-
(V_MOV_B32_e32 (bf16 (bitcast_fpimm_to_i32 $imm)))
2185-
>;
2185+
foreach vt = [f16, bf16] in {
2186+
def : GCNPat <
2187+
(VGPRImm<(f16 fpimm)>:$imm),
2188+
(V_MOV_B32_e32 (vt (bitcast_fpimm_to_i32 $imm)))
2189+
>;
2190+
}
21862191
}
21872192

21882193
let True16Predicate = UseRealTrue16Insts in {
@@ -2191,15 +2196,12 @@ let True16Predicate = UseRealTrue16Insts in {
21912196
(V_MOV_B16_t16_e64 0, imm:$imm, 0)
21922197
>;
21932198

2194-
def : GCNPat <
2195-
(VGPRImm<(f16 fpimm)>:$imm),
2196-
(V_MOV_B16_t16_e64 0, $imm, 0)
2197-
>;
2198-
2199-
def : GCNPat <
2200-
(VGPRImm<(bf16 fpimm)>:$imm),
2201-
(V_MOV_B16_t16_e64 0, $imm, 0)
2202-
>;
2199+
foreach vt = [f16, bf16] in {
2200+
def : GCNPat <
2201+
(VGPRImm<(vt fpimm)>:$imm),
2202+
(V_MOV_B16_t16_e64 0, $imm, 0)
2203+
>;
2204+
}
22032205
}
22042206

22052207
// V_MOV_B64_PSEUDO and S_MOV_B64_IMM_PSEUDO can be used with any 64-bit
@@ -2235,27 +2237,59 @@ def : GCNPat <
22352237
(S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)))
22362238
>;
22372239

2240+
def : GCNPat <
2241+
(VGPRImm<(bf16 fpimm)>:$imm),
2242+
(V_MOV_B32_e32 (bf16 (bitcast_fpimm_to_i32 $imm)))
2243+
>;
2244+
22382245
def : GCNPat <
22392246
(bf16 fpimm:$imm),
22402247
(S_MOV_B32 (i32 (bitcast_fpimm_to_i32 $imm)))
22412248
>;
22422249

22432250
def : GCNPat <
2244-
(p5 frameindex:$fi),
2245-
(V_MOV_B32_e32 (p5 (frameindex_to_targetframeindex $fi)))
2251+
(VGPRImm<(f32 fpimm)>:$imm),
2252+
(V_MOV_B32_e32 (f32 (bitcast_fpimm_to_i32 $imm)))
22462253
>;
22472254

22482255
def : GCNPat <
2249-
(p5 frameindex:$fi),
2250-
(S_MOV_B32 (p5 (frameindex_to_targetframeindex $fi)))
2256+
(f32 fpimm:$imm),
2257+
(S_MOV_B32 (f32 (bitcast_fpimm_to_i32 $imm)))
2258+
>;
2259+
2260+
def : GCNPat <
2261+
(VGPRImm<(i64 imm)>:$imm),
2262+
(V_MOV_B64_PSEUDO imm:$imm)
22512263
>;
22522264

22532265
def : GCNPat <
22542266
(i64 InlineImm64:$imm),
22552267
(S_MOV_B64 InlineImm64:$imm)
22562268
>;
22572269

2258-
// Set to sign-extended 64-bit value (true = -1, false = 0)
2270+
def : GCNPat <
2271+
(i64 imm:$imm),
2272+
(S_MOV_B64_IMM_PSEUDO imm:$imm)
2273+
>;
2274+
2275+
def : GCNPat <
2276+
(VGPRImm<(f64 fpimm)>:$imm),
2277+
(V_MOV_B64_PSEUDO (f64 (bitcast_fpimm_to_i64 $imm)))
2278+
>;
2279+
2280+
// V_MOV_B64_PSEUDO and S_MOV_B64_IMM_PSEUDO can be used with any 64-bit
2281+
// immediate and wil be expanded as needed, but we will only use these patterns
2282+
// for values which can be encoded.
2283+
def : GCNPat <
2284+
(f64 InlineImmFP64:$imm),
2285+
(S_MOV_B64 (i64 (bitcast_fpimm_to_i64 $imm)))
2286+
>;
2287+
2288+
def : GCNPat <
2289+
(f64 fpimm:$imm),
2290+
(S_MOV_B64_IMM_PSEUDO (i64 (bitcast_fpimm_to_i64 fpimm:$imm)))
2291+
>;
2292+
22592293
// Set to sign-extended 64-bit value (true = -1, false = 0)
22602294
def : GCNPat <(i1 imm:$imm),
22612295
(S_MOV_B64 imm:$imm)> {
@@ -2267,11 +2301,6 @@ def : GCNPat <(i1 imm:$imm),
22672301
let WaveSizePredicate = isWave32;
22682302
}
22692303

2270-
def : GCNPat <
2271-
(f64 InlineImmFP64:$imm),
2272-
(S_MOV_B64 (f64 (bitcast_fpimm_to_i64 InlineImmFP64:$imm)))
2273-
>;
2274-
22752304
/********** ================== **********/
22762305
/********** Intrinsic Patterns **********/
22772306
/********** ================== **********/

0 commit comments

Comments
 (0)