[llvm] e8e2cff - [X86][CodeGen] Fix an incorrect pattern for CCMP/CTEST with imm64
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 11 08:12:12 PDT 2024
Author: Shengchen Kan
Date: 2024-07-11T23:11:02+08:00
New Revision: e8e2cff1607627e52079741af368064cea3e28d4
URL: https://github.com/llvm/llvm-project/commit/e8e2cff1607627e52079741af368064cea3e28d4
DIFF: https://github.com/llvm/llvm-project/commit/e8e2cff1607627e52079741af368064cea3e28d4.diff
LOG: [X86][CodeGen] Fix an incorrect pattern for CCMP/CTEST with imm64
Added:
Modified:
llvm/lib/Target/X86/X86InstrConditionalCompare.td
llvm/test/CodeGen/X86/apx/ccmp.ll
llvm/test/CodeGen/X86/apx/ctest.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86InstrConditionalCompare.td b/llvm/lib/Target/X86/X86InstrConditionalCompare.td
index 3d296773103b5..35af8405f1abe 100644
--- a/llvm/lib/Target/X86/X86InstrConditionalCompare.td
+++ b/llvm/lib/Target/X86/X86InstrConditionalCompare.td
@@ -93,8 +93,8 @@ def : Pat<(X86ccmp GR16:$src1, (i16 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
(CCMP16ri GR16:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
def : Pat<(X86ccmp GR32:$src1, (i32 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
(CCMP32ri GR32:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
-def : Pat<(X86ccmp GR64:$src1, (i64 imm:$src2), timm:$dcf, timm:$cond, EFLAGS),
- (CCMP64ri32 GR64:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
+def : Pat<(X86ccmp GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond, EFLAGS),
+ (CCMP64ri32 GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond)>;
def : Pat<(X86ccmp GR8:$src1, (loadi8 addr:$src2), timm:$dcf, timm:$cond, EFLAGS),
(CCMP8rm GR8:$src1, addr:$src2, timm:$dcf, timm:$cond)>;
@@ -152,5 +152,5 @@ def : Pat<(X86ctestpat GR16:$src1, imm:$src2, timm:$dcf, timm:$cond),
(CTEST16ri GR16:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
def : Pat<(X86ctestpat GR32:$src1, imm:$src2, timm:$dcf, timm:$cond),
(CTEST32ri GR32:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
-def : Pat<(X86ctestpat GR64:$src1, imm:$src2, timm:$dcf, timm:$cond),
- (CTEST64ri32 GR64:$src1, imm:$src2, timm:$dcf, timm:$cond)>;
+def : Pat<(X86ctestpat GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond),
+ (CTEST64ri32 GR64:$src1, i64immSExt32_su:$src2, timm:$dcf, timm:$cond)>;
diff --git a/llvm/test/CodeGen/X86/apx/ccmp.ll b/llvm/test/CodeGen/X86/apx/ccmp.ll
index 34138bf88311b..7bd8aeea8863b 100644
--- a/llvm/test/CodeGen/X86/apx/ccmp.ll
+++ b/llvm/test/CodeGen/X86/apx/ccmp.ll
@@ -1258,8 +1258,9 @@ define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) {
; CHECK-LABEL: ccmp64ri64:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]
-; CHECK-NEXT: ccmpbeq {dfv=zf} $9992147483646, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x81,0xfe,0xfe,0xbb,0x66,0x7a]
+; CHECK-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]
; CHECK-NEXT: # imm = 0x9167A66BBFE
+; CHECK-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]
; CHECK-NEXT: jg .LBB30_1 # encoding: [0x7f,A]
; CHECK-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
; CHECK-NEXT: # %bb.2: # %if.then
@@ -1273,8 +1274,9 @@ define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) {
; NDD-LABEL: ccmp64ri64:
; NDD: # %bb.0: # %entry
; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]
-; NDD-NEXT: ccmpbeq {dfv=zf} $9992147483646, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x81,0xfe,0xfe,0xbb,0x66,0x7a]
+; NDD-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]
; NDD-NEXT: # imm = 0x9167A66BBFE
+; NDD-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]
; NDD-NEXT: jg .LBB30_1 # encoding: [0x7f,A]
; NDD-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
; NDD-NEXT: # %bb.2: # %if.then
diff --git a/llvm/test/CodeGen/X86/apx/ctest.ll b/llvm/test/CodeGen/X86/apx/ctest.ll
index b55a540556d20..4f79b0a999632 100644
--- a/llvm/test/CodeGen/X86/apx/ctest.ll
+++ b/llvm/test/CodeGen/X86/apx/ctest.ll
@@ -901,7 +901,8 @@ define void @ctest64ri64(i64 noundef %a, i64 noundef %b) {
; CHECK-LABEL: ctest64ri64:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: testq %rdi, %rdi
-; CHECK-NEXT: ctestneq {dfv=zf} $9992147483647, %rsi # imm = 0x9167A66BBFF
+; CHECK-NEXT: movabsq $9992147483647, %rax # imm = 0x9167A66BBFF
+; CHECK-NEXT: ctestneq {dfv=zf} %rax, %rsi
; CHECK-NEXT: jne .LBB24_1
; CHECK-NEXT: # %bb.2: # %if.then
; CHECK-NEXT: xorl %eax, %eax
@@ -912,7 +913,8 @@ define void @ctest64ri64(i64 noundef %a, i64 noundef %b) {
; NDD-LABEL: ctest64ri64:
; NDD: # %bb.0: # %entry
; NDD-NEXT: testq %rdi, %rdi
-; NDD-NEXT: ctestneq {dfv=zf} $9992147483647, %rsi # imm = 0x9167A66BBFF
+; NDD-NEXT: movabsq $9992147483647, %rax # imm = 0x9167A66BBFF
+; NDD-NEXT: ctestneq {dfv=zf} %rax, %rsi
; NDD-NEXT: jne .LBB24_1
; NDD-NEXT: # %bb.2: # %if.then
; NDD-NEXT: xorl %eax, %eax
More information about the llvm-commits
mailing list