From 89493fda7e69891f32d65968ec5061037c7dff28 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 28 Jun 2016 16:04:46 +0000 Subject: [PATCH] [X86] Make WRPKRU/RDPKRU pass -verify-machineinstrs The original implementation attempted to zero registers using XOR %foo, %foo. This is problematic because it constitutes a read-modify-write of a register which might not be defined. Instead, use MOV32r0 to avoid these problems; expandPostRAPseudo does the right thing here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274024 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 15 ++++++--------- test/CodeGen/X86/pku.ll | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 0c969c93c61..859c27afe44 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -22547,13 +22547,11 @@ static MachineBasicBlock *emitWRPKRU(MachineInstr *MI, MachineBasicBlock *BB, BuildMI(*BB, MI, dl, TII->get(TargetOpcode::COPY), X86::EAX) .addReg(MI->getOperand(0).getReg()); // insert zero to ECX - BuildMI(*BB, MI, dl, TII->get(X86::XOR32rr), X86::ECX) - .addReg(X86::ECX) - .addReg(X86::ECX); + BuildMI(*BB, MI, dl, TII->get(X86::MOV32r0), X86::ECX); + // insert zero to EDX - BuildMI(*BB, MI, dl, TII->get(X86::XOR32rr), X86::EDX) - .addReg(X86::EDX) - .addReg(X86::EDX); + BuildMI(*BB, MI, dl, TII->get(X86::MOV32r0), X86::EDX); + // insert WRPKRU instruction BuildMI(*BB, MI, dl, TII->get(X86::WRPKRUr)); @@ -22567,9 +22565,8 @@ static MachineBasicBlock *emitRDPKRU(MachineInstr *MI, MachineBasicBlock *BB, const TargetInstrInfo *TII = Subtarget.getInstrInfo(); // insert zero to ECX - BuildMI(*BB, MI, dl, TII->get(X86::XOR32rr), X86::ECX) - .addReg(X86::ECX) - .addReg(X86::ECX); + BuildMI(*BB, MI, dl, TII->get(X86::MOV32r0), X86::ECX); + // insert RDPKRU instruction BuildMI(*BB, MI, dl, TII->get(X86::RDPKRUr)); BuildMI(*BB, MI, dl, TII->get(TargetOpcode::COPY), MI->getOperand(0).getReg()) diff --git a/test/CodeGen/X86/pku.ll b/test/CodeGen/X86/pku.ll index 8568cf43abc..79b8c474ade 100644 --- a/test/CodeGen/X86/pku.ll +++ b/test/CodeGen/X86/pku.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding| FileCheck %s +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding -verify-machineinstrs | FileCheck %s declare i32 @llvm.x86.rdpkru() declare void @llvm.x86.wrpkru(i32) -- 2.50.1