<div dir="ltr">Hey Tom, I'd like to propose merging this into 4.0.1. I know it is both somewhat late and somewhat large, but Linux kernel developers are asking me for it to be included in a released version of LLVM and Clang to simplify things, and so if it isn't too high of risk, I'd like to float the idea of pulling it.<div><br></div><div>CC-ing both the reviewers but also some other interested parties since it's a bit higher risk than usual.</div><div><br></div><div>-Chandler<br><br><div class="gmail_quote"><div dir="ltr">On Fri, Mar 17, 2017 at 5:56 PM Nirav Dave via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: niravd<br>
Date: Fri Mar 17 19:44:07 2017<br>
New Revision: 298179<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=298179&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=298179&view=rev</a><br>
Log:<br>
Make library calls sensitive to regparm module flag (Fixes PR3997).<br>
<br>
Reviewers: mkuper, rnk<br>
<br>
Subscribers: mehdi_amini, jyknight, aemerson, llvm-commits, rengolin<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D27050" rel="noreferrer" target="_blank">https://reviews.llvm.org/D27050</a><br>
<br>
Added:<br>
llvm/trunk/test/CodeGen/X86/regparm.ll<br>
Modified:<br>
llvm/trunk/include/llvm/CodeGen/FastISel.h<br>
llvm/trunk/include/llvm/IR/Module.h<br>
llvm/trunk/include/llvm/Target/TargetLowering.h<br>
llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
llvm/trunk/lib/IR/Module.cpp<br>
llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp<br>
llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp<br>
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp<br>
llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp<br>
llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp<br>
llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp<br>
llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp<br>
llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp<br>
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
llvm/trunk/lib/Target/X86/X86ISelLowering.h<br>
llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp<br>
llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp<br>
llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/FastISel.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/FastISel.h?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/FastISel.h?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/FastISel.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/FastISel.h Fri Mar 17 19:44:07 2017<br>
@@ -41,32 +41,8 @@ class MachineConstantPool;<br>
/// quickly.<br>
class FastISel {<br>
public:<br>
- struct ArgListEntry {<br>
- Value *Val = nullptr;<br>
- Type *Ty = nullptr;<br>
- bool IsSExt : 1;<br>
- bool IsZExt : 1;<br>
- bool IsInReg : 1;<br>
- bool IsSRet : 1;<br>
- bool IsNest : 1;<br>
- bool IsByVal : 1;<br>
- bool IsInAlloca : 1;<br>
- bool IsReturned : 1;<br>
- bool IsSwiftSelf : 1;<br>
- bool IsSwiftError : 1;<br>
- uint16_t Alignment = 0;<br>
-<br>
- ArgListEntry()<br>
- : IsSExt(false), IsZExt(false), IsInReg(false), IsSRet(false),<br>
- IsNest(false), IsByVal(false), IsInAlloca(false), IsReturned(false),<br>
- IsSwiftSelf(false), IsSwiftError(false) {}<br>
-<br>
- /// \brief Set CallLoweringInfo attribute flags based on a call instruction<br>
- /// and called function attributes.<br>
- void setAttributes(ImmutableCallSite *CS, unsigned AttrIdx);<br>
- };<br>
- typedef std::vector<ArgListEntry> ArgListTy;<br>
-<br>
+ typedef TargetLoweringBase::ArgListEntry ArgListEntry;<br>
+ typedef TargetLoweringBase::ArgListTy ArgListTy;<br>
struct CallLoweringInfo {<br>
Type *RetTy = nullptr;<br>
bool RetSExt : 1;<br>
<br>
Modified: llvm/trunk/include/llvm/IR/Module.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/Module.h (original)<br>
+++ llvm/trunk/include/llvm/IR/Module.h Fri Mar 17 19:44:07 2017<br>
@@ -726,6 +726,10 @@ public:<br>
/// @name Utility functions for querying Debug information.<br>
/// @{<br>
<br>
+ /// \brief Returns the Number of Register ParametersDwarf Version by checking<br>
+ /// module flags.<br>
+ unsigned getNumberRegisterParameters() const;<br>
+<br>
/// \brief Returns the Dwarf Version by checking module flags.<br>
unsigned getDwarfVersion() const;<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/Target/TargetLowering.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetLowering.h (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetLowering.h Fri Mar 17 19:44:07 2017<br>
@@ -25,13 +25,14 @@<br>
<br>
#include "llvm/ADT/ArrayRef.h"<br>
#include "llvm/ADT/DenseMap.h"<br>
-#include "llvm/ADT/SmallVector.h"<br>
#include "llvm/ADT/STLExtras.h"<br>
+#include "llvm/ADT/SmallVector.h"<br>
#include "llvm/ADT/StringRef.h"<br>
#include "llvm/CodeGen/DAGCombine.h"<br>
#include "llvm/CodeGen/ISDOpcodes.h"<br>
#include "llvm/CodeGen/MachineValueType.h"<br>
#include "llvm/CodeGen/RuntimeLibcalls.h"<br>
+#include "llvm/CodeGen/SelectionDAG.h"<br>
#include "llvm/CodeGen/SelectionDAGNodes.h"<br>
#include "llvm/CodeGen/ValueTypes.h"<br>
#include "llvm/IR/Attributes.h"<br>
@@ -2628,6 +2629,20 @@ public:<br>
return *this;<br>
}<br>
<br>
+ // setCallee with target/module-specific attributes<br>
+ CallLoweringInfo &setLibCallee(CallingConv::ID CC, Type *ResultType,<br>
+ SDValue Target, ArgListTy &&ArgsList) {<br>
+ RetTy = ResultType;<br>
+ Callee = Target;<br>
+ CallConv = CC;<br>
+ NumFixedArgs = Args.size();<br>
+ Args = std::move(ArgsList);<br>
+<br>
+ DAG.getTargetLoweringInfo().markLibCallAttributes(<br>
+ &(DAG.getMachineFunction()), CC, Args);<br>
+ return *this;<br>
+ }<br>
+<br>
CallLoweringInfo &setCallee(CallingConv::ID CC, Type *ResultType,<br>
SDValue Target, ArgListTy &&ArgsList) {<br>
RetTy = ResultType;<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp Fri Mar 17 19:44:07 2017<br>
@@ -119,21 +119,6 @@ STATISTIC(NumFastIselSuccessTarget, "Num<br>
"target-specific selector");<br>
STATISTIC(NumFastIselDead, "Number of dead insts removed on failure");<br>
<br>
-void FastISel::ArgListEntry::setAttributes(ImmutableCallSite *CS,<br>
- unsigned AttrIdx) {<br>
- IsSExt = CS->paramHasAttr(AttrIdx, Attribute::SExt);<br>
- IsZExt = CS->paramHasAttr(AttrIdx, Attribute::ZExt);<br>
- IsInReg = CS->paramHasAttr(AttrIdx, Attribute::InReg);<br>
- IsSRet = CS->paramHasAttr(AttrIdx, Attribute::StructRet);<br>
- IsNest = CS->paramHasAttr(AttrIdx, Attribute::Nest);<br>
- IsByVal = CS->paramHasAttr(AttrIdx, Attribute::ByVal);<br>
- IsInAlloca = CS->paramHasAttr(AttrIdx, Attribute::InAlloca);<br>
- IsReturned = CS->paramHasAttr(AttrIdx, Attribute::Returned);<br>
- IsSwiftSelf = CS->paramHasAttr(AttrIdx, Attribute::SwiftSelf);<br>
- IsSwiftError = CS->paramHasAttr(AttrIdx, Attribute::SwiftError);<br>
- Alignment = CS->getParamAlignment(AttrIdx);<br>
-}<br>
-<br>
/// Set the current block to which generated machine instructions will be<br>
/// appended, and clear the local CSE map.<br>
void FastISel::startNewBlock() {<br>
@@ -929,6 +914,7 @@ bool FastISel::lowerCallTo(const CallIns<br>
Entry.setAttributes(&CS, ArgI + 1);<br>
Args.push_back(Entry);<br>
}<br>
+ TLI.markLibCallAttributes(MF, CS.getCallingConv(), Args);<br>
<br>
CallLoweringInfo CLI;<br>
CLI.setCallee(RetTy, FTy, Symbol, std::move(Args), CS, NumArgs);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Mar 17 19:44:07 2017<br>
@@ -1935,9 +1935,13 @@ SDValue SelectionDAGLegalize::ExpandLibC<br>
InChain = TCChain;<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(SDLoc(Node)).setChain(InChain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setTailCall(isTailCall).setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(SDLoc(Node))<br>
+ .setChain(InChain)<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,<br>
+ std::move(Args))<br>
+ .setTailCall(isTailCall)<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
@@ -1970,9 +1974,12 @@ SDValue SelectionDAGLegalize::ExpandLibC<br>
Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(DAG.getEntryNode())<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,<br>
+ std::move(Args))<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue,SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
@@ -2004,9 +2011,12 @@ SelectionDAGLegalize::ExpandChainLibCall<br>
Type *RetTy = Node->getValueType(0).getTypeForEVT(*DAG.getContext());<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(SDLoc(Node)).setChain(InChain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(SDLoc(Node))<br>
+ .setChain(InChain)<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,<br>
+ std::move(Args))<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
@@ -2099,9 +2109,12 @@ SelectionDAGLegalize::ExpandDivRemLibCal<br>
<br>
SDLoc dl(Node);<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(InChain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(InChain)<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,<br>
+ std::move(Args))<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
@@ -2210,9 +2223,9 @@ SelectionDAGLegalize::ExpandSinCosLibCal<br>
<br>
SDLoc dl(Node);<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(InChain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC),<br>
- Type::getVoidTy(*DAG.getContext()), Callee, std::move(Args));<br>
+ CLI.setDebugLoc(dl).setChain(InChain).setLibCallee(<br>
+ TLI.getLibcallCallingConv(LC), Type::getVoidTy(*DAG.getContext()), Callee,<br>
+ std::move(Args));<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
@@ -3830,10 +3843,11 @@ void SelectionDAGLegalize::ConvertNodeTo<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Node->getOperand(0))<br>
- .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol("__sync_synchronize",<br>
- TLI.getPointerTy(DAG.getDataLayout())),<br>
- std::move(Args));<br>
+ .setLibCallee(<br>
+ CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol("__sync_synchronize",<br>
+ TLI.getPointerTy(DAG.getDataLayout())),<br>
+ std::move(Args));<br>
<br>
std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
<br>
@@ -3870,10 +3884,10 @@ void SelectionDAGLegalize::ConvertNodeTo<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Node->getOperand(0))<br>
- .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol("abort",<br>
- TLI.getPointerTy(DAG.getDataLayout())),<br>
- std::move(Args));<br>
+ .setLibCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol(<br>
+ "abort", TLI.getPointerTy(DAG.getDataLayout())),<br>
+ std::move(Args));<br>
std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
<br>
Results.push_back(CallResult.second);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Fri Mar 17 19:44:07 2017<br>
@@ -2607,7 +2607,7 @@ void DAGTypeLegalizer::ExpandIntRes_XMUL<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Func, std::move(Args))<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Func, std::move(Args))<br>
.setSExtResult();<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Fri Mar 17 19:44:07 2017<br>
@@ -1094,9 +1094,12 @@ DAGTypeLegalizer::ExpandChainLibCall(RTL<br>
Type *RetTy = Node->getValueType(0).getTypeForEVT(*DAG.getContext());<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(SDLoc(Node)).setChain(InChain)<br>
- .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(SDLoc(Node))<br>
+ .setChain(InChain)<br>
+ .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,<br>
+ std::move(Args))<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri Mar 17 19:44:07 2017<br>
@@ -5175,11 +5175,11 @@ SDValue SelectionDAG::getMemcpy(SDValue<br>
TargetLowering::CallLoweringInfo CLI(*this);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMCPY),<br>
- Dst.getValueType().getTypeForEVT(*getContext()),<br>
- getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY),<br>
- TLI->getPointerTy(getDataLayout())),<br>
- std::move(Args))<br>
+ .setLibCallee(TLI->getLibcallCallingConv(RTLIB::MEMCPY),<br>
+ Dst.getValueType().getTypeForEVT(*getContext()),<br>
+ getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY),<br>
+ TLI->getPointerTy(getDataLayout())),<br>
+ std::move(Args))<br>
.setDiscardResult()<br>
.setTailCall(isTailCall);<br>
<br>
@@ -5236,11 +5236,11 @@ SDValue SelectionDAG::getMemmove(SDValue<br>
TargetLowering::CallLoweringInfo CLI(*this);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE),<br>
- Dst.getValueType().getTypeForEVT(*getContext()),<br>
- getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE),<br>
- TLI->getPointerTy(getDataLayout())),<br>
- std::move(Args))<br>
+ .setLibCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE),<br>
+ Dst.getValueType().getTypeForEVT(*getContext()),<br>
+ getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE),<br>
+ TLI->getPointerTy(getDataLayout())),<br>
+ std::move(Args))<br>
.setDiscardResult()<br>
.setTailCall(isTailCall);<br>
<br>
@@ -5298,11 +5298,11 @@ SDValue SelectionDAG::getMemset(SDValue<br>
TargetLowering::CallLoweringInfo CLI(*this);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET),<br>
- Dst.getValueType().getTypeForEVT(*getContext()),<br>
- getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET),<br>
- TLI->getPointerTy(getDataLayout())),<br>
- std::move(Args))<br>
+ .setLibCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET),<br>
+ Dst.getValueType().getTypeForEVT(*getContext()),<br>
+ getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET),<br>
+ TLI->getPointerTy(getDataLayout())),<br>
+ std::move(Args))<br>
.setDiscardResult()<br>
.setTailCall(isTailCall);<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Fri Mar 17 19:44:07 2017<br>
@@ -4912,7 +4912,7 @@ SelectionDAGBuilder::visitIntrinsicCall(<br>
report_fatal_error("Unsupported element size");<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(sdl).setChain(getRoot()).setCallee(<br>
+ CLI.setDebugLoc(sdl).setChain(getRoot()).setLibCallee(<br>
TLI.getLibcallCallingConv(LibraryCall),<br>
Type::getVoidTy(*DAG.getContext()),<br>
DAG.getExternalSymbol(TLI.getLibcallName(LibraryCall),<br>
@@ -5536,7 +5536,7 @@ SelectionDAGBuilder::visitIntrinsicCall(<br>
TargetLowering::ArgListTy Args;<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(sdl).setChain(getRoot()).setCallee(<br>
+ CLI.setDebugLoc(sdl).setChain(getRoot()).setLibCallee(<br>
CallingConv::C, I.getType(),<br>
DAG.getExternalSymbol(TrapFuncName.data(),<br>
TLI.getPointerTy(DAG.getDataLayout())),<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -96,8 +96,8 @@ bool TargetLowering::parametersInCSRMatc<br>
<br>
/// \brief Set CallLoweringInfo attribute flags based on a call instruction<br>
/// and called function attributes.<br>
-void TargetLowering::ArgListEntry::setAttributes(ImmutableCallSite *CS,<br>
- unsigned AttrIdx) {<br>
+void TargetLoweringBase::ArgListEntry::setAttributes(ImmutableCallSite *CS,<br>
+ unsigned AttrIdx) {<br>
IsSExt = CS->paramHasAttr(AttrIdx, Attribute::SExt);<br>
IsZExt = CS->paramHasAttr(AttrIdx, Attribute::ZExt);<br>
IsInReg = CS->paramHasAttr(AttrIdx, Attribute::InReg);<br>
@@ -138,10 +138,13 @@ TargetLowering::makeLibCall(SelectionDAG<br>
Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
bool signExtend = shouldSignExtendTypeInLibCall(RetVT, isSigned);<br>
- CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())<br>
- .setCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
- .setNoReturn(doesNotReturn).setDiscardResult(!isReturnValueUsed)<br>
- .setSExtResult(signExtend).setZExtResult(!signExtend);<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(DAG.getEntryNode())<br>
+ .setLibCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
+ .setNoReturn(doesNotReturn)<br>
+ .setDiscardResult(!isReturnValueUsed)<br>
+ .setSExtResult(signExtend)<br>
+ .setZExtResult(!signExtend);<br>
return LowerCallTo(CLI);<br>
}<br>
<br>
@@ -3853,7 +3856,7 @@ SDValue TargetLowering::LowerToTLSEmulat<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl).setChain(DAG.getEntryNode());<br>
- CLI.setCallee(CallingConv::C, VoidPtrType, EmuTlsGetAddr, std::move(Args));<br>
+ CLI.setLibCallee(CallingConv::C, VoidPtrType, EmuTlsGetAddr, std::move(Args));<br>
std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);<br>
<br>
// TLSADDR will be codegen'ed as call. Inform MFI that function has calls.<br>
<br>
Modified: llvm/trunk/lib/IR/Module.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/Module.cpp (original)<br>
+++ llvm/trunk/lib/IR/Module.cpp Fri Mar 17 19:44:07 2017<br>
@@ -465,6 +465,14 @@ void Module::dropAllReferences() {<br>
GIF.dropAllReferences();<br>
}<br>
<br>
+unsigned Module::getNumberRegisterParameters() const {<br>
+ auto *Val =<br>
+ cast_or_null<ConstantAsMetadata>(getModuleFlag("NumRegisterParameters"));<br>
+ if (!Val)<br>
+ return 0;<br>
+ return cast<ConstantInt>(Val->getValue())->getZExtValue();<br>
+}<br>
+<br>
unsigned Module::getDwarfVersion() const {<br>
auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("Dwarf Version"));<br>
if (!Val)<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -2123,8 +2123,9 @@ SDValue AArch64TargetLowering::LowerFSIN<br>
<br>
StructType *RetTy = StructType::get(ArgTy, ArgTy, nullptr);<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())<br>
- .setCallee(CallingConv::Fast, RetTy, Callee, std::move(Args));<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(DAG.getEntryNode())<br>
+ .setLibCallee(CallingConv::Fast, RetTy, Callee, std::move(Args));<br>
<br>
std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);<br>
return CallResult.first;<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp Fri Mar 17 19:44:07 2017<br>
@@ -44,8 +44,9 @@ SDValue AArch64SelectionDAGInfo::EmitTar<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol(bzeroEntry, IntPtr), std::move(Args))<br>
+ .setLibCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol(bzeroEntry, IntPtr),<br>
+ std::move(Args))<br>
.setDiscardResult();<br>
std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
return CallResult.second;<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -2873,7 +2873,7 @@ ARMTargetLowering::LowerToTLSGeneralDyna<br>
<br>
// FIXME: is there useful debug info available here?<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(Chain).setCallee(<br>
+ CLI.setDebugLoc(dl).setChain(Chain).setLibCallee(<br>
CallingConv::C, Type::getInt32Ty(*DAG.getContext()),<br>
DAG.getExternalSymbol("__tls_get_addr", PtrVT), std::move(Args));<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp Fri Mar 17 19:44:07 2017<br>
@@ -114,7 +114,7 @@ SDValue ARMSelectionDAGInfo::EmitSpecial<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(<br>
+ .setLibCallee(<br>
TLI->getLibcallCallingConv(LC), Type::getVoidTy(*DAG.getContext()),<br>
DAG.getExternalSymbol(FunctionNames[AEABILibcall][AlignVariant],<br>
TLI->getPointerTy(DAG.getDataLayout())),<br>
<br>
Modified: llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/AVR/AVRISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -356,7 +356,7 @@ SDValue AVRTargetLowering::LowerDivRem(S<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(InChain)<br>
- .setCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
+ .setLibCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))<br>
.setInRegister()<br>
.setSExtResult(isSigned)<br>
.setZExtResult(!isSigned);<br>
@@ -1983,4 +1983,3 @@ unsigned AVRTargetLowering::getRegisterB<br>
}<br>
<br>
} // end of namespace llvm<br>
-<br>
<br>
Modified: llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/Hexagon/HexagonSelectionDAGInfo.cpp Fri Mar 17 19:44:07 2017<br>
@@ -51,7 +51,7 @@ SDValue HexagonSelectionDAGInfo::EmitTar<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(<br>
+ .setLibCallee(<br>
TLI.getLibcallCallingConv(RTLIB::MEMCPY),<br>
Type::getVoidTy(*DAG.getContext()),<br>
DAG.getTargetExternalSymbol(<br>
<br>
Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -1922,8 +1922,9 @@ lowerGlobalTLSAddress(SDValue Op, Select<br>
Args.push_back(Entry);<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(DL).setChain(DAG.getEntryNode())<br>
- .setCallee(CallingConv::C, PtrTy, TlsGetAddr, std::move(Args));<br>
+ CLI.setDebugLoc(DL)<br>
+ .setChain(DAG.getEntryNode())<br>
+ .setLibCallee(CallingConv::C, PtrTy, TlsGetAddr, std::move(Args));<br>
std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);<br>
<br>
SDValue Ret = CallResult.first;<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -2647,10 +2647,9 @@ SDValue PPCTargetLowering::LowerINIT_TRA<br>
<br>
// Lower to a call to __trampoline_setup(Trmp, TrampSize, FPtr, ctx_reg)<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(Chain)<br>
- .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol("__trampoline_setup", PtrVT),<br>
- std::move(Args));<br>
+ CLI.setDebugLoc(dl).setChain(Chain).setLibCallee(<br>
+ CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol("__trampoline_setup", PtrVT), std::move(Args));<br>
<br>
std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);<br>
return CallResult.second;<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -53,6 +53,7 @@<br>
#include "llvm/Support/Debug.h"<br>
#include "llvm/Support/ErrorHandling.h"<br>
#include "llvm/Support/MathExtras.h"<br>
+#include "llvm/Target/TargetLowering.h"<br>
#include "llvm/Target/TargetOptions.h"<br>
#include <algorithm><br>
#include <bitset><br>
@@ -1961,6 +1962,34 @@ bool X86TargetLowering::useSoftFloat() c<br>
return Subtarget.useSoftFloat();<br>
}<br>
<br>
+void X86TargetLowering::markLibCallAttributes(MachineFunction *MF, unsigned CC,<br>
+ ArgListTy &Args) const {<br>
+<br>
+ // Only relabel X86-32 for C / Stdcall CCs.<br>
+ if (static_cast<const X86Subtarget &>(MF->getSubtarget()).is64Bit())<br>
+ return;<br>
+ if (CC != CallingConv::C && CC != CallingConv::X86_StdCall)<br>
+ return;<br>
+ unsigned ParamRegs = 0;<br>
+ if (auto *M = MF->getFunction()->getParent())<br>
+ ParamRegs = M->getNumberRegisterParameters();<br>
+<br>
+ // Mark the first N int arguments as having reg<br>
+ for (unsigned Idx = 0; Idx < Args.size(); Idx++) {<br>
+ Type *T = Args[Idx].Ty;<br>
+ if (T->isPointerTy() || T->isIntegerTy())<br>
+ if (MF->getDataLayout().getTypeAllocSize(T) <= 8) {<br>
+ unsigned numRegs = 1;<br>
+ if (MF->getDataLayout().getTypeAllocSize(T) > 4)<br>
+ numRegs = 2;<br>
+ if (ParamRegs < numRegs)<br>
+ return;<br>
+ ParamRegs -= numRegs;<br>
+ Args[Idx].IsInReg = true;<br>
+ }<br>
+ }<br>
+}<br>
+<br>
const MCExpr *<br>
X86TargetLowering::LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,<br>
const MachineBasicBlock *MBB,<br>
@@ -21517,11 +21546,15 @@ SDValue X86TargetLowering::LowerWin64_i1<br>
getPointerTy(DAG.getDataLayout()));<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(InChain)<br>
- .setCallee(getLibcallCallingConv(LC),<br>
- static_cast<EVT>(MVT::v2i64).getTypeForEVT(*DAG.getContext()),<br>
- Callee, std::move(Args))<br>
- .setInRegister().setSExtResult(isSigned).setZExtResult(!isSigned);<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(InChain)<br>
+ .setLibCallee(<br>
+ getLibcallCallingConv(LC),<br>
+ static_cast<EVT>(MVT::v2i64).getTypeForEVT(*DAG.getContext()), Callee,<br>
+ std::move(Args))<br>
+ .setInRegister()<br>
+ .setSExtResult(isSigned)<br>
+ .setZExtResult(!isSigned);<br>
<br>
std::pair<SDValue, SDValue> CallInfo = LowerCallTo(CLI);<br>
return DAG.getBitcast(VT, CallInfo.first);<br>
@@ -23245,8 +23278,9 @@ static SDValue LowerFSINCOS(SDValue Op,<br>
: (Type*)VectorType::get(ArgTy, 4);<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())<br>
- .setCallee(CallingConv::C, RetTy, Callee, std::move(Args));<br>
+ CLI.setDebugLoc(dl)<br>
+ .setChain(DAG.getEntryNode())<br>
+ .setLibCallee(CallingConv::C, RetTy, Callee, std::move(Args));<br>
<br>
std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)<br>
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Fri Mar 17 19:44:07 2017<br>
@@ -688,6 +688,9 @@ namespace llvm {<br>
unsigned getJumpTableEncoding() const override;<br>
bool useSoftFloat() const override;<br>
<br>
+ void markLibCallAttributes(MachineFunction *MF, unsigned CC,<br>
+ ArgListTy &Args) const override;<br>
+<br>
MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override {<br>
return MVT::i8;<br>
}<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86SelectionDAGInfo.cpp Fri Mar 17 19:44:07 2017<br>
@@ -87,8 +87,9 @@ SDValue X86SelectionDAGInfo::EmitTargetC<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol(bzeroEntry, IntPtr), std::move(Args))<br>
+ .setLibCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol(bzeroEntry, IntPtr),<br>
+ std::move(Args))<br>
.setDiscardResult();<br>
<br>
std::pair<SDValue,SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
<br>
Modified: llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/XCore/XCoreISelLowering.cpp Fri Mar 17 19:44:07 2017<br>
@@ -483,7 +483,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG)<br>
Args.push_back(Entry);<br>
<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
- CLI.setDebugLoc(DL).setChain(Chain).setCallee(<br>
+ CLI.setDebugLoc(DL).setChain(Chain).setLibCallee(<br>
CallingConv::C, IntPtrTy,<br>
DAG.getExternalSymbol("__misaligned_load",<br>
getPointerTy(DAG.getDataLayout())),<br>
<br>
Modified: llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp?rev=298179&r1=298178&r2=298179&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/XCore/XCoreSelectionDAGInfo.cpp Fri Mar 17 19:44:07 2017<br>
@@ -35,11 +35,11 @@ SDValue XCoreSelectionDAGInfo::EmitTarge<br>
TargetLowering::CallLoweringInfo CLI(DAG);<br>
CLI.setDebugLoc(dl)<br>
.setChain(Chain)<br>
- .setCallee(TLI.getLibcallCallingConv(RTLIB::MEMCPY),<br>
- Type::getVoidTy(*DAG.getContext()),<br>
- DAG.getExternalSymbol("__memcpy_4",<br>
- TLI.getPointerTy(DAG.getDataLayout())),<br>
- std::move(Args))<br>
+ .setLibCallee(TLI.getLibcallCallingConv(RTLIB::MEMCPY),<br>
+ Type::getVoidTy(*DAG.getContext()),<br>
+ DAG.getExternalSymbol(<br>
+ "__memcpy_4", TLI.getPointerTy(DAG.getDataLayout())),<br>
+ std::move(Args))<br>
.setDiscardResult();<br>
<br>
std::pair<SDValue,SDValue> CallResult = TLI.LowerCallTo(CLI);<br>
<br>
Added: llvm/trunk/test/CodeGen/X86/regparm.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/regparm.ll?rev=298179&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/regparm.ll?rev=298179&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/regparm.ll (added)<br>
+++ llvm/trunk/test/CodeGen/X86/regparm.ll Fri Mar 17 19:44:07 2017<br>
@@ -0,0 +1,48 @@<br>
+; RUN: llc %s -mtriple=i386-pc-linux -o - | FileCheck -check-prefix=CHECK %s<br>
+; RUN: llc %s -mtriple=i386-pc-win32 -o - | FileCheck -check-prefix=WIN %s<br>
+; RUN: llc %s -mtriple=i386-pc-linux -fast-isel -o - | FileCheck -check-prefix=FAST %s<br>
+; RUN: llc %s -mtriple=i386-pc-win32 -fast-isel -o - | FileCheck -check-prefix=FASTWIN %s<br>
+<br>
+<br>
+<br>
+target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"<br>
+target triple = "i386-unknown-linux-gnu"<br>
+<br>
+; Function Attrs: argmemonly nounwind<br>
+declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1) #1<br>
+<br>
+define void @use_memset(i8* inreg nocapture %dest, i8 inreg %c, i32 inreg %n) local_unnamed_addr #0 {<br>
+entry:<br>
+;CHECK-LABEL: @use_memset<br>
+;CHECK-NOT: push<br>
+;CHECK: jmp memset<br>
+;CHECK-NOT: retl<br>
+;WIN-LABEL: @use_memset<br>
+;WIN-NOT: push<br>
+;WIN: jmp _memset<br>
+;WIN-NOT: retl<br>
+;FAST-LABEL: @use_memset<br>
+;FAST: subl $12, %esp<br>
+;FAST-NEXT: movzbl %dl, %edx<br>
+;FAST-NEXT: calll memset<br>
+;FAST-NEXT: addl $12, %esp<br>
+;FASTWIN-LABEL: @use_memset<br>
+;FASTWIN: movzbl %dl, %edx<br>
+;FASTWIN-NEXT: calll _memset<br>
+;FASTWIN-NEXT: retl<br>
+ tail call void @llvm.memset.p0i8.i32(i8* %dest, i8 %c, i32 %n, i32 1, i1 false)<br>
+ ret void<br>
+}<br>
+<br>
+; Function Attrs: argmemonly nounwind<br>
+declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i32, i1) #1<br>
+<br>
+<br>
+attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
+attributes #1 = { argmemonly nounwind }<br>
+<br>
+!llvm.module.flags = !{!0}<br>
+!llvm.ident = !{!1}<br>
+<br>
+!0 = !{i32 1, !"NumRegisterParameters", i32 3}<br>
+!1 = !{!"clang version 4.0.0 (trunk 288025) (llvm/trunk 288033)"}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div>