Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Issue 14617017: Adding a pass - RewritePNaClLibraryCalls, that replaces known library calls with stable bitcode int… (Closed)

Created:
7 years, 7 months ago by eliben
Modified:
7 years, 7 months ago
CC:
native-client-reviews_googlegroups.com
Base URL:
http://git.chromium.org/native_client/pnacl-llvm.git@master
Visibility:
Public.

Description

Adding a pass - RewritePNaClLibraryCalls, that replaces known library calls with stable bitcode intrinsics. Starting with setjmp and longjmp. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3429 R=jvoung@chromium.org, mseaborn@chromium.org Committed: https://gerrit.chromium.org/gerrit/gitweb?p=native_client/pnacl-llvm.git;a=commit;h=4a71e62

Patch Set 1 #

Total comments: 23

Patch Set 2 : Adding handling of address taking of longjmp in stores and globals #

Patch Set 3 : Adding forgotten test #

Total comments: 15

Patch Set 4 : Fixing for Jan's comments #

Total comments: 17

Patch Set 5 : Populate the body of longjmp if it has non-call uses #

Patch Set 6 : Added llvm.nacl.{set|long}jmp to the list of whitelisted intrinsics for ABI #

Total comments: 23

Patch Set 7 : Addressed latest review comments #

Total comments: 1
Unified diffs Side-by-side diffs Delta from patch set Stats (+350 lines, -0 lines) Patch
M include/llvm/InitializePasses.h View 1 chunk +1 line, -0 lines 0 comments Download
M include/llvm/Transforms/NaCl.h View 1 chunk +1 line, -0 lines 0 comments Download
M lib/Analysis/NaCl/PNaClABIVerifyModule.cpp View 1 2 3 4 5 1 chunk +2 lines, -0 lines 0 comments Download
M lib/Transforms/NaCl/CMakeLists.txt View 1 chunk +1 line, -0 lines 0 comments Download
A lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp View 1 2 3 4 5 6 1 chunk +225 lines, -0 lines 0 comments Download
A test/Transforms/NaCl/rewrite-longjmp-no-store.ll View 1 2 3 4 5 6 1 chunk +13 lines, -0 lines 0 comments Download
A test/Transforms/NaCl/rewrite-longjmp-noncall-uses.ll View 1 2 3 4 5 6 1 chunk +21 lines, -0 lines 0 comments Download
A test/Transforms/NaCl/rewrite-setjmp-store-error.ll View 1 2 3 1 chunk +13 lines, -0 lines 1 comment Download
A test/Transforms/NaCl/rewrite-setlongjmp-calls.ll View 1 2 3 4 1 chunk +72 lines, -0 lines 0 comments Download
M tools/opt/opt.cpp View 1 chunk +1 line, -0 lines 0 comments Download

Messages

