diff options
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64FastISel.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86FastISel.cpp | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp b/llvm/lib/Target/AArch64/AArch64FastISel.cpp index 371accb5829..d80f34ca2d3 100644 --- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp +++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp @@ -1280,6 +1280,10 @@ bool AArch64FastISel::ProcessCallArgs(CallLoweringInfo &CLI, } else { assert(VA.isMemLoc() && "Assuming store on stack."); + // Don't emit stores for undef values. + if (isa<UndefValue>(ArgVal)) + continue; + // Need to store on the stack. unsigned ArgSize = (ArgVT.getSizeInBits() + 7) / 8; diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp index 52e65670a50..0938eda9dad 100644 --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -2831,6 +2831,11 @@ bool X86FastISel::FastLowerCall(CallLoweringInfo &CLI) { OutRegs.push_back(VA.getLocReg()); } else { assert(VA.isMemLoc()); + + // Don't emit stores for undef values. + if (isa<UndefValue>(ArgVal)) + continue; + unsigned LocMemOffset = VA.getLocMemOffset(); X86AddressMode AM; AM.Base.Reg = RegInfo->getStackRegister(); |

