diff options
| author | Derek Schuff <dschuff@chromium.org> | 2013-05-29 10:27:19 -0700 |
|---|---|---|
| committer | Derek Schuff <dschuff@chromium.org> | 2013-05-29 10:27:19 -0700 |
| commit | dc58e24a36836fc19c534bdcbef5152717a3c3fc (patch) | |
| tree | 343a9c7047b58bcffb5466acb7dc3f52a481f547 /lib/Transforms | |
| parent | 8d01804c97533ed9006a65c11cade3c6b23d1c75 (diff) | |
Enable integer promotion pass and enable ABI check for integer types.
R=mseaborn@chromium.org
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3360
Review URL: https://codereview.chromium.org/15950006
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/NaCl/PNaClABISimplify.cpp | 3 | ||||
| -rw-r--r-- | lib/Transforms/NaCl/PromoteIntegers.cpp | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/Transforms/NaCl/PNaClABISimplify.cpp b/lib/Transforms/NaCl/PNaClABISimplify.cpp index 47e5fb67e6..71f0f23000 100644 --- a/lib/Transforms/NaCl/PNaClABISimplify.cpp +++ b/lib/Transforms/NaCl/PNaClABISimplify.cpp @@ -60,6 +60,9 @@ void llvm::PNaClABISimplifyAddPostOptPasses(PassManager &PM) { // We should not place arbitrary passes after ExpandConstantExpr // because they might reintroduce ConstantExprs. PM.add(createExpandConstantExprPass()); + // PromoteIntegersPass does not handle constexprs and creates GEPs, + // so it goes between those passes. + PM.add(createPromoteIntegersPass()); // ExpandGetElementPtr must follow ExpandConstantExpr to expand the // getelementptr instructions it creates. PM.add(createExpandGetElementPtrPass()); diff --git a/lib/Transforms/NaCl/PromoteIntegers.cpp b/lib/Transforms/NaCl/PromoteIntegers.cpp index fcb9b2e607..37805f8d30 100644 --- a/lib/Transforms/NaCl/PromoteIntegers.cpp +++ b/lib/Transforms/NaCl/PromoteIntegers.cpp @@ -34,6 +34,7 @@ #include "llvm/IR/IRBuilder.h" #include "llvm/Pass.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Transforms/NaCl.h" using namespace llvm; @@ -53,11 +54,12 @@ INITIALIZE_PASS(PromoteIntegers, "nacl-promote-ints", "Promote integer types which are illegal in PNaCl", false, false) - // Legal sizes are currently 1, 8, 16, 32, and 64. // We can't yet expand types above 64 bit, so don't try to touch them for now. +// TODO(dschuff): expand >64bit types or disallow >64bit packed bitfields. +// There are currently none in our tests that use the ABI checker. +// See https://code.google.com/p/nativeclient/issues/detail?id=3360 static bool isLegalSize(unsigned Size) { - // TODO(dschuff): expand >64bit types or disallow >64bit packed bitfields if (Size > 64) return true; return Size == 1 || Size == 8 || Size == 16 || Size == 32 || Size == 64; } @@ -612,3 +614,7 @@ bool PromoteIntegers::runOnFunction(Function &F) { State.eraseReplacedInstructions(); return Modified; } + +FunctionPass* llvm::createPromoteIntegersPass() { + return new PromoteIntegers(); +} |
