diff options
| author | Amara Emerson <aemerson@apple.com> | 2019-03-29 21:30:51 +0000 |
|---|---|---|
| committer | Amara Emerson <aemerson@apple.com> | 2019-03-29 21:30:51 +0000 |
| commit | d413f41de6baf500e5d20c638375447e18777db2 (patch) | |
| tree | 6c922b4636fe0ac4fdd804a1f91b553014e952db /llvm/lib/Target | |
| parent | b13f064b5d20ef457ddb69ee7022e27666fd6189 (diff) | |
| download | bcm5719-llvm-d413f41de6baf500e5d20c638375447e18777db2.tar.gz bcm5719-llvm-d413f41de6baf500e5d20c638375447e18777db2.zip | |
[X86] When using Win64 ABI, exit with error if SSE is disabled for varargs
We need XMM registers to handle varargs with the Win64 ABI. Before we would
silently generate bad code resulting in an assertion failure elsewhere in the
backend.
llvm-svn: 357317
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index a5691cdfc6a..6f9caf1d0bb 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -3780,6 +3780,9 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI, } else if (VA.isRegLoc()) { RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg)); if (isVarArg && IsWin64) { + if (!Subtarget.hasSSE1()) + errorUnsupported( + DAG, dl, "Win64 ABI varargs functions require SSE to be enabled"); // Win64 ABI requires argument XMM reg to be copied to the corresponding // shadow reg if callee is a varargs function. unsigned ShadowReg = 0; |