Total messages: 19 (0 generated)
eliben
7 years, 7 months ago (2013-05-10 16:00:04 UTC) #1
Mark Seaborn
https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode10 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:10: // This pass replaces calls to known library functions ...
7 years, 7 months ago (2013-05-10 16:34:36 UTC) #2
jvoung (off chromium)
https://codereview.chromium.org/14617017/diff/1/test/Transforms/NaCl/rewrite-setlongjmp-calls.ll File test/Transforms/NaCl/rewrite-setlongjmp-calls.ll (right): https://codereview.chromium.org/14617017/diff/1/test/Transforms/NaCl/rewrite-setlongjmp-calls.ll#newcode4 test/Transforms/NaCl/rewrite-setlongjmp-calls.ll:4: declare i32 @setjmp(i64*) CHECK that it now declares the ...
7 years, 7 months ago (2013-05-10 16:42:49 UTC) #3
eliben
https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode10 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:10: // This pass replaces calls to known library functions ...
7 years, 7 months ago (2013-05-10 17:00:51 UTC) #4
eliben
... will upload updated code later https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/1/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode52 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:52: for (Module::iterator MI ...
7 years, 7 months ago (2013-05-10 23:39:51 UTC) #5
eliben
I've added handling of longjmp's address being stored in instructions or globals, by creating a ...
7 years, 7 months ago (2013-05-13 17:35:11 UTC) #6
jvoung (off chromium)
https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode35 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:35: // intrindic declarations into the module. intrindic -> intrinsic ...
7 years, 7 months ago (2013-05-13 18:12:30 UTC) #7
eliben
https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode35 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:35: // intrindic declarations into the module. On 2013/05/13 18:12:30, ...
7 years, 7 months ago (2013-05-13 18:33:36 UTC) #8
jvoung (off chromium)
LGTM https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/10001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode95 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:95: rewriteSetjmpCall(Call); On 2013/05/13 18:33:36, eliben wrote: > On ...
7 years, 7 months ago (2013-05-13 19:52:07 UTC) #9
Mark Seaborn
https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode32 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:32: ModulePass(ID), TheModule(0), Indent by 2 more spaces so that ...
7 years, 7 months ago (2013-05-13 20:09:00 UTC) #10
Mark Seaborn
https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode150 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:150: SmallVector<Value *, 2> Args; Nit: 1 will do here ...
7 years, 7 months ago (2013-05-13 20:20:42 UTC) #11
eliben
PTAL. https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/19001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode32 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:32: ModulePass(ID), TheModule(0), On 2013/05/13 20:09:00, Mark Seaborn wrote: ...
7 years, 7 months ago (2013-05-13 22:07:18 UTC) #12
Mark Seaborn
LGTM, but it looks like rewrite-longjmp-*.ll should be removed in favour of rewrite-setlongjmp-calls.ll, or vice-versa. ...
7 years, 7 months ago (2013-05-13 23:39:58 UTC) #13
eliben
https://codereview.chromium.org/14617017/diff/28001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp File lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp (right): https://codereview.chromium.org/14617017/diff/28001/lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp#newcode53 lib/Transforms/NaCl/RewritePNaClLibraryCalls.cpp:53: static const char *LONGJMP_NAME = "longjmp"; On 2013/05/13 23:39:58, ...
7 years, 7 months ago (2013-05-14 17:38:58 UTC) #14
eliben
Committed patchset #7 manually as r4a71e62 (presubmit successful).
7 years, 7 months ago (2013-05-14 17:43:38 UTC) #15
Mark Seaborn
LGTM
7 years, 7 months ago (2013-05-14 17:57:07 UTC) #16
Mark Seaborn
https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewrite-setjmp-store-error.ll File test/Transforms/NaCl/rewrite-setjmp-store-error.ll (right): https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewrite-setjmp-store-error.ll#newcode1 test/Transforms/NaCl/rewrite-setjmp-store-error.ll:1: ; RUN: opt < %s -rewrite-pnacl-library-calls -S |& FileCheck ...
7 years, 7 months ago (2013-05-16 02:23:38 UTC) #17
eliben
On 2013/05/16 02:23:38, Mark Seaborn wrote: > https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewrite-setjmp-store-error.ll > File test/Transforms/NaCl/rewrite-setjmp-store-error.ll (right): > > https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewrite-setjmp-store-error.ll#newcode1 ...
7 years, 7 months ago (2013-05-16 14:42:44 UTC) #18
eliben
7 years, 7 months ago (2013-05-20 16:48:47 UTC) #19
Message was sent while issue was closed.
On 2013/05/16 02:23:38, Mark Seaborn wrote:
>
https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewr...
> File test/Transforms/NaCl/rewrite-setjmp-store-error.ll (right):
> 
>
https://codereview.chromium.org/14617017/diff/34001/test/Transforms/NaCl/rewr...
> test/Transforms/NaCl/rewrite-setjmp-store-error.ll:1: ; RUN: opt < %s
> -rewrite-pnacl-library-calls -S |& FileCheck %s
> This syntax fails on Mac OS X:
> 
>
/Volumes/data/b/build/slave/nacl-toolchain/build/native_client/pnacl/build/llvm_x86_64/test/Transforms/NaCl/Output/rewrite-setjmp-store-error.ll.script:
> line 1: syntax error near unexpected token `&'
> 
> (from
>
http://build.chromium.org/p/tryserver.nacl/builders/nacl-toolchain-mac-pnacl-...)
> 
> It seems there are no other tests using the "|&" syntax.  Do you need to use
> "2>&1 |" instead?
> 

https://codereview.chromium.org/15470008/


> BTW, I'm now sure how you get 'lit' to ignore the exit status of "opt" for
tests
> like this.

I'm fairly sure that lit pays attention only to the exit code of the whole
command in this case. It converts the whole pipe into a bash script and runs
that. There are other tests in the llvm (and clang) regression suit that do
something similar (run a command that returns non-zero, prints an error message
and then FileCheck for the error message)

Powered by Google App Engine
This is Rietveld 408576698