CodeGen: Extract code into the new function copyVectorInstruction
llvm-svn: 151904
diff --git a/polly/lib/CodeGeneration.cpp b/polly/lib/CodeGeneration.cpp
index 5914d2b..224ce40 100644
--- a/polly/lib/CodeGeneration.cpp
+++ b/polly/lib/CodeGeneration.cpp
@@ -266,6 +266,8 @@
bool isVectorBlock();
+ void copyVectorInstruction(const Instruction *Inst, ValueMapT &VectorMap,
+ VectorValueMapT &ScalarMaps);
void copyInstruction(const Instruction *Inst, ValueMapT &VectorMap,
VectorValueMapT &ScalarMaps);
@@ -659,6 +661,37 @@
return getVectorWidth() > 1;
}
+void BlockGenerator::copyVectorInstruction(const Instruction *Inst,
+ ValueMapT &VectorMap,
+ VectorValueMapT &ScalarMaps) {
+ if (const LoadInst *Load = dyn_cast<LoadInst>(Inst)) {
+ generateVectorLoad(Load, VectorMap, ScalarMaps);
+ return;
+ }
+
+ if (hasVectorOperands(Inst, VectorMap)) {
+ if (const StoreInst *Store = dyn_cast<StoreInst>(Inst)) {
+ copyVectorStore(Store, ScalarMaps[0], VectorMap, ScalarMaps);
+ return;
+ }
+
+ if (const UnaryInstruction *Unary = dyn_cast<UnaryInstruction>(Inst)) {
+ copyVectorUnaryInst(Unary, ScalarMaps[0], VectorMap);
+ return;
+ }
+
+ if (const BinaryOperator *Binary = dyn_cast<BinaryOperator>(Inst)) {
+ copyVectorBinInst(Binary, ScalarMaps[0], VectorMap);
+ return;
+ }
+
+ llvm_unreachable("Cannot issue vector code for this instruction");
+ }
+
+ for (int VectorLane = 0; VectorLane < getVectorWidth(); VectorLane++)
+ copyInstScalar(Inst, ScalarMaps[VectorLane]);
+}
+
void BlockGenerator::copyInstruction(const Instruction *Inst,
ValueMapT &VectorMap,
VectorValueMapT &ScalarMaps) {
@@ -668,32 +701,7 @@
return;
if (isVectorBlock()) {
- if (const LoadInst *Load = dyn_cast<LoadInst>(Inst)) {
- generateVectorLoad(Load, VectorMap, ScalarMaps);
- return;
- }
-
- if (hasVectorOperands(Inst, VectorMap)) {
- if (const StoreInst *Store = dyn_cast<StoreInst>(Inst)) {
- copyVectorStore(Store, ScalarMaps[0], VectorMap, ScalarMaps);
- return;
- }
-
- if (const UnaryInstruction *Unary = dyn_cast<UnaryInstruction>(Inst)) {
- copyVectorUnaryInst(Unary, ScalarMaps[0], VectorMap);
- return;
- }
-
- if (const BinaryOperator *Binary = dyn_cast<BinaryOperator>(Inst)) {
- copyVectorBinInst(Binary, ScalarMaps[0], VectorMap);
- return;
- }
-
- llvm_unreachable("Cannot issue vector code for this instruction");
- }
-
- for (int VectorLane = 0; VectorLane < getVectorWidth(); VectorLane++)
- copyInstScalar(Inst, ScalarMaps[VectorLane]);
+ copyVectorInstruction(Inst, VectorMap, ScalarMaps);
return;
}