Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Unified Diff: lib/Target/X86/X86NaClRewritePass.cpp

Issue 1137803004: Add support for using MI bundles as bundle-locked groups on x86 (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: add test Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/Target/X86/X86NaClRewritePass.cpp
diff --git a/lib/Target/X86/X86NaClRewritePass.cpp b/lib/Target/X86/X86NaClRewritePass.cpp
index 85004b734325e857f68388b6bb3d0a1404b4a3c8..a6cd65dcfb057c2f985b08dc3f6f311bd96e845d 100644
--- a/lib/Target/X86/X86NaClRewritePass.cpp
+++ b/lib/Target/X86/X86NaClRewritePass.cpp
@@ -260,11 +260,25 @@ bool X86NaClRewritePass::ApplyStackSFI(MachineBasicBlock &MBB,
return true;
}
- // Promote 32-bit lea to 64-bit lea (does this ever happen?)
assert(Opc != X86::LEA32r && "Invalid opcode in 64-bit mode!");
- if (Opc == X86::LEA64_32r) {
- unsigned DestReg = MI.getOperand(0).getReg();
+ if (Opc == X86::LEA64_32r){
unsigned BaseReg = MI.getOperand(1).getReg();
+ if (BaseReg != X86::EBP) {
jvoung (off chromium) 2015/05/12 23:53:05 Add a comment about why EBP is a special case? Ha
Derek Schuff 2015/05/13 00:44:50 Done.
+ // Create a MachineInstr bundle (i.e. a bundle-locked group) and fix up
+ // the stack pointer by adding R15. TODO(dschuff): generalize this for
+ // other uses if needed, and try to replace some pseudos if
+ // possible. Eventually replace with auto-sandboxing.
+ auto NextMBBI = MBBI;
+ ++NextMBBI;
+ BuildMI(MBB, NextMBBI, MBBI->getDebugLoc(),
+ TII->get(X86::ADD64rr), X86::RSP).addReg(X86::RSP).addReg(X86::R15);
jvoung (off chromium) 2015/05/12 23:53:04 80 col
Derek Schuff 2015/05/13 00:44:50 Done.
+ MIBundleBuilder(MBB, MBBI, NextMBBI);
+ finalizeBundle(MBB, MBBI.getInstrIterator());
+ return true;
+ }
+
+ // Promote 32-bit lea to 64-bit lea (does this ever happen?)
+ unsigned DestReg = MI.getOperand(0).getReg();
unsigned Scale = MI.getOperand(2).getImm();
unsigned IndexReg = MI.getOperand(3).getReg();
assert(DestReg == X86::ESP);

Powered by Google App Engine
This is Rietveld 408576698