diff options
author | Derek Schuff <dschuff@google.com> | 2016-02-12 22:56:03 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-02-12 22:56:03 +0000 |
commit | 51699a83cd54680d82b5c0926a22ac7a41354b54 (patch) | |
tree | 277f012f167752a20973d43b1e3567f41df3adaf /llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp | |
parent | 7793ddb0432c9fa2637066387d4716ee2d866555 (diff) | |
download | bcm5719-llvm-51699a83cd54680d82b5c0926a22ac7a41354b54.tar.gz bcm5719-llvm-51699a83cd54680d82b5c0926a22ac7a41354b54.zip |
[WebAssembly] Report more meaningful error messages for some unsupported
ops.
Computed gotos and RETURNADDR may never be supported; we can do
FRAMEADDR in the future.
llvm-svn: 260759
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index 7d63d89f17e..436494efd23 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -61,6 +61,8 @@ WebAssemblyTargetLowering::WebAssemblyTargetLowering( setOperationAction(ISD::GlobalAddress, MVTPtr, Custom); setOperationAction(ISD::ExternalSymbol, MVTPtr, Custom); setOperationAction(ISD::JumpTable, MVTPtr, Custom); + setOperationAction(ISD::BlockAddress, MVTPtr, Custom); + setOperationAction(ISD::BRIND, MVT::Other, Custom); // Take the default expansion for va_arg, va_copy, and va_end. There is no // default action for va_start, so we do that custom. @@ -515,6 +517,7 @@ SDValue WebAssemblyTargetLowering::LowerFormalArguments( SDValue WebAssemblyTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const { + SDLoc DL(Op); switch (Op.getOpcode()) { default: llvm_unreachable("unimplemented operation lowering"); @@ -531,6 +534,16 @@ SDValue WebAssemblyTargetLowering::LowerOperation(SDValue Op, return LowerBR_JT(Op, DAG); case ISD::VASTART: return LowerVASTART(Op, DAG); + case ISD::BlockAddress: + case ISD::BRIND: + fail(DL, DAG, "WebAssembly hasn't implemented computed gotos"); + return SDValue(); + case ISD::RETURNADDR: // Probably nothing meaningful can be returned here. + fail(DL, DAG, "WebAssembly hasn't implemented __builtin_return_address"); + return SDValue(); + case ISD::FRAMEADDR: // TODO: Make this return the userspace frame address + fail(DL, DAG, "WebAssembly hasn't implemented __builtin_frame_address"); + return SDValue(); } } |