[PATCH] D127045: [BOLT] Use 32-bit MOV to zero 64-bit register in instrumentation code

Amir Ayupov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 4 00:18:53 PDT 2022


Amir created this revision.
Herald added subscribers: jsji, ayermolo, pengfei.
Herald added a reviewer: rafauler.
Herald added a reviewer: maksfb.
Herald added a project: All.
Amir updated this revision to Diff 434249.
Amir added a comment.
Amir edited the summary of this revision.
Amir published this revision for review.
Herald added subscribers: llvm-commits, yota9.
Herald added a project: LLVM.

clang-format


Instead of `movabsq $0x0, %rax` emit shorter equivalent `movl $0x0, %eax`.
Intel SDM, 3.4.1.1 General-Purpose Registers in 64-Bit Mode:

> 32-bit operands generate a 32-bit result, zero-extended to a 64-bit result in 
>  the destination general-purpose register.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127045

Files:
  bolt/lib/Target/X86/X86MCPlusBuilder.cpp


Index: bolt/lib/Target/X86/X86MCPlusBuilder.cpp
===================================================================
--- bolt/lib/Target/X86/X86MCPlusBuilder.cpp
+++ bolt/lib/Target/X86/X86MCPlusBuilder.cpp
@@ -3129,7 +3129,12 @@
     case 1: Opcode = X86::MOV8ri; break;
     case 2: Opcode = X86::MOV16ri; break;
     case 4: Opcode = X86::MOV32ri; break;
-    case 8: Opcode = X86::MOV64ri; break;
+    // Writing to a 32-bit register always zeros the upper 32 bits of the
+    // full-width register
+    case 8:
+      Opcode = X86::MOV32ri;
+      Reg = getAliasSized(Reg, 4);
+      break;
     default:
       llvm_unreachable("Unexpected size");
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127045.434249.patch
Type: text/x-patch
Size: 661 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220604/108fc87c/attachment.bin>


More information about the llvm-commits mailing list