[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