Skip to content

Commit 794f20e

Browse files
committed
AMDGPU: Cleanup immediate selection patterns
Reorder for consistency, so the same types for v/s are together.
1 parent 49c8245 commit 794f20e

File tree

1 file changed

+41
-38
lines changed

1 file changed

+41
-38
lines changed

llvm/lib/Target/AMDGPU/SIInstructions.td

Lines changed: 41 additions & 38 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 <
@@ -2168,40 +2175,34 @@ def : GCNPat <
21682175
(V_MOV_B32_e32 imm:$imm)
21692176
>;
21702177

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
21742178
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)
21772181
>;
21782182

21792183
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)))
21822186
>;
21832187

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.
21872188
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)))
21902191
>;
21912192

21922193
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)))
21952196
>;
21962197

21972198
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)))
22002201
>;
22012202

22022203
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)))
22052206
>;
22062207

22072208
def : GCNPat <
@@ -2210,31 +2211,38 @@ def : GCNPat <
22102211
>;
22112212

22122213
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)
22152216
>;
22162217

22172218
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)
22202221
>;
22212222

22222223
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)
22252226
>;
22262227

22272228
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)))
22302231
>;
22312232

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.
22322236
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)))
22352244
>;
22362245

2237-
// Set to sign-extended 64-bit value (true = -1, false = 0)
22382246
// Set to sign-extended 64-bit value (true = -1, false = 0)
22392247
def : GCNPat <(i1 imm:$imm),
22402248
(S_MOV_B64 imm:$imm)> {
@@ -2246,11 +2254,6 @@ def : GCNPat <(i1 imm:$imm),
22462254
let WaveSizePredicate = isWave32;
22472255
}
22482256

2249-
def : GCNPat <
2250-
(f64 InlineImmFP64:$imm),
2251-
(S_MOV_B64 (f64 (bitcast_fpimm_to_i64 InlineImmFP64:$imm)))
2252-
>;
2253-
22542257
/********** ================== **********/
22552258
/********** Intrinsic Patterns **********/
22562259
/********** ================== **********/

0 commit comments

Comments
 (0)