Line data Source code
1 : // Copyright 2013 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_CRANKSHAFT_HYDROGEN_UINT32_ANALYSIS_H_
6 : #define V8_CRANKSHAFT_HYDROGEN_UINT32_ANALYSIS_H_
7 :
8 : #include "src/crankshaft/hydrogen.h"
9 :
10 : namespace v8 {
11 : namespace internal {
12 :
13 :
14 : // Discover instructions that can be marked with kUint32 flag allowing
15 : // them to produce full range uint32 values.
16 283730 : class HUint32AnalysisPhase : public HPhase {
17 : public:
18 283730 : explicit HUint32AnalysisPhase(HGraph* graph)
19 283730 : : HPhase("H_Compute safe UInt32 operations", graph), phis_(4, zone()) { }
20 :
21 : void Run();
22 :
23 : private:
24 : INLINE(bool IsSafeUint32Use(HValue* val, HValue* use));
25 : INLINE(bool Uint32UsesAreSafe(HValue* uint32val));
26 : INLINE(bool CheckPhiOperands(HPhi* phi));
27 : INLINE(void UnmarkPhi(HPhi* phi, ZoneList<HPhi*>* worklist));
28 : INLINE(void UnmarkUnsafePhis());
29 :
30 : ZoneList<HPhi*> phis_;
31 : };
32 :
33 :
34 : } // namespace internal
35 : } // namespace v8
36 :
37 : #endif // V8_CRANKSHAFT_HYDROGEN_UINT32_ANALYSIS_H_
|