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

Unified Diff: src/IceTargetLoweringARM32.h

Issue 1747243003: Subzero. ARM32. Fixes bugs uncovered by the gcc torture tests. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: 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
« no previous file with comments | « no previous file | src/IceTargetLoweringARM32.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTargetLoweringARM32.h
diff --git a/src/IceTargetLoweringARM32.h b/src/IceTargetLoweringARM32.h
index 8c1d088ddf4549bc509e0e0b32b41937df623aa5..5e1b9576ae7eb1d4cd33eacdfb6dc5163d690e6b 100644
--- a/src/IceTargetLoweringARM32.h
+++ b/src/IceTargetLoweringARM32.h
@@ -22,6 +22,8 @@
#include "IceRegistersARM32.h"
#include "IceTargetLowering.h"
+#include <utility>
+
namespace Ice {
namespace ARM32 {
@@ -802,10 +804,14 @@ protected:
}
void _umull(Variable *DestLo, Variable *DestHi, Variable *Src0,
Variable *Src1, CondARM32::Cond Pred = CondARM32::AL) {
+ // umull requires DestLo and DestHi to be assigned to different GPRs. The
+ // following lines create overlapping liveness ranges for both variables. If
+ // either one of them is live, then they are both going to be live, and thus
+ // assigned to different registers; if they are both dead, then DCE will
+ // kick in and delete the following three instructions.
+ Context.insert<InstFakeDef>(DestHi);
Context.insert<InstARM32Umull>(DestLo, DestHi, Src0, Src1, Pred);
- // Model the modification to the second dest as a fake def. Note that the
- // def is not predicated.
- Context.insert<InstFakeDef>(DestHi, DestLo);
+ Context.insert<InstFakeDef>(DestHi, DestLo)->setDestRedefined();
Context.insert<InstFakeUse>(DestHi);
}
void _uxt(Variable *Dest, Variable *Src0,
@@ -1040,8 +1046,11 @@ protected:
void sub_sp(Operand *SubAmount);
private:
- AutoBundle Bundler;
- TargetARM32 *Target;
+ TargetARM32 *const Target;
+ const InstBundleLock::Option BundleOption;
+ std::unique_ptr<AutoBundle> Bundler;
+
+ void createAutoBundle();
};
class PostLoweringLegalizer {
« no previous file with comments | « no previous file | src/IceTargetLoweringARM32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698