diff options
author | Mark Seaborn <mseaborn@chromium.org> | 2013-06-03 12:51:11 -0700 |
---|---|---|
committer | Mark Seaborn <mseaborn@chromium.org> | 2013-06-03 12:51:11 -0700 |
commit | 8253f255b7936070b3bae07fe9aead104f2ecde7 (patch) | |
tree | f7c6a51352c4a0b48b8980d2d7a160a3f36143fb | |
parent | eedf1e284837398d8eeaf0972e906236380378dd (diff) |
PNaCl ABI checker: Disallow ExtractValue and InsertValue instructions (2nd try)
Uses of these are removed by ExpandMulWithOverflow and ExpandStructRegs.
This change was previously committed but reverted because it broke a
varargs function call in 255.vortex in Spec2k. This has since been
fixed by changing ExpandVarArgs.
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3343
TEST=PNaCl toolchain trybots + all the Spec2k tests this time around
Review URL: https://codereview.chromium.org/16336012
-rw-r--r-- | lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp | 5 | ||||
-rw-r--r-- | test/NaCl/PNaClABI/instructions.ll | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp index d1d5f38405..ad01ae58a2 100644 --- a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp +++ b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp @@ -102,6 +102,9 @@ bool PNaClABIVerifyFunctions::runOnFunction(Function &F) { case Instruction::ExtractElement: case Instruction::InsertElement: case Instruction::ShuffleVector: + // ExtractValue and InsertValue operate on struct values. + case Instruction::ExtractValue: + case Instruction::InsertValue: Reporter->addError() << "Function " << F.getName() << " has disallowed instruction: " << BBI->getOpcodeName() << "\n"; @@ -132,8 +135,6 @@ bool PNaClABIVerifyFunctions::runOnFunction(Function &F) { case Instruction::And: case Instruction::Or: case Instruction::Xor: - case Instruction::ExtractValue: - case Instruction::InsertValue: // Memory instructions case Instruction::Alloca: case Instruction::Load: diff --git a/test/NaCl/PNaClABI/instructions.ll b/test/NaCl/PNaClABI/instructions.ll index fa77746216..0076c3d07c 100644 --- a/test/NaCl/PNaClABI/instructions.ll +++ b/test/NaCl/PNaClABI/instructions.ll @@ -58,7 +58,10 @@ define void @vectors() { define void @aggregates() { ; Aggregate operations %a1 = extractvalue { i32, i32 } { i32 0, i32 0 }, 0 +; CHECK-NOT: disallowed +; CHECK: Function aggregates has disallowed instruction: extractvalue %a2 = insertvalue {i32, float} undef, i32 1, 0 +; CHECK-NEXT: Function aggregates has disallowed instruction: insertvalue ret void } |