[WebAssembly] Prevent inline assembly from being mangled by SjLj
authorGuanzhong Chen <gzchen@google.com>
Wed, 3 Jul 2019 00:37:49 +0000 (00:37 +0000)
committerGuanzhong Chen <gzchen@google.com>
Wed, 3 Jul 2019 00:37:49 +0000 (00:37 +0000)
commitb88ebe8cc9a8585647fdbff14b92841582be50a9
treee20550bd8be91c6bf2d8afc5d34b3c249129d309
parent4f3472deb28b772c82323a849eddd9b67f1cdc31
[WebAssembly] Prevent inline assembly from being mangled by SjLj

Summary:
Before, inline assembly gets mangled by the SjLj transformation.

For example, in a function with setjmp/longjmp, this LLVM IR code

    call void asm sideeffect "", ""()

would be transformed into

    call void @__invoke_void(void ()* asm sideeffect "", "")

This is invalid, and results in the error:

    Cannot take the address of an inline asm!

In this diff, we skip the transformation for inline assembly.

Reviewers: aheejin, tlively

Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D64115

llvm-svn: 364985
llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll