[llvm] [X86][MC] Support encoding optimization & assembler relaxation about immediate operands for CCMP (PR #85175)
Freddy Ye via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 13 22:12:48 PDT 2024
https://github.com/FreddyLeaf updated https://github.com/llvm/llvm-project/pull/85175
>From 6bb6fb34acab3cb5246d0cadb8634474d3ad4612 Mon Sep 17 00:00:00 2001
From: Freddy Ye <freddy.ye at intel.com>
Date: Thu, 14 Mar 2024 12:01:49 +0800
Subject: [PATCH 1/3] [X86][MC] Support encoding optimization & assembler
relaxation about immediate operands for CCMP
---
llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp | 3 ++-
.../X86EncodingOptimizationForImmediate.def | 6 ++++++
llvm/test/MC/X86/apx/ccmp-reloc.s | 14 ++++++++++++++
3 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/MC/X86/apx/ccmp-reloc.s
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index 99dc9797f6df92..472f34a4efdb47 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -723,9 +723,10 @@ void X86AsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
bool X86AsmBackend::mayNeedRelaxation(const MCInst &MI,
const MCSubtargetInfo &STI) const {
unsigned Opcode = MI.getOpcode();
+ unsigned SkipOperands = X86::isCCMPCC(Opcode) ? 2 : 0;
return isRelaxableBranch(Opcode) ||
(X86::getOpcodeForLongImmediateForm(Opcode) != Opcode &&
- MI.getOperand(MI.getNumOperands() - 1).isExpr());
+ MI.getOperand(MI.getNumOperands() - 1 - SkipOperands).isExpr());
}
bool X86AsmBackend::fixupNeedsRelaxation(const MCFixup &Fixup,
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86EncodingOptimizationForImmediate.def b/llvm/lib/Target/X86/MCTargetDesc/X86EncodingOptimizationForImmediate.def
index 27b6a654e6eb7f..f3997a092e4591 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86EncodingOptimizationForImmediate.def
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86EncodingOptimizationForImmediate.def
@@ -18,6 +18,12 @@ ENTRY(CMP32mi, CMP32mi8)
ENTRY(CMP32ri, CMP32ri8)
ENTRY(CMP64mi32, CMP64mi8)
ENTRY(CMP64ri32, CMP64ri8)
+ENTRY(CCMP16mi, CCMP16mi8)
+ENTRY(CCMP16ri, CCMP16ri8)
+ENTRY(CCMP32mi, CCMP32mi8)
+ENTRY(CCMP32ri, CCMP32ri8)
+ENTRY(CCMP64mi32, CCMP64mi8)
+ENTRY(CCMP64ri32, CCMP64ri8)
ENTRY(PUSH16i, PUSH16i8)
ENTRY(PUSH32i, PUSH32i8)
ENTRY(PUSH64i32, PUSH64i8)
diff --git a/llvm/test/MC/X86/apx/ccmp-reloc.s b/llvm/test/MC/X86/apx/ccmp-reloc.s
new file mode 100644
index 00000000000000..0e194d812a9c19
--- /dev/null
+++ b/llvm/test/MC/X86/apx/ccmp-reloc.s
@@ -0,0 +1,14 @@
+// RUN: llvm-mc -triple x86_64-linux-gnu -filetype=obj %s | llvm-readobj -r - | FileCheck %s
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{[0-9]+}}) .rela.text {
+ccmpbb {dfv=of} $foo, %bl // CHECK-NEXT: R_X86_64_8
+ccmpbb {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_8
+ccmpbw {dfv=of} $foo, %bx // CHECK-NEXT: R_X86_64_16
+ccmpbw {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_16
+ccmpbl {dfv=of} $foo, %ebx // CHECK-NEXT: R_X86_64_32
+ccmpbl {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32
+ccmpbq {dfv=of} $foo, %rbx // CHECK-NEXT: R_X86_64_32
+ccmpbq {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
\ No newline at end of file
>From a1fd3063a11ce33c3f0a0a42d9bcc940012ac527 Mon Sep 17 00:00:00 2001
From: Freddy Ye <freddy.ye at intel.com>
Date: Thu, 14 Mar 2024 13:06:47 +0800
Subject: [PATCH 2/3] address comments.
---
llvm/test/MC/X86/apx/ccmp-reloc.s | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/test/MC/X86/apx/ccmp-reloc.s b/llvm/test/MC/X86/apx/ccmp-reloc.s
index 0e194d812a9c19..7208fe6c52dd4d 100644
--- a/llvm/test/MC/X86/apx/ccmp-reloc.s
+++ b/llvm/test/MC/X86/apx/ccmp-reloc.s
@@ -8,7 +8,7 @@ ccmpbw {dfv=of} $foo, %bx // CHECK-NEXT: R_X86_64_16
ccmpbw {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_16
ccmpbl {dfv=of} $foo, %ebx // CHECK-NEXT: R_X86_64_32
ccmpbl {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32
-ccmpbq {dfv=of} $foo, %rbx // CHECK-NEXT: R_X86_64_32
-ccmpbq {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32
+ccmpbq {dfv=of} $foo, %rbx // CHECK-NEXT: R_X86_64_32S
+ccmpbq {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32S
// CHECK-NEXT: }
// CHECK-NEXT: ]
\ No newline at end of file
>From 204251ea947792af14391fccfd3807436bdccee5 Mon Sep 17 00:00:00 2001
From: Freddy Ye <freddy.ye at intel.com>
Date: Thu, 14 Mar 2024 13:12:32 +0800
Subject: [PATCH 3/3] EOF
---
llvm/test/MC/X86/apx/ccmp-reloc.s | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/MC/X86/apx/ccmp-reloc.s b/llvm/test/MC/X86/apx/ccmp-reloc.s
index 7208fe6c52dd4d..6b9d11f26da867 100644
--- a/llvm/test/MC/X86/apx/ccmp-reloc.s
+++ b/llvm/test/MC/X86/apx/ccmp-reloc.s
@@ -11,4 +11,4 @@ ccmpbl {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32
ccmpbq {dfv=of} $foo, %rbx // CHECK-NEXT: R_X86_64_32S
ccmpbq {dfv=of} $foo, 123(%r8,%rax,4) // CHECK-NEXT: R_X86_64_32S
// CHECK-NEXT: }
-// CHECK-NEXT: ]
\ No newline at end of file
+// CHECK-NEXT: ]
More information about the llvm-commits
mailing list