Skip to content

Commit e8e2cff

Browse files
committed
[X86][CodeGen] Fix an incorrect pattern for CCMP/CTEST with imm64
1 parent 36d5281 commit e8e2cff

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

llvm/lib/Target/X86/X86InstrConditionalCompare.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ def : Pat<(X86ccmp GR16:$src1, (i16 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
9393
(CCMP16ri GR16:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
9494
def : Pat<(X86ccmp GR32:$src1, (i32 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
9595
(CCMP32ri GR32:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
96-
def : Pat<(X86ccmp GR64:$src1, (i64 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
97-
(CCMP64ri32 GR64:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
96+
def : Pat<(X86ccmp GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond, EFLAGS),
97+
(CCMP64ri32 GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond)>;
9898

9999
def : Pat<(X86ccmp GR8:$src1, (loadi8 addr:$src2), timm:$dcf, timm:$cond, EFLAGS),
100100
(CCMP8rm GR8:$src1, addr:$src2, timm:$dcf, timm:$cond)>;
@@ -152,5 +152,5 @@ def : Pat<(X86ctestpat GR16:$src1, imm:$src2, timm:$dcf, timm:$cond),
152152
(CTEST16ri GR16:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
153153
def : Pat<(X86ctestpat GR32:$src1, imm:$src2, timm:$dcf, timm:$cond),
154154
(CTEST32ri GR32:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
155-
def : Pat<(X86ctestpat GR64:$src1, imm:$src2, timm:$dcf, timm:$cond),
156-
(CTEST64ri32 GR64:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
155+
def : Pat<(X86ctestpat GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond),
156+
(CTEST64ri32 GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond)>;

llvm/test/CodeGen/X86/apx/ccmp.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,8 +1258,9 @@ define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) {
12581258
; CHECK-LABEL: ccmp64ri64:
12591259
; CHECK: # %bb.0: # %entry
12601260
; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]
1261-
; CHECK-NEXT: ccmpbeq {dfv=zf} $9992147483646, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x81,0xfe,0xfe,0xbb,0x66,0x7a]
1261+
; CHECK-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]
12621262
; CHECK-NEXT: # imm = 0x9167A66BBFE
1263+
; CHECK-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]
12631264
; CHECK-NEXT: jg .LBB30_1 # encoding: [0x7f,A]
12641265
; CHECK-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
12651266
; CHECK-NEXT: # %bb.2: # %if.then
@@ -1273,8 +1274,9 @@ define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) {
12731274
; NDD-LABEL: ccmp64ri64:
12741275
; NDD: # %bb.0: # %entry
12751276
; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]
1276-
; NDD-NEXT: ccmpbeq {dfv=zf} $9992147483646, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x81,0xfe,0xfe,0xbb,0x66,0x7a]
1277+
; NDD-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]
12771278
; NDD-NEXT: # imm = 0x9167A66BBFE
1279+
; NDD-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]
12781280
; NDD-NEXT: jg .LBB30_1 # encoding: [0x7f,A]
12791281
; NDD-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
12801282
; NDD-NEXT: # %bb.2: # %if.then

llvm/test/CodeGen/X86/apx/ctest.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,8 @@ define void @ctest64ri64(i64 noundef %a, i64 noundef %b) {
901901
; CHECK-LABEL: ctest64ri64:
902902
; CHECK: # %bb.0: # %entry
903903
; CHECK-NEXT: testq %rdi, %rdi
904-
; CHECK-NEXT: ctestneq {dfv=zf} $9992147483647, %rsi # imm = 0x9167A66BBFF
904+
; CHECK-NEXT: movabsq $9992147483647, %rax # imm = 0x9167A66BBFF
905+
; CHECK-NEXT: ctestneq {dfv=zf} %rax, %rsi
905906
; CHECK-NEXT: jne .LBB24_1
906907
; CHECK-NEXT: # %bb.2: # %if.then
907908
; CHECK-NEXT: xorl %eax, %eax
@@ -912,7 +913,8 @@ define void @ctest64ri64(i64 noundef %a, i64 noundef %b) {
912913
; NDD-LABEL: ctest64ri64:
913914
; NDD: # %bb.0: # %entry
914915
; NDD-NEXT: testq %rdi, %rdi
915-
; NDD-NEXT: ctestneq {dfv=zf} $9992147483647, %rsi # imm = 0x9167A66BBFF
916+
; NDD-NEXT: movabsq $9992147483647, %rax # imm = 0x9167A66BBFF
917+
; NDD-NEXT: ctestneq {dfv=zf} %rax, %rsi
916918
; NDD-NEXT: jne .LBB24_1
917919
; NDD-NEXT: # %bb.2: # %if.then
918920
; NDD-NEXT: xorl %eax, %eax

0 commit comments

Comments
 (0)