aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Seaborn <mseaborn@chromium.org>2013-06-03 12:51:11 -0700
committerMark Seaborn <mseaborn@chromium.org>2013-06-03 12:51:11 -0700
commit8253f255b7936070b3bae07fe9aead104f2ecde7 (patch)
treef7c6a51352c4a0b48b8980d2d7a160a3f36143fb
parenteedf1e284837398d8eeaf0972e906236380378dd (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.cpp5
-rw-r--r--test/NaCl/PNaClABI/instructions.ll3
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
}