From: Jakob Stoklund Olesen Date: Wed, 18 Jan 2012 23:52:22 +0000 (+0000) Subject: Add experimental -x86-use-regmask command line option. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c38c4561cd1c8ee305122205daff2a6324900127;p=oota-llvm.git Add experimental -x86-use-regmask command line option. It adds register mask operands to x86 call instructions. Once all the backend passes support register mask operands, this will be permanently enabled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148438 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index ab5a8de92bb..91dc7b51d89 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -45,6 +45,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/VariadicFunction.h" #include "llvm/Support/CallSite.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/ErrorHandling.h" @@ -56,6 +57,9 @@ using namespace dwarf; STATISTIC(NumTailCalls, "Number of tail calls"); +static cl::opt UseRegMask("x86-use-regmask", + cl::desc("Use register masks for x86 calls")); + // Forward declarations. static SDValue getMOVL(SelectionDAG &DAG, DebugLoc dl, EVT VT, SDValue V1, SDValue V2); @@ -2506,6 +2510,14 @@ X86TargetLowering::LowerCall(SDValue Chain, SDValue Callee, if (Is64Bit && isVarArg && !IsWin64) Ops.push_back(DAG.getRegister(X86::AL, MVT::i8)); + // Experimental: Add a register mask operand representing the call-preserved + // registers. + if (UseRegMask) { + const TargetRegisterInfo *TRI = getTargetMachine().getRegisterInfo(); + const uint32_t *Mask = TRI->getCallPreservedMask(CallConv); + Ops.push_back(DAG.getRegisterMask(Mask)); + } + if (InFlag.getNode()) Ops.push_back(InFlag);