Skip to content

Commit ce9e3ab

Browse files
committed
Add check to ensure CCMP opcode is same
1 parent 3511b19 commit ce9e3ab

File tree

2 files changed

+32
-33
lines changed

2 files changed

+32
-33
lines changed

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4961,12 +4961,10 @@ bool X86InstrInfo::isRedundantFlagInstr(const MachineInstr &FlagI,
49614961
case X86::CCMP8ri: {
49624962
// The CCMP instruction should not be optimized if the scc/dfv in it is not
49634963
// same as the one in previous CCMP instruction.
4964-
unsigned Opcode = FlagI.getOpcode();
4965-
if (Opcode == X86::CCMP64ri32 || Opcode == X86::CCMP32ri ||
4966-
Opcode == X86::CCMP16ri || Opcode == X86::CCMP8ri)
4967-
if (OI.getOperand(2).getImm() != FlagI.getOperand(2).getImm() ||
4968-
(OI.getOperand(3).getImm() != FlagI.getOperand(3).getImm()))
4969-
return false;
4964+
if ((FlagI.getOpcode() != OI.getOpcode()) ||
4965+
(OI.getOperand(2).getImm() != FlagI.getOperand(2).getImm()) ||
4966+
(OI.getOperand(3).getImm() != FlagI.getOperand(3).getImm()))
4967+
return false;
49704968
[[fallthrough]];
49714969
}
49724970
case X86::CMP64ri32:

llvm/test/CodeGen/X86/apx/optimize-compare-ccmp.mir

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -112,33 +112,6 @@ body: |
112112
$bl = SETCCr 2, implicit $eflags
113113
...
114114
---
115-
name: opt_redundant_flags_adjusted_imm_4
116-
body: |
117-
bb.0:
118-
; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_4
119-
; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
120-
; CHECK-NEXT: CCMP64ri32 [[COPY]], 1, 2, 5, implicit-def $eflags, implicit $eflags
121-
; CHECK-NEXT: $cl = SETCCr 4, implicit $eflags
122-
; CHECK-NEXT: $bl = SETCCr 15, implicit $eflags
123-
; CHECK-NEXT: $bl = SETCCr 7, implicit $eflags
124-
; CHECK-NEXT: $bl = SETCCr 14, implicit $eflags
125-
; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags
126-
%0:gr64 = COPY $rsi
127-
; CCMP+SETCC %0 == 1
128-
CCMP64ri32 %0, 1, 2, 5, implicit-def $eflags, implicit $eflags
129-
$cl = SETCCr 4, implicit $eflags
130-
; CMP+SETCC %0 >= 2; CMP can be removed.
131-
CMP64ri32 %0, 2, implicit-def $eflags
132-
; %0 >=s 2 --> %0 >s 1
133-
$bl = SETCCr 13, implicit $eflags
134-
; %0 >=u 2 --> %0 >u 1
135-
$bl = SETCCr 3, implicit $eflags
136-
; %0 <s 2 --> %0 <=s 1
137-
$bl = SETCCr 12, implicit $eflags
138-
; %0 <u 2 --> %0 <=u 1
139-
$bl = SETCCr 2, implicit $eflags
140-
...
141-
---
142115
name: opt_redundant_flags_adjusted_imm_noopt_0
143116
body: |
144117
bb.0:
@@ -306,6 +279,34 @@ body: |
306279
$bl = SETCCr 2, implicit $eflags
307280
...
308281
---
282+
name: opt_redundant_flags_adjusted_imm_noopt_5
283+
body: |
284+
bb.0:
285+
; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_noopt_5
286+
; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
287+
; CHECK-NEXT: CCMP64ri32 [[COPY]], 1, 2, 5, implicit-def $eflags, implicit $eflags
288+
; CHECK-NEXT: $cl = SETCCr 4, implicit $eflags
289+
; CHECK-NEXT: CMP64ri32 [[COPY]], 2, implicit-def $eflags
290+
; CHECK-NEXT: $bl = SETCCr 13, implicit $eflags
291+
; CHECK-NEXT: $bl = SETCCr 3, implicit $eflags
292+
; CHECK-NEXT: $bl = SETCCr 12, implicit $eflags
293+
; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags
294+
%0:gr64 = COPY $rsi
295+
; CCMP+SETCC %0 == 1
296+
CCMP64ri32 %0, 1, 2, 5, implicit-def $eflags, implicit $eflags
297+
$cl = SETCCr 4, implicit $eflags
298+
; CMP+SETCC %0 >= 2; CMP cannot be removed.
299+
CMP64ri32 %0, 2, implicit-def $eflags
300+
; %0 >=s 2 --> %0 >s 1
301+
$bl = SETCCr 13, implicit $eflags
302+
; %0 >=u 2 --> %0 >u 1
303+
$bl = SETCCr 3, implicit $eflags
304+
; %0 <s 2 --> %0 <=s 1
305+
$bl = SETCCr 12, implicit $eflags
306+
; %0 <u 2 --> %0 <=u 1
307+
$bl = SETCCr 2, implicit $eflags
308+
...
309+
---
309310
name: opt_adjusted_imm_multiple_blocks
310311
body: |
311312
; CHECK-LABEL: name: opt_adjusted_imm_multiple_blocks

0 commit comments

Comments
 (0)