diff options
| author | Sam Clegg <sbc@chromium.org> | 2019-04-19 22:43:32 +0000 | 
|---|---|---|
| committer | Sam Clegg <sbc@chromium.org> | 2019-04-19 22:43:32 +0000 | 
| commit | a27252794e0785af0eff7367ac9d57d91dffe944 (patch) | |
| tree | 1628b3a855db902f2b92d493e376bd51cd64cff2 /llvm/lib/Target | |
| parent | d600e6fa85b59cf02b145edeaf5cbcf4cae3fe4e (diff) | |
| download | bcm5719-llvm-a27252794e0785af0eff7367ac9d57d91dffe944.tar.gz bcm5719-llvm-a27252794e0785af0eff7367ac9d57d91dffe944.zip | |
[WebAssembly] FastISel: Don't fallback to SelectionDAG after BuildMI in selectCall
My understanding is that once BuildMI has been called we can't fallback
to SelectionDAG.
This change moves the fallback for when getRegForValue() fails for
that target of an indirect call.  This was failing in -fPIC mode when
the callee is GlobalValue.
Add a test case that tickles this.
Differential Revision: https://reviews.llvm.org/D60908
llvm-svn: 358793
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp index 17057486737..2d9aae7a698 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp @@ -851,6 +851,13 @@ bool WebAssemblyFastISel::selectCall(const Instruction *I) {      Args.push_back(Reg);    } +  unsigned CalleeReg = 0; +  if (!IsDirect) { +    CalleeReg = getRegForValue(Call->getCalledValue()); +    if (!CalleeReg) +      return false; +  } +    auto MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc));    if (!IsVoid) @@ -858,12 +865,8 @@ bool WebAssemblyFastISel::selectCall(const Instruction *I) {    if (IsDirect)      MIB.addGlobalAddress(Func); -  else { -    unsigned Reg = getRegForValue(Call->getCalledValue()); -    if (Reg == 0) -      return false; -    MIB.addReg(Reg); -  } +  else +    MIB.addReg(CalleeReg);    for (unsigned ArgReg : Args)      MIB.addReg(ArgReg); | 

