Index: lib/Transforms/NaCl/ExpandInsertExtractElement.cpp |
diff --git a/lib/Transforms/NaCl/ExpandInsertExtractElement.cpp b/lib/Transforms/NaCl/ExpandInsertExtractElement.cpp |
deleted file mode 100644 |
index 5d974fc3ccd1c701b20a5e7546ca79d25d39a346..0000000000000000000000000000000000000000 |
--- a/lib/Transforms/NaCl/ExpandInsertExtractElement.cpp |
+++ /dev/null |
@@ -1,105 +0,0 @@ |
-//==- ExpandInsertExtractElement.cpp - Expand vector insert and extract -=// |
-// |
-// The LLVM Compiler Infrastructure |
-// |
-// This file is distributed under the University of Illinois Open Source |
-// License. See LICENSE.TXT for details. |
-// |
-//===------------------------------------------------------------------===// |
-// |
-// This pass expands insertelement and extractelement instructions with |
-// variable indices, which SIMD.js doesn't natively support yet. |
-// |
-//===------------------------------------------------------------------===// |
- |
-#include "llvm/ADT/SmallVector.h" |
-#include "llvm/IR/Function.h" |
-#include "llvm/IR/IRBuilder.h" |
-#include "llvm/IR/InstIterator.h" |
-#include "llvm/IR/Instructions.h" |
-#include "llvm/IR/Module.h" |
-#include "llvm/Pass.h" |
-#include "llvm/Transforms/NaCl.h" |
-#include "llvm/Transforms/Utils/Local.h" |
-#include <map> |
-#include <vector> |
- |
-#include "llvm/Support/raw_ostream.h" |
- |
-#ifdef NDEBUG |
-#undef assert |
-#define assert(x) { if (!(x)) report_fatal_error(#x); } |
-#endif |
- |
-using namespace llvm; |
- |
-namespace { |
- |
- class ExpandInsertExtractElement : public FunctionPass { |
- bool Changed; |
- |
- public: |
- static char ID; |
- ExpandInsertExtractElement() : FunctionPass(ID) { |
- initializeExpandInsertExtractElementPass(*PassRegistry::getPassRegistry()); |
- } |
- |
- virtual bool runOnFunction(Function &F); |
- }; |
-} |
- |
-char ExpandInsertExtractElement::ID = 0; |
-INITIALIZE_PASS(ExpandInsertExtractElement, "expand-insert-extract-elements", |
- "Expand and lower insert and extract element operations", |
- false, false) |
- |
-// Utilities |
- |
-bool ExpandInsertExtractElement::runOnFunction(Function &F) { |
- Changed = false; |
- |
- Instruction *Entry = F.getEntryBlock().begin(); |
- Type *Int32 = Type::getInt32Ty(F.getContext()); |
- Constant *Zero = ConstantInt::get(Int32, 0); |
- for (inst_iterator I = inst_begin(&F), E = inst_end(&F); I != E; ) { |
- Instruction *Inst = &*I++; |
- |
- if (InsertElementInst *III = dyn_cast<InsertElementInst>(Inst)) { |
- if (isa<ConstantInt>(III->getOperand(2))) |
- continue; |
- |
- Type *AllocaTy = III->getType(); |
- Instruction *A = new AllocaInst(AllocaTy, 0, "", Entry); |
- CopyDebug(new StoreInst(III->getOperand(0), A, III), III); |
- |
- Value *Idxs[] = { Zero, III->getOperand(2) }; |
- Instruction *B = CopyDebug( |
- GetElementPtrInst::Create(AllocaTy, A, Idxs, "", III), III); |
- CopyDebug(new StoreInst(III->getOperand(1), B, III), III); |
- |
- Instruction *L = CopyDebug(new LoadInst(A, "", III), III); |
- III->replaceAllUsesWith(L); |
- III->eraseFromParent(); |
- } else if (ExtractElementInst *EII = dyn_cast<ExtractElementInst>(Inst)) { |
- if (isa<ConstantInt>(EII->getOperand(1))) |
- continue; |
- |
- Type *AllocaTy = EII->getOperand(0)->getType(); |
- Instruction *A = new AllocaInst(AllocaTy, 0, "", Entry); |
- CopyDebug(new StoreInst(EII->getOperand(0), A, EII), EII); |
- |
- Value *Idxs[] = { Zero, EII->getOperand(1) }; |
- Instruction *B = CopyDebug( |
- GetElementPtrInst::Create(AllocaTy, A, Idxs, "", EII), EII); |
- Instruction *L = CopyDebug(new LoadInst(B, "", EII), EII); |
- EII->replaceAllUsesWith(L); |
- EII->eraseFromParent(); |
- } |
- } |
- |
- return Changed; |
-} |
- |
-FunctionPass *llvm::createExpandInsertExtractElementPass() { |
- return new ExpandInsertExtractElement(); |
-} |