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

Unified Diff: src/IceInstARM32.h

Issue 1891243002: Subzero. ARM32. De-scalarizes icmp and fcmp for vectors. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. Created 4 years, 8 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
« no previous file with comments | « src/IceAssemblerARM32.cpp ('k') | src/IceInstARM32.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceInstARM32.h
diff --git a/src/IceInstARM32.h b/src/IceInstARM32.h
index 4a052c4aa65fb7aeac90b6283b30c37472192bb8..89f894dae75b3ef211fe3e1a8d49cfbada26d59b 100644
--- a/src/IceInstARM32.h
+++ b/src/IceInstARM32.h
@@ -428,6 +428,9 @@ public:
Vadd,
Vand,
Vbsl,
+ Vceq,
+ Vcge,
+ Vcgt,
Vcmp,
Vcvt,
Vdiv,
@@ -436,6 +439,7 @@ public:
Vmls,
Vmrs,
Vmul,
+ Vmvn,
Vneg,
Vorr,
Vshl,
@@ -464,7 +468,8 @@ public:
/// Shared emit routines for common forms of instructions.
/// @{
static void emitThreeAddrFP(const char *Opcode, FPSign Sign,
- const InstARM32 *Instr, const Cfg *Func);
+ const InstARM32 *Instr, const Cfg *Func,
+ Type OpType);
static void emitFourAddrFP(const char *Opcode, FPSign Sign,
const InstARM32 *Instr, const Cfg *Func);
/// @}
@@ -782,7 +787,8 @@ public:
void emit(const Cfg *Func) const override {
if (!BuildDefs::dump())
return;
- emitThreeAddrFP(Opcode, Sign, this, Func);
+ const Type OpType = (isVectorCompare() ? getSrc(0) : getDest())->getType();
+ emitThreeAddrFP(Opcode, Sign, this, Func, OpType);
}
void emitIAS(const Cfg *Func) const override;
void dump(const Cfg *Func) const override {
@@ -790,8 +796,8 @@ public:
return;
Ostream &Str = Func->getContext()->getStrDump();
dumpDest(Func);
- Str << " = ";
- Str << Opcode << "." << getDest()->getType() << " ";
+ const Type OpType = (isVectorCompare() ? getSrc(0) : getDest())->getType();
+ Str << " = " << Opcode << "." << OpType << " ";
dumpSources(Func);
}
static bool classof(const Inst *Instr) { return isClassof(Instr, K); }
@@ -806,6 +812,11 @@ protected:
}
static const char *Opcode;
+
+private:
+ static constexpr bool isVectorCompare() {
+ return K == InstARM32::Vceq || K == InstARM32::Vcgt || K == InstARM32::Vcge;
+ }
};
template <InstARM32::InstKindARM32 K>
@@ -994,11 +1005,15 @@ using InstARM32Udiv = InstARM32ThreeAddrGPR<InstARM32::Udiv>;
using InstARM32Vadd = InstARM32ThreeAddrFP<InstARM32::Vadd>;
using InstARM32Vand = InstARM32ThreeAddrFP<InstARM32::Vand>;
using InstARM32Vbsl = InstARM32ThreeAddrFP<InstARM32::Vbsl>;
+using InstARM32Vceq = InstARM32ThreeAddrFP<InstARM32::Vceq>;
+using InstARM32Vcge = InstARM32ThreeAddrSignAwareFP<InstARM32::Vcge>;
+using InstARM32Vcgt = InstARM32ThreeAddrSignAwareFP<InstARM32::Vcgt>;
using InstARM32Vdiv = InstARM32ThreeAddrFP<InstARM32::Vdiv>;
using InstARM32Veor = InstARM32ThreeAddrFP<InstARM32::Veor>;
using InstARM32Vmla = InstARM32FourAddrFP<InstARM32::Vmla>;
using InstARM32Vmls = InstARM32FourAddrFP<InstARM32::Vmls>;
using InstARM32Vmul = InstARM32ThreeAddrFP<InstARM32::Vmul>;
+using InstARM32Vmvn = InstARM32UnaryopFP<InstARM32::Vmvn>;
using InstARM32Vneg = InstARM32UnaryopSignAwareFP<InstARM32::Vneg>;
using InstARM32Vorr = InstARM32ThreeAddrFP<InstARM32::Vorr>;
using InstARM32Vshl = InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>;
« no previous file with comments | « src/IceAssemblerARM32.cpp ('k') | src/IceInstARM32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698