Chromium Code Reviews| Index: lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp |
| diff --git a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp |
| index abc66b0addca49ac34139b9250abcb9f4462b4e4..4005fa34babaed1b31955255791c8d5dda9734d8 100644 |
| --- a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp |
| +++ b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp |
| @@ -48,13 +48,71 @@ bool PNaClABIVerifyFunctions::runOnFunction(Function &F) { |
| case Instruction::Switch: |
| case Instruction::Resume: |
| case Instruction::Unreachable: |
| - // indirectbr is not allowed for now. |
| - // invoke and call are handled separately. |
| + case Instruction::Invoke: |
| + // Binary operations |
| + case Instruction::Add: |
| + case Instruction::FAdd: |
| + case Instruction::Sub: |
| + case Instruction::FSub: |
| + case Instruction::Mul: |
| + case Instruction::FMul: |
| + case Instruction::UDiv: |
| + case Instruction::SDiv: |
| + case Instruction::FDiv: |
| + case Instruction::URem: |
| + case Instruction::SRem: |
| + case Instruction::FRem: |
| + // Bitwise binary operations |
| + case Instruction::Shl: |
| + case Instruction::LShr: |
| + case Instruction::AShr: |
| + case Instruction::And: |
| + case Instruction::Or: |
| + case Instruction::Xor: |
| + case Instruction::ExtractValue: |
| + case Instruction::InsertValue: |
| + // Memory instructions |
| + case Instruction::Alloca: |
| + case Instruction::Load: |
| + case Instruction::Store: |
| + case Instruction::Fence: |
| + case Instruction::AtomicCmpXchg: |
| + case Instruction::AtomicRMW: |
| + case Instruction::GetElementPtr: |
| + // Conversion operations |
| + case Instruction::Trunc: |
| + case Instruction::ZExt: |
| + case Instruction::SExt: |
| + case Instruction::FPTrunc: |
| + case Instruction::FPExt: |
| + case Instruction::FPToUI: |
| + case Instruction::FPToSI: |
| + case Instruction::UIToFP: |
| + case Instruction::SIToFP: |
| + case Instruction::PtrToInt: |
| + case Instruction::IntToPtr: |
| + case Instruction::BitCast: |
| + // Other operations |
| + case Instruction::ICmp: |
| + case Instruction::FCmp: |
| + case Instruction::PHI: |
| + case Instruction::Select: |
| + case Instruction::Call: |
| + case Instruction::VAArg: |
| + case Instruction::LandingPad: |
| break; |
| + // Disallowed instructions |
| + // indirectbr may interfere with streaming |
| + case Instruction::IndirectBr: |
| + // No vector instructions yet |
| + case Instruction::ExtractElement: |
| + case Instruction::InsertElement: |
| + case Instruction::ShuffleVector: |
| default: |
|
eliben
2013/01/22 22:52:56
I think the LLVM convention is to have "default" a
|
| errs() << Twine("Function ") + F.getName() + |
| " has disallowed instruction: " + |
| BBI->getOpcodeName() + "\n"; |
| + break; |
| } |
| } |
| } |