Skip to content

Commit ad0965f

Browse files
committed
rebase
1 parent da4e715 commit ad0965f

File tree

1 file changed

+27
-31
lines changed

1 file changed

+27
-31
lines changed

llvm/lib/Target/X86/X86InstrShiftRotate.td

+27-31
Original file line numberDiff line numberDiff line change
@@ -284,32 +284,32 @@ defm SHRX64: ShiftX<"shrx", Xi64>, XD;
284284
defm SHLX32: ShiftX<"shlx", Xi32>, PD;
285285
defm SHLX64: ShiftX<"shlx", Xi64>, PD;
286286

287-
multiclass RORX_Pats {
287+
multiclass RORX_Pats<string suffix> {
288288
// Prefer RORX which is non-destructive and doesn't update EFLAGS.
289289
let AddedComplexity = 10 in {
290290
def : Pat<(rotr GR32:$src, (i8 imm:$shamt)),
291-
(RORX32ri GR32:$src, imm:$shamt)>;
291+
(!cast<Instruction>(RORX32ri#suffix) GR32:$src, imm:$shamt)>;
292292
def : Pat<(rotr GR64:$src, (i8 imm:$shamt)),
293-
(RORX64ri GR64:$src, imm:$shamt)>;
293+
(!cast<Instruction>(RORX64ri#suffix) GR64:$src, imm:$shamt)>;
294294

295295
def : Pat<(rotl GR32:$src, (i8 imm:$shamt)),
296-
(RORX32ri GR32:$src, (ROT32L2R_imm8 imm:$shamt))>;
296+
(!cast<Instruction>(RORX32ri#suffix) GR32:$src, (ROT32L2R_imm8 imm:$shamt))>;
297297
def : Pat<(rotl GR64:$src, (i8 imm:$shamt)),
298-
(RORX64ri GR64:$src, (ROT64L2R_imm8 imm:$shamt))>;
298+
(!cast<Instruction>(RORX64ri#suffix) GR64:$src, (ROT64L2R_imm8 imm:$shamt))>;
299299
}
300300

301301
def : Pat<(rotr (loadi32 addr:$src), (i8 imm:$shamt)),
302-
(RORX32mi addr:$src, imm:$shamt)>;
302+
(!cast<Instruction>(RORX32mi#suffix) addr:$src, imm:$shamt)>;
303303
def : Pat<(rotr (loadi64 addr:$src), (i8 imm:$shamt)),
304-
(RORX64mi addr:$src, imm:$shamt)>;
304+
(!cast<Instruction>(RORX64mi#suffix) addr:$src, imm:$shamt)>;
305305

306306
def : Pat<(rotl (loadi32 addr:$src), (i8 imm:$shamt)),
307-
(RORX32mi addr:$src, (ROT32L2R_imm8 imm:$shamt))>;
307+
(!cast<Instruction>(RORX32mi#suffix) addr:$src, (ROT32L2R_imm8 imm:$shamt))>;
308308
def : Pat<(rotl (loadi64 addr:$src), (i8 imm:$shamt)),
309-
(RORX64mi addr:$src, (ROT64L2R_imm8 imm:$shamt))>;
309+
(!cast<Instruction>(RORX64mi#suffix) addr:$src, (ROT64L2R_imm8 imm:$shamt))>;
310310
}
311311

312-
multiclass ShiftX_Pats<SDNode op> {
312+
multiclass ShiftX_Pats<SDNode op, string suffix = ""> {
313313
// Prefer SARX/SHRX/SHLX over SAR/SHR/SHL with variable shift BUT not
314314
// immediate shift, i.e. the following code is considered better
315315
//
@@ -325,16 +325,16 @@ multiclass ShiftX_Pats<SDNode op> {
325325
//
326326
let AddedComplexity = 1 in {
327327
def : Pat<(op GR32:$src1, GR8:$src2),
328-
(!cast<Instruction>(NAME#"32rr") GR32:$src1,
328+
(!cast<Instruction>(NAME#"32rr"#suffix) GR32:$src1,
329329
(INSERT_SUBREG (i32 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
330330
def : Pat<(op GR64:$src1, GR8:$src2),
331-
(!cast<Instruction>(NAME#"64rr") GR64:$src1,
331+
(!cast<Instruction>(NAME#"64rr"#suffix) GR64:$src1,
332332
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
333333
def : Pat<(op GR32:$src1, (shiftMask32 GR8:$src2)),
334-
(!cast<Instruction>(NAME#"32rr") GR32:$src1,
334+
(!cast<Instruction>(NAME#"32rr"#suffix) GR32:$src1,
335335
(INSERT_SUBREG (i32 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
336336
def : Pat<(op GR64:$src1, (shiftMask64 GR8:$src2)),
337-
(!cast<Instruction>(NAME#"64rr") GR64:$src1,
337+
(!cast<Instruction>(NAME#"64rr"#suffix) GR64:$src1,
338338
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
339339
}
340340
// We prefer to use
@@ -348,33 +348,29 @@ multiclass ShiftX_Pats<SDNode op> {
348348
//
349349
// This priority is enforced by IsProfitableToFoldLoad.
350350
def : Pat<(op (loadi32 addr:$src1), GR8:$src2),
351-
<<<<<<< HEAD
352-
(!cast<Instruction>(NAME#"32rm") addr:$src1,
351+
(!cast<Instruction>(NAME#"32rm"#suffix) addr:$src1,
353352
(INSERT_SUBREG (i32 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
354353
def : Pat<(op (loadi64 addr:$src1), GR8:$src2),
355-
(!cast<Instruction>(NAME#"64rm") addr:$src1,
354+
(!cast<Instruction>(NAME#"64rm"#suffix) addr:$src1,
356355
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
357356
def : Pat<(op (loadi32 addr:$src1), (shiftMask32 GR8:$src2)),
358-
(!cast<Instruction>(NAME#"32rm") addr:$src1,
357+
(!cast<Instruction>(NAME#"32rm"#suffix) addr:$src1,
359358
(INSERT_SUBREG (i32 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
360359
def : Pat<(op (loadi64 addr:$src1), (shiftMask64 GR8:$src2)),
361-
(!cast<Instruction>(NAME#"64rm") addr:$src1,
360+
(!cast<Instruction>(NAME#"64rm"#suffix) addr:$src1,
361+
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
362362
}
363363

364-
let Predicates = [HasBMI2] in {
365-
defm : RORX_Pats;
364+
let Predicates = [HasBMI2, NoEGPR] in {
365+
defm : RORX_Pats<"">;
366366
defm SARX : ShiftX_Pats<sra>;
367367
defm SHRX : ShiftX_Pats<srl>;
368368
defm SHLX : ShiftX_Pats<shl>;
369369
}
370-
=======
371-
(!cast<Instruction>(NAME#"32rm"#suffix) addr:$src1,
372-
(INSERT_SUBREG
373-
(i32 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
374-
def : Pat<(op (loadi64 addr:$src1), GR8:$src2),
375-
(!cast<Instruction>(NAME#"64rm"#suffix) addr:$src1,
376-
(INSERT_SUBREG
377-
(i64 (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
378-
}
379370

380-
multiclass RORX_Pats<string suffix> {
371+
let Predicates = [HasBMI2, HasEGPR] in {
372+
defm : RORX_Pats<"_EVEX">;
373+
defm SARX : ShiftX_Pats<sra, "_EVEX">;
374+
defm SHRX : ShiftX_Pats<srl, "_EVEX">;
375+
defm SHLX : ShiftX_Pats<shl, "_EVEX">;
376+
}

0 commit comments

Comments
 (0)