1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
5 /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
10 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
11 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
14 #ifndef _DECOMPOSELONGS_H_
15 #define _DECOMPOSELONGS_H_
22 DecomposeLongs(Compiler* compiler) : m_compiler(compiler)
26 void PrepareForDecomposition();
27 void DecomposeBlock(BasicBlock* block);
29 static void DecomposeRange(Compiler* compiler, unsigned blockWeight, LIR::Range& range);
32 inline LIR::Range& Range() const
38 void DecomposeRangeHelper();
39 GenTree* DecomposeNode(GenTree* tree);
41 // Per-node type decompose cases
42 GenTree* DecomposeLclVar(LIR::Use& use);
43 GenTree* DecomposeLclFld(LIR::Use& use);
44 GenTree* DecomposeStoreLclVar(LIR::Use& use);
45 GenTree* DecomposeStoreLclFld(LIR::Use& use);
46 GenTree* DecomposeCast(LIR::Use& use);
47 GenTree* DecomposeCnsLng(LIR::Use& use);
48 GenTree* DecomposeFieldList(GenTreeFieldList* listNode, GenTreeOp* longNode);
49 GenTree* DecomposeCall(LIR::Use& use);
50 GenTree* DecomposeInd(LIR::Use& use);
51 GenTree* DecomposeStoreInd(LIR::Use& use);
52 GenTree* DecomposeNot(LIR::Use& use);
53 GenTree* DecomposeNeg(LIR::Use& use);
54 GenTree* DecomposeArith(LIR::Use& use);
55 GenTree* DecomposeShift(LIR::Use& use);
56 GenTree* DecomposeRotate(LIR::Use& use);
57 GenTree* DecomposeMul(LIR::Use& use);
58 GenTree* DecomposeUMod(LIR::Use& use);
59 GenTree* DecomposeSimd(LIR::Use& use);
60 GenTree* DecomposeSimdGetItem(LIR::Use& use);
63 GenTree* FinalizeDecomposition(LIR::Use& use, GenTree* loResult, GenTree* hiResult, GenTree* insertResultAfter);
64 GenTree* RepresentOpAsLocalVar(GenTree* op, GenTree* user, GenTree** edge);
65 GenTree* EnsureIntSized(GenTree* node, bool signExtend);
67 GenTree* StoreNodeToVar(LIR::Use& use);
68 static genTreeOps GetHiOper(genTreeOps oper);
69 static genTreeOps GetLoOper(genTreeOps oper);
73 unsigned m_blockWeight;
77 #endif // _DECOMPOSELONGS_H_