Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: src/IceTargetLowering.cpp

Issue 1683153003: ARM32 vector ops - scalarize icmp, fcmp and cast. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Adding tests for vector icmp and fcmp Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/IceTargetLowering.cpp
diff --git a/src/IceTargetLowering.cpp b/src/IceTargetLowering.cpp
index 75886d6dd8997693d240c6e878ec52f416402358..267f08b6b2ca2312a8dc2412fc7de96c3a4449c9 100644
--- a/src/IceTargetLowering.cpp
+++ b/src/IceTargetLowering.cpp
@@ -703,34 +703,12 @@ bool TargetLowering::shouldOptimizeMemIntrins() {
void TargetLowering::scalarizeArithmetic(InstArithmetic::OpKind Kind,
Variable *Dest, Operand *Src0,
Operand *Src1) {
- assert(isVectorType(Dest->getType()));
- Type Ty = Dest->getType();
- Type ElementTy = typeElementType(Ty);
- SizeT NumElements = typeNumElements(Ty);
-
- Operand *T = Ctx->getConstantUndef(Ty);
- for (SizeT I = 0; I < NumElements; ++I) {
- Constant *Index = Ctx->getConstantInt32(I);
-
- // Extract the next two inputs.
- Variable *Op0 = Func->makeVariable(ElementTy);
- Context.insert<InstExtractElement>(Op0, Src0, Index);
- Variable *Op1 = Func->makeVariable(ElementTy);
- Context.insert<InstExtractElement>(Op1, Src1, Index);
-
- // Perform the arithmetic as a scalar operation.
- Variable *Res = Func->makeVariable(ElementTy);
- auto *Arith = Context.insert<InstArithmetic>(Kind, Res, Op0, Op1);
- // We might have created an operation that needed a helper call.
- genTargetHelperCallFor(Arith);
-
- // Insert the result into position.
- Variable *DestT = Func->makeVariable(Ty);
- Context.insert<InstInsertElement>(DestT, T, Res, Index);
- T = DestT;
- }
-
- Context.insert<InstAssign>(Dest, T);
+ scalarizeInstruction(Dest, Src0, Src1,
+ [this, Kind](Variable *Dest, Variable *Src0,
+ Variable *Src1) {
+ return Context.insert<InstArithmetic>(Kind, Dest, Src0,
+ Src1);
+ });
}
void TargetLowering::emitWithoutPrefix(const ConstantRelocatable *C,

Powered by Google App Engine
This is Rietveld 408576698