annotate dmd/UnrolledLoopStatement.d @ 56:51605de93870

TupleExp.optimize UnrolledLoopStatement.ctor UnrolledLoopStatement.semantic UnrolledLoopStatement.blockExit OrOrExp.checkSideEffect FuncExp.syntaxCopy FuncLiteralDeclaration.syntaxCopy WhileStatement.hasBreak StructInitializer.toExpression StructLiteralExp.ctor StructLiteralExp.optimize BinExp.commonSemanticAssign ModAssignExp.opId Argument.isLazyArray CommaExp.implicitConvTo CommaExp.castTo TypeClass.isBaseOf createTypeInfoArray TypeTuple.getTypeInfoDeclaration TypeInfoTupleDeclaration.ctor TypeNext.constConv XorExp.implicitConvTo TemplateParameter.isTemplateValueParameter
author korDen
date Sat, 21 Aug 2010 14:16:53 +0400
parents 10317f0c89a5
children cab4c37afb89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.UnrolledLoopStatement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
3 import dmd.Expression;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.Statement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.InterState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.ArrayTypes;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.Scope;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.InlineCostState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.InlineDoState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 import dmd.IRState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 import dmd.HdrGenState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.InlineScanState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.BE;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 class UnrolledLoopStatement : Statement
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 Statements statements;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
21 this(Loc loc, Statements s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 {
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
23 super(loc);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
24 statements = s;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 Statement syntaxCopy()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 Statement semantic(Scope sc)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 {
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
34 //printf("UnrolledLoopStatement.semantic(this = %p, sc = %p)\n", this, sc);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
35
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
36 sc.noctor++;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
37 Scope scd = sc.push();
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
38 scd.sbreak = this;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
39 scd.scontinue = this;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
40
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
41 for (size_t i = 0; i < statements.dim; i++)
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
42 {
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
43 Statement s = cast(Statement) statements.data[i];
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
44 if (s)
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
45 {
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
46 s = s.semantic(scd);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
47 statements.data[i] = cast(void*)s;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
48 }
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
49 }
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
50
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
51 scd.pop();
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
52 sc.noctor--;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
53 return this;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 bool hasBreak()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 bool hasContinue()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 bool usesEH()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
71 BE blockExit()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 {
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
73 BE result = BEfallthru;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
74 for (size_t i = 0; i < statements.dim; i++)
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
75 {
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
76 Statement s = cast(Statement) statements.data[i];
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
77 if (s)
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
78 {
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
79 int r = s.blockExit();
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
80 result |= r & ~(BEbreak | BEcontinue);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
81 }
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
82 }
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
83 return result;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
85
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 bool comeFrom()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
87 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 Expression interpret(InterState* istate)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 void toCBuffer(OutBuffer buf, HdrGenState* hgs)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 int inlineCost(InlineCostState* ics)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 Expression doInline(InlineDoState ids)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 Statement inlineScan(InlineScanState* iss)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116 void toIR(IRState* irs)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121